VagrantのBoxを作成する

VagrantのBoxを作成してみました。 Windows8.1なのでHyper-Vでやろうかと思いましたが、少し試してみたところ上手くいかなかったのでおとなしくVirtualBoxを使っています。

https://docs.vagrantup.com/v2/boxes/base.html

https://docs.vagrantup.com/v2/virtualbox/boxes.html

仮想マシンの作成

VirtualBoxでマシンを新規に作成します。

ディスク

ディスクの種類はVDIでもVMDKでも良いようです。VDIで作成しても、Boxにした際に VMDKに変換されたので最初からVMDKが良いかも。 サイズ可変で最大サイズで作る、とありますが最大サイズがよくわからないので可変サイズで128GBくらいで。

メモリ

デフォルトを大きくしすぎないように、ということなので512MBで。

周辺機器

オーディオやUSBのような不要なハードウェアは無効化しておくように、とのこと。

OSのインストール

インストールのISOイメージをドライブにセットして起動。 Elementary OS (Luna 64bit)でやりました。

ユーザー設定

vagrantというユーザーを作成します。パスワードもvagrantです。 rootのパスワードもvagrantにしておくと良いようです。

ダミーの公開鍵~/.ssh/authorized_keys に追記しておきます。パーミッション~/.ssh0700~/.ssh/authorized_keys0600です。

パスワードなしでsudoできるようにしておきます。

$ sudo update-alternatives --config editor
$ sudo visudo

以下の行を末尾に追記します。

vagrant ALL=(ALL) NOPASSWD: ALL

SSHサーバー導入

SSHサーバーをインストールします。

$ sudo apt-get install ssh sysv-rc-conf
$ sudo sysv-rc-conf ssh on
$ sudo sysv-rc-conf --list | grep ssh

VirtualBox Guest Additionsのインストール

追加プログラムをインストールします。

$ sudo apt-get install linux-headers-generic build-essential dkms
$ sudo mkdir /media/cdrom
$ sudo mount /dev/cdrom /media/cdrom
$ sudo sh /media/cdrom/VBoxLinuxAdditions.run
$ sudo reboot

後述しますが、これではインストールが正しく完了しておらず VirtualBox Guest Additionsを再セットアップする必要がありました。 念を入れてこのタイミングでやっておくと良いかなと思いました。

$ sudo /etc/init.d/vboxadd setup

Vagrant Boxの作成

ここからはゲストOSをシャットダウンして、ホストOSで作業します。

Boxの作成

{vm name}VirtualBoxでつけたマシンの名前です。 {/path/to/box} は作成するBoxの出力先です。

-- vagrant package --base {vm name} --output {/path/to/box}
$ vagrant package --base elementary-64 --output elementary-64.box

Boxの登録

{box name} はBoxの登録名です。

-- vagrant box add {box name} {/path/to/box}
$ vagrant box add elementary-64-minimal elementary-64.box
$ vagrant box list

Boxからマシンを作成

適当なディレクトリを作成しBoxからマシンを作成します。

$ mkdir elem
$ cd elem
-- vagrant init {box name}
$ vagrant init elementary-64-minimal

起動・停止

$ vagrant up
$ vagrant halt

起動時にエラーが出る場合は、VirtualBox Guest Addtionsを再セットアップ

起動時に共有フォルダのマウントでエラーが出ました。

Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=id -u vagrant,gid=getent group vagrant | cut -d: -f3
vagrant /vagrant
mount -t vboxsf -o uid=id -u vagrant,gid=id -g vagrant vagrant /vagrant

The error output from the last command was:

stdin: is not a tty
/sbin/mount.vboxsf: mounting failed with the error: No such device

ゲストOSに戻り、VirtualBox Guest Addtionsを再セットアップ、Boxの再作成を行うことで解決しました。

$ sudo /etc/init.d/vboxadd setup