概要
Virutalbox でカスタムBoxを作る手順。boxは、yum update しつつ運用していこうと考えている。
先日、CentOS6を作った。けど、本格的に7を使っていきたいと考えているため、新たに手順をまとめた。
環境
Boxを作成するために使ったホストOSの環境。ホストOSはOSX。一連の操作は、Linuxでもおそらく同じ。
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.10.5
BuildVersion: 14F1509
$ uname -mrs
Darwin 14.5.0 x86_64
$ VBoxManage --version
5.0.10r104061
元になるゲストOSをインストール
Virutalbox上でゲストOSをインストールする。新規で作成し、名前を"CentOS7"とした。
カスタムBoxを作るのが目的なので基本的には好きにしていい。ただし、BoxはゲーストOSをアーカイブしてダウンロードすることになるため、最小パッケージがおすすめ。Hashicorpへの公開を前提とすればインターネットを介してダウンロードすることになるので、OSのサイズは小さい方がいい。
インストールが終わったらゲストOSをshutdownするが、その前に必要なパッケージの追加や設定を行ってもいい。
Virtualboxの設定
以下のようにした。
変更する項目 | 変更後の値 |
---|---|
メインメモリー | 512MB |
フロッピー | 無効 |
アクセラレーション | Legacy |
オーディオ | 無効 |
USBコントローラー | 無効 |
その他は初期値のまま。
作業中のネットワーク設定
SSHでログインしながら以降の操作をやるために、VirutalboxでNetwowkアダプター1の設定を "NAT" から "ブリッジ" に変更する。これをやらないと、ゲストOSから外側のネットワークへはアクセスすることはできても、逆はできない。つまり、ホストOSからゲストOSにSSHでログインすることができないので作業がやりずらくなる。
ゲストOSの設定
vagrantユーザーを追加
ゲストOSにて以下を実行。
インストール時にユーザー"vagrant"を追加していない場合は追加する。
useradd vagrant
また、ユーザーのパスワードが必要な場合はつぎのようにする。
echo "PASSWORD" | passwd user_name --stdin
echo "vagrant" |passwd vagrant --stdin
sudoers の設定
sed -i -e s/^Defaults\ \ \ \ requiretty/#Defaults\ \ \ \ requiretty/g /etc/sudoers
test -f /etc/sudoers.d/vagrant || echo "%vagrant ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/vagrant
ユーザー vagrant のSSH公開鍵を追加する
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
Virtualbox additonal CD のインストール
ツールをインストールしないと、"varant up"したときにホストOSとの共有ディレクトリ/vagrantをマウントできない。また、ゲストOS起動時にエラーとなってしまう。
まず、ツールのCDイメージをマウントする。
[Dvice] -> [Instert Guest Additions CD images]
Additional toolsをインストールするためにはツールを再構築しなければいけない。
最小インストールの場合は、つぎのように追加でパッケージをインストールしておく。
yum -y install openssh-clients bzip2 kernel-devel gcc
epel-を有効にして、dkmsをインストールしたほうがいいかもしれない。
yum -y install epel-release
yum -y install dkms
AdditionalToolのインストール
mount -o loop /dev/sr0 /mnt
/mnt/VBoxLinuxAdditions.run --nox11
このまま実行すると、次のようなエラーで止まってしまう。
/.tmp_vboxvideo_drm.o /tmp/vbox.0/vboxvideo_drm.c
/tmp/vbox.0/vboxvideo_drm.c:96:17: error: ‘drm_mmap’ undeclared here (not in a function)
.mmap = drm_mmap,^M
^
make[2]: *** [/tmp/vbox.0/vboxvideo_drm.o] Error 1
make[1]: *** [_module_/tmp/vbox.0] Error 2
make: *** [vboxvideo] Error 2
Creating user for the Guest Additions.
Creating udev rule for the Guest Additions kernel module.
とりあえず、以下を参考に修正してみた。
http://qiita.com/IK12_info/items/edaf2bfa334c67f9de72
https://www.virtualbox.org/ticket/11586
# diff /opt/VBoxGuestAdditions-5.0.10/src/vboxguest-5.0.10/vboxvideo/vboxvideo_drm.c vboxvideo_drm.c
96c96
< //.mmap = drm_mmap,
---
> .mmap = drm_mmap,
125c125
< //.mmap = drm_mmap,
---
> .mmap = drm_mmap,
改めて実行し、再起動。
mount -o loop /dev/sr0 /mnt
/mnt/VBoxLinuxAdditions.run --nox11
この時点で、光学ドライブは有効なままになっているが、今後使う予定がなければ無効にする。
MACアドレスの消去
CentOS7では必要ないはず。
好みがあれば修正する。
cat > /etc/sysconfig/network-scripts/ifcfg-enp0s3 << 'EOF'
・・・
(略)
・・・
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アーカイブの作成
ここでは、centos7.boxという名でアーカイブを作成する。
cd ${HOME}/VirtualBox\ VMs/
vagrant package --base CentOS7 --output centos7.box
テスト
Boxの登録
vagrant box add test-centos7 centos7.box
作成したカスタムBoxのテスト
mkdir test-dir && cd test-dir
vagrant init test-centos7
vagrant up --provider=virtualbox
vagrant ssh
エラーがなければ終わり。
必要な確認はそれぞれだけど、Additional Toolが正常インストールされていれば、/vagrant がマウントされているはず。
df /vagrant
Boxの公開&&アップロード
パブリックなWebサーバへアップロードすれば、hashicorpで公開できる。
BoxをWebsサーバーへアップロード
認証なしで参照可能なWebサーバーへファイルをアップロード。
scp centos-7_0.0.0.box <yourserver>:/home/saitou/public/.
テスト その2
しつこいけど、もう一回テスト。
もし、Vagrantを使っているPCが2台以上あるなら、ファイルをアップロードしたあとでもう一度テストしておくのがいい。
vagrant box add --name yourid/centos7 http://<yourserver>/~saitou/centos-7_0.0.0.box
mkdir testdir && cd testdir
vagrant init yourid/centos7
vagrant up
vagrant ssh
Hashicorp への公開
デザインがマメに変わるので、Web検索で出てくるスクリーンショットは最新ではない可能性が高い。”場所”で覚えず、何を選択していけばいいのかをよく覚えておくほうがいいでしょう。(次の手順は、2016年1月12日に確認した方法になる。)
ログイン
アカウントがない場合 "Sign up"
アカウントがある場合 "Sign in"
Boxのアップロード
どの項目を選択するか毎回迷う。
"Create VagrantBox with the WebUI" を選択。
Boxの名前をつける
"name" へ任意の名前を入力し、 ___"Create box"___を選択。
Description
いづれも後から変更することができる。
"New Box Version" : 習慣として、 0.0.0 のようにつける。
"Description" : わかりやすい内容を入力。
入力後、 "Create Version" を選択。
この段階ではまだ公開にはなっていない。
Providerの設定
Provider は、仮想マシンを指している。ここでは、 virtualbox を設定する。
また、URLにはBoxをアップロードしたWebサーバへのアドレスを入力する。
http://<yourserver>/~saitou/vagrant/box/virtualbox/centos-7_0.0.0.box
"Create provider" を選択。
この段階でもまだ公開にはなっていない。
公開
この時点では、次のメッセージが表示されているかと思う。
This version was created 12 minutes ago. This version is unreleased.
unreleased がリンクになっているのでクリック。または、 "Edit" を選択。
次画面で "Released version" を選択。
公開にステータスが変わったはず。
テスト その3
しついけど、またテスト。
確認を兼ねている。
vagrant box add yourid/centos7
mkdir testdir && cd testdir
vagrant init yourid/centos7
vagrant up
見慣れた実行形式になっているでしょう!
ここまででエラー等なければ終わり。
まとめ
今回、テストを何回もやっているのだけれど、手戻りしないために必要なことなので面倒がらずにやっていただきたい。
Appendix
https://hashicorp.com/
http://qiita.com/IK12_info/items/edaf2bfa334c67f9de72
https://www.virtualbox.org/ticket/11586