Unix / BSD / Linux

libphp5.so: Undefined symbol "ap_user_id"


 FreeBSD7.x, Apache1.3.x, php5.2.xでソースからインストール(コンパイル)後、Apacheを起動すると

[root@bsd7 ]# /usr/local/etc/rc.d/apache.sh start
Starting Apache web server: Syntax error on line 205 of /usr/local/apache/conf/httpd.conf:
Cannot load /usr/local/apache/libexec/libphp5.so into server: /usr/local/apache/libexec/libphp5.so: Undefined symbol "ap_user_id"
/usr/local/apache/bin/apachectl start: httpd could not be started


となってApacheが起動しない...のの対処法。
# つか、いい加減Apache1.3.xは使わない方向で。
# 2.2.xなどの現在stableでリリースされてるものを使いましょう。


【 解決法 】

 FreeBSD7.xではソースからコンパイルせず、portsを使いましょう。

MySQLもしくはPostgreSQLはportsでインストール済みとする。
んで、configureオプションは以下の通り。

[ apache1.3.42 ]
./configure --prefix=/usr/local/apache --enable-suexec --suexec-caller=nobody --suexec-userdir=homepage --suexec-docroot=/home --suexec-logfile=/usr/local/apache/logs/suexec_log --suexec-uidmin=1000 --suexec-gidmin=1000 --suexec-safepath="/bin:/usr/bin" --enable-module=log_agent --enable-module=log_referer --enable-module=so --enable-module=rewrite

[ php-5.2.14 ]
./configure --enable-mbstring --with-apxs=/usr/local/apache/bin/apxs --prefix=/usr/local/php --with-pgsql=/usr/local/pgsql/ --with-mysql=/usr/local/mysql/


portsからインストールするんだけど、SuExecとかも指定したいので/etc/make.confを設定し、/usr/ports/www/apache13/Makefileを書き換えます。
その上で、phpをインストールするとapacheも同時にインストールしてくれる。

[ /etc/make.conf ]
--------
# added by use.perl 2010-09-18 22:01:14
PERL_VERSION=5.10.1

#apache1.3
WITH_APACHE_SUEXEC = yes
APACHE_SUEXEC_DOCROOT = /home
APACHE_SUEXEC_CALLER = nobody
APACHE_SUEXEC_UIDMIN = 1000
APACHE_SUEXEC_GIDMIN = 1000
APACHE_SUEXEC_LOG = /var/log/httpd-suexec_log
APACHE_SUEXEC_USERDIR = homepage
DEFAULT_PATH = "/bin:/usr/bin"
--------


[ /usr/ports/www/apache13/Makefile ]

 55  CONFIGURE_ARGS= --prefix=${PREFIX} \
    56                  --server-uid=www \
    57                  --server-gid=www \
    58                  --with-perl=${PERL} \
    59                  --with-layout=FreeBSD \
    60                  --suexec-docroot=${PREFIX}/www/data \
    61                  --without-confadjust \
    62                  --enable-module=most \
    63                  --enable-module=auth_db \
    64                  --enable-module=mmap_static \
    65                  --disable-module=auth_dbm \
    66                  --enable-shared=max \
    67                  --enable-module=ssl \
    68                  --enable-module=define

を修正する

CONFIGURE_ARGS= --prefix=${PREFIX} \
                      --server-uid=www \
                      --server-gid=www \
                      --with-perl=${PERL} \
                      --with-layout=FreeBSD \
                      --suexec-docroot=${PREFIX}/www/data \
                      --without-confadjust \
                      --enable-module=most \
                      --enable-module=auth_db \
                      --enable-module=mmap_static \
                      --disable-module=auth_dbm \
                      --enable-shared=max \
                      --enable-module=ssl \
                      --enable-module=define \

                      --enable-module=log_agent \
                      --enable-module=log_referer \
                      --enable-module=so \
                      --enable-module=rewrite \

                      ${SUEXEC_CONF} \
                      ${EXPAT_CONF}

以下操作ログ

[root@bsd7 ]# vi /etc/make.conf
[root@bsd7 ]# pushd /usr/ports/www/apache13

# Apacheが既にインストール済みの場合、PortsからPHPをインストールしようとするとエラーになるので、一旦アンインストールする。
# インストールしていない場合は/etc/make.confを設定後、ApacheのMakefileを書き換えてPHPをインストールすれば同時に Apacheもインストールされるので、あえて明示的にApacheをインストールせずPHPのみをインストールすれば良い。
[root@bsd7 ]# make deinstall

# ここで、上記の様にCONFIGURE_ARGSを指定する
[root@bsd7 ]# vi Makefile

[root@bsd7 ]# pushd /usr/ports/lang/php52
[root@bsd7 ]# make clean

# make configにてphpのconfigureオプションを指定
[root@bsd7 ]# make config

[root@bsd7 ]# make
[root@bsd7 ]# make test
[root@bsd7 ]# make install
[root@bsd7 ]# make clean

OSがFreeBSD7.xならports使っとけって話です。


■追記
OSがFreeBSD7.xの場合、
1. Apache1.3.xを使う場合、Apache, PHPともportsからインストールする。
2. どうしてもソースからインストールしたい場合は Apache2.2.xを使用する。

3. OS(FreeBSD)は安定版を使用する - 7.x, 5.xなどの奇数Verは極力避ける -
などなど。

気をつけましょう。

このページの先頭へ