build vagrant box for squeeze64
最近 vagrant がまた話題になっているので久しぶり(390日?)に触ってみたのだけど、公開されている box が海外の人作成のものが多いので、割と変更する箇所が多いので苦痛だった。
やっぱり自分で作るかと思って veewee を入れてみたら最新のバージョン1.1.2に対応してないらしく、エラーでまくりだったので、基本に戻って Vagrant + Virtualbox
の基本機能で作成してみたらやっぱり大変だったので、その記録として残しておきます。
virtualbox
で作成したときの設定は以下の通り。
- Hostname: squeeze64
- Domain: (空白)
- Root Password: vagrant
- Account Id: vagrant
- Account Password: vagrant
- Mirror server: japan ftp.jp.debian.org
- Install Software: all unchecked
- Keyboad: America
- language:
en_US.UTF-8
以下プロンプトで #
がある場合には root
で作業していていると適宜読み替えてください。
sudo & openssh install
まずは sudo
とssh
サーバをインストール。
# apt-get install sudo openssh-server openssh-client
そして、DNSを使わない設定を ssh
に追加しておく。
# echo 'UseDNS no' >> /etc/ssh/sshd_config
editor config
必須では無いが visudo
などで利用されるエディタが nano
なので修正しておく。
# update-alternatives --set editor /usr/bin/vim.tiny
sudo config
vagrant
ユーザで sudo
がパスワード無しで実行できる必要があるので /etc/sudoers.d
のディレクトリの下に vagrant
というファイルを以下の内容で作成する。 よくsudo
の権限を修正するときに admin
グループを追加して %admin
の権限を追加する情報を見るけれど、こちらの方が大本を修正する必要が無いのでおすすめ。
vagrant ALL=(ALL) NOPASSWD:ALL
またこのファイルは owner(=root)
と group(=root)
のみが読める必要があるのでパーミッションを変更。
# chmod 440 vagrant
vagrant ssh
vagrant ssh
でログインするときに必要な公開鍵を設定する
# su - vagrant
$ mkdir .ssh
$ wget --no-check-certificate -O .ssh/authorized_keys https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub
$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys
guest addition package
virtualbox
の管理を行うためにアクセスを許可する追加パッケージがあり、それらは既にvirtualbox
インストール時に追加されているものもあるのだが古いので新しくインストールし直す。
パッケージ削除の前にロードされているサービス停止とモジュールの削除。
# /etc/init.d/virtualbox-ose-guest-utils stop
# rmmod vboxguest
そして古いパッケージの削除。
for squeeze
# apt-get autoremove virtualbox-ose-guest-dkms virtualbox-ose-guest-utils virtualbox-ose-guest-x11
for wheezy
# apt-get autoremove virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11
Guest Addtions を追加する前に module-assistant
を導入して、シンボリックリンクの生成をしておく。
# apt-get install module-assistant
# m-a prepare
次に virtualbox
で実行している方のメニューにある デバイス
の Guest Additions のインストール
を選択する。すると実行している仮想環境の方で mount
出来るようになっている。メニューについてはわかりにくすぎるかもしれないので以下に画像を掲げる。
選択したら実行してるVMに戻って mount して、シェルスクリプトを実行し追加パッケージをインストールする。
このシェルスクリプトでは環境の差異を吸収しつつ、カーネルのモジュールのビルドと起動時に実行するスクリプトがインストールされる。
# mount /dev/cdrom
# yes|sh /media/cdrom/VBoxLinuxAdditions.run
インストールの結果、 Installing the Window System drivers ...fail!
というメッセージが表示されるがX環境が入っていないだけなので問題ない。 ここまで来たら一旦再起動。
# shutdown -r now
clean up
vagrant
で作成するときに改めて作成するようにネット環境などの情報を削除しておく。 まずはdhcpリリース情報を削除。
# rm /var/lib/dhcp/*
同様にudev情報を削除
# rm -f /etc/udev/rules.d/70-persistent-net.rules
同様に/etc/resolv.conf
を削除。
# rm -f /etc/resolv.conf
box作成時の圧縮効率を上げるためにフリー領域にファイルを作成し削除を行う。
# dd if=/dev/zero of=/EMPTY bs=1M
# rm /EMPTY
他に linux-headers-
とか build-essential
などを削除しておくとVMのサイズが小さくなるのだけど、立ち上げたら定番で入れるので入れたままにしておく。小さい方が良いということなら削除した方がいいでしょう。
shutdown
ちょっとハマったのだけど、BOXを作成するためにはVMがシャットダウンされている必要があるのでシャットダウン。
# shutdown -h now
BOX作成
ここでローカルに戻って以下のコマンドを実行
$ vagrant package --base <Virutalboxで作成した時の名前>
[squeeze64] Clearing any previously set forwarded ports...
[squeeze64] Creating temporary directory for export...
[squeeze64] Exporting VM...
[squeeze64] Compressing package to:
すると実行した場所に package.box
という名前でファイルが出来ているので、次のコマンドで vagrantのboxに追加する。
$ vagrant box add squeeze64 package.box
Downloading with Vagrant::Downloaders::File...
Copying box to temporary location...
Extracting box...
Cleaning up downloaded box...
Successfully added box 'squeeze64' with provider 'virtualbox'!
vagrant init & up
これ以後はvagrant
の使い方そのままになるのだけど、軽く書いておきます。 適当なディレクトリを作成し、そこで vagrant
の準備を行う
$ vagrant init squeeze64
そして起動。
$ vagrant up
この部分の原因は Additions インストール前に m-a prepare
していないことが原因だったようです。
[default] No guest additions were detected on the base box for this VM! Guest
additions are required for forwarded ports, shared folders, host only
networking, and more. If SSH fails on this machine, please install
the guest additions and repackage the box to continue.
This is not an error message; everything may continue to work properly,
in which case you may ignore this message.
無事起動し終わったら、vagrant ssh
で接続できることを確認。
$ vagrant ssh
後始末
作成したVMイメージはもう要らないので Virtualbox から削除し、vagrant package
で作成した package.box
も削除しておく。 お疲れ様でした。
2013-03-30 update
初回起動時のメッセージ表示の原因が分かったので追記。
2013-03-31 update
古いパッケージ削除時の処理を追加。文言の修正。
圧縮効率を上げるための処理を追加。
2013-05-07 update
清書および文章の修正。 m-a prepare
実行時 linux-headers
と build-essential
がインストールされていない場合、自動でインストールされるので削除。 削除するパッケージが squeeze と wheezy で違うのでコメントの追加。