やりたいこと
- 複数人で開発環境を共有したり、PHPなどのバージョンが異なるケースについて試験したい。
- 上記のようなことができるサーバを、社内ローカルに用意したい。
- さらに、開発チームのメンバー向けに「標準環境」として必要に応じて配布したい。
というわけで・・・
- Vagrantを使って、boxとして仮想サーバを配布したい。
- 手元のPCで仮想サーバを構築した。
- それをローカル内の共有サーバに配置し、メンバー内で共有したい。
- ついでに言えば、開発チームのメンバーで必要に応じて仮想環境を共有させたい。(これ使ってね的に)
前提条件
- 配布する仮想環境を開発しているマシンを「配布元」、その仮想環境をインポートして同じ環境を使うマシンを「配布先」とします。
- 配布元にも配布先にも、Vagrantがインストールされていて使用できる状態です。
- 私は、配布元、配布先ともに、仮想マシンを動かすツールとしてViatualboxを使っています。
- 配布する仮想マシンのOSは CentOS6.7 (bento)です。
実現手順
- (配布元)配布したい仮想サーバをboxとしてエクスポートする
- (配布先)boxをインポートし、仮想サーバを作成する
- (配布先)Vagrantfileなどを修正する
(配布元)配布したい仮想サーバをboxとしてエクスポートする
配布元のVagrantfileが存在するディレクトリで(を参照して)、vagrant package
を実施する。
参考:Vagrant日本語ドキュメント
$ vagrant package --output demo_cent67.box
上記のパターンでは、demo_cent67.box
というファイル名で出力されます。
(配布先)boxをインポートし、仮想サーバを作成する
配布先にも、VagrantやVirtualboxなどの環境が整っているとします。
$ vagrant box add lamp_bento demo_cent67.box
上記のパターンでは box一覧に、lamp_bentoと言う名前で登録します。
box一覧への追加を確認
$ vagrant box list
bento/centos-6.7 (virtualbox, 2.2.2)
lamp_plane_bento (virtualbox, 0)
上記のように、追加されていれば OK
そして、普通に追加。
$ vagrant init lamp_plane_bento
(配布先)Vagrantfileなどを修正する。
- Vagrantfileは、デフォルトで生成されるので、(配布元)の環境に応じた設定をする必要がある。
- その際に、ネットワーク周りのエラーが発生しやすい。
と言うことで、はまりやすいです。
Vagrantfile の 修正例
配布先でも、配布元で使っていた環境に合わせたい場合でも、
IPアドレスなどには留意する必要があります。
Vagrant.configure(2) do |config|
config.vm.box = "bento/centos-6.7"
config.vm.provider "virtualbox" do |v|
v.name = "Hello Vagrant"
v.cpus = 2
v.memory = 1024
v.customize ["modifyvm", :id, "--vram","16"]
end
#Private network
config.vm.network "public_network", ip: "192.168.100.200", bridge: 'en0: Wi-Fi (AirPort)'
end
Vagrant.configure(2) do |config|
config.vm.box = "bento/centos-6.7"
config.vm.provider "virtualbox" do |v|
v.name = "Hello Vagrant Clone"
v.cpus = 2
v.memory = 1024
v.customize ["modifyvm", :id, "--vram","16"]
end
#Private network
config.vm.network "public_network", ip: "192.168.100.201", bridge: 'en0: Wi-Fi (AirPort)'
end
コピペでやろうと思った? エラーが出やすいけど。
ネットワークまわりの警告
配布元で、boxをエクスポートする際に
==> default: Configuring and enabling network interfaces...
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!
ARPCHECK=no /sbin/ifup eth1 2> /dev/null
Stdout from the command:
Device eth1 does not seem to be present, delaying initialization.
Stderr from the command:
一旦Vagrantのゲストにアクセスし、対応する。
上記のエラーが出ていても、仮想マシン自体は起動しているので Vagrant ssh
でアクセスすることは可能です。
$ sudo ln -s -f /dev/null /etc/udev/rules.d/70-persistent-net.rules
仮想マシン上にて、上記コマンド入力後、ターミナル画面で以下のコマンドを入力
$ vagrant reload
新しい設定が反映されます。
これで、「仮想環境を必要に応じて複製、配布」ができるようになりました!
参考
Vagrantのboxに少しだけ手を加えたものをboxとして取っておきたい
http://qiita.com/t_cyrill/items/ef9cb2b615bfb326f79c
macで作られたvagrant boxをもらったときに出るネットワークエラーの対処法
http://qiita.com/tarr1124/items/8276e609c0f7cdec79e7