PHP4で動いていたシステムをPHP5で動かす為に

なんとなくPHP4で動いていたWEBシステムをPHP5で動かそうとしたときにエラーが出まくって動作しなかった。
で、一箇所ずつどこで処理がおかしくなってんのかを調べてったら「$HTTP_SERVER_VARS['DOCUMENT_ROOT']」って変数を読み込んでるとこの処理が期待通りに動作してないっぽい。
調べてみたら

$_SERVER -- $HTTP_SERVER_VARS [非推奨] ― サーバ情報および実行時の環境情報

的な記述が・・・。
まあPHP4の時代はそれもありだったんでしょうが。
結果、「php.ini」で「register_long_arrays」のオプションを「On」にしてやればPHP4時代によく使われてた「$HTTP_GET_VARS」みたいな定義済みの長いPHP変数が定義されるって事で、試しにOnってみたら問題なく動作することを確認。
「register_long_arrays」自体が今では非推奨なオプションになってるくらいだけどどうしてもってときはこれで対応。

ISPConfig3の仮想WEBサーバ上でPHPもCGIも動作させる為に

ISPConfig3は1つのサーバを仮想的に複数のサーバ的に扱えるようにしてくれる便利なシステム。
けど、ちゃんとCGI利用のチェックを付けて、PHPは「Mod-PHP」を選択してWEBサーバを構築したのにPHPだけは動くけどCGIが動作してくれない。。。
WEB管理画面の設定はこんな感じ ↓

何かおかしいですか?


いろいろソースも見て結果苦肉の策的な対応。
以下 ↓

印を付けたとこの入力内容は以下のような感じ

<Directory /var/www/your.domain.com/web>
    Options +ExecCGI
</Directory>

「your.domain.com」のとこはWEBサイトを作成する際に入力したドメイン名をそのまま入力すればok。
結論的には、CGIの利用チェックボックスをonにして登録とか更新してもExecCGIのオプションが出力されないのが原因でした。
ISPConfig3のソースを書き直したりはしたくないからこんな対応で問題を回避。


CGIは今も元気に動いています。
ちなみに、セキュリティ的にどうなの?という声もありますが、SuEXECのチェックボックスをonにして利用許可しておいた方が一般的なレンタルサーバ的なパーミッションでの動作が期待できます。
もっと良い対応方法があればぜひご連絡ください。

サーバ移行後のWORDPRESS管理画面に「Your backup folder MIGHT be visible to the public」が表示される

WORDPRESSの乗っかったWEBサイトのサーバ移行とかって案件はよくある。
けど、移行もパーミッションの設定も全部完了したハズなのに管理画面上に常に以下の警告メッセージが表示される。

Your backup folder MIGHT be visible to the public

To correct this issue, move the .htaccess file from wp-content/plugins/wp-dbmanager to [Path To Backup]

※[Path To Backup]はWORDPRESSをインストールしたディレクトリによって変わります。


対応方法は警告メッセージのまんま『wp-dbmanagerディレクトリ以下の.htaccessを[Path To Backup]に配置』すればいいのかと思ったけど警告メッセージ消える気配無し。。。
というか[Path To Backup]ディレクトリ以下に.htaccessファイルは元々あったし。。。


原因はwp-dbmanagerがDBに保存してるバックアップディレクトリのパスがサーバ移行後のパスと一致してなかったから内部的におかしなことになってたって事。


対応方法としてはWORDPRESSのDBの「wp_options」テーブル中のoption_nameカラムが「dbmanager_options」のレコードのoption_valueカラム値の一部を変更。

s:4:"path";s:49:"/var/www/your.domain.com/web/wp-content/backup-db";

option_valueカラムの値は他にもいろいろな設定値とかを保存しているので上記の値をそのまま登録してももちろんダメです。
一致するとこだけを更新してください。
上記コードの最後のダブルクォーテーションで囲まれた部分は、WORDPRESSのbackup-dbディレクトリまでの物理パスを、自分がWORDPRESSをインストールしたディレクトリ構造に合わせて入力して下さい。
上記コード中の「s:49」となっている箇所の数値「49」は、その物理パスの文字数を入力してください。


