UbuntuサーバのVagrant Base boxをつくる
来月にはいよいよUbuntu Serverも14.04が出ますが、現時点のLTSである12.04の64bit版のBase Boxをつくるまでのメモを残しておきます。
Ubuntu Server 12.04 x64 vagrant Base Boxつくるためにやったこと
- VirtualBoxをインストール
- Vagrantをインストール
- Vagrantの使い方はドットインストールでざっくりと
- UbuntuServerのISOファイルをダウンロード
- VirtualBoxにUbuntuをvagrant向けにインストール
- vagrantでBase Box作成
インストール時
VirtualBoxで新規作成、メモリ・HDD容量はデフォルトで、ドライブのファイルタイプはVMDKの可変サイズ。
設定:
- 一般:高度:クリップボードの共有「双方向」、ドラッグ&ドロップ「双方向」
- システム:ポインティングデバイス「PS/2マウス」
- ストレージ:CD/DVDドライブにISOファイルをマウント
- オーディオ:オーディオを有効化のチェックをはずす
- ネットワーク:
ブリッジアダプターにするが、これでBaseBoxをつくってもNATになってしまう(後で対策)NATにしておきましょう - USB:USBコントローラーを有効化のチェックをはずす
普通にUbuntu Serverのインストールをする。標準インストール(ミニマルインストールではない)。
コンソール
標準インストールしたUbuntu1204のコンソールがVirtualBoxで開いてから。初期設定はsudo suである程度のところまで一気にやる。
$ sudo su
# export LANG=en_US.UTF-8
# echo $LANG
# apt-get update
# echo $?
# apt-get dist-upgrade
# echo $?
echo $?
で返り値が0なら、直前のコマンドは成功。
sudoersの編集
vagrantユーザのsudoはパスワード無しにしてあげる。
# visudo
%sudo ALL=(ALL:ALL) ALL
と書いてある次の行に追記する:
vagrant ALL=(ALL) NOPASSWD: ALL
Ctrl+Xで抜ける(yで保存)。
Guest Additionsのインストール
DKMSインストール
# apt-get install dkms
VirtualBoxの「デバイス」>「Guest AdditionsのCDイメージを挿入」を選択。
# mkdir /mnt/cdrom
マウント
# mount /dev/cdrom /mnt/cdrom
または
# mount /dev/sr0 /mnt/cdrom
スクリプトを実行
# cd /mnt/cdrom
# sh ./VBoxLinuxAddition.run
デスクトップ環境をインストールしていないServerだとWindow Systemのインストールがスキップされるけれど無視。 終わったらsuからexit
# exit
$ cd
ホームへ。
openssh-serverのインストール
$ export LANG=en_US.UTF-8
$ echo $LANG
$ sudo apt-get install openssh-server
$ echo $?
$ sudo service ssh status
Vagrantで共通して使われるインセキュア・キーを登録する。
$ mkdir .ssh
$ cd .ssh
$ wget https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub
$ mv vagrant.pub authorized_keys
$ chmod 600 authorized_keys
$ cd ..
$ chmod 700 .ssh
ここ以降はローカル(ホストOS)。
パッケージング
package --base
に渡す引数は、VMの名称を与える
vagrant package --base Ubuntu1204x64
大文字小文字を区別するので、VirtualBoxに表示されている名前を確認すること。
package.boxファイルがカレント・ディレクトリにつくられる。
テスト
box add
に渡す引数は、そのBoxに自分が付けたい名前を与える:
vagrant box add Ubuntu1204 package.box
vagrant box list
これでUbuntu1204がリストにあれば、OK。
ホームの.vagarnt.d/boxes/Ubuntu1204/virtualboxにmetadata.jsonとともに展開されているのを確認。
新たに新規プロジェクト用ディレクトリを作り、そこで立ち上げてみる。
vagrant init Ubuntu1204
vagrant up
もしVirtualBoxが立ち上がっていれば、新たなVMがつくられて「起動中」となっているはず。
VirtualBoxが立ち上がっていなくとも、vafrant up
したら起動している。
vagrant destroy
でVMごと一瞬で消える。
Vagrantfileは消えないので、そのディレクトリでvagrant up
すればまたつくることができる。
ゲスト側のルートにある/vagrantディレクトリが、ローカルのカレント・ディレクトリ(Vagrantfileがある)と共有フォルダになっているので、WEBサーバのドキュメントルートをここにシンボリックリンクしてしまうのが、開発の上では楽です。
ブリッジ接続を加える
Vagrantfileの次の行のコメントをはずす:
config.vm.network :public_network
これは将来:bridge
に変更されるとのこと。ここではたんにブリッジ接続をネットワークに追加してくれるだけ。
ゲスト側でifconfig
して192.168.....的なアドレスがeth1に追加されているので、Webサーバなどを立ち上げていれば、ローカル(ホスト)側のブラウザなどで表示できる。
Vagrantfileを再読み込みの上、再起動、ログイン
vagrant reload
vagrant ssh
不完全な知識のままでやってみましたが、なんとか自分で使う分にはこれでいけそうです。
ブリッジのままパッケージ化する方法をご存知であればご教示ください。
あとVagrantのDocumentではlinux-headersとbuild-essentialsでGuest Additionsをビルドするように記載されていますが、dkmsじゃないとうまくいかないようなので、ご注意を。