vagrantで使えるboxを1から作る

vagrant、全く使えていないのだけど、流行ってるので。

でも、誰が作ったかわからないvagrantのboxを使うのがなんか嫌だったので。


環境はこれ。

Windows 7 64bit
VirtualBox 4.2.16
vagrant 1.1.4 (最新は1.2.7.)
DHCP環境あり


VirtualBoxで適当にVMを作る。スペックは何でもヨシ。


NATで使う場合、ポートフォワーディング設定して接続できるようにしておくと使い慣れたSSH端末から操作できて楽。

ホスト 指定なし
ホストPort 2222
ゲスト 指定なし
ゲストPort 22


OSは CentOS 6.4 Minimal x64_86 を入れます。
OSのセットアップ手順は省略。

rootでログインしたら、まずはネットワーク起動

ifup eth0


以降はSSH経由(localhost:2222)で作業できます。

eth0を自動的に起動するようにしておく

sed -i 's/ONBOOT=.*/ONBOOT="yes"/' /etc/sysconfig/network-scripts/ifcfg-eth0


yum updateと使いそうなパッケージを入れておく

yum -y update
yum -y install sudo


古いkernelの除去(yum list kernel とかで調べる)

yum remove kernel-2.6.32-358.el6


kernelの更新のため、再起動

reboot


vagrantユーザの作成

groupadd vagrant --gid 900
useradd vagrant -g vagrant --uid 900
echo "vagrant" | passwd --stdin vagrant


sudoersの書き換え。vagrantグループを特別扱いする

cat << __EOF__ >> /etc/sudoers
%vagrant ALL=(ALL) NOPASSWD: ALL
Defaults:%vagrant !requiretty
Defaults:%vagrant env_keep="SSH_AUTH_SOCK"
__EOF__


以降、vagrantで操作

su - vagrant


SSH鍵を登録しておく。決められた鍵があり、それで接続できるようになっている。

mkdir /home/vagrant/.ssh
chmod 0700 /home/vagrant/.ssh
curl -s https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub > /home/vagrant/.ssh/authorized_keys
chmod 0600 /home/vagrant/.ssh/authorized_keys


sshd_configの書き換え。(相変わらずこの辺りの設定を忘れる)

sudo cat << __EOF__ | sudo tee /etc/ssh/sshd_config
# SSH2のみ許容
Protocol 2

# ログレベル
SyslogFacility AUTHPRIV

# RSA鍵を使った認証を有効
RSAAuthentication yes
# 公開鍵認証を有効
PubkeyAuthentication yes
# 公開鍵ファイルの場所。(/home/[user]/.ssh/authorized_keys)
AuthorizedKeysFile     .ssh/authorized_keys

# 空パスワードは無効
PermitEmptyPasswords no
# パスワード認証は無効
PasswordAuthentication no
# パスワード認証を無効にするのに必要
ChallengeResponseAuthentication no

# GSSAPI
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes

# PAM認証も不要
UsePAM no

# デフォルトの設定をそのまま。
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS

X11Forwarding no
# ログイン時にお知らせ
PrintMotd no
# ログイン時に前回ログインしたときの日時を表示
PrintLastLog yes
# DNSを使い、IPからホスト名を求め(逆引き)、得たホスト名からIPを求め(正引き)られるか確認する。いらないので無効。
UseDNS no

# ログイン中に表示するバナー。ファイルの内容を出力するが、不要なのでnone.
Banner none

# デフォルトの設定をそのまま。
Subsystem       sftp    /usr/libexec/openssh/sftp-server

# 鍵接続できるようにするユーザとグループを制限
AllowGroups vagrant users
AllowUsers vagrant
__EOF__


SSHd再起動

sudo service sshd restart


VirtualBox Guest Additionsの導入。(これは無くてもよさそうな気もする)

VirtualBox 4.2.16だとOpenGL辺りでビルドが通らない問題は解消されてた。

sudo yum -y install make gcc perl kernel-devel
sudo mount /dev/cdrom /mnt
sudo sh /mnt/VBoxLinuxAdditions.run

umount /mnt

Installing the Window System drivers のところで失敗するが、気にしなくてよい。


終わったら再起動。

sudo reboot


デフォルトになかった特に要らないものは削除

sudo yum -y remove make gcc perl kernel-devel
sudo yum clean all


udevのMACアドレスとデバイス(eth0)を紐付けるファイルを削除し、作成できないようにする

sudo rm /etc/udev/rules.d/70-persistent-net.rules
sudo mkdir /etc/udev/rules.d/70-persistent-net.rules
sudo chmod 0600 /etc/udev/rules.d/70-persistent-net.rules


DHCPにより割り当てられたIPに関する情報を削除しておく

sudo rm /var/lib/dhclient/dhclient-eth0.leases


シャットダウン

sudo halt


vagrantを導入した端末に戻り、boxを作る。

vagrant package --base "CentOS6.4-minimal" --output "CentOS6.4-minimal-vagrant.box"


作ったboxを登録。適当にTestMachineで。

vagrant box add TestMachine CentOS6.4-minimal-vagrant.box


登録したboxを使い実行してみる

vagrant init TestMachine
vagrant up


うまくいくと、こんな感じにログが流れる。

Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'TestMachine'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use!
[default] Configuring and enabling network interfaces...
[default] Mounting shared folders...
[default] -- /vagrant


(SSHクライアントがあれば)これで接続できる。

vagrant ssh

puttyの場合は鍵をputtyで使える形式に変換して使う。


ssh-configがほしい場合はこっち。

vagrant ssh-config > ssh.config


あとはvagrantを外部に公開しないように注意しながらいじって遊ぶだけ?


タグを[vagrant]とか[virutalbox]とかちゃんと付けたいけども、これ1回で終わりそうだし、悩みもの・・・