SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ツールがなくてもサーバー構築でたじろがない! 一撃シェルスクリプト道場

Nginx+PerlのCGI環境にMovable Typeをインストールする一撃シェルスクリプト

ツールがなくてもサーバー構築でだじろがない! 一撃シェルスクリプト道場 第2回

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード ICHIGEKI (6.9 KB)

epelリポジトリとrpmforgeリポジトリのインストール

 epelリポジトリとrpmforgeリポジトリは、Movable Typeが動作するために必要なモジュールをインストールするためにインストールします。epelリポジトリは、perl-FCGIおよびperl-Crypt-DSAモジュールをインストールするために、rpmforgeリポジトリは、perl-XML-SAX-Expatおよびperl-Imagerモジュールをインストールするためにインストールします。

 また、どちらのリポジトリも、サーバー運用時にyum updateコマンドでアップデートを行う際にbase(標準)リポジトリにある同名のパッケージを上書きしてしまわないよう、enabled=1enabled=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)。

画面1:rpmforgeリポジトリ配布サイトのインデックスページ
画面1:rpmforgeリポジトリ配布サイトのインデックスページ

 

 このページでは、ファイルが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 -iechoに置き換えて出力を見てみると、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が代入されます。この行の右辺で行っている処理は次のとおりです。

  1. curlコマンドで、rpmforgeリポジトリ配布サイトのインデックスページを取得する
  2. egrepコマンドで、Description列が「RHEL6 and CentOS-6 x86 64bit」である行を抜き出す
  3. tailコマンドで、最後の1行だけを抜き出す
  4. awkコマンドで、「<」と「>」を区切り文字にして4フィールド目(リンク先)を抜き出す
  5. 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の値を「auto」にするメリット

 worker_processesの値は当初、「cat /proc/cpuinfo | grep processor | wc -l」の値でCPUコア数を検出した値に置換していたのですが、先日の一撃シェルスクリプト勉強会の参加者から「autoにもできますよ」と教えていただいたので、こちらに切り替えました。あらためて感謝申し上げます。

 オンプレミスな環境で1つのマシンにCPU増設を行う機会は滅多にないと思われますが、クラウド環境では簡単にCPUコア数を増減できるので、worker_processesautoにすることで、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_

次のページ
perl-fastcgiのinitスクリプトの作成

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
ツールがなくてもサーバー構築でたじろがない! 一撃シェルスクリプト道場連載記事一覧

もっと読む

この記事の著者

濱田 康貴(ハマダ ヤスタカ)

サーバーエンジニアとして主にLinuxのWEBサーバーを設計、構築、運用を行っています。運用ツールの相棒としてシェルスクリプトやワンライナーは心強いパートナーと信じて疑わず、ブログでTIPSを公開しています。2009年5月のUSP友の会活動開始より参画し、現副会長。最近では、USP友の会で「一撃サーバー構築シェルスクリプト勉強会」を開催しているほか、日本で唯一のシェルスクリプト総合誌『シェルスクリプトマガジン』(毎月25日発売)で、隔月(偶数月号)連載「教えて先輩 サーバー運用お助けTips」を執筆しています。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8517 2015/04/15 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング