概要
前回の投稿の修正。
ヘッドレスのbox作成は失敗していたが、VirtualBoxのバージョンアップに伴い面倒な作業はなくなった。
以前はMacbook proで作っていたが、壊れてしまったのでUbuntuを用意し試した。一連の操作に差異がないことの確認ができた。
環境
Boxを作成するために使ったホストOSの環境。
$ lsb_release -d
Description: Ubuntu 14.04.4 LTS
$ uname -mrs
Linux 3.19.0-58-generic x86_64
$ VBoxManage --version
5.0.16r105871
元になるゲスト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の設定
パッケージの追加
アップデートしながら使っていこうとする場合、dkmsはあったほうがいい。
yum -y update
yum install epel-release
yum install dkms
vagrantユーザーを追加
ゲストOSにて以下を実行。
インストール時にユーザー"vagrant"を追加していない場合は追加する。
groupadd -g 1000 vagrant
useradd -u 1000 -g vagrant 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
AdditionalToolのインストール
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