epelリポジトリとrpmforgeリポジトリのインストール
epelリポジトリとrpmforgeリポジトリは、Movable Typeが動作するために必要なモジュールをインストールするためにインストールします。epelリポジトリは、perl-FCGIおよびperl-Crypt-DSAモジュールをインストールするために、rpmforgeリポジトリは、perl-XML-SAX-Expatおよびperl-Imagerモジュールをインストールするためにインストールします。
また、どちらのリポジトリも、サーバー運用時にyum updateコマンドでアップデートを行う際にbase(標準)リポジトリにある同名のパッケージを上書きしてしまわないよう、enabled=1をenabled=0に書き換えて無効化しておきます。これらのリポジトリからパッケージをインストールするときには、yumコマンドに「--enablerepo=リポジトリ名 ……」という引数を与えます。
今回の一撃シェルスクリプトでは、epelリポジトリを次のコードでインストールしています。yumコマンドから行えるため、特に変わったことはしていません。リポジトリ設定ファイルのバックアップをとった上で、sedコマンドで無効化の書き換えを行っています。
## epel Repository install
yum -y install epel-release
mkdir -p /etc/yum.repos.d/BACKUP/
cp -p /etc/yum.repos.d/epel.repo{,.orig}
mv /etc/yum.repos.d/epel.repo.orig /etc/yum.repos.d/BACKUP/
sed -i "s/enabled=1/enabled=0/g" /etc/yum.repos.d/epel.repo
rpmforgeリポジトリは、http://pkgs.repoforge.org/rpmforge-release/ から取得するのですが、少々工夫をしています。何をしているのかを理解するため、まずrpmforgeリポジトリ配布サイトのインデックスページを見てみます(画面1)。
このページでは、ファイルがDescription列でソートされています。Description列が「RHEL6 and CentOS-6 x86 64bit」と表示されているパッケージは3つあり、そのうち一番下にある「rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm」がCentOS 6向けrpmforgeリポジトリの最新パッケージです。
## rpmforge Repository install
FQDN=http://pkgs.repoforge.org
LISTPATH=/rpmforge-release/
LIST=${FQDN}${LISTPATH}
FILE=$(curl -s "${LIST}" | egrep '(RHEL6 and CentOS-6 x86 64bit)' | tail -n 1 | awk -F'[<>]' '{print $4}' | sed -e 's/a href=//;s/\"//g')
RPMFORGEURL=${FQDN}/${FILE}
rpm -i ${RPMFORGEURL}
cp -p /etc/yum.repos.d/rpmforge.repo{,.orig}
mv /etc/yum.repos.d/rpmforge.repo.orig /etc/yum.repos.d/BACKUP/
sed -i "s/enabled = 1/enabled = 0/g" /etc/yum.repos.d/rpmforge.repo
上記のコードで、rpm -iをechoに置き換えて出力を見てみると、rpmforgeリポジトリの最新パッケージをダウンロード先URLを取得できていることが分かります。
# FQDN=http://pkgs.repoforge.org
# LISTPATH=/rpmforge-release/
# LIST=${FQDN}${LISTPATH}
# FILE=$(curl -s "${LIST}" | egrep '(RHEL6 and CentOS-6 x86 64bit)' | tail -n 1 | awk -F'[<>]' '{print $4}' | sed -e 's/a href=//;s/\"//g')
# RPMFORGEURL=${FQDN}/${FILE}
# echo ${RPMFORGEURL}
http://pkgs.repoforge.org/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
FILE変数には、rpmforgeリポジトリの最新パッケージを取得するためのURLが代入されます。この行の右辺で行っている処理は次のとおりです。
-
curlコマンドで、rpmforgeリポジトリ配布サイトのインデックスページを取得する -
egrepコマンドで、Description列が「RHEL6 and CentOS-6 x86 64bit」である行を抜き出す -
tailコマンドで、最後の1行だけを抜き出す -
awkコマンドで、「<」と「>」を区切り文字にして4フィールド目(リンク先)を抜き出す -
sedコマンドで「a href=」と「"」を空文字に置換(つまり削除)する
この動作を確認するため、tailコマンドに渡す引数の数字を1から3に変え、さらに最終フィールド(Description列)も出力させてみましょう。
# curl -s "${LIST}" | egrep '(RHEL6 and CentOS-6 x86 64bit)' | tail -n 3 | awk -F'[<>]' '{print $4,$NF}' | sed -e 's/a href=//;s/\"//g'
rpmforge-release-0.5.2-1.el6.rf.x86_64.rpm 11-Nov-2010 07:30 11K RHEL6 and CentOS-6 x86 64bit
rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm 13-Nov-2010 05:12 12K RHEL6 and CentOS-6 x86 64bit
rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm 20-Mar-2013 16:59 12K RHEL6 and CentOS-6 x86 64bit
ご覧のように、pmforgeリポジトリの最新パッケージが最終行に表示されています。
このように記述しておくことにより、pmforgeリポジトリの最新パッケージがいつリリースされたとしても、インデックスページを頼りにそれをインストールできます。
perlモジュールとnginxのインストール
perlのモジュールは、次のようにyumの標準リポジトリとepel、rpmforgeリポジトリからインストールします。
## perl modules and nginx install yum -y install perl-DBI perl-DBD-MySQL perl-Archive-Zip perl-XML-SAX perl-XML-LibXML perl-XML-NamespaceSupport perl-Digest-SHA perl-GD gd libXpm perl-Crypt-SSLeay perl-Archive-Tar perl-IO-Zlib perl-Package-Constants ImageMagick-perl perl-Time-HiRes yum -y --enablerepo=epel install perl-FCGI perl-Crypt-DSA yum -y --enablerepo=rpmforge install perl-XML-SAX-Expat perl-Imager
nginxをインストールするには、まず開発元サイトからyumのリポジトリをインストールします。nginx本体にはstable版とmainline版があるのですが、(ものすごく端折った説明で申し訳ないのですが)新機能の取り込みとアップデート、バグフィクスの更新が行われることから、ここではmainline版をインストールすることにします(stable版は重要なバグフィクスのみ)。詳細はnginxのブログ をご覧ください。
mainline版nginxをインストールするため、/etc/yum.repos.d/nginx.repoを一部書き換えます。
yum -y install http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm cp -p /etc/yum.repos.d/nginx.repo /etc/yum.repos.d/nginx.repo.orig sed -i 's/centos/mainline\/centos/' /etc/yum.repos.d/nginx.repo
続いて、nginxをインストールし、/etc/nginx/nginx.confの中にあるworker_processesの値をデフォルトの1からautoに書き換えます。そして、/etc/nginx/conf.d/ディレクトリ以下にあるconfigファイルを読み込まないよう、/etc/nginx/conf.d/BACKUP/ディレクトリを作成して移動します。
yum -y install nginx
cp -p /etc/nginx/nginx.conf{,.orig}
sed -i "s/worker_processes[[:space:]]\+[0-9]\+/worker_processes auto/" /etc/nginx/nginx.conf
mkdir -p /etc/nginx/conf.d/BACKUP
mv /etc/nginx/conf.d/*.conf /etc/nginx/conf.d/BACKUP/
worker_processesの値は当初、「cat /proc/cpuinfo | grep processor | wc -l」の値でCPUコア数を検出した値に置換していたのですが、先日の一撃シェルスクリプト勉強会の参加者から「autoにもできますよ」と教えていただいたので、こちらに切り替えました。あらためて感謝申し上げます。
オンプレミスな環境で1つのマシンにCPU増設を行う機会は滅多にないと思われますが、クラウド環境では簡単にCPUコア数を増減できるので、worker_processesをautoにすることで、CPUコアが増減するたびにnginx.confを書き換える運用にしなくてもよくなるというメリットがあります。
nginx.confを書き換えた後は、バーチャルホスト設定を/etc/nginx/conf.d/000_MT.confにヒアドキュメントで書き込みます。
cat << _EOL_ | tee /etc/nginx/conf.d/000_MT.conf
server {
listen 80;
server_name ${HOSTNAME};
location / {
root /var/www/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ .pl$ {
gzip off;
root /var/www/html;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:8999;
fastcgi_index index.pl;
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
}
location ~ .cgi$ {
gzip off;
root /var/www/html;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:8999;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
}
}
_EOL_

