7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

VagrantでUbuntuのBoxを作った時にした事

Last updated at Posted at 2014-03-03

●環境

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の再ビルド設定
(カーネルバージョンによる為。)

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?