あらすじ
CUI環境のUbuntu Serverで、VirtualBox+Vagrant+(Chef・Puppet)でテスト駆動をもうちょいやってみようかと思います。
Vagrantを弄る場合、VirtualBoxの操作はしなくてもいいので、当初予定していたWindows環境のVMwareからイメージだけUbuntu serverに移動させてBOX化する方法はVirtualboxに特化した話になっちゃうので、また改めて試してみようと思います。
環境作り
Vagrant initでVagrantfileのひな形を作成してVagrant upでサーバーを立ち上げたところからスタートします。
BOXはMinimalでインストールしたてのCentOSなので、ほぼ空の状態です。
便利だなぁと感じるのはBOXさえ作ってしまえば
vagrant ssh-config --host hoge >> ~/.ssh/config
で登録すると、いつでもテスト環境に入る事ができます。
Cenbという環境とCent_puppetという環境を作ってみました。
root@ubuntu:~# ssh cenb Last login: Tue Nov 11 20:48:17 2014 from 10.0.2.2 [vagrant@localhost ~]$ ls hoge.txt [vagrant@localhost ~]$ exit logout Connection to 127.0.0.1 closed. root@ubuntu:~# ssh cent_puppet Last login: Tue Nov 11 20:48:28 2014 from 10.0.2.2 [vagrant@localhost ~]$ ls hogehoge.txt [vagrant@localhost ~]$ exit logout Connection to 127.0.0.1 closed.
ちょっと分かりづらいかもですが、sshで繋ぎに行ってるのは同じサーバー内です。
こんな感じにテスト駆動しているサーバーがあって、仮にApacheの検証をしているとして、かなり簡単に複数のパターンを検証できたりしますし、なかなか面白そうです。
BOXを弄って、それをまたBOXにすることもできるようです。
たとえてみると、AさんルートとBさんルートのフラグの分岐点でセーブしてどっちも試すという事がサーバーでできるというと分かりやすいかもですね。
プログラムでもGitを使って似たような事をしますし、サーバーもコード化されるとそういった事ができるという事ですね。
番外編
真ん中に番外編というのもおかしな話ですが、真ん中に入れることに意味があると思ったので真ん中に載せてみます。
何かというと
たとえばApahceをソースからインストールした場合の検証を軽くサッと試したい BY Docker
ちょっと長いサブタイトルですが、そのまんまの意味です。
Apacheの検証をするのにサーバーを毎回立ててたり、スナップショットを利用して何度も繰り返せますが、いろいろと時間がかかるし色々とめんどくさすぎます。
そんな時にはやっぱり準仮想化と思いますが、Vagrantで今回色々やっていて、Vagrantでも可能な事はもちろん分かると思いますが、Dockerを使った場合どんな感じかをやってみます。
では(Dockerのインストールは終わっているとします。)
ベースのCentOS6のコンテナをDL&シェル起動。
# sudo docker run -i -t centos:centos6 /bin/bash Unable to find image 'centos:centos6' locally Pulling repository centos 70441cac1ed5: Download complete 511136ea3c5a: Download complete 5b12ef8fd570: Download complete
バージョンチェケラ。
[root@a73841901cea /]# cat /etc/redhat-release CentOS release 6.6 (Final)
最初のアプデ。
[root@a73841901cea /]# yum update Updated: curl.x86_64 0:7.19.7-40.el6_6.1 initscripts.x86_64 0:9.03.46-1.el6.centos.1 iproute.x86_64 0:2.6.32-33.el6_6 libcurl.x86_64 0:7.19.7-40.el6_6.1 openssl.x86_64 0:1.0.1e-30.el6_6.4 tzdata.noarch 0:2014i-1.el6 Complete!
必要なパッケージインストール。
[root@a73841901cea /]# yum install gcc make pcre pcre-devel wget tar Updated: curl.x86_64 0:7.19.7-40.el6_6.1 initscripts.x86_64 0:9.03.46-1.el6.centos.1 iproute.x86_64 0:2.6.32-33.el6_6 libcurl.x86_64 0:7.19.7-40.el6_6.1 openssl.x86_64 0:1.0.1e-30.el6_6.4 tzdata.noarch 0:2014i-1.el6 Complete!
httpd と apr (とりあえず)DL。
[root@a73841901cea src]# wget http://ftp.jaist.ac.jp/pub/apache/httpd/httpd-2.4.10.tar.gz [root@a73841901cea src]# http://ftp.jaist.ac.jp/pub/apache/apr/apr-1.5.1.tar.gz [root@a73841901cea src]# wget http://ftp.jaist.ac.jp/pub/apache/apr/apr-util-1.5.4.tar.gz
チェケラ(チェケラってなんだっけ)。
[root@a73841901cea src]# ls -l total 8520 -rw-r--r--. 1 root root 1020833 Apr 19 2014 apr-1.5.1.tar.gz -rw-r--r--. 1 root root 874044 Sep 20 12:59 apr-util-1.5.4.tar.gz -rw-r--r--. 1 root root 6820719 Jul 19 15:30 httpd-2.4.10.tar.gz
apr apr-util をインストール
Libraries have been installed in: /opt/apr/apr-1.5.1/lib
Libraries have been installed in: /opt/apr-util/apr-util-1.5.4/lib
apache インストール
[root@a73841901cea httpd-2.4.10]# ./configure --prefix=/opt/httpd/httpd-2.4.10 --with-apr=/opt/apr/apr-1.5.1 --with-apr-util=/opt/apr-util/apr-util-1.5.4
できたっちょ
Installing configuration files mkdir /opt/httpd/httpd-2.4.10/conf mkdir /opt/httpd/httpd-2.4.10/conf/extra mkdir /opt/httpd/httpd-2.4.10/conf/original mkdir /opt/httpd/httpd-2.4.10/conf/original/extra Installing HTML documents mkdir /opt/httpd/httpd-2.4.10/htdocs Installing error documents mkdir /opt/httpd/httpd-2.4.10/error Installing icons mkdir /opt/httpd/httpd-2.4.10/icons mkdir /opt/httpd/httpd-2.4.10/logs Installing CGIs mkdir /opt/httpd/httpd-2.4.10/cgi-bin Installing header files mkdir /opt/httpd/httpd-2.4.10/include Installing build system files mkdir /opt/httpd/httpd-2.4.10/build Installing man pages and online manual mkdir /opt/httpd/httpd-2.4.10/man mkdir /opt/httpd/httpd-2.4.10/man/man1 mkdir /opt/httpd/httpd-2.4.10/man/man8 mkdir /opt/httpd/httpd-2.4.10/manual make[1]: Leaving directory `/usr/local/src/httpd-2.4.10'
動かすYO。
[root@a73841901cea httpd-2.4.10]# /opt/httpd/httpd-2.4.10/bin/apachectl configtest AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.5. Set the 'ServerName' directive globally to suppress this message Syntax OK
[root@a73841901cea httpd-2.4.10]# /opt/httpd/httpd-2.4.10/bin/apachectl start AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.5. Set the 'ServerName' directive globally to suppress this message [root@a73841901cea httpd-2.4.10]# netstat -tln Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 :::80 :::* LISTEN
いったん出て、COMMIT。
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a73841901cea centos:centos6 "/bin/bash" 39 minutes ago Up 14 minutes cranky_leakey # docker commit a73841901cea apache/test$(date +%Y%m%d) ffb02dd544e7f28a8c138019e3c91372a6d07568f2baf799aca71a88284eb767
できたよー。
# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE apache/test20141112 latest ffb02dd544e7 37 seconds ago 447.1 MB
起動確認
# docker run -i -t -p 22 -p 80 apache/test20141112 /bin/bash [root@48be48a0be58 /]#
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 48be48a0be58 apache/test20141112:latest "/bin/bash" About a minute ago Up About a minute 0.0.0.0:49167->22/tcp, 0.0.0.0:49168->80/tcp high_kowalevski
takeken@ubuntu:~$ curl http://hogehoge.net:49168/ <html><body><h1>It works!</h1></body></html>
以上です。これで環境は整いました。
やっぱりさすがDocker。流行りまくっているというだけあって、あっという間です。
産まれて死ぬまであっちゅう間です。
こういうケースならDockerの方が数倍いいでしょう。それでもVagrant・Virtualhost・Chefな環境が欲しい場合は進むといいかなと思います。
Ruby
ChefはRuby、Puppetはオリジナル。LPICの問題集にはPuppetだったし、とりあえずPuppetを軽くやってたらいいかなぁなんて思っていたけれど、VagrantfileもRubyらしい。
どうにもRubyは避けれないようだ。避けたいというわけではないよw
サーバー関連っていうとPerlやシェルスクリプト、フロントエンドでPHPとかJqueryとか。
あんまりRubyを見る機会ってのはなかったなぁ。
せっかくだしやりますか。
前回やったサーバ/インフラ徹底攻略のお試しにもどる
まだやり残したことがある気がするので、自分で作ったBOXを使ってさらっとおさらいから進めていこうと思います。
VagrantでもApacheを入れたり、複数台のサーバーを立ち上げたりなどすることはできますが、まずはChefを書いていこうと思います。
ChefはVagrantからするとプロビジョンというものにあたり、先ほど書いたようにVagrantで複数台を立ち上げてプロビジョンで色々するとか、相乗効果ですごいことになるらしい。
まだ使いこなせていないので、すごいことと言ってもあまりピンと来ない。あくまでイメージ。
Chef
まずはVMにChefをインストールするとこから
[vagrant@localhost ~]$ curl -L https://www.opscode.com/chef/install.sh | sudo bash [vagrant@localhost ~]$ chef-solo -v Chef: 11.16.4
この辺でChefの検証もDockerでやってもいんじゃね?ってささやきが聞こえてくるけれど、聞こえない聞こえない。
では、次回こそChefをやるぞー!