Debian8のVagrantのboxを作りたい

そろそろ jessie(Debian8) の足音が聞こえたきたので Vagrant の box が欲しいなぁと思いました．ということで作りましょう．

  * [Creating a Base Box - VirtualBox Provider - Vagrant Documentation](https://docs.vagrantup.com/v2/virtualbox/boxes.html)
  * [Vagrant の VirtualBox 用 Base Box ファイルを手動で作ってみる | CUBE SUGAR STORAGE](http://momijiame.tumblr.com/post/77460699382/vagrant-virtualbox-base-box)
  * [Installing Debian Linux in a VirtualBox Virtual Machine | Open-Source Routing and Network Simulation](http://www.brianlinkletter.com/installing-debian-linux-in-a-virtualbox-virtual-machine/)
  * [holms/vagrant-jessie-box](https://github.com/holms/vagrant-jessie-box)

## VirtualBox準備

いい感じに jessie をインストールします．注意点を適当に箇条書きします．

  * [Debian -- Debian インストーラ](https://www.debian.org/devel/debian-installer/)
    * netinst CD イメージをダウンロードして使う
  * NAT でポートフォワーディングで 22 番ポートをどこかにフォワーディングしておくとあとですぐに ssh 出来て便利（デフォルトは10.0.2.15のIPを持つ）
  * USBとかオーディオとか必要ないので無効にした方が良さそう
  * ハードドライブはVDIで可変サイズで作る

## jessieをインストールする際の注意点

  * root のパスワードは vagrant
  * ここでユーザー vagrant パスワード vagrant でユーザーを作る
  * apt のミラーは日本のものを選択
  * SSH Server と Standard system utilities だけインストール

これでインストールが終わったら色々やることがあります．

## jessieインストール後の作業

  * [VirtualBox Guest Additions](http://www.virtualbox.org/manual/ch04.html)をインストールするために依存パッケージを幾つか入れる
    * `linux-headers-$(uname -r)` `build-essential`
  * vagrant ユーザーをパスワード無しで root になれるように
    * 色々あるが sudo グループに追加して `/etc/sudoers` を編集
  * `/etc/ssh/sshd_config` に `UseDNS no` を追加
  * 起動の度に GRUB のタイムアウトを待つのはつらいので GRUB の設定変更
  * vagrant 用の鍵を設定
  * apt で contrib non-free もインストールできるように
  * VirtualBox Guest Additions をインストールする

ハマったのは jessie から systemd が採用になった関係で VirtualBox Guest Additions は apt でインストールすると古いのが入ってうまく起動できませんでした．virtualboxの使用するバージョンを新しいものにして最新のものをインストールすれば大丈夫のようです．

ということで [catatsuy/vagrant_debian](https://github.com/catatsuy/vagrant_debian) を作りました．
今のスクリプトを貼っておきます．

```bash:jessie.sh
#!/bin/bash -xe

virtualbox_ver=4.3.20

apt-get -y install linux-headers-$(uname -r) build-essential
apt-get -y install zlib1g-dev libssl-dev libreadline-gplv2-dev
apt-get -y install sudo

usermod -a -G sudo vagrant
sed -e "s/^%sudo\tALL=(ALL:ALL) ALL/%sudo\tALL=(ALL) NOPASSWD:ALL/g" /etc/sudoers > /etc/sudoers.new
chown root:root /etc/sudoers.new
chmod 0440 /etc/sudoers.new
mv /etc/sudoers.new /etc/sudoers

echo 'UseDNS no' >> /etc/ssh/sshd_config

# Remove 5s grub timeout to speed up booting
cat <<EOF > /etc/default/grub
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
GRUB_DEFAULT=0
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX="debian-installer=en_US"
EOF

update-grub

mkdir -pm 700 /home/vagrant/.ssh
wget -O /home/vagrant/.ssh/authorized_keys \
  'https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub'
chmod 0600 /home/vagrant/.ssh/authorized_keys
chown -R vagrant:vagrant /home/vagrant/.ssh

apt-get -y install nfs-common

sed -e "/^[ \t]*deb[ \t-]/ s/[ \t]contrib//g" \
-e "/^[ \t]*deb[ \t-]/ s/[ \t]non-free//g" \
-e "/^[ \t]*deb[ \t-]/ s/[ \t]main/ main contrib non-free /g" \
"/etc/apt/sources.list" > "/etc/apt/sources.list.new"
mv /etc/apt/sources.list.new /etc/apt/sources.list

# Install the VirtualBox guest additions
wget http://download.virtualbox.org/virtualbox/${virtualbox_ver}/VBoxGuestAdditions_${virtualbox_ver}.iso
mkdir /media/VBoxGuestAdditions
mount -o loop,ro VBoxGuestAdditions_${virtualbox_ver}.iso /media/VBoxGuestAdditions
sh /media/VBoxGuestAdditions/VBoxLinuxAdditions.run
rm VBoxGuestAdditions_${virtualbox_ver}.iso
umount /media/VBoxGuestAdditions
rmdir /media/VBoxGuestAdditions

# Start the newly build driver
service vboxadd start

# delete the cache of apt
rm -rf /var/cache/apt/archives/*
rm -rf /var/lib/apt/lists/*
```

こうすると jessie の VM ができます．

## VirtualBoxのVMからpackage.boxを作る

    vagrant package --base jessie

最後の jessie は VirtualBox 上で付けた名前を付けます．

これで来る jessie 時代も恐くない！！