2014/05/13

Mac OS X (10.9)のVagrant Boxを作ってみる (VirtualBox)

前回、VirtualBoxにゲストOSとしてMavericksを入れたので、それを使ってVagrant Boxを作ってみました。

もっとも、現在のところVirtualBoxにはMac OS向けのGuest Addonがないので中途半端なBoxしか作れませんでしたが、他のBoxを作るときの参考になるかもしれないので作業過程を示しておきます。

ゲストOS上での設定

Vagrantの公式ドキュメントにVagrantのBoxには最低限これだけはやっておけというものが書かれています。それを参考に次のようなことを行いました。

パッケージマネジャの導入

今回パッケージマネジャはhomebrew + homebrew-caskを入れました。場合によってはmacportsも入れればよいかも。なお、Homebrewを入れるとついでに、Command Line Toolsも入ります。

$ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
$ brew tap caskroom/cask && brew install brew-cask

VagrantでSSHするためのユーザ作成

ユーザvagrantをUsers & Groupsから追加しました。もちろんパスワードはvagrantです。

SSHサーバ

SharingからRemote Loginをオンにし、ユーザvagrantでアクセスできるようにします。

ポートフォワーディングの設定はVagrantが自動で行うので不要です。

Vagrant向けのSSH鍵

ユーザvagrantで鍵を追加しておきます。

$ mkdir .ssh
$ curl -k https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub > .ssh/authorized_keys
$ chmod 0700 .ssh
$ chmod 0600 .ssh/authorized_keys

パスワード不要のsudo

Vagrantがネットワーク設定とかするときに必要となりますので、visudoで設定ファイルを開いたら、ファイル末尾に次の設定を追加しておきます。

vagrant ALL=(ALL) NOPASSWD: ALL

プロバイダ向けに必要なもの

プロバイダとは、ここではVirtualBoxのことを差し、Guest Addonを入れておくことなど (詳細は公式ドキュメントのVirtualBoxプロバイダ向けBoxの作成を参考のこと) が必要なものに当たります。

しかし、Mac OS X向けのGuest Addonがないので省略しました。

(必要なら) Chef, Puppetとか

Ansibleを使うつもりなので省略。

ディスク使用量を減らす

Monolingualで英語と日本語以外の不要な言語ファイルを消すだけで1.5GBくらい減らせます。

ちなみに、Monolingual最新版(1.5.10)はゲスト環境では動作しなかったので、1.4.5を使いました。

VirtualBoxでの設定の変更

FloppyやCD-ROMドライブはもはや不要なので切りましょう。また、Vagrant向けに特化するなら、USBやオーディオなど要らないものは切っておくとよいです。

Mavericks Boxの作成

先ほど設定したVMをベースに次のコマンドでVagrantのboxを作成します。--baseにはVirtualBoxのVM名を指定します。なお、15分くらいかかります。

$ vagrant package --output mavericks.box --base Mavericks
==> vagrant_mavericks: Clearing any previously set forwarded ports...
==> vagrant_mavericks: Exporting VM...
==> vagrant_mavericks: Compressing package to: /Users/safx/src/vagrant_mac/mavericks.box

完成したらboxをリストに追加しましょう。

$ vagrant box add mavericks mavericks.box 
==> box: Adding box 'mavericks' (v0) for provider: 
    box: Downloading: file:///Users/safx/src/vagrant_mac/mavericks.box
==> box: Successfully added box 'mavericks' (v0) for 'virtualbox'!

ちゃんと追加されました。

$ vagrant box list
mavericks              (virtualbox, 0)
parallels/ubuntu-14.04 (parallels, 0.1.0)
wmit/trusty64          (virtualbox, 0.1.0)
yungsang/boot2docker   (parallels, 0.8.3)

mavericks.boxの起動

あとは普通にvagrantで起動するだけですが、vagrant upでは (Guest Addonを入れていないので) 共有フォルダを作れないというエラーが出てしまいました。

$ vagrant init mavericks
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'marvericks'...
==> default: Matching MAC address for NAT networking...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: No guest additions were detected on the base box for this VM! Guest
    default: additions are required for forwarded ports, shared folders, host only
    default: networking, and more. If SSH fails on this machine, please install
    default: the guest additions and repackage the box to continue.
    default: 
    default: This is not an error message; everything may continue to work properly,
    default: in which case you may ignore this message.
==> default: Mounting shared folders...
    default: /vagrant => /Users/safx/src/vagrant_mac
Vagrant attempted to execute the capability 'mount_virtualbox_shared_folder'
on the detect guest OS 'darwin', but the guest doesn't
support that capability. This capability is required for your
configuration of Vagrant. Please either reconfigure Vagrant to
avoid this capability or fix the issue by creating the capability.

ただし、vagrant sshは利用できました。

$ vagrant ssh
Last login: Sat May 10 20:40:51 2014
safxdevs-MacBook-Pro:~ vagrant$ uname -a
Darwin safxdevs-MacBook-Pro.local 13.1.0 Darwin Kernel Version 13.1.0: Wed Apr  2 23:52:02 PDT 2014; root:xnu-2422.92.1~2/RELEASE_X86_64 x86_64
safxdevs-MacBook-Pro:~ vagrant$ ls
Desktop     Documents   Downloads   Library     Movies      Music       Pictures    Public

おわりに

Virtualboxプロバイダ向けのMac OS X (10.9)のVagrant Boxを作ってみました。

Parallelsだとアドオン付きのBoxをすんなりと作れるのかもしれませんが、トライアル版の期限が過ぎたので試してません。

関連リンク

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。