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

orangeProse別館

orangeProse(本ブログ)の補助

Vagrant > VirtualBox > Creating A Base box[雑訳]

Programming Vagrant Server

引き続き、Vagrantのドキュメントを雑に翻訳するシリーズです。

おそらくここまでで、VirtualBoxのBase Boxをつくる方法は揃うはずです。

いくつか、わかりにくい点もありますが、この記事の最後にその点にコメントします。


Base Boxをつくる

すべてのプロバイダ同様、VirtualBoxプロバイダはBase Boxのつくり方に影響を与える、カスタムBox形式を持ちます。

これを読む前に、Base Boxをつくるための一般ガイドをお読み下さい。Base Boxをつくるあいだ、頻繁に参照できるように、このページを別タブで開いておくのがベストかと思います。そちらのページは、Boxにインストールしておくべき共通のソフトウェアに関する重要な情報が掲載されています。

さらに、Boxファイルのフォーマットの基本を理解するのにも役立つでしょう。

高度なテーマ! これはVagrantのビギナーが理解する必要がない、まあまあ高度なテーマです。Vagrantを使い始めたばかりなら、ここを飛ばして、入手可能なBoxを使用して下さい。Vagrantの上級者で、自分のカスタムBoxを作りたいのであれば、これはまさにあなたのためのテーマです。

追加ソフトウェア

Base Boxをつくるための一般ガイドに基づいてインストールされるべきソフトウェアに加えて、VirtualBoxのBase Boxはいくつかの追加ソフトウェアが必要です。

VIRTUALBOX GUEST ADDITIONS

VirtualBox Guest Additionsインストールして、共有フォルダなどが機能するようにしなければなりません。Guest Additionsをインストールすることはまた、パフォーマンスを向上させることが多いでしょう。VirtualBox内でGuest Additionが実行されていることをゲストOSが知ることで、最適化を行うことができるからです。

Guest Additionsをインストールする前に、Linuxカーネル・ヘッダと基本的開発ツールが必要になります。Ubuntuでは、こんな感じで簡単にインストールできます:

$ sudo apt-get install linux-headers-$(uname -r) build-essential

次に、GUIを使い、"デバイス"から"Guest Additionsのインストール"をクリックすることで、Guest Additionsが使えることを確認して下さい。そしてCD-ROMをマウントして下さい。Ubuntuでは、これはたいていこんな感じです:

$ sudo mount /dev/cdrom /mnt/cdrom

最後に、Guest Additionsをインストールするために、システムに適したシェル・スクリプトを実行して下さい。たとえば、x86上のLinuxだと、次のようになります:

$ sudo sh /media/cdrom/VBoxLinuxAdditions.run

もしOSインストール時にデスクトップ環境をインストールしていなければ、容量を小さくするよう推奨されたときのように、VirtualBox Guest AdditionsがOpenGLやWindow System Driverがないことを警告するはずですが、これを無視してかまいません。

コマンドが成功すれば、Guest Addditionsがインストールされます!

BOXのパッケージ化

VagrantVirtualBoxのBase Boxをパッケージ化するのにシンプルな方法をとっています。インストールしたいソフトウェアをインストールし終えたならば、このコマンドを実行して下さい:

$ vagrant package --base my-virtual-machine

"my-virtual-machine"の部分は、Base BoxとしてパッケージするVirtualBox内の仮想マシンの名前に置き換えます。

数分かかりますが、完了すれば、"package.box"ファイルがカレント・ディレクトリに、新しいBase Boxとしてできているはずです。さあ、Base Boxの作成の成功です!

RAWコンテンツ

このセクションでは、BoxファイルのRAWコンテンツについて示します。これはBase Boxをつくるときに役立つものではなく、必要なときに問題をデバッグするさいに役立ちうるものです。

a:nVirtualBoxのBase Box はVirtualBox仮想マシンエクスポートの結果つくられるファイルのアーカイブです。こうしたBoxに含まれるものの例がこれです:

$ tree
…
|-- Vagrantfile
|-- box-disk1.vmdk
|-- box.ovf
|-- metadata.json

0 directories, 4 files

VirtualBox VMのエクスポートによるファイルに加え、Vagrantによって使用される"metadata.json"ファイルがあります。

また、"Vagrantfile"もあります。これは、NATネットワーク・デバイスのMACアドレスを適切にセットする設定も含んでいます。適切に機能するために、VirtualBoxはこれが正しいことを要求するからです。

VirtualBoxを立ち上げるとき、VagrantはBoxの中に見つかった最初の"ovf"ファイルをインポートます。


いくつかコメント。

Ubuntuカーネル・ヘッダ

最近のもの(12.04とか)はgenericに統合されているはずです。

上述のように$uname -rで置き換えても動きます。

はじめに「ミニマルインストール」でなく「標準インストール」したならばインストールされているはずです。

おそらくミニマルインストールをBase Boxにするより標準インストールをBase Boxにした方が、使い勝手は良いかと。

Guest Additionsのマウントポイント

/mnt/cdromにマウントして、/media/cdromにマウントされますか?

ぼくはされなかった……。

直接/mnt/cdromまでcdしていって、管理者権限でsh ./VBoxLinuxAddition.runしたら実行されました。

RAWファイルの内容

package.boxファイルに含まれるのかと思い、拡張子を.tarにして解凍しても、metadata.jsonがないです。

これは、/.vagrant.d/boxes/配下のaddしたboxのディレクトリにできあがります。

つまりvagrant box addしなければ生成されません。