前言
2018/10 在公司服务器上尝试安装了zabbix4.0。
安装清单如下:
- CentOS:CentOS release 6.6 (Final)
- Zabbix:4.0
- Postgresql:10.5
- Php:7.2
- Apache Httpd2.4
由于Apache Httpd2.4和php7.x的不兼容问题,导致按照过程比较曲折。
在这记录一下,供同样有问题的同学参考。
※zabbix安装的步骤另起一篇文章,此篇只说标题内容。
现象
使用yum安装Apache Httpd2.4和php7.2后,由于libphp7.so包的问题,导致httpd2.4不能正常启动。
对策
- 方案1:使用httpd2.2 ,或者nginx等其他容器。
→httpd2.2在2017年底不支持了。如果在公司内网使用的话,推荐这个方案 。 - 方案2:强用httpd2.4
方案1较为简单,yum 安装httpd2.2就能解决。
可是我偏偏选择了方案2(调查清楚原因后才知道自己走的最弯曲和陡峭的路)。
下面说说自己遇到的坑。
方案2的坑1
由于安装的是php7.2,所以httpd的conf.d文件夹下的zabbix.conf配置文件中就得使用libphp7.so(zabbix官方默认的是libphp5.so)。
启动htppd2.4报错
/opt/rh/httpd24/root/etc/httpd/conf/httpd.conf: Cannot load /opt/rh/httpd24/root/usr/lib64/httpd/modules/libphp7.so into server: /opt/rh/httpd24/root/usr/lib64/httpd/modules/libphp7.so: cannot open shared object file: No such file or directory
原因和解决办法
因为使用了错误的repo库,php7.2 在使用yum安装的时候,不会生成libphp7.so
简单来说
remi-php54.repo
remi-php70.repo
remi-php71.repo
remi-php72.repo
remi.repo
- 如果从remi.repo yum 安装的话,安装的包名是php72-XXX,此时不会自动生成libphp7.so。
- 如果从指定版本的remi-php72.repo安装的话,包名是php-XXX。
这个时候会生成libphp7.so。 - 正确命令如下
# yum install --enablerepo=remi,remi-php72 php php-devel php-common php-mbstring php-openssl php-pdo php-pecl-apcu php-xml php-pear php-gd php-mcrypt php-pgsql php-bcmath php-xmlrpc php-ldap php-openssl
方案2的坑2
将生成的libphp7.so拷贝到httpd2.4的modules下后,新的error出现。
# service httpd24-httpd restart
Stopping httpd: [ OK ]
Starting httpd: httpd: Syntax error on line 57 of /opt/rh/httpd24/root/etc/httpd/conf/httpd.conf: Cannot load /opt/rh/httpd24/root/usr/lib64/httpd/modules/libphp7.so into server: /opt/rh/httpd24/root/usr/lib64/httpd/modules/libphp7.so: undefined symbol: unixd_config
[FAILED]
google后得知原因,httpd2.4中更改了API接口,导致php的unixd_config方法不可用。
解决办法是下载同样版本php7.2代码版本,自己编译出适应httpd2.4的so文件。
我使用编译命令如下:
# PHP7.2编译用关联包安装
yum -y install \
bison \
libxml2-devel
# .configure失败回避
ln -s /opt/rh/httpd24/root/usr/lib64/pkgconfig/apr-1.pc /usr/lib64/pkgconfig/apr-1.pc
# 下载源码,XX部分请换成自己对应版本。
wget https://github.com/php/php-src/archive/php-7.2.XX.tar.gz
tar xvf php-7.2.XX.tar.gz
cd php-src-php-7.2.XX
./buildconf --force
./configure \
--with-config-file-path=/etc/ \
--with-config-file-scan-dir=/etc/php.d \
--with-apxs2=/opt/rh/httpd24/root/usr/bin/apxs
--
make
# 不需要make install。因为已经yum install过了。
# so文件拷贝到对应的httpd路径下。
cp /home/vagrant/php-src-php-7.2.XX/libs/libphp7.so /opt/rh/httpd24/root/usr/lib64/httpd/modules/libphp7.so
方案2的坑3
编译php的时候,找不到【opt/rh/httpd24/root/usr/bin/apxs】这个路径。
原因:yum 安装 httpd2.4的时候选择的模块不全。
解决办法:使用以下命令重新安装httpd2.4
yum install --enablerepo=epel-httpd24 httpd24-httpd httpd24-httpd-devel httpd24-mod_proxy_html httpd24-mod_session httpd24-mod_ssl
到此为止 httpd2.4就可以正常启动,且支持php了。
后记
其实按照上面的安装清单来安装的话,各种坑很多。此处只是记录了稍微大的3个。