Apacheの脆弱性(CVE-2011-3192)が見つかってから、ついに新しいバージョンが公開されました。
Apache 2.2.20 です!
そこで、tarボール(.tar.gz)を持ってきてrpmbuildを用いてrpmパッケージを作ろうかと思ったんですが、現在利用しているapr,apr-util,apr-util-develのバージョンが対応しておらず一瞬諦めかけました。
個別に持ってきて、「はいはい」ってやろうと思ったのですが、
現在常駐しているApacheを止める必要性がでてきたので
今回は無理やり2.2.20にしてみた。
責任は取りません、自分のサーバーなので。
この方法で問題があるよね~ ってお気づきの方、是非コメントください!
なお、検証環境としてServersMan@VPSのCentOS5.6のVPSサーバーにて作業を行なっております。
このサーバー自体は私の過去の作業によりhttpd-2.2.17-jason.1.i386で動いていたのですが、httpd-2.2.17からhttpd-2.2.20へアップデートを行なっております。
以下の内容は環境により値が異なってきますので注意お願いします。
現在利用されているApacheが利用できなくなってしまった、今まで○○できたのに・・・などのご質問に関しては極力お答えいたしますが、最悪サーバーのroot権限を貸していただかないと解決にいたらない場合がありますので、これより下の内容は完全自己責任でお願い致します。
下準備
必要なプログラムのインストール/アップグレードを行います。
インストール済みで且つアップデートが可能な場合は自動でアップデートされます。
# 「yum」コマンドを用いてインストール # yum -y install apr apr-util apr-util-devel rpm-build pcre-devel openssl-devel libtool distcache-devel
1. Apacheのページからtar.gzをダウンロード
ダウンロードしたファイルは今後削除するので、/tmp/配下に新しくディレクトリを作り作業をします。というのは私のルールです。
# mkdir /tmp/httpd/ ←ディレクトリ「/tmp/httpd/」の作成 # cd /tmp/httpd/ ←ディレクトリの移動 # wget http://www.meisei-u.ac.jp/mirror/apache/dist/httpd/httpd-2.2.20.tar.gz ←ファイルのダウンロード
上記以外からダウンロードをお望みの場合はApacheのページから探してください。
2. tar.gzを展開
# tar zxf httpd-2.2.20.tar.gz ←「.tar.gz」形式を「tar」で展開
3. サーバー上、/usr/src/redhat/{BUILD,SRPMS,SPECS,SOURCES,RPMS}を作成
これらのディレクトリを用いてtarボールからrpmパッケージをつくるので、無い場合は作成してください。
ある場合は作成する必要はありません。
# mkdir -p /usr/src/redhat/{BUILD,SRPMS,SPECS,SOURCES,RPMS}
4. 上記「2」で展開して出来たディレクトリ内のhttpd.specファイルを/usr/src/redhat/SPECS/配下にコピーします。
このファイルが「スペックファイル」と呼ばれるらしく、このファイルを基準にrpmパッケージが作成されます。今回はディフォルトの設定からは変更しませんが、今後の事を考えやはりソースから必要なものだけを指定しインストールすることに少しずつ慣れていきたいと思う。
# cp httpd-2.2.20/httpd.spec /usr/src/redhat/SPECS/ ←「cp」コマンドでコピー
5. 移動したhttpd.specを編集し、apr,apr-util,apr-util-develのバージョンを既存のモノに置き換え
スペックファイルの中でapr、apr-util、apr-util-develのバージョンが指定されておりますが、私の環境ではaprパッケージを持ってきてインストールして・・・などをしていると現行のApacheを停止せざるを得ないため、スペックファイルにて指定されているバージョンを変更します。
現在インストール済みのapr、apr-util、apr-util-develのバージョンを確認します。
# rpm -qa apr apr-util* | sort apr-1.2.7-11.el5_6.5 apr-util-1.2.7-11.el5_5.2 apr-util-devel-1.2.7-11.el5_5.2
もちろん、環境によりこのバージョンは異なりますので、個人個人確認してください。
ってことで、上記の場合aprもapr-utilもapr-util-develも「1.2.7」以上だったらいいこととします。←自分で作った勝手なルール
httpd.specの中には以下の2行が混ざっているので、それぞれのバージョンをsedで置き換える。
Requires: apr >= 1.4.2, apr-util >= 1.3.10, pcre >= 5.0, gawk, /usr/bin/find, openldap Requires: apr-devel >= 1.4.2, apr-util-devel >= 1.3.10
以下「sed」を用いて編集します。
# sed -i -e 's/1.4.2/1.2.7/g' -e 's/1.3.10/1.2.7/g' /usr/src/redhat/SPECS/httpd.spec
6. tar.gzを/usr/src/redhat/SOURCES/配下にコピー
# cp httpd-2.2.20.tar.gz /usr/src/redhat/SOURCES/
7. rpmbuild -bb /usr/src/redhat/SPECS/httpd.specでrpmパッケージ作成
# rpmbuild -bb /usr/src/redhat/SPECS/httpd.spec
8. /usr/src/redhat/RPMS/i386/配下にあるrpmパッケージを対象にrpm -Uvh(アップグレード)する
私の環境では、httpd-2.2.17からhttp-2.2.20にアップグレードとなったのですが、インストール済みのmod_sslがhttpd-2.2.17を必要としているというエラーでUpgradeができませんでした。このhttpdのバージョンを変更できなくしているmod_sslの削除をまず行い、それから今回rpmbuildで作成されたrpmパッケージをインストールします。
# cd /usr/src/redhat/RPMS/i386/ # ls -la # rpm -Uvh httpd-2.2.20-1.i386.rpm
もし、ここで私のようにmod_sslの依存関連のエラーになったら、以下のとおり現在のmod_sslを削除し、同じディレクトリ内にあるmod_sslのrpmパッケージを用いてインストールします。
# rpm -e mod_ssl ←「mod_ssl」の削除 # rpm -ivh mod_ssl-2.2.20-1.i386.rpm ←「mod_ssl-2.2.20-1.i386」のインストール # rpm -Uvh httpd-2.2.20-1.i386.rpm ←「httpd-2.2.20-1.i386.rpm」を用いてアップグレード
残りのパッケージもインストールしておきます。
# rpm -Uvh httpd-devel-2.2.20-1.i386.rpm ←同じくアップグレード # rpm -Uvh httpd-manual-2.2.20-1.i386.rpm ← 同上
これでインストールは完了しました。
最後に起動スクリプトの修正と、httpd.confを修正します。
起動スクリプトの修正は、起動時に作成するPIDファイルのパスが/var/run/配下ではなく/var/log/httpd/配下に変わっている部分を修正します。このまま修正を加えなくても問題はありませんが、/var/log/httpd/配下に書き込みができない権限設定の場合など停止・起動に影響が出ますのでPIDファイルのパスを変更します。
# sed -i.ORG -e 's//var/log/httpd//var/run/g' /etc/init.d/httpd
Apacheの設定ファイル/etc/httpd/conf/httpd.confの修正も行います。
基本的にまるまる記述が変わっていますので、/etc/httpd/conf/配下にバックアップとして作成されているhttpd.conf.rpmsaveをhttpd.confとして移動します。
# cp /etc/httpd/conf/httpd.conf.rpmsave /etc/httpd/conf/httpd.conf
以上で準備は完了です。Apacheの設定ファイルにエラーがないか確認しましょう。
エラーが発生している場合はそのエラーをもとに解決を試みましょう。ロードしているモジュールやIncludeしている/etc/httpd/conf.d/*のファイルなどが原因で構文エラーになる場合があります。焦らず英文を読むか、翻訳ツールなどを通してでも状況を確認してください。必ず解決できます。
# service httpd configtest Syntax OK # # service httpd restart Stopping httpd: [ OK ] Starting httpd: [ OK ] #
インストール完了です。
# httpd -v Server version: Apache/2.2.20 (Unix) Server built: Aug 31 2011 20:26:00
追記
おっと。サーバー再起動したらApacheが起動してこなかった。
chkconfig –list httpd で調べたらoffだったので、chkconfig httpd on を実行しサーバー起動時にApacheが起動できるようにしてあげました。
# chkconfig --list httpd # chkconfig httpd on # chkconfig --list httpd # chkconfig --list | grep '3:on'
コメント
[…] ようです。 Apache 2.2.20をtar.gzからrpmにしてインストールしてみたの巻 […]
ありがとうございます。
この通りの手順でsakura VPSのCentOS 64bitのapacheを2.2.20にできました。
rpm名の下記のみ読み替えて作業しました。
httpd-2.2.20-1.x86_64.rpm
一箇所、間違いだと思う箇所がありました。
7.の
rpmbuild -bb /usr/src/redhat/SECS/httpd.spec
は
rpmbuild -bb /usr/src/redhat/SPECS/httpd.spec
では?ないでしょうか。
堀江様
コメントありがとう御座います。
ご指摘のspecファイルへのパス、ご指摘の通りです。修正させていただきました。
ありがとう御座います。
さくらのVPSにもインストールできてよかったです^0^