14
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Vagrant カスタムboxの作成(CentOS7 + Virtualbox5.0)

Last updated at Posted at 2016-01-12

概要

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

14
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?