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
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
出来上がったboxファイルを使ってみる
BOXを登録する。
$ vagrant add mycentos package.box
既存のVM破棄後、登録したBOXを起動する。
$ vagrant destroy $ vi Vagrantfile config.vm.box = "mycentos" $ vagrant up
ATLASで公開する
- ATLASにログインし、Developmentページを開く
- "Create a Vagrant Box"のBeginボタンを押す
- BOX名、説明など入力し、BOX作成する
- "New Box Version"にバージョンと説明を入力してCreate versionボタンを押してバージョンを作成する
- "Providers"欄のCreate new providerボタンを押す
- Providerには「virtualbox」と入力し、Uploadを選択してpackage.boxをアップロードする。Providerが登録される
- Overviewページに戻り、バージョンのEditボタンを押す。
- 上の方に「This version hasn't been released.〜」と出ているので、Release versionボタンを押す
これで外部からアクセス可能になる。
Vagrantfileで
config.vm.box = "[アカウント名]/[BOX名]"
を指定すれば使える。