ごらくらいふ

プログラミングしたりゲームしたり

CentOS6.9にて、Apacheを2.4に更新した

前提

経緯

MastodonApache上で動かすため、WebSocket対応のリバースプロキシを提供するmod_proxy_wstunnelが必要だった。 これは、Apache 2.4.5以降で有効とのことなので、2.4系のパッケージを導入する必要が生まれた。

手順

Software Collcetionを導入する

CentOS6.9の標準ではApache2.2までしかないので、Software Collectionを導入する。

sudo yum install centos-release-scl
sudo yum-config-manager --enable rhel-server-rhscl-6-rpms

必要なパッケージの検索

sudo yum search httpd24を実行して、必要そうなパッケージを選ぶ。 自分の場合は以下。

  • httpd24-httpd
  • httpd24-mod_proxy_html
  • httpd24-mod_session
  • httpd24-mod_ssl

パッケージのインストー

sudo yum install httpd24-httpd httpd24-mod_proxy_html httpd24-mod_session httpd24-mod_ssl
scl enable httpd24 bash

# rootでの作業
su -
echo 'source /opt/rh/httpd24/enable' >> /etc/profile.d/httpd24.sh
exit

コンテンツの移植

Software Collectionで導入すると/opt/rh/httpd/root/の下にFilesystem Hierarchy Standard状のディレクトリ構成が広がっている。 諸々と共存できるようにするためだろうが、いざ旧環境とのすり合わせをするとなると非常にだるい

cp -av {/var/www,/opt/rh/httpd/root/var/www}/#コピーしたいディレクトリを指定する

設定の移植

元々の設定をhttpd.conf.orgで残しているので、当時の設定内容を抽出する。

diff /etc/httpd/conf/httpd.conf{,.org} > httpd.conf.diff
# オリジナルを残しておいてもりもり修正する
sudo cp -v /opt/rh/httpd/root/etc/httpd/conf/httpd.conf{,.org}
sudo vi /opt/rh/httpd/root/etc/httpd/conf/httpd.conf
# includeされるように書くもよし
sudo vi /opt/rh/httpd/root/etc/httpd/conf.d/other.conf

その他、/etc/httpd/conf.d/*.conf/opt/rh/httpd24/root/etc/httpd/conf.d/にコピーする。

cp -av {/etc/httpd/conf.d,/opt/rh/httpd/root/etc/httpd/conf.d}/#コピーしたいconfを指定する

シンボリックリンクの作成

標準の位置にすり替える。

sudo mv -v /etc/{,_}httpd
sudo ln -s /opt/rh/httpd24/root/etc/httpd/ /etc/httpd

sudo mv -v /var/{,_}www
sudo ln -s /opt/rh/httpd24/root/var/www/ /var/www

Apacheの起動

# 起動済みの古いApacheを止める
sudo service httpd stop
sudo chkconfig httpd off

sudo service httpd24-httpd start
sudo chkconfig httpd24-httpd on

トラブルシュート

RewriteLogで怒られる

Apache2.4ではRewriteLogはなくなっている網様。LogLevelを使えとのこと。

LogLevel crit

これまで使っていたPHPが使いまわせない

どうも2.2で動かしていた頃のPHPでは参照できないシンボルがあった模様。

まぁ、SoftwareCollectionのApacheを使うようになるのだから、その上で動くPHPもSoftwareCollection化するのは必然。

apache2.4が動いている状態でinstallすれば特に困らず動かせるはず。

sudo yum install rh-php70-php
scl enable rh-php70 bash
# rootでの作業
su -
echo 'source /opt/rh/rh-php70/enable' >> /etc/profile.d/rh-php70.sh
exit