前不久 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