初老のボケ防止日記

おっさんのひとりごとだから気にしないようにな。

スポンサーリンク

今更だけどVagrantでも使ってみるか(2)



前回までのあらすじ

Dockerを使ってみようと思っていたら、Dockerを使える仮想環境をVagrantで作ろうとしはじめたのだが、なぜか今度はPackerでboxを作り出すのであった。

今更だけどVagrantでも使ってみるか(1) - 初老のボケ防止日記


環境

既にVirtualBoxとVagrantは使ってる状態。

OS Windows 8.1(x64)
VirtualBox 4.3.20
Vagrant 1.6.5

因みに以降のコンソール操作はGitBashなのでコマンドプロンプトではないです。

Packerインストール

以下からWindows版(64bit)のzipをダウンロードして任意の場所に展開だけ。


Downloads - Packer by HashiCorp


パスは自分で通す

$ export PATH=$PATH:/c/App/packer0.7.2                        
$ packer --version                                            
Packer v0.7.2                                                 

はじめてのPacker

Packerを使うには、まずテンプレートを準備する必要があるらしいのだけど、ゼロから作るのは時間がかかりそうなのでテンプレートを探す。

We've moved · GitHub

Ubuntuのテンプレートをとってくる

$ git clone https://github.com/box-cutter/ubuntu-vm
$ ls ubuntu-vm/
AUTHORS       script                   ubuntu1404-desktop.json
CHANGELOG.md  test                     ubuntu1404-docker.json
LICENSE       tpl                      ubuntu1404-i386.json
Makefile      ubuntu1004-i386.json     ubuntu1404.json
README.md     ubuntu1004.json          ubuntu1410-docker.json
VERSION       ubuntu1204-desktop.json  ubuntu1410-i386.json
bin           ubuntu1204-docker.json   ubuntu1410.json
box           ubuntu1204-i386.json
http          ubuntu1204.json


READMEを読むと本来はmakeで起動させるらしいが、Windows(Git bash)にmake入れても動かないのでベタにやる

ローカライズしてみる

そのままでもいいんだけどせっかくなので日本向にpreseed.cfgをちょっと変更

$ git diff
diff --git a/http/preseed.cfg b/http/preseed.cfg
index 2f1beb0..d4c74aa 100644
--- a/http/preseed.cfg
+++ b/http/preseed.cfg
@@ -18,7 +18,19 @@
 # but you must provide a hostname as a boot parameter to prevent the Ubuntu
 # install from prompting for a hostname

-choose-mirror-bin mirror/http/proxy string
+#choose-mirror-bin mirror/http/proxy string
+d-i mirror/country string manual
+d-i mirror/http/hostname string ftp.jaist.ac.jp
+d-i mirror/http/directory string /pub/Linux/ubuntu
+d-i mirror/http/proxy string
+
+d-i debian-installer/language string ja
+d-i debian-installer/country string japan
+d-i debian-installer/locale string ja_JP.UTF-8
+d-i localechooser/supported-locales ja_JP.UTF-8
+d-i console-setup/ask_detect boolean true
+d-i console-setup/layoutcode string jp
+d-i console-setup/charmap select UTF-8
 d-i base-installer/kernel/override-image string linux-server
 d-i clock-setup/utc boolean true
 d-i clock-setup/utc-auto boolean true
@@ -51,7 +63,9 @@ d-i pkgsel/install-language-support boolean false
 # "unattended-upgrades" (install security updates automatically), or
 # "landscape" (manage system with Landscape).
 d-i pkgsel/update-policy select none
-d-i pkgsel/upgrade select full-upgrade
+#d-i pkgsel/upgrade select full-upgrade
+d-i pkgsel/upgrade select none
 #d-i time/zone string UTC
-d-i time/zone string US/Pacific
+#d-i time/zone string US/Pacific
+d-i time/zone string Japan
 tasksel tasksel/first multiselect standard, ubuntu-server

boxを作る

makeが使えないのでupdate=trueを指定して実行(updateを有効化)
前回までは12.04の予定だったけど、後々のことを考えて14.04を使ってみる

$ packer build -var 'update=true' -only=virtualbox-iso ubuntu1404-docker.json

==> virtualbox-iso: Downloading or copying Guest additions
    virtualbox-iso: Downloading or copying: file:///C:/App/VirtualBox/VBoxGuestAdditions.iso

==> virtualbox-iso: Downloading or copying ISO
    virtualbox-iso: Downloading or copying: http://releases.ubuntu.com/14.04/ubuntu-14.04.1-server-amd64.iso
