Quantcast
Channel: smokycat.info » VirtualBox
Viewing all articles
Browse latest Browse all 2

Macで仮想OS(VirtualBox)を試す

0
0

Macに仮想OS入れてみたのでそのメモです。

友達がMacにbrewで色々入れて開発環境作ってたりするんですけど、redisとか入れてもPC用途じゃ使わないし、色んなものがごちゃごちゃ入ってきて訳分かんなくなるし。
さくっと丸ごと消したり手渡したりできる開発環境ってやつが、僕たちには必要なのです。

今回は無料のVirtualBoxでubuntu入れてみます。
VirtualBoxをインストールするところからはじまり、
仮想OSに「インターネットに繋がる動的なローカルIPアドレス」と「ホストOSからsshするための静的なIPアドレス」を振るところまで。

サーバそっくりの使い捨て環境で、がりがり開発しよう!

■ 聞かれたので追記 ■
仮想OSのeth0がLANのDCHPからIPアドレスもらう設定なので、同一の無線LANとかに繋げていると、他のPCやスマホからでもIP直打ちとかで仮想環境のウェブサイトが見れます。
Let’s 実機テスト!

目次

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

Oracleのホームページから”Mac OS X”用のVirtual Boxをダウンロード&インストールする。

2. 仮想OS作ってみる

VirtualBoxを起動して、左上の「作成」のとこからサクッと作成する。
Ubuntuの64bit版OSにRobinさんと名付けてみる。

メモリは1GBくらいにしてみる。

ハードドライブを作成する・・・にして。
ハードドライブのファイルタイプだとっ!?
色々あってよく分からない・・・。
ちょっと考え込んだが、長いので別エントリ参照
VMDKにしました。

スクリーンショット 2014-07-20 18.42.06

イメージファイルを可変サイズにするか固定サイズにするか聞かれる。
固定ファイルで10GBとかすると、こんな感じで10GBのイメージファイルができちゃう。
255GBのSSDなんで、ちょいきついですね・・・(多分)

(固定サイズで作ったときにできるファイル)

smokycat $ sudo /usr/libexec/locate.updatedb
 Password:

smokycat $ locate Robin
 /Users/smokycat/VirtualBox VMs/Robin
 /Users/smokycat/VirtualBox VMs/Robin/Robin-flat.vmdk
 /Users/smokycat/VirtualBox VMs/Robin/Robin.vbox
 /Users/smokycat/VirtualBox VMs/Robin/Robin.vbox-prev
 /Users/smokycat/VirtualBox VMs/Robin/Robin.vmdk

smokycat $ ls -lah /Users/smokycat/VirtualBox\ VMs/Robin
 total 20971560
 drwxr-xr-x 6 smokycat staff 204B 7 20 18:57 .
 drwxr-xr-x 3 smokycat staff 102B 7 20 18:40 ..
 -rw------- 1 smokycat staff 10G 7 20 18:57 Robin-flat.vmdk
 -rw------- 1 smokycat staff 6.7K 7 20 18:57 Robin.vbox
 -rw------- 1 smokycat staff 6.5K 7 20 18:57 Robin.vbox-prev
 -rw------- 1 smokycat staff 466B 7 20 18:57 Robin.vmdk

ディスクイメージのファイルサイズは可変サイズにします。
これだと、50GBとかの仮想ディスク作っても、4MBだったりします。

(可変サイズで作ったときにできるファイル)

smokycat $ ls -lah /Users/smokycat/VirtualBox\ VMs/Robin
 total 7840
 drwxr-xr-x 5 smokycat staff 170B 7 20 19:03 .
 drwxr-xr-x 3 smokycat staff 102B 7 20 19:01 ..
 -rw------- 1 smokycat staff 6.7K 7 20 19:03 Robin.vbox
 -rw------- 1 smokycat staff 6.5K 7 20 19:03 Robin.vbox-prev
 -rw------- 1 smokycat staff 3.8M 7 20 19:03 Robin.vmdk

というわけで、上限50GBとして可変サイズでディスクイメージを作ります。

可変サイズのハードドライブファイルは使用した分だけ(固定サイズを上限として)領域を消費しますが、スペースを解放しても自動的に縮小はしません。

とか書いてありますね・・・。
ファイルに書き込んで、 rm foobar とかしてファイル消しても、ディスクにはファイルの内容が丸々残ってたりします。
ホストOS側からだと、それが使ってる領域なのか使ってない領域なのか分からないから、デフラグのしようもない、っていうことかと解釈できる。
ゲストOS側でしかるべきデフラグを行い、うまいことやるとサイズが縮小したりするのかなーと、ちょっと気になるところです。
が、今回は「でかくなったら捨てよう」という心意気でいきます。ろくでなしのペットオーナーみたい。