上記のDB更新して再度WORDPRESSの管理画面開いたら警告メッセージは消えてるはずです。
ごちゃごちゃしてすいません。
おつかれさまでした。

amavisd は停止していますがサブシテムがロックされています

Postfix + Clam AntiVirus + SpamAssassin で設定してっていざ起動してもメールの受信が出来ない。
「service amavisd status」とか打ってみると
「amavisd は停止していますがサブシテムがロックされています」とか言われる。
そんな時は以下の手順で。

service amavisd stop
sa-update
service amavisd start
service amavisd status

これで「amavisd ... を実行中 ...」とか出ればok。
最初のスパムフィルタ用ルールセットが無い場合とかにもサブシステムうんぬんのメッセージが出るみたいなんで分かりにくい。
「sa-update」でルールセットを更新(作成)してやったら正常に動作するようになった。

CentOSの「yum update」でOSのバージョンを上げない。

まあ何を持ってOSのバージョンとするかですが。
yum update」っていろんなパッケージをいっぺんにアップデートしてしましたい新しいもの好きで。
けどOSのバージョンに依存したりしてるシステムもあるからその辺は今のままで。
基本カーネル周りを注意すればいいかと思ってたけど「/etc/redhat-release」の内容見てるのもあるからそこもアップデートの対象外になるように「/etc/yum.conf」に以下の記述を追加。

exclude=kernel* centos*

以上。

OpenPNE2系、OpenPNE3系をqmailで動かす

前にqmailが動いてるサーバにOpenPNE設置しようとした時にハマったんでメモ。
基本的にはOpenPNEの設定ドキュメント通りに設定していくだけでok。
ただメール受信時の動作設定だけちょっと変更。
postfixの場合は「/etc/aliases」に書く内容を、qmailの場合は「/var/qmail/alias/.qmail-default」に記述。
具体的にはこんな感じ ↓
OpenPNE2系の場合

|/usr/bin/php /path/to/openpne/bin/mail.php

OpenPNE3系の場合

|/usr/bin/php /path/to/openpne/symfony openpne:execute-mail-action

postfixの場合は特定ドメインへのメールを「openpne_user」とかに転送して、そのユーザへのメールをスクリプトに渡してた。
けどqmailは「/var/qmail/alias/」ディレクトリ以下の「.qmail-○○」の「○○」で対象ユーザを識別して、無ければ全部「.qmail-default」に渡すので上記の設定の場合はこれだけでok。

いつものCentOS

適当なサーバを1台用意してそれまるまる使ってWEBサービスをまずは開始しようってときにする設定はそんなに凝らない場合がほとんどでほぼ同じ場合もよくあるからメモ。
構築するサービスに適したもの選んで設定してけばいい。

作業ディレクトリの作成

mkdir /root/src

yum の設定

cd /root/src
yum -y install yum-fastestmirror
wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm \
-O /root/src/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
rpm -Uhv /root/src/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
wget http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt -O /root/src/RPM-GPG-KEY.dag.txt
rpm --import /root/src/RPM-GPG-KEY.dag.txt

「/etc/yum.repos.d/rpmforge.repo」を編集。

[...]
enabled = 0
[...]

postfix のインストール

yum -y install postfix
service postfix start
chkconfig postfix on

詳細な設定に関しては今回は省略。

dnsmasq のインストール

yum -y install dnsmasq
service dnsmasq start
chkconfig dnsmasq on

ここで必要であれば「/etc/hosts」を編集。
編集したらネットワークを再起動。

service network restart

php のインストール

