もうちょいコード化やりますか 中

あらすじ

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をやるぞー!

Similar Posts:


Leave a Reply

Your email address will not be published. Required fields are marked *