だいたい設定済んだので、作成をポチる。

できた!Robinちゃんができたよ!起動だ!!

仮想OS起動すると、コンソールが立ち上がって、

仮想OSのウィンドウをクリックすると、マウスとかキーボードが自動的にキャプチャされるけど、hotkey押したらいつでも戻って来れるからね。
戻るためのホットキーはウィンドウの右下、[↓]ってアイコンの隣に書いてるよ。
今のhotkeyは左のCommandボタンだよ。

と出てくる。
親切ですなぁ。これ分からなくなったら確かに詰むよね。

さて、

FATAL: No bootable medium found! System halted.

と怒られたのであった。

3. UbuntuのインストールDISCの挿入

ディスクイメージ作るときに「ubuntu 64bit」って選択したが、選択したからといって勝手にubuntuがインストールされるわけでもないらしい。
ubuntuのサーバー版を入れるよ、僕は。

ubuntuのサイトからサーバー版 14.04 LTS のディスクイメージ(ubuntu-14.04-server-amd64.iso)をダウンロードしてくる。
インストーラディスク自体はしょっちゅう使うことになりそうなので、どこか分かりやすいところに置いておけばよさそう。

仮想OSへのDVDの挿入は、VirtualBoxの今作った仮想OSを選択して

  • 設定 → ストレージ

コントローラー:IDEってところに、空のCDが入ってそうなアイコンがあるから、

  • CDのアイコンを右クリック → 割当を除去
  • コントローラー:IDEを右クリック → CD/DVDドライブを追加 → ディスクを選択 → さっき落としたisoファイル

とする。

これで起動すると、ubuntuのインストーラが立ち上がるが、それする前にまず、仮想OSのネットワークの設定をしなければならない。

4. ネットワークに繋ぐ

インストールディスクは挿入したものの、インストール途中にaptさんがネット上のリポジトリと通信する。
しかしこのままでは、仮想OSがネットと通信できない。

仮想ネットワークについてググったら色々出てくるけど、virtualbox.orgのマニュアルを普通に読んでみた。
以下、ざっと読んでみたメモ。

4.1. アダプタータイプ

  • AMD PCNet FAST III : GRUBを含むほぼ全てのOSにサポートされてるので、デフォルトでこれを用いる。
  • intel PRO/1000 系 : VistaなどはもはやPCNet用のドライバを持ってないので、そういうOS用にはこっちを使う。
  • 準仮想化ネットワーク(virtio-net) : ゲストOS側に、仮想化環境でのネットワーキングのための特殊なドライバがあることを期待して、VirtualBoxはルータのシミュレートを行わないモード。Linuxカーネルはバージョン2.6.25以降、virt ioをサポートしている。

4.2. 割り当て

  • 未割り当て : NICはあるけどLANケーブルが刺さっていない状態をゲストOSに通知する。これ使えば「LANケーブルが引っこ抜けた」という状況も再現できる。
  • NAT : ゲストOSの中のファイル見たりメール読んだりしたいだけなら、NATで十分だから、これ以降読み飛ばしていいよ!と書いてある。
  • NATネットワーク : なんかNATのネットワーク。NATとの違いが謎だが、深く読んでない。
  • ブリッジアダプター : ホストOSのネットワークスタックを回避して、リアルNICを通して仮想OSが直接通信を行う。つまり、あたかも別のPCがルータに繋いでいるかのように振る舞う。
  • 内部ネットワーク : 選択された仮想マシンからは見えるが、ホストOSのアプリケーションや他のPCからは見えないネットワークを作る。
  • ホストオンリーアダプター : ホストOSと、仮想マシンの集合からなるネットワークを作る。このネットワークは、ホストマシンのリアルNICを使わない。その代わり、loopbackのような仮想インターフェースが作られ、仮想マシンとホストマシンを繋ぐ。
  • 汎用ドライバー : UDPトンネルとかVDEとか難しいことしたいときに使う。

インストールの時点では、仮想OSがネットに繋がって欲しい。
ゆえに割り当ては「ブリッジアダプター」にして、アダプタータイプは「virtio-net」にしてみる。
Ubuntu12.04なんて、最近のLinuxだし、なにもしなくてもこれで繋がる。

ただしこれだと、仮想OSのIPアドレスがルータからDHCPで振られてしまうことになり、sshとかするときに不便。
仮想マシンは4つもNICを持っているという設定になっているので、静的なIPアドレスが欲しいときは、二番目のNICを、ホストオンリーアダプターなネットワークを繋いだ上で、手動でIPアドレスを設定すればよさそうに思う(後でやる)。

