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_