以前自作したVagrantのboxのOSやパッケージを更新し、新たなboxを作る。
環境
Vagrant、VirtualBoxが動く環境は、macOS Sierra。
Vagrantのバージョンは1.9.1。
$ vagrant --version
Vagrant 1.9.1
VirtualBoxのバージョンは5.0.30。
$ VBoxManage -v
5.0.30r112061
この環境で、以前自作したCentOS 7.1のboxからCentOS 7.3のboxを作成する。
OSの起動
CentOS 7.1のVMを起動するための環境を作る。
$ vagrant init CentOS-7.1-x86_64-minimal-ja-20150521
Vagrantfileの編集
起動前にいくつかの設定を追加、変更する。
VMの名称を指定する
この名称は、boxを作成するときに必要になる。
config.vm.provider :virtualbox do |vbox|
vbox.name = "centos71-update"
end
VirtualBox VMのコンソールを開くようにする
VirtualBox Guest AdditionsのCDをマウントするために、起動時にコンソールが開くようにする。
config.vm.provider "virtualbox" do |vb|
# Display the VirtualBox GUI when booting the machine
vb.gui = true
# Customize the amount of memory on the VM:
# vb.memory = "1024"
end
shared foldersのマウントを無効にする
初期設定ではVagrantfileがあるディレクトリが共有フォルダとしてマウントされる。
$ vagrant up
...
==> default: Mounting shared folders...
default: /vagrant => /Users/te2u/misc/vagrant/centos71-update
...
カーネルを更新したときは共有フォルダのマウントに失敗するため、あらかじめ無効にする。
config.vm.synced_folder ".", "/vagrant", disabled: true
パッケージ更新
VM起動後、vagrantアカウントでログインする。
$ vagrant ssh
ログインしたら、yumコマンドでパッケージを更新する。
$ sudo yum update -y
更新したら、OSを再起動する。
$ sudo shutdown -r now
VirtualBox Guest Additionsの更新
VirtualBox VMのコンソールをクリックして、メニューで
[Devices] > [Insert Guest Additions CD image...]
の順に選択し、VMにCDがセットされた状態にする。
そのあと、vagrantアカウントでログインし
$ vagrant ssh
CDをマウントしてGuest Additionsを更新するスクリプトを実行する。
$ sudo mount -r /dev/cdrom /media/cdrom
$ sudo sh /media/cdrom/VBoxLinuxAdditions.run
終了したらCDを取り出す。
$ sudo umount /media/cdrom
vagrantアカウントの公開鍵の変更
vagrantアカウントの公開鍵を所定のものに変更する。
この公開鍵にしておくと、VagrantがVMの初回起動時に、自動でより安全な公開鍵へ変更する。
$ rm ~/.ssh/authorized_keys
$ curl -k -L -o ~/.ssh/authorized_keys 'https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub'
$ chmod 600 ~/.ssh/authorized_keys
udevのルールの削除
VMを起動したときにネットワークデバイスのエラーが起きるのを避けるため、udevのルールを削除する。
sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
sudo rm -rf /dev/.udev/
sudo rm -f /lib/udev/rules.d/75-persistent-net-generator.rules
box作成のための調整
作成するboxのサイズをできる限り最小にするために行う。
yum clean
sudo yum clean all
フラグメンテーションの解消
boxの圧縮効率を上げるために行う。
sudo dd if=/dev/zero of=/EMPTY bs=1M
sudo rm -f /EMPTY
シャットダウン
VMをシャットダウンする。
sudo shutdown -h now
boxの作成と登録
boxを作成する。centos71-update
はVagrantfileの編集のときに設定したVMの名称。
vagrant package --base centos71-update
作成されたboxのサイズは700Mほど。
$ du -sh package.box
700M package.box
作成したboxをVagrantに登録する。
vagrant box add --name CentOS-7.3-x86_64-minimal-ja-20161223 package.box
確認
確認用のディレクトリを作成して、先ほど作成したboxからVMを起動する環境を作る。
$ mkdir centos73
$ cd centos73
$ vagrant init CentOS-7.3-x86_64-minimal-ja-20161223
そして、VMを起動する。
$ vagrant up
ターミナルに表示されるログから、sshの公開鍵が変更されること、shared foldersが設定されることを確認する。
起動後、sshでvagrantアカウントにログインできることを確認する。
$ vagrant ssh
最後に、OSのバージョンが更新されていることを確認する。
$ cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)