Vagrant
- 最新のVagrantのインストール
- 仮想マシンがネットワークにつながらないときの対処方法
- 仮想マシンとscpでファイルを交換する
- スナップショット機能を使用する
- Boxを一から作成する手順
- Ubuntu14.04で共有フォルダのマウントに失敗するときの対象方法
最新のVagrantのインストール
最新のVagrantはgemではインストールできなくなっているので、 Vagrantのダウンロードサイト からパッケージをダウンロードしてインストールするか、 もしくは、Githubからソースコードをダウンロードしてインストールする。
git clone https://github.com/mitchellh/vagrant.git
cd vagrant
git checkout -b work_v1.2.7 v1.2.7
bundle install
rake install
この方法でインストールすると、vagrantコマンドを実行するたびに警告メッセージが出るため、 公式パッケージからインストールしたほうがよさそうだ。
仮想マシンがネットワークにつながらないときの対処方法
Linuxのudevにはネットワークカードのmacアドレスとネットワークデバイスとの対応関係を固定する機能がある。 一方、パッケージングしたボックスで新しい仮想マシンを作成すると、 ネットワークカードのmacアドレスが元の仮想マシンから変更されるのにも関わらず、 元の仮想マシンのMACアドレスの記録がボックス内に残っているため、 不整合が起こってネットワークが起動しないことがある。
この場合、 /etc/udev/rules.d/70-persistent-net.rules を削除してから、 仮想マシンを再起動(vagrant halt → vagrant up)し、 macアドレスとネットワークデバイスの対応関係を設定し直すことで対処できる。
また、udevの設定を変更することで、このファイルを作成しないようにすることも可能である。 /lib/udev/write_net_rules 内のRULES_FILEを /etc/udev/rules.d/70-persistent-net.rules から /dev/null に設定することで、 このファイル自体を作成しないようにできる。
sudo sed -i -e 's|/etc/udev/rules.d/70-persistent-net.rules|/dev/null|g' /lib/udev/write_net_rules
参考URL
仮想マシンとscpでファイルを交換する
Vagrantfileが置いてあるディレクトリで、
vagrant ssh-config > ssh-config
を実行すると、sshの設定ファイルが出力される。 この中身を読むと仮想マシンのホスト名が「default」になっているので、例えば、仮想マシンに対してファイルを送る場合は、以下のコマンドを実行する。
scp -F ./ssh-config ファイル名 default:
スナップショット機能を使用する
vagrant-vbox-snapshotというプラグインをインストールすると、Vagrantにスナップショット機能を追加することができる。
インストール
vagrant plugin install vagrant-vbox-snapshot
使い方
> vagrant help snapshot Usage: vagrant snapshot <command> [<args>] Available subcommands: back delete go list take For help on any individual command run `vagrant snapshot <command> -h`
スナップショットを取得する
vagrant snapshot take <スナップショット名>
スナップショットを削除する
vagrant snapshot delete <スナップショット名>
特定のスナップショットの状態に移動する
vagrant snapshot go <スナップショット名>
現在のスナップショットの状態に戻る
vagrant snapshot back
スナップショットの一覧を表示する
vagrant snapshot list
Boxを一から作成する手順
仮想マシンを新規作成し、通常のインストーラを使ってOSをインストールする。
- rootのパスワードをvagrantに設定
sshサーバがインストールされていなければインストールする。パッケージをアップグレードして再起動する
Virtualbox Guest Additions をインストールする
ubuntu系の場合
apt-get install build-essential module-assistant dkms mount /dev/cdrom /mnt /mnt/VBoxLinuxAdditions.run
vagrantユーザを作成する。パスワードをvagrantに設定する。 (ubuntu系の場合はOSインストール時にユーザも作成しているはずなのでこの作業は不要)
adduser vagrant passwd vagrant
vagrantユーザの.sshディレクトリにsshの公開鍵をインストールする。
mkdir -m 700 /home/vagrant/.ssh cd /home/vagrant/.ssh wget https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub -O authorized_keys chmod 600 authorized_keys
sudoの設定
sudo visudo
- requirettyをコメントアウトする
- vagrantユーザのパスワード入力を不要にする
vagrant ALL=(ALL) NOPASSWD:ALL
MACアドレスからネットワーク名を固定する機能を無効化する。
sudo rm /etc/udev/rules.d/70-persistent-net.rules sudo sed -i -e 's|/etc/udev/rules.d/70-persistent-net.rules|/dev/null|g' /lib/udev/write_net_rules
sshログインの高速化のためにUseDNSをnoに設定する。
/etc/ssh/sshd_config
UseDNS no
Boxのサイズを小さくするために不要なキャッシュなどを削除する。
RHEL系
sudo yum clean all
ubuntu
sudo apt-get clean sudo apt-get autoclean
仮想ディスクの空き領域に0を書き込むと、Boxのサイズが小さくなる。
sudo -i dd if=/dev/zero of=/EMPTY bs=1M rm /EMPTY exit
仮想マシンを停止してパッケージ化。
vagrant package --base <仮想マシン名>
Ubuntu14.04で共有フォルダのマウントに失敗するときの対象方法
- ゲスト上で以下のコマンドを実行
sudo ln -s /opt/VBoxGuestAdditions-4.3.10/lib/VBoxGuestAdditions /usr/lib/VBoxGuestAdditions
- vagrant reloadを実行する