●環境
VirtualBox 4.2.10
Vagrant 1.3.5
packer 0.5.2
guest-os ubuntu server 12.04
host-os osx mavericks
●背景
Debianのboxを拾ってきたが、rvmからrubyを数個入れるとdiskが足らなくなった。
なので、diskを追加しようとしたが、boxに定義されてるdiskがLVMではなかったので、
diskを追加できなかった。(osインストール時にする必要があるらしい?)
また、VirtualBoxは作業環境の事情により、アップデートできない。
そこでUbuntuのboxを新たに作成する事にした。
●作業内容
1.インストールdiskのダウンロード
最初に現時点の最新版のubuntu serverをダウンロード。(13.10)
↓
実は最新版のカーネルはインストールするVirtualBoxのguestadditionsに対応していない。
(guestadditionsのビルド時、share foldersの設定で失敗する)
↓
ということで、Ubuntu Server 12.04 を、ダウンロード
(ネット上では、カーネルバージョンは低いハズだった。。。(後述))
2.packerでboxの作成
・ダウンロードしたisoのchecksum取得
md5 ubuntu-12.04XXXX.iso
・生成スクリプトの準備(template.json)
disk容量設定:4000(4G)
iso_url,iso_checksum設定:ローカルisoを指定可。checksumは上記。
provisionersは要らない
(どのみちsudoでコケル→guest additionsがビルド出来れば、設定できるかも?)
・packer実行
packer build テンプレート.json ⇒ ubuntuのインストールが始まる
[osインストール時の設定]
ロケールは日本語(キーボードは「日本語」を選択)⇒ timezoneはasia/tokyo
自動アップデートはしない
ユーザーはvagrant(パスワードvagrant)
インストールdiskをLVMにする、grub設定書き込み
インストールソフトに必ず、SSH Serverを入れる(入れないとpackerのスクリプトが止まる)
guestadditionsをインストールする(カーネルバージョンが対応してないがDLはしてくれる)
packerの実行が終わると、実行フォルダに、boxファイルが生成される。
・仮ゲストOS起動
vagrant box add XXXX packerで生成したboxファイル
仮のゲストosのフォルダを用意
登録したbox名(XXXX)でvagrant init
vagrant up
※ここでのvagrant upは、必ず異常終了する(sshとsudoの為)が、osは起動する
vagrant ssh
※sshが設定されていないので、パスワードを求められる(vagrantでログインするのでvagrant)
・仮ゲストOSの設定
[sshの設定]
これにより、vagrant sshでパスワードを要求されなくなる
mkdir ~/.ssh
chmod 0700 ./.ssh
cd ~/.ssh
wget --no-check-certificate 'https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub' -O /home/vagrant/.ssh/authorized_keys
chmod 0600 ./authorized_keys
cd ..
[sudoの設定]
これにより、sudo実行時、パスワードを要求されなくなる
sudo visudo
vagrantの設定を末尾に追加し保存
vagrant ALL=(ALL) NOPASSWD: ALL
[カーネルのダウングレード]
uname -a カーネルの確認(たぶん、3.11系になってる)
※たぶん、LTSなので、配布インストールイメージも、システムアップデートに合わせて変更されていると思われる。。。
sudo apt-cache search linux-image インストール可能なパッケージの確認
sudo apt-get install linux-image-3.8.0-36-generic
sudo apt-get install linux-headers-3.8.0-36-generic
※3.8系はビルド可能
dpkg --list | grep linux-image インストールされているカーネルパッケージの確認
sudo apt-get purge linux-image-3.11.0-15-generic
※パージ実行時、勝手に3.11系の最新を入れられるかもしれないので(実際、保留されている更新の中に存在し、パージ実行時に勝手にインストールされた)、それもパージ。
dpkg --list | grep linux-image インストールされているカーネルパッケージの再確認
sudo update-grub 上記操作をすれば、3.8が最新になるハズ
sudo shutdown -r now 再起動
vagrant ssh 再ログイン
uname -a カーネルの確認
[guest additionsインストール]
これによりvagrant up時のshare-foldersのエラーがなくなる
ls -la ~/
※VBoxGuestAdditions_4.2.10.isoの存在確認。なければ、wget
sudo mount VBoxGuestAdditions_4.2.10.iso -o loop /mnt
※guest additionsのマウント
sudo apt-get -y install build-essential linux-headers-uname -r
※build-essentialを入れれば、gccは個別にいれなくてよい?
sudo apt-get -y install xserver-xorg xserver-xorg-core
sudo sh /mnt/VBoxLinuxAdditions.run
※インストール時に -noxにすれば、xserver*は入れなくてよい?
ログオフし、vagrant reloadすると、vagrant up時のshare-foldersのエラーがなくなる
[後処理]
vagrant ssh
rm ~/VBoxGuestAdditions_4.2.10.iso
sudo passwd root
※rootのパスワードはvagrantに設定
sudo ln -s -f /dev/null /etc/udev/rules.d/70-persistent-net.rules
※VirtualBoxがMACを覚えている?為、VagrantFileでipを設定しても、勝手にipが設定されてしまうので、無効にする。
3.boxの再作成
仮ゲストOSのフォルダで、vagrant package
package.boxが生成されるので、名前を変えて、vagrant box add
仮ゲストosの後始末
vagrant halt
vagrant destory
vagrant box remove XXXX ※packerで作ったboxの除去
●TODO
VirtualBoxのバージョンを上げた時の、guest addtionsの再ビルド設定
(カーネルバージョンによる為。)