yum -y remove 'php*'
yum -y install httpd-devel pcre-devel libmcrypt-devel mysql-devel \
libjpeg-devel libpng-devel freetype-devel libtool-ltdl-devel
yum -y install gcc libxml2-devel libxml2 openssl-devel bzip2-devel \
libmcrypt gmp-devel libc-client libc-client-devel libungif-devel \
libungif libungif-devel autoconf automake imake curl curl-devel \
libidn libidn-devel net-snmp-devel
wget http://museum.php.net/php5/php-5.2.9.tar.bz2
tar -jxvf php-5.2.9.tar.bz2
cd php-5.2.9
./configure --build=i686-redhat-linux-gnu --host=i686-redhat-linux-gnu \
--target=i386-redhat-linux-gnu --program-prefix= --prefix=/usr \
--exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc \
--datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib \
--libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/usr/com \
--mandir=/usr/share/man --infodir=/usr/share/info --cache-file=../config.cache \
--with-libdir=lib --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d \
--disable-debug --with-exec-dir=/usr/bin --enable-shared --with-pic --disable-rpath \
--with-pear --with-bz2=shared --with-curl=shared --with-freetype-dir=/usr \
--with-png-dir=/usr --enable-gd-native-ttf --with-gettext=shared --with-gmp=shared \
--with-iconv=shared --with-jpeg-dir=/usr --with-openssl=shared --with-pcre-regex=/usr \
--with-zlib=shared --with-layout=GNU --enable-exif --enable-ftp --enable-sockets \
--enable-sysvsem --enable-sysvshm --enable-sysvmsg --enable-wddx --with-kerberos \
--enable-ucd-snmp-hack --with-unixODBC=shared,/usr --enable-shmop --enable-calendar \
--with-mime-magic=/usr/share/file/magic.mime --without-sqlite --without-pdo-sqlite \
--with-libxml-dir=/usr --with-apxs2=/usr/sbin/apxs --with-mysql=shared,/usr \
--with-mysqli=shared,/usr/bin/mysql_config --with-gd=shared --disable-dba \
--without-unixODBC --enable-mbstring --enable-mbregex --enable-bcmath \
--with-xmlrpc=shared -enable-dom=shared --with-snmp=shared,/usr --enable-soap=shared \
--with-xsl=shared,/usr --enable-xmlreader=shared --enable-xmlwriter=shared \
--enable-pdo=shared --with-pdo-mysql=shared,/usr --enable-gd-jis-conv \
--enable-zip=shared --enable-zend-multibyte --with-mcrypt --with-apxs2=/usr/sbin/apxs
make clean
make
make install

APC のインストール

pecl install APC

memcache のインストール

pecl install memcache

httpd.conf の設定

「/etc/httpd/conf/httpd.conf」以下の一行をコメントアウト

#LoadModule php5_module        /usr/lib/httpd/modules/libphp5.so

php.conf の作成

「/etc/httpd/conf.d/php.conf」を作成し、以下の通り記述。

LoadModule php5_module        /usr/lib/httpd/modules/libphp5.so
AddType application/x-httpd-php .php
DirectoryIndex index.php

php.ini の設定

cp /root/src/php-5.2.9/php.ini-recommended /etc/php.ini

「/etc/php.ini」を編集

[...]
upload_max_filesize = 10M

[...]
extension_dir = "/usr/lib/20060613/"

[...]
extension=apc.so
extension=bz2.so
extension=curl.so
extension=dom.so
extension=gd.so
extension=gettext.so
extension=gmp.so
extension=iconv.so
extension=memcache.so
extension=mysql.so
extension=mysqli.so
extension=openssl.so
extension=pdo.so
extension=pdo_mysql.so
extension=snmp.so
extension=soap.so
extension=xmlreader.so
extension=xmlrpc.so
extension=xmlwriter.so
extension=xsl.so
extension=zip.so
extension=zlib.so

[...]
sendmail_path = "/usr/sbin/sendmail.postfix -t -i"

[...]
mbstring.language = Japanese

[...]
mbstring.internal_encoding = UTF-8

[...]
mbstring.http_input = pass

[...]
mbstring.http_output = pass

[...]
mbstring.encoding_translation = Off

[...]
mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII

[...]
mbstring.substitute_character = none;

[...]
mbstring.func_overload = 0

[...]
[apc]
apc.enabled=1
apc.shm_segments=1
apc.shm_size=30
apc.optimization=0
apc.num_files_hint=1000
apc.ttl=0
apc.gc_ttl=3600
apc.cache_by_default=1
apc.filters=NULL
apc.mmap_file_mask=NULL
apc.slam_defense=0
apc.file_update_protection=2

ntp のインストール

yum -y install ntp

