VirtualBoxで仮想環境をつくるメモ

開発環境は必要だ

プログラミング初心者がなにかをつくろうと思う。また技術者が開発環境をサンドボックス的に用意したいと思う。そんなことはかならず通る道だ。Macを使ったらHomeBrewで少しは楽になるけど、それでも本番環境に合わせてローカルのマシンにVM(Virtual Machie、仮想環境)を立てたいということは多いだろう。つーかMacつかってても微妙にDebianUbuntuCentOSとかで差異があったりするから必要になったりする。
ということで自分用に前にメモったのだけど、プログラミングしたい!っていう初心者とかそもそも仮想環境を立てることがない人っていると思うし、もうちょっと丁寧に書いてみようと思った。

結局Linuxサーバーがあると楽だし、そもそもいろんな話がLinux前提で書かれていたりする。
まあそんなだから、環境というのをつくらないといけないのだ。

大まかな目次

  • VirtualBoxUbuntuをインストールする
  • ホストOSからゲストOSに接続する
  • 共有フォルダをつくる

前提として必要なもの

  • いかに効率的に大量におっぱい画像を入手するために模索したであろう中学生マインド
  • わからないことはとりあえずまずググって調べる程度のググらビリティ

あとこれから仮想環境をつくるのですが、それなりにPCのスペックが必要です。とりあえずメモリ2GB、HDDは60GBはないと不安だと思う。まあこの2,3年の間くらいに発売されたPCならたいがい大丈夫だろうけど、あまりに古い(レガシーな)パソコンだとさすがにキツいっす。節約する方法もありますが、それよりは新しいパソコンを買ったほうが早いでしょう。

VirtualBoxの設定

VMWareとVirutalBox

今から仮想環境をつくるわけだけど、今回はVirtualBoxを使う。似たようなソフトにはVMWareってのもあるしそっちもいいらしいんだけど微妙に無料だったり微妙に英語だったり、そもそもおれがよくわかってないので使ってないです。
今回はVirtualBoxを前提に環境を構築します。もちろんWindows版もMac版もあります。自分は両方共使ってます。

ホストOSとゲストOS

仮想環境を作るときに出てくる用語です。ホストOSってのは手元のいつも買ってきたそのWindowsやMacです。で、ゲストOSってのがこれからインストールして環境を構築するOSです。仮想環境にはホストOS→ゲストOSという形で接続します。

VirtualBoxのダウンロードとインストール


ここからダウンロードしましょう。このくらいの英語は読みましょう。というか読めなくてもなんとなくわかるはず。中学生なら勉強してください。Downloadってリンクを飛んで、自分のOSに合わせたものをダウンロードしましょう。WindowsならVirtualBox 4.1.8 for Windows hosts, Mac ならVirtualBox 4.1.8 for OS X hostsってやつですね。
インストールは自己責任で行なってください。当たり前ですが。まあ問題はないと思うけど。
現在自分が使っているのはMac版のVirtualBox 4.1です。

Ubuntuのダウンロード

Linuxでプログラミング!はいいけど、WindowsやMacと違っていろいろあります。大雑把に言うとLinuxの入ったもろもろをまとめて使いやすくパッケージングしたものをディストリビューションと呼びます。
今回はUbuntu Sererを使います。Ubuntuってのはわりと初心者にやさしい感じでゆとり仕様でラクだからです。というか自分も基本的にゆとりなのでUbuntuばっかりつかってます。*1
ダウンロードは以下からたどってください。
The world's most popular free OS | Ubuntu
「Get Ubuntu Now」あたりから飛んで、「Download and Install」あたりをクリックして、「Dowonload Ubuntu」あたりから落とします。デスクトップ版をそのままダウンロードするならそれでもいいですが、今回はサーバー版を前提にするので「Ubuntu Server」ってところからクリックしてServer版をダウンロードしましょう。
で、このファイル(.isoっていうイメージファイル)は600MBとかそのくらいする大きなものなので少し時間がかかります。そういうものなのです。
現在自分が使っているのはUbuntu 10.10 64bit Serverです

