読者です 読者をやめる 読者になる 読者になる

orangeProse別館

orangeProse(本ブログ)の補助

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

Programming Vagrant Server Ubuntu

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