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

endokのブログ

IT・プログラミングネタ

Vagrantで独自BOX作成してATLASで公開する

やりたいこと

  • chef/centos-6.5 をベースにyum update、yum groupinstall Development ToolsしたBOXを作る。
  • Atlas by HashiCorp で公開してVagrantfileで指定できるようにする。

環境

最終的な手順

いろいろ問題は発生したが、最終的な手順は下記となった。

※ $ 〜はホストでのコマンド。> 〜はVM内でのコマンド。

ベースにするboxを使って普通にvagrant upする

今回の場合、Vagrantfileに下記のようにベースのboxを指定し、vagrant upする。

config.vm.box = "chef/centos-6.5"

vagrant sshして変更を加える

$ vagrant ssh
> sudo yum update -y
> sudo yum groupinstall -y 'Development Tools'

vagrantユーザーのinsecure private keyを配置する

vagrantユーザーのデフォルト公開鍵があり、それを設定しておく必要があった。

https://github.com/mitchellh/vagrant/tree/master/keys
vagrant.pubをvagrantユーザーのauthorized_keysに設定する。

> wget https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub
> cat vagrant.pub >> /home/vagrant/.ssh/authorized_keys
> rm vagrant.pub

kernelをアップデートした場合はVirtualBox Guest Additionsの再セットアップする

kernelをアップデートすると、vagrant up した際に下記のようなエラーが出る。

Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant

The error output from the last command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device

vagrant-vbguestプラグインで再セットアップする。
自分の場合、通常時は使わないのでセットアップが終わったら削除しておく。

$ vagrant plugin install vagrant-vbguest
$ vagrant vbguest
$ vagrant plugin uninstall vagrant-vbguest

参考: VagrantのboxのGuest Additionsのアップデート方法 - Qiita

NICマッピングを消す

参考: Vagrant で作った仮想マシンから Box ファイルを作りなおす | CUBE SUGAR STORAGE

> sudo ln -s -f /dev/null /etc/udev/rules.d/70-persistent-net.rules

ログアウト後、Vagrantのinsecure key置き換え機能をOFFにする

VMからログアウトする。

> exit

設定したinsecure keyが置き換えられないように、Vagrantfileで機能をOFFにする。

config.ssh.insert_key = false

停止、パッケージングする

$ vagrant halt
$ vagrant package

package.boxというファイルが出来上がる。

出来上がったboxファイルを使ってみる

BOXを登録する。

$ vagrant add mycentos package.box

既存のVM破棄後、登録したBOXを起動する。

$ vagrant destroy
$ vi Vagrantfile
  config.vm.box = "mycentos"
$ vagrant up

vagrant sshして問題ないか確認する。

ATLASで公開する

  1. ATLASにログインし、Developmentページを開く
  2. "Create a Vagrant Box"のBeginボタンを押す
  3. BOX名、説明など入力し、BOX作成する
  4. "New Box Version"にバージョンと説明を入力してCreate versionボタンを押してバージョンを作成する
  5. "Providers"欄のCreate new providerボタンを押す
  6. Providerには「virtualbox」と入力し、Uploadを選択してpackage.boxをアップロードする。Providerが登録される
  7. Overviewページに戻り、バージョンのEditボタンを押す。
  8. 上の方に「This version hasn't been released.〜」と出ているので、Release versionボタンを押す

これで外部からアクセス可能になる。

Vagrantfileで

config.vm.box = "[アカウント名]/[BOX名]"

を指定すれば使える。