VagrantでScientificLinux 6.5を使いたかったんだけど、
vagrantbox.esには明示的に6.5って書いてあるboxは無かった。
(Scientific Linux 6はあったけど)
なので、ScientificLinux 6.5 のvagrant用base boxをpackerで作成してみた。
成果物のtemplateはGitHub: ringohub/packer-template feature/scientifi-6.5にあります。
成果物のtemplateは[GitHub: packer-templates/develop]にあります(shiguredo/packer-templates developにマージされました。ありがとうございます)。
事前準備
-
Packer で Scientific Linux 6.1 の Box を作成してみるに書いてあるように、shiguredo/packer-templatesを
fork
する -
git clone
する - 適当に
centos-6.5
なんかをコピーしてscientific-6.5
を作成する
template.json
の編集
template.jsonにかかれている内容を変更します。
主に、osのイメージ名やDL元のURL,checksumのハッシュ値などを変更しました。
vmwareは使う予定ないけど、templateに入っていたのでついでに変更。
diff --git a/scientific-6.5/scripts/vagrant.sh b/scientific-6.5/scripts/vagrant.sh
index 76fb7bd..3b39389 100644
--- a/scientific-6.5/scripts/vagrant.sh
+++ b/scientific-6.5/scripts/vagrant.sh
@@ -1,3 +1,5 @@
+#!/bin/sh
+
date > /etc/vagrant_box_build_time
mkdir -pm 700 /home/vagrant/.ssh
diff --git a/scientific-6.5/template.json b/scientific-6.5/template.json
index 2ddbe77..e428542 100644
--- a/scientific-6.5/template.json
+++ b/scientific-6.5/template.json
@@ -28,10 +28,10 @@
"type": "vagrant",
"override": {
"virtualbox": {
- "output": "centos-6-5-x64-virtualbox.box"
+ "output": "scientific-6-5-x64-virtualbox.box"
},
"vmware": {
- "output": "centos-6-5-x64-vmware.box"
+ "output": "scientific-6-5-x64-vmware.box"
}
}
}
@@ -46,9 +46,9 @@
"disk_size": 40520,
"guest_os_type": "RedHat_64",
"http_directory": "http",
- "iso_checksum": "f21a71e8e31df73297bdd1ccd4a64a36831284bd",
+ "iso_checksum": "a95e182f6ed14a4fb36e448d6eb19a6a59a34778",
"iso_checksum_type": "sha1",
- "iso_url": "http://ftp.iij.ad.jp/pub/linux/centos/6.5/isos/x86_64/CentOS-6.5-x86_64-minimal.iso",
+ "iso_url": "http://ftp.riken.jp/Linux/scientific/6.5/x86_64/iso/SL-65-x86_64-2014-01-27-Install-DVD.iso",
"ssh_username": "vagrant",
"ssh_password": "vagrant",
"ssh_port": 22,
@@ -68,11 +68,11 @@
],
"boot_wait": "10s",
"disk_size": 40520,
- "guest_os_type": "centos-64",
+ "guest_os_type": "RedHat_64",
"http_directory": "http",
- "iso_checksum": "f21a71e8e31df73297bdd1ccd4a64a36831284bd",
+ "iso_checksum": "a95e182f6ed14a4fb36e448d6eb19a6a59a34778",
"iso_checksum_type": "sha1",
- "iso_url": "http://ftp.iij.ad.jp/pub/linux/centos/6.5/isos/x86_64/CentOS-6.5-x86_64-minimal.iso",
+ "iso_url": "http://ftp.riken.jp/Linux/scientific/6.5/x86_64/iso/SL-65-x86_64-2014-01-27-Install-DVD.iso",
"ssh_username": "vagrant",
"ssh_password": "vagrant",
"ssh_port": 22,
@@ -87,3 +87,4 @@
}
]
}
+
- ちなみに、
guest_os_type
の一覧はVBoxManage list ostypes
で一覧できます。 - イメージのおいてあるサーバはrikenにしました。
packerでbase boxをbuildする
packerでbase boxを作成します。
$ packer build -only=virtualbox-iso template.json
ビルドすると、ディレクトリにoutputで指定したscientific-6-5-x64-virtualbox.box
が作成されています。
vagrantで稼働確認
vagrant add
作成されたboxをaddしましょう。
$ vagrant box add sl6.5 scientific-6-5-x64-virtualbox.box
==> box: Adding box 'sl6.5' (v0) for provider:
box: Downloading: file:///Users/ringo/work/packer-templates/scientific-6.5/scientific-6-5-x64-virtualbox.box
==> box: Successfully added box 'sl6.5' (v0) for 'virtualbox'!
追加されたか確認。
$ vagrant box list
opscode-ubuntu-12.04 (virtualbox, 0)
sl6.5 (virtualbox, 0)
ubuntu14.04 (virtualbox, 0)
よしよし。
vagrnat init
適当なところでvagrant init
して、適当にVagrantfileを編集します。
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "sl6.5"
config.vm.network "private_network", ip: "192.168.33.10"
end
vagrant up
upしてみましょう。
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'sl6.5'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: sl_default_1401725308602_87916
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
default: Adapter 2: hostonly
==> 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!
GuestAdditions 4.3.10 running --- OK.
==> default: Checking for guest additions in VM...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
default: /vagrant => /Users/ringo/work/sl
いけた。
$ vagrant ssh
Last login: Tue Jun 3 00:56:37 2014 from 10.0.2.2
[vagrant@localhost ~]$ cat /etc/system-release
Scientific Linux release 6.5 (Carbon)
完成!
まとめ
packerを使って、OSのイメージからvagrant boxを作成してみました。
意外に、簡単にできるとおもいきや、下に書いてあるようなエラーでハマってたりしました。
boxは作れてupもできるんだけど、デフォルトでSSH鍵認証が出来ない状態でした。
とりあえず、作成できて良かったです。
ここから下は、興味がある人、同じ罠にはまってる人は御覧ください。
おわり。
エラー: vagrant upするとConnection timeoutする件
事象
「よしboxできた」と思ってvagrant up
をしてみると、Connection timeoutがでた。
なんか、この時点でSSHっぽい予感がしてた。
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'sl6.5'...
==> default: Matching MAC address for NAT networking...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
default: Adapter 2: hostonly
==> default: Forwarding ports...
1 # -*- mode: ruby -*-
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: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
Timed out while waiting for the machine to boot. This means that
Vagrant was unable to communicate with the guest machine within
the configured ("config.vm.boot_timeout" value) time period.
If you look above, you should be able to see the error(s) that
Vagrant had when attempting to connect to the machine. These errors
are usually good hints as to what may be wrong.
If you're using a custom box, make sure that networking is properly
working and you're able to connect to the machine. It is a common
problem that networking isn't setup properly in these boxes.
Verify that authentication configurations are also setup properly,
as well.
If the box appears to be booting properly, you may want to increase
the timeout ("config.vm.boot_timeout") value.
試しに、vagrant ssh
でログインしてみると、パスワードを聞かれた。
予定ではSSHの鍵認証が行われ、すっとログインできるはずだった。
とりあえず、パスワードでログインして、authorized_keys
の中を見てみると。。。
$ cat authorized_keys
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>
Bad Request
が入ってた(◞‸◟)
原因
コピーして持ってきたtemplateの中にscripts/vagrant.sh
というシェルスクリプトがある。
date > /etc/vagrant_box_build_time
mkdir -pm 700 /home/vagrant/.ssh
curl -L https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub -o /home/vagrant/.ssh/authorized_keys
chmod 0600 /home/vagrant/.ssh/authorized_keys
chown -R vagrant:vagrant /home/vagrant/.ssh
このファイルの中で、実行されているcurl
がBad RequestのHTMLをDLしていた。
しかし、このcurl
で叩いているURLは古く、ブラウザでアクセスすると、
https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub
にリダイレクトされる。
GitHubのrawリソースを示すURLが変わったとのこと。
ということで、次のように変更したら無事鍵が登録された。
diff --git a/scientific-6.5/scripts/vagrant.sh b/scientific-6.5/scripts/vagrant.sh
index 3b39389..658a8d6 100644
--- a/scientific-6.5/scripts/vagrant.sh
+++ b/scientific-6.5/scripts/vagrant.sh
@@ -3,6 +3,6 @@
date > /etc/vagrant_box_build_time
mkdir -pm 700 /home/vagrant/.ssh
-curl -L https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub -o /home/vagrant/.ssh/authorized_keys
+curl -L https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub -o /home/vagrant/.ssh/authorized_keys
chmod 0600 /home/vagrant/.ssh/authorized_keys
おまけ
Mac OSX 10.9 Mavericks でcurl
を実行した時と、
Scientific Linux 6.5 でcurl
を実行した時の結果を比較してみた。
OSXはBSD系のコマンドが入っているので、GNU系のScientific Linuxとは挙動が違うのかもしれない。
まず、OSX
$ curl --version
curl 7.30.0 (x86_64-apple-darwin13.0) libcurl/7.30.0 SecureTransport zlib/1.2.5
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate IPv6 Largefile NTLM NTLM_WB SSL libz
$ curl -I -L https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub
HTTP/1.1 301 Moved Permanently
Date: Mon, 02 Jun 2014 16:46:59 GMT
Server: Apache
Location: https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub
Accept-Ranges: bytes
Via: 1.1 varnish
Age: 0
X-Served-By: cache-ty66-TYO
X-Cache: MISS
X-Cache-Hits: 0
Vary: Accept-Encoding
HTTP/1.1 200 OK
Date: Mon, 02 Jun 2014 16:46:59 GMT
Server: Apache
Content-Security-Policy: default-src 'none'
Access-Control-Allow-Origin: https://render.githubusercontent.com
X-XSS-Protection: 1; mode=block
X-Frame-Options: deny
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
ETag: "18a9c00fd56d378c4cea4ee6e89018df8b41f9fa"
Content-Type: text/plain; charset=utf-8
Cache-Control: max-age=300
Content-Length: 409
Accept-Ranges: bytes
Via: 1.1 varnish
X-Served-By: cache-ty68-TYO
X-Cache: MISS
X-Cache-Hits: 0
Vary: Authorization,Accept-Encoding
Expires: Mon, 02 Jun 2014 16:51:59 GMT
Source-Age: 0
つぎに、Scientific Linux
[vagrant@localhost ~]$ curl --version
curl 7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
Protocols: tftp ftp telnet dict ldap ldaps http file https ftps scp sftp
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz
[vagrant@localhost ~]$ curl -I -L https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub
HTTP/1.1 301 Moved Permanently
Date: Mon, 02 Jun 2014 16:45:49 GMT
Server: Apache
Location: https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub
Accept-Ranges: bytes
Via: 1.1 varnish
Age: 0
X-Served-By: cache-ty68-TYO
X-Cache: MISS
X-Cache-Hits: 0
Vary: Accept-Encoding
HTTP/1.1 400 Bad Request
Date: Mon, 02 Jun 2014 16:45:54 GMT
Server: Apache
Connection: close
Content-Type: text/html; charset=iso-8859-1
どちらも-L
でリダイレクト先に飛んでいるが、なぜかSLの方はBadRequest。
ふーむ。
参考
- Packer で Scientific Linux 6.1 の Box を作成してみる
- PackerでVagrant Boxを作成する際のトラブルシューティング
- eigo's packer template(GitHubにあげてもらいました! 追記 at 2014/07/07)