Debian wheezy(Debian 7.4)のVagrant Boxを作成する

基本的な手順はCreating a Base Box - Vagrant Documentationを参照。

Debuan wheezyのインストールイメージを取得

VirtualBoxVMを作成(Debianのインストール)

仮想マシン作成時のポイントとしては、

  • VM作成時の名前はなんでもOK。最終的なBox名とは関係がない(ここではdebian_wheezy_x64とした)
  • オーディオとUSBコントローラを無効化(Vagrant推奨)
  • メモリは512MBにする(Vagrant推奨)
  • 仮想ディスクはvmdkにする(これがVagrant界隈では普通っぽい)

となる。ただ、自分の好みの問題(どうせ後から増やすので)、メモリは1024MBとした。あと、仮想ディスクは、とりあえず可変32GBにしておいた。その他のVirtualBox上の設定は初期設定のまま。

次に、Debianインストール時の設定だが、

  • 日本語環境向けに色々選択
  • rootパスワードは vagrant にする
  • ログインアカウントに vagrant(パスワードは vagrant)を作成
  • 初期インストールパッケージは「標準システムユーティリティ」と「SSHサーバ」のみを選択

ぐらいしか気にするところはなかった。

VirtualBox NATを仮設定

Debianをインストールが完了した時点でSSH接続できる。初期セットアップ時の作業が楽になるので、暫定的にSSH接続できるようにVirtualBoxのNATを変更する。とりあえず、次のように設定した。

f:id:terurou:20140220151534p:plain

これで、localhost:10022にssh接続すると、VMの方に繋がるようになる。

GRUBの設定

VMを起動するたびにブートローダが表示されても邪魔くさいので、表示しないようにする。

/etc/default/grub を次のように設定する。

GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

設定ができたら、

$ update-grub

grub2 - How do I hide the GRUB menu showing up in the beginning of boot? - Ask Ubuntu

パッケージのアップデート

念のためアップデートする。netinst CDを利用しているので、たぶん更新はないはず。

$ apt-get update
$ apt-get upgrade

VirtualBox Guest Additionsのインストール

まずはVirtualBox側でGuest Additonsのインストールメディアをマウントする。

f:id:terurou:20140220163701p:plain

操作ができたら、次のコマンドを実行してインストール。

$ mount /media/cdrom
$ sh /media/cdrom/VBoxLinuxAdditions.run

IPv6無効化

Vagrant環境では使うことはないのでOFFにする。

/etc/sysctl.conf の末尾に次を追加。

net.ipv6.conf.all.disable_ipv6 = 1

設定を反映する。

$ sysctl -p

sudoの設定

Vagrantの設定要件として、パスワード無しのsudoを設定する必要がある。

まずはsudoのインストール。

$ apt-get install sudo

sudoをインストールしたら、vagrantユーザ用に設定を追加する。

$ visudo

で、エディタが開くので、末尾に以下を追加。

vagrant ALL=(ALL) NOPASSWD: ALL

SSHの設定

とりあえず、Vagrantのマニュアルでは、sshdの設定で「UseDNS no」にしておくべし(どうせローカルからしか繋がないので)と書いてあるので、それに従う。

/etc/ssh/sshd_configを開いて、次を末尾に追加する。

UseDNS no

普通にsshdを設定すると、ここで「PermitRootLogin no」を書きたくなるけど、他のイメージを確認したら、yesのままにしてあった。

続いてvagrantユーザ用にSSH公開鍵を設定する。

手順を簡略化するために、vagrantユーザで次のコマンドを実行する。

$ cd ~
$ mkdir .ssh
$ cd .ssh
$ wget http://github.com/mitchellh/vagrant/raw/master/keys/vagrant.pub
$ mv vagrant.pub authorized_keys
$ chmod 600 authorized_keys
$ chmod 700 .

あとはVagrant用の秘密鍵を使って接続できるか確認する。

MTAの停止(任意)

デフォルトでMTA(exim4)がインストールされて、自動でサービスが起動するようになってるっぽいので、気になる場合は止める。

$ update-rc.d -f exim4 remove

Puppet/Chefのインストール(任意)

必須ではないが、入れておいて損はない。

Puputをインストール。

$ apt-get -y install puppet puppetmaster

Chefをインストール。

$ apt-get -y install chef

インストール時にChef Clientの接続先の設定を聞かれるので、空欄のまま無視で良い。Chefのインストールが終わったら、Chef Clientのサービスを停止しておく。

$ /etc/init.d/chef-client stop
$ update-rc.d -f chef-client remove

追加で色々インストール(任意)

お好きな物入れてください。とりあえずVimとGitあたりは入れといた方が無難っぽいので入れた。あと、curlもよく使うので入れる。

$ apt-get -y install vim git curl

あと、私はWindowsで使う前提で、SharedFolderを使う時に問題がある(VirtualBoxのShared Folderが遅すぎるのでどうにかする(Windows向け) - terurouメモ)ので、sambaもインストールした。

コマンド履歴の削除(任意)

なんとなくコマンド履歴が残っているのが嫌なのでクリアする。

$ export HISTSIZE=0
$ rm .bash_history

Vagrant用のBoxを作成

ホスト側で次のコマンドを実行する。前述の手順で一時的に設定NATテーブルは、vagrantが自動的に消してくれるので、気にしなくてもよい。

まずはパッケージを作成する。vagrant packageコマンドのVM名は ~/VirtualBox VMs に存在するディレクトリ名を指す。

$ vagrant package --base debian_wheezy_x64

これでカレントディレクトリに package.box が作成される。ここから先は普通にVagrantを操作するのと変わらない。

$ vagrant box add my-box package.box
$ vagrant init my-box
$ vagrant up