Ubuntuのインストール

VirtualBoxを起動したら新規作成します。だいたいデフォルトっぽい感じのものを設定しておけば大丈夫です。そのときに先ほどダウンロードしたUbuntu.isoをマウント(挿入)してインストールを始めます。なにか黒い画面がもう一個開くはずです。
Ubuntuのインストールはそんなに難しくないはずです。とりあえず日本語の設定にしておいて*2、デフォルトっぽい感じのを選べばいいです。わかんなかったらとりあえずどんどんEnter押してれば素直に入ってくれます。ubuntuの名前、username、パスワードくらいはちゃんと設定しましょう。パーティションってのを作るときだけ素直にEnter押しても進めません。ちゃんと読んでそれっぽい感じでインストールしましょう。
このあと使うのでOpenSSHだけはこのインストールの段階でいれておくといいでしょう。

CUIに慣れる意味とプログラミング

今回はUbuntu Server版を前提にしています。これは自分のためのメモというのもありますが、そもそもプログラミングをしたいと思ったら結局はServer版のようなCUIに慣れるしかないのです*3。結局プログラミングするというのはひたすらに文字を打ち込んでいくものなのです。
最初は若干(どこじゃない人もいるけど、そういう人は挫折してください)難しいかもしれませんが、慣れると快適ですし、将来プログラマーを目指す人にとってはなにかと役に立つんじゃないでしょうか*4

VirtualBoxでのネットワーク設定

ファイル→環境設定→ネットワーク→ホストオンリーネットワークを追加
(選択したVMの)設定→ネットワーク→アダプタ2を有効にする→ホストオンリーアダプタ、vboxnet0を追加

ゲストOSでのネットワーク設定設定

このファイルを編集する。先ほど設定したパスワードを求められます。

sudo vi /etc/network/interfaces

下記を追加する

auto eth1
iface eth1 inet dhcp

以下を実行する*5

sudo /etc/init.d/networking stop
sudo /etc/init.d/networking start
備考

ethというのはLANポートのようなものです。LANポートというのはそのインターネットするときに挿しているあのケーブルです!まあ最近は無線LANなことも多いけど。

ホストオンリーアダプタを設定すると VM<->ローカルマシン(ルーター)<->インターネット とつながることができる。
こうすることでVM自体は直接インターネットにつながることはなくなる。
普段はNATでDHCPできてるだろうからNAT設定と併用する、とのこと。
ブリッジネットワークにすると VM(ルーター)<->直接インターネット につながることができる(もちろんDHCPリソースを食う)

