CentOS 5.6のVagrant boxを自前で作成する
veeweeやpackerは使わずVirtualBoxとVagrantだけで作ってみます
参考:
http://docs-v1.vagrantup.com/v1/docs/base_boxes.html
環境:
VirtualBox 4.2.16
Vagrant 1.2.7
インストールディスクダウンロード
VirtualBox起動
- 新規で"CentOS56_32"を作成
- 種類:Linux,RedHat
- ビデオメモリ:8MB
- ストレージ:VMDK 32GB(可変)
- オーディオ:無効
- USB:無効
インストール
- CD/DVDで"CentOS-5.6-i386-bin-DVD.iso"を選択
- VM起動
あとは通常のインストールの流れ。
(最小構成にしたいため、packageはBase、Text-based Internetのみcustomize)
GuestOS設定
rootのパスワード変更
$ passwd
でvagrantに変更。
(インストール時にvagrantと設定しておくと不要)
vagrantユーザ作成
$ useradd vagrant
$ passwd vagrant
$ groupadd admin
$ usermod -G admin -a vagrant
Permission設定
$ /usr/sbin/visudo
追加
Defaults env_keep += "SSH_AUTH_SOCK"
vagrant ALL=(ALL) ALL
%admin ALL=(ALL) NOPASSWD:ALL
変更
"Defaults requiretty" -> "Defaults !requiretty"
VirtualBox Gest Additionsインストール
カーネルソースとヘッダを取得する。
古いバージョンはyumのリストに含まれていないので、直接ダウンロードして展開する。
$ cd /usr/src/kernels
$ wget http://vault.centos.org/5.6/os/i386/CentOS/kernel-devel-2.6.18-238.el5.i686.rpm
$ wget http://vault.centos.org/5.6/os/i386/CentOS/kernel-headers-2.6.18-238.el5.i386.rpm
$ rpm -ivh kernel-devel-2.6.18-238.el5.i686.rpm
$ rpm -ivh kernel-headers-2.6.18-238.el5.i386.rpm
$ rm kernel-devel-2.6.18-238.el5.i686.rpm
$ rm kernel-headers-2.6.18-238.el5.i386.rpm
$ export KERN_DIR=/usr/src/kernels/2.6.18-238.el5-i686
$ yum -y install gcc
$ mkdir /mnt/cdrom
$ mount -r /dev/cdrom /mnt/cdrom
$ cd /mnt/cdrom/
$ sh VBoxLinuxAdditions.run
$ VBoxControl --version
$ VBoxService --version
$ cd ~/
$ umount /mnt/cdrom
ssh設定
$ sudo su vagrant
$ cd ~/
$ mkdir .ssh
$ curl https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub > .ssh/authorized_keys
proxy認証ではねられるときは --insecureオプションをつける。
$ chmod 0755 .ssh
$ chmod 0644 .ssh/authorized_keys
不要なファイルを削除
$ du -sh *
で大きいファイルを探して不要なら削除していく。
例:
- /usr/share/locale/ の使わないもの
- /usr/share/i18n/locales/ の使わないもの
- /usr/src/kernel/2.6.18-238.el5.i68
- /var/cache/fontconfig
- /var/cache/man
- /var/cache/yum
yumで使った不要ファイル削除
$ yum install yum-utils
$ package-cleanup --dupes
$ package-cleanup --cleandupes
$ package-cleanup --oldkernels
$ package-cleanup --problems
$ yum clean all
GuestOSシャットダウン
vagrantパッケージを作るためGuestOSをシャットダウン。
vagrantのパッケージ作成
cmd.exe起動。
仮想環境を起動したいフォルダに移動。(例:vagrant_home\centos56)
> vagrant package --base "C:\Users\user\VirtualBox VMs\CentOS56_32\CentOS56_32.vbox" --output centos56.box
> vagrant init
> vagrant box add centos56 centos56.box
> vagrant up
MacではVM名に拡張子(vbox)をつけるとうまく出力されなかったので、vboxをつけずに実行
$ vagrant package --base /Users/user/VirtualBox\ VMs/CentOS56/CentOS56_32 --output centos56.box
※共有フォルダ/vagrantがマウントされない場合GuestOS側で次を実行。
$ mkdir /vagrant
$ mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` v-root /vagrant
もし
/sbin/mount.vboxsf: mounting failed with the error: Protocol error
となれば、VirtualBox側の共有フォルダ設定を削除してGuestOSを再起動させるとうまく設定された。
vmdk圧縮(必要なら実行)
不要ファイル削除。
$ du -sh *
で大きいファイルを探して不要なら削除していく。
localeの下の使っていない言語のものは削除。
GuestOS側で未使用領域を0埋め。(仮想HDDのMAXまで埋め尽くす)
$ dd if=/dev/zero of=zero bs=4k
$ rm zero
vmdk->vdi変換
> VBoxManage clonehd 変換前.vmdk 変換前.vdi --format vdi
圧縮
> VBoxManage.exe modifyhd 変換前.vdi compact
vdi->vmdk変換
> VBoxManage clonehd 変換前.vdi 変換後.vmdk --format vmdk
Chefインストール
SELinuxを無効化(要再起動)
$ sudo vi /etc/selinux/config
"SELINUX=enforcing" -> "SELINUX=disabled"
opensslインストール(Ruby2.0.0で必要)
$ sudo yum install openssl-devel
readlineインストール(Ruby2.0.0で必要)
$ sudo yum install readline-devel
zlibインストール(Ruby2.0.0で必要)
$ sudo yum install zlib-devel
RubyとRubyGemsをインストール
$ cd /usr/src
$ sudo wget http://cache.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p247.tar.gz
$ sudo tar zxvf ruby-2.0.0-p247.tar.gz
$ cd ruby-2.0.0-p247
$ sudo ./configure --disable-install-doc --disable-install-rdoc --disable-install-capi
$ sudo make
$ sudo make install
$ sudo make clean
$ ruby -v
$ cd ../
$ sudo rm -rf ruby-2.0.0-p247*
Chefインストール
$ sudo gem install chef --no-ri --no-rdoc
$ knife -v