「/etc/cron.daily/hwclock」ファイルを作成。

#!/bin/sh
/sbin/hwclock --systohc

権限を変更。

chmod 755 /etc/cron.daily/hwclock

「/etc/ntp.conf」を編集。

[...]
#server 0.centos.pool.ntp.org
#server 1.centos.pool.ntp.org
#server 2.centos.pool.ntp.org
server ntp1.jst.mfeed.ad.jp
server ntp2.jst.mfeed.ad.jp
server ntp3.jst.mfeed.ad.jp
service ntpd stop
ntpdate ntp1.jst.mfeed.ad.jp
hwclock --systohc
service ntpd start
chkconfig ntpd on

MySQL のインストール

yum -y install mysql
yum -y install mysql-server
service mysqld start
chkconfig mysqld on

詳細な設定に関しては今回は省略。

memcached のインストール

yum -y --enablerepo=rpmforge install memcached

「/etc/sysconfig/memcached」の編集。

USER="root"
MAXCONN="20480"
CACHESIZE="512"
PORT="11211"
OPTIONS="-P /var/run/memcached.pid -f 1.5"

httpdの起動

chkconfig httpd on
service httpd start

Courier-Authlib, Courier-IMAP のインストール

インストール用ユーザの作成

useradd -m -s /bin/bash compileuser
passwd compileuser

compileuserに権限の追加

visudo
[...]
root    ALL=(ALL)       ALL
compileuser   ALL=(ALL)       ALL
[...]

ユーザの切り替え

su compileuser

ビルド環境の作成

mkdir $HOME/rpm
mkdir $HOME/rpm/SOURCES
mkdir $HOME/rpm/SPECS
mkdir $HOME/rpm/BUILD
mkdir $HOME/rpm/SRPMS
mkdir $HOME/rpm/RPMS
mkdir $HOME/rpm/RPMS/i386
mkdir $HOME/rpm/RPMS/x86_64
echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacros

作業用ディレクトリの作成

mkdir $HOME/src

ソースファイルのダウンロード

cd $HOME/src
wget http://sourceforge.net/projects/courier/files/authlib/0.63.0/courier-authlib-0.63.0.tar.bz2/download
wget http://sourceforge.net/projects/courier/files/imap-devel/20100320/courier-imap-4.7.0.20100320.tar.bz2/download

Courier-Authlibのビルド

cd $HOME/src
rpmbuild -ta courier-authlib-0.63.0.tar.bz2

依存関係でエラーになる場合は必要なパッケージをインストール(下記は一例)

yum -y install postgresql-devel expect

インストール

cd $HOME/rpm/RPMS/i386/
sudo rpm -ivh courier-authlib-*.rpm

Courier-IMAPのビルド

cd $HOME/src
rpmbuild -ta courier-imap-4.7.0.20100320.tar.bz2

fam.h関連のエラーになる場合は以下のパッケージをインストール

yum -y install gamin-devel

インストール

cd $HOME/rpm/RPMS/i386/
sudo rpm -ivh courier-imap-4.7.0.20100320-1.i386.rpm

ユーザの切り替え

exit

デフォルトではimap,imap-ssl,pop3,pop3-sslの全てが有効になっているので、不要なサービスは起動しないよう変更。
「/usr/lib/courier-imap/etc/imapd」「/usr/lib/courier-imap/etc/imapd-ssl」「/usr/lib/courier-imap/etc/pop3d」「/usr/lib/courier-imap/etc/pop3d-ssl」のウチ、不要なサービスのファイル中の「*****START=YES」を「*****START=NO」に変更する。

サービスの起動と自動起動の設定

service courier-authlib start
service courier-imap start
chkconfig courier-authlib on
chkconfig courier-imap on

メール受信ユーザの作成(ここでは例にsupportグループのsupportユーザを作成)

先にグループの作成

groupadd support

ユーザの作成

useradd -g support support

メール保存用ディレクトリの作成

su support
maildirmake $HOME/Maildir
exit

「/etc/aliases」にて、supportユーザのメールをpostmasterに転送する設定が記述してある場合は該当行をコメントアウト


以上!
かなり雑になった。。