前不久 CentOS 更新到版本 CentOS 7.0.1406,为了支持此版本,LAMP 一键安装脚本做了大量的更新和测试,并遇到了不少问题,在此一一记录下来。
由于 CentOS 7 将 service 重定向为 systemctl ,导致开机自启动脚本有的需要重写,这个过程也耗费了不少时间测试。同时,原先在 CentOS 6 存在的一些依赖包,在 CentOS 7 中不存在了,比如 libc-client-devel,这是安装 php-imap 扩展所必须的依赖,少了它编译 PHP 的扩展 imap 时必然会出错,于是只能手动编译安装 imap-2007f ,并指定 imap 扩展的路径。
去掉了一些在新旧 CentOS 都不存在的依赖包,比如 libmcrypt-devel,并全部编译安装最新版。
其中一些最主要的更新,列举如下。
1、获取公网 IP 的方式变更
在 CentOS 7 中,默认没有安装 ifconfig ,也就是依赖包 net-tools,所以将原来从 ifconfig 获取 IP 变更为 curl 外链来获取 IP。
所以,安装本脚本,务必要保证联网。
2、手动安装一些依赖包
这些依赖包包括 pcre、libiconv、libmcrypt、mcrypt、re2c、libedit、imap。
在 CentOS 5 中 pcre 版本过低会导致编译 Apache 失败;MySQL 要使用 readline 功能,编译安装 libedit;PHP 的扩展 imap,依赖 libc-client 共享库,编译安装 imap-2007f 等等。
其中有些报错信息网上查到也语焉不详,尤其是中文网站。所以在此列举一下。
编译 PHP 时出错:
configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing. This should not happen. Check config.log for additional information.
就是 imap 扩展缺少依赖包导致的。编译安装 imap-2007f 步骤:
代码如下 | 复制代码 |
wget ftp://ftp.cac.washington.edu/imap/imap-2007f.tar.gz tar -zxf imap-2007f.tar.gz cd imap-2007f make lr5 PASSWDTYPE=std SSLTYPE=unix.nopwd EXTRACFLAGS=-fPIC IP=4 rm -rf /usr/local/imap-2007f/ mkdir /usr/local/imap-2007f/ mkdir /usr/local/imap-2007f/include/ mkdir /usr/local/imap-2007f/lib/ cp c-client/*.h /usr/local/imap-2007f/include/ cp c-client/*.c /usr/local/imap-2007f/lib/ cp c-client/c-client.a /usr/local/imap-2007f/lib/libc-client.a |
备注:在 64 位下编译时 make 参数需要带 EXTRACFLAGS=-fPIC ,在 32 位下则不需要。
同时,在 CentOS 7 下编译 PHP 的 imap 扩展时,添加如下参数:
代码如下 | 复制代码 |
--with-imap=/usr/local/imap-2007f --with-imap-ssl |
在 CentOS 6 下编译时,由于已经安装了依赖包 libc-client-devel ,所以参数如下:
代码如下 | 复制代码 |
--with-imap --with-imap-ssl --with-kerberos |
3、新增一些判断函数
增加了一些判断函数,比如是否为 64 位,是否为 CentOS 7 等。
4、更新启动脚本
Apache 的启动脚本 /etc/init.d/httpd 变更,拷贝于 /usr/local/apache/bin/apachectl 文件,同时为了 /etc/init.d/httpd status 能够使用,新增了配置文件 /usr/local/apache/conf/extra/httpd-info.conf 。
5、CentOS 7 下可能会遇到的问题
安装 LAMP 完成后,无法用 IP 访问网站。查看进程也发现了 httpd 和 mysqld 也启动了,防火墙貌似也关闭了,ping 也没问题,但就是无法访问。
经过一番排查,还真就是 CentOS 7 最新的 firewalld 引起的问题。这时就要用经典的 iptables-services 来替代 firewalld 了。
代码如下 | 复制代码 |
yum -y install iptables-services systemctl mask firewalld systemctl enable iptables systemctl stop firewalld systemctl start iptables |
6、PHP组件支持
到目前为止,我所见过的 LAMP、LNMP、LANMP 等一键安装脚本,对 PHP 组件的支持都不全面,有很多缺失的,最典型的就是 imap、ldap。
为了支持这些组件,我做了大量的改进和测试。这里放一张 PHP 探针截图,支持所有组件,以及 4 种第三方组件。
虽然 LAMP 一键安装脚本已经做了大量测试,但还是会有不完善的地方,如果你在使用过程中遇到问题,带安装日志 lamp.log 发送邮件至 i[at]teddysun.com