Windows&Vagrantで自動仮想環境構築 - provisioning+自作BOX
前回の記事までで、Vagrantを使って仮想マシンを作成し、WEB開発環境を整えるところまでは行いました。
今回は、provisioningのテストと作成した仮想マシンのBOXを作成してみたので、書いていきたいと思います。
前回までの記事はこちら
Windows&Vagrantで自動仮想環境構築 - Program LOG
Windows&Vagrantで自動仮想環境構築 - ネットワーク設定とWEBサーバー導入編 - Program LOG
参考サイト
プロビジョニング | Vagrant日本語ドキュメント
Vagrant + シェルスクリプトで簡単プロビジョニング | Ryuzee.com
Vagrant入門 (全13回) - プログラミングならドットインストール
provisioning(プロビジョニング)って何だ?
私たちは、SSH接続し、webサーバをインストールしている途中かもしれません。 しかし、Vagrantを使用するすべてのひとは、同じことをすべきです。 Vagrantは自動プロビジョニングのサポートが組込まれています。 この機能を使うことで、vagrant upした際に、Vagrantは自動的にソフトウェアをインストールします。 そのため、ゲストマシンは同じように生成され、使用準備を整えることができます。
provisioningを設定すると、起動した時に指定しておいたことを自動的に実行してくれるって事ですね。
これは、複数人で開発するときに便利ですね。。。
今までは、毎回仮想マシンを用意してましたもんね。。。
基本的な記述方法
provisioningはshellファイルを起動時に読み込んで実行する事が出来るようです。
まずテスト的に以下のようなshファイルを作成してみました。
provision.sh
echo provisioning test
次に、vagrantfileに実行パスを設定したいと思います。
これは何行目でも大丈夫っぽいですが、今回は「end」の直前に指定してみました。
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| ・・・中略 config.vm.provision :shell, :path => "provision.sh" end
これで以下のように実行すると、provisionが実行されます。
$ vagrant provision ==> default: Running provisioner: shell... default: Running: .... provisioning test
もちろんhalt
してからup
を実行しても実行されるはずです。
$ vagrant halt ==> default: Attempting graceful shutdown of VM... $ vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Importing base box 'dev1'... ==> 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: Adapter 2: hostonly ==> 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: Machine booted and ready! ==> default: Checking for guest additions in VM... default: The guest additions on this VM do not match the installed version f default: VirtualBox! In most cases this is fine, but in rare cases it can default: prevent things such as shared folders from working properly. If you see default: shared folder errors, please make sure the guest additions within the default: virtual machine match the version of VirtualBox you have installed on default: your host and reload your VM. default: default: Guest Additions Version: 4.2.16 default: VirtualBox Version: 4.3 ==> default: Configuring and enabling network interfaces... ==> default: Mounting shared folders... default: /vagrant => ... ==> default: Running provisioner: shell... default: Running: ... provisioning test
うん。まぁ出ますよねw
しかし、ちょっと気になっているのが、「Warning: Connection timeout. Retrying.」が毎回出て、
しかもそいつのところで起動が毎回遅いという。。。ん~。。。ちょっと調べてみたら、
同じような事を書いている記事を発見!ナイスです。
vagrant up で Error: Connection timeout. Retrying... - 理系学生日記
なるほど~。。。起動しているのに、何度もsshで接続しようとして失敗し続けているって事ですね。
感謝!
さて、本題に戻ります。
provisionファイルを指定しておくと、起動時にshellを実行してくれます。
例えば、phpのバージョンは・・・とか、postgresはを入れて・・・とか
そうゆうのはprovisioningを設定しておけば、簡単に行えるって事ですね。
まぁ。。。shellもそんなに書いた事が無いので、んーって感じですが、
初回起動時にだけ、ファイルを読み込むってのもいいかも知れませんね。
本当は、この段階でchef-soloでやるって選択肢の方がいいですね。
ただ、ちょっとしたルーティンなんかは、provisioningでやるのもありかもしれません。
boxを自作して使いまわす。
webサーバーやphp+mysqlなど、基本的な構成は開発する上で変わらないと思います。
自分なりにカスタマイズした仮想マシンをBOX化する事で、簡単に仮想マシンのコピーが出来ます。
それでは、今回は今まで作ってきた仮想マシンをBox化して、それを使って新しい仮想マシンを
作成したいと思います。
まずはboxを作成したいと思います。
$ vagrant package ==> default: Attempting graceful shutdown of VM... ==> default: Clearing any previously set forwarded ports... ==> default: Exporting VM... ==> default: Compressing package to: ... $ ls Vagrantfile index.html package.box provision.sh
※仮想マシンが立ち上がっている場合には、自動的にシャットダウンされます。
※かなり時間がかかりました。。。。
次に、以下のコマンドで、Boxを追加したいと思います。
$ vagrant box add apachebox package.box ==> box: Adding box 'apachebox' (v0) for provider: box: Downloading: ... ==> box: Successfully added box 'apachebox' (v0) for 'virtualbox'!
※追加したら、もうpackage.boxファイルは不要なので、削除してしまっても大丈夫です。
せっかく作成したので、作成したBoxを使って仮想マシンを作成し、起動してみたいと思います。
$ cd ../ $ cd ./dev2 $ vagrant init apachebox 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
同時に起動したい場合には、ネットワークの設定などを指定してあげる必要があるとは思いますが、
今回はそのまま起動しました。
正常にコピー出来ているか、WEBサーバーがあるかを確認してみようと思います。
$ vagrant ssh Last login: Sun Apr 13 07:03:13 2014 from 10.0.2.2 Welcome to your Vagrant-built virtual machine. [vagrant@localhost /]$ sudo service httpd status httpd (pid 1434) is running...
初回起動で、既にapacheがインストールされており、起動も確認できました。
今後は、このboxファイルを使用して、様々な開発環境へ対応できるようになっていけると思います。