> 仮想マシンのethアダプタ
> bridge = ホストマシンにethアダプタが増えるのと一緒
> NAT = ホストマシンの仮想ethアダプタを経由してLANに接続(ルーティングあり、アドレス変換)
> host only = ホストマシンの仮想ethアダプタまで接続(ルーティングなし

エディタについて

最初はvi(vim)というエディタに困ると思います*6。でも覚えると将来サーバー管理者としてもプログラミングするにしてもすごく快適になります*7。他にも nano というエディタもUbuntuでは付属しているのでそちらをつかってもいいかもしれません。

sudo nano /etc/network/interfaces

僕はnanoの使い方はさっぱりなのでがんばって調べてください。
ちなみにCUIのエディタで有名なのはこのVimともう一つEmacsというのがあります。VimEmacsで宗教戦争が起こる程のアレですが、結局は好みで使えばいいです。自分はVimしか使えないのでVimを前提に進めます。
vimは独特なエディタです。なにしろ矢印をうごかしても最初はなにも入力できないくらいです。操作方法は自分でググってください……というのもかつての自分にやさしくないので、下記に少し参考のURLを貼っておきます。
Vimの使い方備忘録(チラシの裏) - Seesaa Wiki(ウィキ)
また、最低限これだけ知っていればできるであろうヒントを列挙します

  • vimはエディタである
  • ノーマルモード(移動したり適宜編集したりする)とインサートモード(実際に入力する)がある
    • vimはモードを切り替えて使うエディタである
  • ノーマルモードでの動かし方
    • h, j, k, l でそれぞれ左、下、上、右に動く。j, kの上下の動きが重要なのでこうなっているのです(たぶん)。h, lはそれぞれ左右です
    • x で文字の消去
  • a, i を押すことでインサートモードになる
    • インサートモードでは矢印をつかって移動もできる
    • 普通に入力できる
      • これでさきほどの追記が可能になる
  • ノーマルモードで :w と押すことで保存できる
  • なにか失敗したっぽい!ってなったときは :q! と押せばとりあえず編集をキャンセルして戻ることができる

接続するためのIPアドレスの確認

自分のIPアドレスを確認しましょう。

ifconfig

使うデバイスはeth1です。自分の場合はeth1のアドレスがが192.168.56.101になったんで、そのアドレスを使用します。

OpenSSHのインストール

既にUbuntuのインストール段階でインストールした場合は不要です。

sudo apt-get install openssl
#あるいはこっち
#sudo apt-get install ssh

ホストOSからゲストOSに接続する

Windowsの場合はPuTTYあたりが有名でしょう*8 *9。Macの場合は割愛します(デフォルトでsshが使えるはずです $ ssh username@192.168.56.101)。
PuTTY ごった煮版
これもダウンロードしてインストールします。ホスト名に先ほど確認したIPアドレスをいれて実行してみましょう。login as に username、Enterを押したらパスワードが求められるはずです。これでホストOSからゲストOSに接続することができました!

PuTTYの設定

毎回いちいち手動で入力するのは面倒なのでたいがいは設定を保存しましょう。ホスト名、接続→データ→自動ログインのユーザ名を自分で設定したとおりに入力。あとウィンドウ→変換→文字コードUTF-8 を選択。これで文字化けせずに表示できます。あといちいちビープ音がうるさかったら 端末→ベル でミュートできます。これらを入力したらセッション→セッション一覧でてきとーな名前をつけて保存。これで毎回いちいち手動で設定しなくてもダブルクリックするだけで接続できます。
あとフォントやウィンドウの大きさや色とかを設定したかったら自分で何とかしてくだしあ。

公開鍵認証する

毎回パスワードを求められるのが嫌な人やもっとセキュアに使いたい人だけ*10、この項は分かる人だけやればいいです。

ホストOSがMacやCygwinのとき交換鍵認証するためのコマンド
ssh-keygen

これで .ssh に id_rsa(秘密鍵)と id_rsa.pub が作られる。あとは~/.ssh/authorized_keysに公開鍵を登録。なかったらつくる。

PuTTYから接続する場合

PuTTYをインストールしたフォルダにある puttygen.exe を起動。生成する。秘密鍵をどこかローカルに保存。公開鍵をローカルに保存……なんだけど、公開鍵に関してはそのまま保存(生成した鍵の保存)して authorized_keys に登録しようとしてもエラーになる。
ファイルではなく「OpenSSHのauthorized_keysファイルにペーストするための公開鍵」という表示されている部分を登録する。ファイルに保存したければ別途自分で保存。
PuTTYに保存したセッションから秘密鍵を登録するには 接続→SSH→認証→認証のためのプライベートキーファイル に先ほど生成した秘密鍵.ppkを選択する必要がある。

sshdの設定

これも最初は無理には設定しなくていい。もちろんセキュアに運営するなら必須。

sudo vi /etc/ssh/sshd_config

で適宜編集

パスワード認証を不可にする
  PasswordAuthentication no
ルートでログインするのを不可にする
  PermitRootLogin no

反映

sudo /etc/init.d/sshd restart
自分用設定スクリプト

オレオレ用メモ。

sudo apt-get install git
git clone git@github.com:atasatamatara/dotfiles.git
cd dotfiles
bash bash_setup.sh
cd
cat .bashrc.dot >> .bashrc
bash apt_setup.sh
vi #NeoBundleInstall

githubで設定ファイルを同期するようにしたらいろいろと捗るぞ!参考にどうぞ
atasatamatara/dotfiles · GitHub

共有フォルダの設定

(VMの)設定→共有フォルダ からアイコンクリックで追加。共有したいフォルダを選択、フォルダ名を適宜編集。自動マウントオン、永続化するもオン、読み込み専用かは適宜。

Guest Additionのインストール

共有フォルダを使用するにはGuest Additionsをインストールしなければならない。なので実際に動かしているVMのウィンドウを選択して デバイス→Guest Additionsのインストール。これでisoイメージがマウントされた……のはいいのだけど、 /mnt や /media/cdrom にはみあたらなかった。なので探した。

sudo find / -name '*VBOX*'

どうやら /dev/disk/by-id のなかにシンボリックリンクがたくさんあるみたいで(cd /dev/disk/by-id, ls -l した)、実際のマウントスべきなのは /dev/sr0 がそれっぽい

sudo mount /dev/sr0 /mnt

これでマウントされる。あとはスクリプト走らせればいいのだけど make と gcc が必要らしかった*11

cd /mnt
sudo apt-get install make
sudo apt-get install gcc
sudo sh VBoxLinuxAddtions.run

これでGuest Additionははいった。再起動すると反映される。

sudo reboot
追記

特にUbuntuなんかだと apt-get upgrade したりするとこの共有フォルダが使えなくなることがある。たぶん linux のカーネル自体もアップデートされるかなんかの関係だと思っている。対処法としては、とりあえずもういちどGuest Additionsを再インストールしたらいいとおもいます。つまり、mountして、sh するってことですね。

所属グループを変える

このままでは共有フォルダのパーミッションがかかってて入れない。なので所属グループを変える
自分の所属グループを確認

#!/bin/bash
groups
# atasatamatara adm dialout cdrom plugdev lpadmin sambashare admin

自分をグループに加える。今回は atasatamatara ユーザー

#!/bin/bash
sudo gpasswd -a atasatamatara vboxsf
# atasatamatara adm dialout cdrom plugdev lpadmin sambashare admin vboxsf

反映させるには一度ログアウトが必要。ログアウト→ログインしてもう一度グループを確認すれば結果があるはず

NOTE::危ないやり方!

sudo usermod -G vboxsf して反映させたら vboxsf グループにしかなれなくてsudoさえできなくなった。スナップショットもとってなかったために再構築が必要で、結局これでこうしてこのエントリーを書くに至った。

便利な位置に置く

いろいろ調べていると sudo mount -t vboxsf /media/HogeFolder ~ とかあるけど、mountできないし、そもそもグループにいれたのでシンボリックリンクをはるだけでいい

ln -s /media/Hoge_Folder ~/HogeFolder

これでシンボリックリンクがはれた!べんりーーー。

以上

長かったですが、これでひと通り開発環境を構築して、共有フォルダを設定するところまでできました。
あとは好きなだけおっぱい画像をダウンロードしてしまえばいいんじゃないかな!!!!
おっぱい画像を共有フォルダに保存するようにできれば簡単にホストOSから画像を見れるようになるよ!!!!

*1:実は高校生の頃、ソースネクストが4000円で販売していたTurbo Linxを使っていたというのもあったな……。Windowsを買えればよかったんだが、そんな金もなかったのだよ

*2:実は日本語でいれると後で文字化けするように見えるのですが、後から端末の設定でどうにかします。

*3:もちろんJavaやObj-CやC#など他IDEがある環境はそれはそれです

*4:自分も高校生のころにコピペしてサーバー立てたなぁ。[http://centossrv.com/:title]。この頃はわけもわからなくてほんとコピペだったけど、がんばって意味を汲んでやってみたらどうにかできた

*5:再起動

*6:Emacsは終了できなくていつもプロセスからkillってるくらいなのです

*7:信者

*8:というか自分はそれしかつかってない

*9:TeraTermとかはつかったことない

*10:っていうか外部から接続するならそれが普通だけど、自分のローカルだけしかつかわなかったりとりあえず動かすという段階の人には不要かと思いました

*11:一度実行したらこけてlogをみた