==> virtualbox-iso: Starting HTTP server on port 8304
==> virtualbox-iso: Creating virtual machine...
==> virtualbox-iso: Creating hard drive...
==> virtualbox-iso: Creating forwarded port mapping for SSH (host port 4230)
==> virtualbox-iso: Executing custom VBoxManage commands...
    virtualbox-iso: Executing: modifyvm ubuntu1404-docker --memory 512
    virtualbox-iso: Executing: modifyvm ubuntu1404-docker --cpus 1
==> virtualbox-iso: Starting the virtual machine...
==> virtualbox-iso: Waiting 10s for boot...
==> virtualbox-iso: Typing the boot command...
==> virtualbox-iso: Waiting for SSH to become available...
==> virtualbox-iso: Connected to SSH!
==> virtualbox-iso: Uploading VirtualBox version info (4.3.20)
==> virtualbox-iso: Uploading VirtualBox guest additions ISO...
==> virtualbox-iso: Provisioning with shell script: script/update.sh
(snip)
==> virtualbox-iso: Provisioning with shell script: script/vagrant.sh
    virtualbox-iso: [sudo] password for vagrant: ==> Giving vagrant sudo powers
    virtualbox-iso: ==> Installing vagrant key
==> virtualbox-iso: Provisioning with shell script: script/sshd.sh
==> virtualbox-iso: Provisioning with shell script: script/vmtool.sh
    virtualbox-iso: ==> Installing VirtualBox guest additions
(snip)
==> virtualbox-iso: Provisioning with shell script: script/cmtool.sh
    virtualbox-iso: ==> Building box without baking in a configuration management tool
==> virtualbox-iso: Provisioning with shell script: script/docker.sh
==> virtualbox-iso: Provisioning with shell script: script/cleanup.sh
(snip)
==> virtualbox-iso: Gracefully halting virtual machine...
==> virtualbox-iso: Preparing to export machine...
==> virtualbox-iso: Exporting virtual machine...
==> virtualbox-iso: Unregistering and deleting virtual machine...
==> virtualbox-iso: Running post-processor: vagrant
==> virtualbox-iso (vagrant): Creating Vagrant box for 'virtualbox' provider
Build 'virtualbox-iso' finished.

==> Builds finished. The artifacts of successful builds are:
--> virtualbox-iso: 'virtualbox' provider box: box/virtualbox/ubuntu1404-docker-nocm-0.1.0.box

boxを追加する

$ vagrant box add ubuntu1404docker box/virtualbox/ubuntu1404-docker-nocm-0.1.0.box
==> box: Adding box 'ubuntu1404docker' (v0) for provider:
    box: Downloading: file://c:/AppData/Packer/ubuntu-vm/box/virtualbox/ubuntu1404-docker-nocm-0.1.0.box
    box: Progress: 100% (Rate: 644M/s, Estimated time remaining: --:--:--)
==> box: Successfully added box 'ubuntu1404docker' (v0) for 'virtualbox'!

$ vagrant box list
ubuntu1404docker (virtualbox, 0)

起動してみる

$ cd ..
$ mkdir test
$ cd test
$ vagrant init ubuntu1404docker
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu1404docker'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: test_default_1417752993979_95007
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
    default: /vagrant => C:/AppData/Packer/test

ssh接続してみる

日本向けの設定が有効なのかとDockerの確認

$ vagrant ssh
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-40-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
Last login: Fri Dec  5 13:18:14 2014 from 10.0.2.2
vagrant@ubuntu1404-docker:~$ echo $LANG
ja_JP.UTF-8
vagrant@ubuntu1404-docker:~$ cat /etc/timezone
Asia/Tokyo
vagrant@ubuntu1404-docker:~$ docker info
Containers: 0
Images: 0
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Dirs: 0
Execution Driver: native-0.2
Kernel Version: 3.13.0-40-generic
Operating System: Ubuntu 14.04.1 LTS
vagrant@ubuntu1404-docker:~$

ブリッジインタフェースを追加したいんだけど、VagrantfileのカスタマイズはPackerではできない?


感想

一度実行して体験するとわかるんだけど、ようはVirtualBoxを指定イメージで起動して
設定に従って自動でOSインストールして初期化処理を実行してるだけ。
設定ファイルは、jsonなので構造的にはわかりやすい。一番面倒くさかったのはDebianインストーラ向けの設定(preseed.cfg)。そこで無理しないでスクリプトでヤってしまうのもアリでは。
というか、そもそも構成が固まったら何度もbox作り直ししないと思うので
VirtualBoxでスナップショット使いながらあれこれ試行錯誤して好みの環境作ってboxとしてインポートすればいいじゃんという気がしないでもないけど、設定だけとっておけばいつでも作れるしDockerでも使うのだろうからPacker万歳。

次回予告

ようやくDockerを実行できる環境になったんだのでいよいよDockerとやらを使ってみようじゃないの。

今更だけどVagrantでも使ってみるか(3) - 初老のボケ防止日記

スポンサーリンク