サーバーを弄っていると検証環境が欲しいなぁという状況が何かと出てきます。
コンテナだとものっすごく手軽に作れて楽だけれど、もっとちゃんとしたというか、もうちっと実機に近い環境がいいなぁって時にはやっぱりVagrantとVboxは手軽だ!とこないだDockerを弄ってて思ったってーか気づいた。
・1つのBoxで複数台のゲストが作れる。
・複数台で作ったゲストを同じセグメントにして通信もできる。
・IPアドレスを指定もできる。
などなど、コンテナに比べるとゲストOSとして出来上がるまでの時間はかかってしまうけれど、Dockerではやりにくい事でも簡単にできるのだからこれはイイ。
イイと言いますか、書籍ではそもそもVagrantとChefだったし、情報も多いし。
需要が多いのだろうから当然っちゃあ当然な事なことだ。
この日記のVagrant関連の記事がぜんぜん検索結果に乗っかってこないのは、ユーザーも多いんだろう。
悲しいけど現実なのよね。
ではでは。
今回は自分の過去日記とGithubも何枚みたか分からないくらい見た中で色々組み合わせて組み立てていきました。BOXはインターネットに色々あるのでそれを使えば済むのですがやっぱり自分で作りたい!という気持ちがあるのですが、ググって組み合わせたものなので、自分で作ったというにはならないですがね。うーぬ、悔しいな。
参考サイト
box-cutter GITHUB
https://github.com/box-cutter
もうちょいコード化やりますか 3杯目 Packer~Chef | たけけんのサーバー勉強日記:
http://www.vincentina.net/?p=4731
Packerを使ってゲストOSを作成するのに必要なファイルはjsonファイルとks.cfgの2個だけど、vboxmanageのインストールが必要なのでprovisoner.shを足した3個。
今回欲しかったOSはCentOS5で、vboxmanageとChefのインストールまで成功できたのは過去に作ったものや今回作ったものやググったものを組み合わせたものです。
CentOS6と違ってなかなかうまくいかなかったです。
1回のビルドで時間がかかってしまうので、何が必要で必要でないかの取捨選択が難しく、もともとあったもののコピペの部分も多々あります。
[takeken@ubuntu]$ cat cent.json { "builders" :[{ "type" : "virtualbox-iso" , "headless" : true , "vm_name" : "centmini5_b" , "boot_wait" : "30s" , "disk_size" : "20000" , "guest_os_type" : "RedHat_64" , "iso_checksum_type" : "sha1" , "iso_checksum" : "ebd77f2fdfac8da04f31c508905cf52aa62937cc" , "iso_url" : "http://ftp.riken.jp/Linux/centos/5/isos/x86_64/CentOS-5.11-x86_64-bin-DVD-1of2.iso" , "ssh_password" : "vagrant" , "ssh_port" : 22, "ssh_username" : "vagrant" , "ssh_wait_timeout" : "3000s" , "guest_additions_path" : "VBoxGuestAdditions_{{.Version}}.iso" , "virtualbox_version_file" : ".vbox_version" , "vboxmanage" : [ [ "modifyvm" , "{{.Name}}" , "--memory" , "1024" ], [ "modifyvm" , "{{.Name}}" , "--cpus" , "1" ] ], "http_directory" : "./" , "boot_command" : [ "<tab> text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/ks.cfg<enter><wait>" ], "shutdown_command" : "echo 'vagrant'|sudo -S /sbin/halt -h -p" }], "provisioners" : [{ "type" : "shell" , "scripts" : [ "./provisioner.sh" ] }], "post-processors" : [{ "type" : "vagrant" , "output" : "box/centos5_b.box" }] } |
KSファイルは色々試して、VMwareでCentOS5を最小インストールしたものがベースですが、パッケージについてはGithub Boxcutterで選んでいるものです。
[takeken@ubuntu]$ cat ks.cfg # Kickstart file automatically generated by anaconda. install cdrom lang ja_JP.UTF-8 keyboard jp106 network --device eth0 --bootproto dhcp rootpw --iscrypted $1$B5biRIOK$BzKEW72fnx50Rjo2AlEZq/ firewall --enabled --port=22:tcp authconfig --enableshadow --enablemd5 selinux --disabled timezone Asia /Tokyo bootloader --location=mbr text skipx zerombr clearpart --all --initlabel autopart auth --useshadow --enablemd5 firstboot --disabled reboot %packages --ignoremissing @Base @Core @Development Tools kernel-devel nfs-utils openssl-devel readline-devel zlib-devel -avahi -bluez-utils -dogtail -kudzu %post # update root certs wget -O /etc/pki/tls/certs/ca-bundle .crt http: //curl .haxx.se /ca/cacert .pem # vagrant groupadd vagrant -g 999 useradd vagrant -g vagrant -G wheel -u 900 echo "vagrant" | passwd --stdin vagrant # sudo echo "vagrant ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers sed -i "s/^.*requiretty/#Defaults requiretty/" /etc/sudoers |
Provisioner.shはメインはVboxmanageのインストールです。ほかは大体でいいと思いますが、Chefのインストールも入れときました。
[takeken@ubuntu]$ cat provisioner.sh #!/bin/sh ## base install sudo yum -y update sudo yum -y upgrade sudo rpm -i http: //ftp .jaist.ac.jp /pub/Linux/Fedora/epel/5/x86_64/epel-release-5-4 .noarch.rpm sudo yum -y install gcc make kernel-devel-` uname -r` zlib-devel openssl-devel readline-devel perl wget sudo yum -y install curl bind-utils git jman ntp openssh-clients rsync sysstat vim dkms sudo sed -i "s/#UseDNS yes/UseDNS no/" /etc/ssh/sshd_config ## vboxguest install VBOX_VERSION=$( cat /home/vagrant/ .vbox_version) sudo cd /tmp sudo mount -o loop /home/vagrant/VBoxGuestAdditions_ $VBOX_VERSION.iso /mnt sudo sh /mnt/VBoxLinuxAdditions .run --nox11 sudo rm -rf /home/vagrant/VBoxGuestAdditions_ *.iso echo "Vboxguest conplete!" ## user create mkdir -pm 700 /home/vagrant/ . ssh wget --no-check-certificate 'https://raw.githubusercontent.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 echo "Usercreate conplete!" curl -L https: //www .opscode.com /chef/install .sh | sudo bash |
とまあ、若干恥ずかしいですがこんな感じです。
全然関係ない話ですが、Wordpressの記事を書く画面がワンカラムに対応したようで、モニターの右半分が有効に使えるようになりました。
ビルドに時間がかかるケースは検証するのもやたらと時間がかかるので(カーネルのビルドの比ではないですが、と言ってもコードにミスがあって返ってきていない状態が実は永遠続いてたって事もありますが)何か見ながらじゃないと大変なので、横のスペースで色々見ながら作業ができて良いですね。
カーネルを弄ってる仕事の人はそれはそれは大変なのかなぁと思います。
でも読んで分かる人たちなら、試行錯誤しながら何回も何回もビルドするって事も少なそうですね。
余談が随分と多くなってしまいましたが、日記なのでヨシとしようじゃないか。
ゲストOS作成までの道のりですが、まずはボックスを作成します。出来上がったらひな形を作成しますってパターンは最近の王道なのかね。するとVagrantファイルが出来上がるのでBox名を編集と必要ならネットワーク関連も記述します。
packer build -only=virtualbox-iso centos5.json vagrant init vim Vagrant vagrant up vagrant ssh |
など。
何個も動かしているときは以下のコマンドでrunning中のゲストを確認できます。
vagrant global-status |
最近はDocker便利だなぁと嵌っていたけれど、色々やっているうちにコンテナではちょっと足りない事が出てきたので、そこからVagrantに移行した感じですが、それだと結局Vagrant+Chefになるのだね・・、そう参考書籍のままになったのです。
にゃははは
自画自賛だけれど、Chef-solo+Dockerもわりといいコンテンツが出来たと思ったのだけれどSEOなのか検索結果が上位に全く上がらず。上がらないとアクセスも来ないのだよ。
あれはよく分からん。
そうかと思えばついでにDockerのような記事がアクセスがあったりするんだよね。
ではの。