概要
Virutalbox でカスタムBoxを作る手順。boxは、yum update しつつ運用していこうと考えている。
ゲストOS はCentOS6を想定しているが、CentOS7やUbuntでも役に立つ。
(後日修正の可能性がある。)
環境
Boxを作成するために使ったホストOSの環境。ホストOSはOSX。一連の操作は、Linuxでもおそらく同じ。
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.10.5
BuildVersion: 14F1021
$ uname -mrs
Darwin 14.5.0 x86_64
$ VBoxManage --version
5.0.10r104061
元になるゲストOSをインストール
Virutalbox上でゲストOSをインストールする。新規で作成し、名前を"CentOS6"としている。
カスタムBoxを作るのが目的なので基本的には好きにしていい。ただし、BoxはゲーストOSをアーカイブしてダウンロードすることになるため、最小パッケージがおすすめ。Hashicorpへの公開を前提とすればインターネットを介してダウンロードすることになるので、OSのサイズは小さい方がいい。
インストールが終わったらゲストOSをshutdownするが、その前に必要なパッケージの追加や設定を行ってもいい。
Virtualboxの設定
以下のようにした。
変更する項目 | 変更後の値 |
---|---|
メインメモリー | 512MB |
フロッピー | 無効 |
アクセラレーション | Legacy |
オーディオ | 無効 |
USBコントローラー | 無効 |
その他は初期値のまま。
作業中のネットワーク設定
SSHでログインしながら以降の操作をやるために、VirutalboxでNetwowkアダプター1の設定をNATからブリッジに変更。
ゲストOSの設定(1)
vagrantユーザーを追加
ゲストOSにて以下を実行。
sed -i -e s/^Defaults\ \ \ \ requiretty/#Defaults\ \ \ \ requiretty/g /etc/sudoers
useradd vagrant
[ -f /etc/sudoers.d/vagrant ] || echo "%vagrant ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/vagrant
mkdir -m 700 /home/vagrant/.ssh
mkdir -p /vagrant
chown vagrant:vagrant /home/vagrant/.ssh
echo "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key" > /home/vagrant/.ssh/authorized_keys
chmod 600 /home/vagrant/.ssh/authorized_keys
chown vagrant:vagrant /home/vagrant/.ssh/authorized_keys
ユーザーのパスワードが必要な場合はつぎのようにする。
echo "PASSWORD" | passwd user_name --stdin
echo "vagrant" |passwd vagrant --stdin
Virtualbox additonal CD のインストール
ツールをインストールしないと、"varant up"したときにホストOSとの共有ディレクトリ/vagrantをマウントできない。また、ゲストOS起動時にエラーとなってしまう。
まず、ツールのCDイメージをマウントする。
[Dvice] -> [Instert Guest Additions CD images]
Additional toolsをインストールするためにはツールを再構築しなければいけない。
最小インストールの場合は、つぎのように追加でパッケージをインストールしておく。
yum -y install openssh-clients libedit kernel-devel gcc ppl libgomp cloog-ppl cpp mpfr glibc-headers glibc-devel kernel-headers perl perl-Pod-Simple perl-libs perl-version perl-Pod-Escapes perl-Module-Pluggable
mount -o loop /dev/sr0 /mnt
/mnt/VBoxLinuxAdditions.run --nox11
/etc/init.d/vboxadd setup
この時点で、光学ドライブは有効なままになっているが、今後使う予定がなければ無効にする。
MACアドレスの消去
MACアドレスの情報を消去する。
OS起動時に、記録されないようにする。
> /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
cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF
DEVICE=eth0
TYPE=Ethernet
BOOTPROTO=dhcp
ONBOOT=yes
NETBOOT=yes
IPV6INIT=yes
EOF
カスタマイズ
パッケージの追加や必要な設定を行う。
ログの消去
配布するBoxサイズを少しでも小さくするために、ログを消去する。
リモートからはできないので、Virtualboxのコンソールから操作。
init 1
find /var/log -type f -exec rm -f {} \;
rm -f /home/vagrant/.bash_history
rm -f /root/.bash_history
history -c
shutdown -h now
boxアーカイブの作成
作成したカスタムboxのアーカイブ
ここでは、centos6.boxという名でアーカイブを作成する。
cd ${HOME}/VirtualBox\ VMs/
vagrant package --base CentOS6 --output centos6.box
Boxの登録
vagrant box add test-centos6 centos6.box
作成したカスタムBoxのテスト
vagrant init test-centos6
vagrant up --provider=virtualbox
vagrant ssh
エラーがなければ終わり
Boxの公開&&アップロード
パブリックなWebサーバへアップロードすれば、hashicorpで公開できる。
Appendix
CentOSでVirtualboxのレポジトリを登録
sudo wget http://download.virtualbox.org/virtualbox/rpm/el/virtualbox.repo -P /etc/yum.repos.d/