orangeProse別館

orangeProse(本ブログ)の補助

UbuntuサーバのVagrant Base boxをつくる

来月にはいよいよUbuntu Serverも14.04が出ますが、現時点のLTSである12.04の64bit版のBase Boxをつくるまでのメモを残しておきます。

Ubuntu Server 12.04 x64 vagrant Base Boxつくるためにやったこと

  1. VirtualBoxをインストール
  2. Vagrantをインストール
  3. Vagrantの使い方はドットインストールでざっくりと
  4. UbuntuServerのISOファイルをダウンロード
  5. VirtualBoxUbuntuvagrant向けにインストール
  6. vagrantでBase Box作成

インストール時

VirtualBoxで新規作成、メモリ・HDD容量はデフォルトで、ドライブのファイルタイプはVMDKの可変サイズ。

設定:

  • 一般:高度:クリップボードの共有「双方向」、ドラッグ&ドロップ「双方向」
  • システム:ポインティングデバイスPS/2マウス」
  • ストレージ:CD/DVDドライブにISOファイルをマウント
  • オーディオ:オーディオを有効化のチェックをはずす
  • ネットワーク:ブリッジアダプターにするが、これでBaseBoxをつくってもNATになってしまう(後で対策)NATにしておきましょう
  • USB:USBコントローラーを有効化のチェックをはずす

普通にUbuntu Serverのインストールをする。標準インストール(ミニマルインストールではない)。

ユーザ名:vagrant
パスワード:vagrant

コンソール

標準インストールした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 destroyVMごと一瞬で消える。

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じゃないとうまくいかないようなので、ご注意を。