5. OSのインストール

あとは普通にubuntuをインストールする。

ホームディレクトリの暗号化はしない。sshでハマったことがあるから。
ディスクのパーティションも、特に何も考えず1パーティションでいってみる。

6. ホストオンリーネットワーク(仮想LAN)の設定

さて、OSもインストールし終わったことだし、仮想OSに静的IPアドレスを与えてみます。
以下のような感じでいきます。

  • アダプター1(eth0)は、ブリッジアダプターを用いて、リアルマシンのNIC越しに外部と直接通信を行う。IPアドレスはDHCPで、ルータから自動的に割り振られる。
  • アダプター2(eth1)は、ホストオンリーアダプターを用いて、仮想的なLANに接続する。ここに固定ローカルIPアドレスを使い、ホストOSからsshする際などに用いる。

ホストオンリーネットワークの作り方がややこしいが、

  • メニューバー → VirtualBox → 環境設定

から作れる。

ホストオンリーネットワークを追加するボタンを押すと、「192.168.56.1」というIPアドレスでアダプターが作られる。

がしかし、たまたまスタバでドヤ顔しようとしたときに、DHCPが「192.168.56.x」というアドレスを振ってきたらどうなるのだろうか?という疑念がよぎらなくもない。
とりあえず、あんまり使われないであろう「10.255.0.1」とかで行ってみる。
ネットマスクは「255.255.255.0」で。

絶対に使われないであろうIPアドレスを使おうと、以下の二つを試したが、どっちもダメだったので断念。

  • 127.1.*.*というアドレスをまず試してみたが、これはホストからゲストにpingを飛ばすときに怒られた。やはり自分自身にしか振ってはいけないアドレスのようだ。
  • 次にクラスEのIPアドレス255.*.*.*を試してみたが、これはゲスト側でifconfigでアドレスを振ろうとしたときに怒られた。クラスEのアドレスは受理してくれないらしい。ケチンボである。

なお、ホストOSおよび仮想OSに静的なIPアドレスを割り振ることが目的なので、DHCPは切っておく。

これを作った瞬間に、ホストOSの方に新しいNICが認識される。

(ホストOSでの操作)

smokycat $ ifconfig vboxnet0
vboxnet0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 0a:00:27:00:00:00
inet 10.255.0.1 netmask 0xffff0000 broadcast 10.255.0.255

これを仮想OSの設定→ネットワークから、アダプター2に刺した上で、仮想OSを起動する。

で、ifconfigでeth1(アダプター2)に10.255.0.2というIPアドレスを手動で振ってみる。

(ゲストOSでの操作)

smokycat@Robin:~$ ifconfig eth1
eth1 Link encap:Ethernet HWaddr 08:00:27:55:6d:6b
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

smokycat@Robin:~$ sudo ifconfig eth1 10.255.0.2
[sudo] password for smokycat:

smokycat@Robin:~$ ifconfig eth1
eth1 Link encap:Ethernet HWaddr 08:00:27:55:6d:6b
inet addr:10.255.0.2 Bcast:10.255.255.255 Mask:255.0.0.0
inet6 addr: fe80::a00:27ff:fe55:6d6b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:316 (316.0 B) TX bytes:964 (964.0 B)

その上で、ホストOSからpingを飛ばしてみると、通りました!

(ホストOS側での操作)

smokycat $ ping 10.255.0.2
PING 10.255.0.2 (10.255.0.2): 56 data bytes
64 bytes from 10.255.0.2: icmp_seq=0 ttl=64 time=0.493 ms
64 bytes from 10.255.0.2: icmp_seq=1 ttl=64 time=0.500 ms
^C
--- 10.255.0.2 ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.493/0.496/0.500/0.003 ms

あとはゲストOS側で、静的IPアドレスの設定とか書き込んで、ネットワークについては完了。

(ゲストOS側での操作)

smokycat@Robin:/etc/network$ sudo vim /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

# vboxnet0
auto eth1
iface eth1 inet static
address 10.255.0.2
netmask 255.255.255.0

7. コンソール無しで仮想OSを立ち上げる

仮想OSを起動するたびにコンソールが立ち上がってめんどうだなーと思ってました。
コンソール無しで起動だけする方法について調べたんですが、VirtualBox Maniaによると

実はVirtualBoxマネージャーからも「Shiftキー」を押しながら起動アイコンをクリックすることで、Headlessで起動させることができます。

とのことで、これで解決。

以上で、内なるubuntuが手に入りました。
これでmacにredisとか入れずに開発できます。


Viewing all articles
Browse latest Browse all 2

Latest Images

Trending Articles





Latest Images