今天在AS3上安裝個extman,結果連首頁都打不開,提示錯誤如下:
 
“:flock” is not exported by the  Can`t continue after import errors at /usr/local/apache2/htdocs/extman/libs/Ext/Utils.pm line 15 BEGIN failed–compilation aborted at  

/usr/local/apache2/htdocs/extman/libs/Ext/Utils.pm line 15. Compilation failed in require at /usr/local/apache2/htdocs/extman/libs/Ext/CGI.pm line 18. BEGIN failed–compilation  

aborted at /usr/local/apache2/htdocs/extman/libs/Ext/CGI.pm line 18. Compilation failed in require at /usr/local/apache2/htdocs/extman/libs/Ext/MgrApp.pm line 22. BEGIN failed-

-compilation aborted at /usr/local/apache2/htdocs/extman/libs/Ext/MgrApp.pm line 22. Compilation failed in require at /usr/local/apache2/htdocs/extman/libs/Ext/MgrApp/Login.pm  

line 19. BEGIN failed–compilation aborted at /usr/local/apache2/htdocs/extman/libs/Ext/MgrApp/Login.pm line 19. Compilation failed in require at  

/usr/local/apache2/htdocs/extman/cgi/index.cgi line 19.

網上搜了一下,有同樣的問題,卻沒有人解答。自己看了看程式裡面的程式碼
/usr/local/apache2/htdocs/extman/libs/Ext/Utils.pm line 15
這裡的內容是use Fcntl qw(SEEK_CUR :flock);
查了一下,這個函式是perl的檔案鎖功能。但是我之前在redhat AS4和AS5的機器上都沒有遇到此問題,猜想可能是perl的版本低,與extman的程式中存在不相容的情況。於是升級perl
系統中自帶的perl是5.8.0的。為了安全起見。自己原始碼安裝一個新的perl
./Configure -des -Dprefix=/usr/local/perl  
make && make install
安裝好後執行
/usr/local/bin/perl -V
來看看,確認版本是否正確。
[@131.163 httpd-2.2.8]# /usr/local/bin/perl -V
Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
  Platform:
安裝好後需要安裝DBI,DBD等perl模組,可以用線上安裝的方法。
/usr/local/bin/perl -MCPAN -eshell
然後在cpan>>提示符下輸入install DBI即可安裝DBI模組,安裝其他模組也類似,需要注意的是某些模組的名稱是DBD::mysql這樣的格式,不要忘記中間的兩個冒號
安裝DBD::mysql的時候需要mysql的庫檔案和標頭檔案,對於rpm包的mysql可以安裝mysql-devel來解決
如果mysql是原始碼安裝的,需要手動指定庫檔案的路徑。這時用線上安裝的方法無法成功。只能退出後手動安裝。
wget [url]http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.007.tar.gz[/url]
tar zxvf DBD-mysql-4.007.tar.gz
cd DBD-mysql-4.007
usr/local/bin/perl Makefile.PL
–cflags=-I/usr/local/mysql/include/mysql
–libs=”-L/usr/local/mysql/lib/mysql -lmysqlclient -lz”
–mysql_config=/usr/local/mysql/bin/mysql_config
make
make install
 
 
這裡有3個引數來指定mysql的標頭檔案,庫函式檔案,以及配置檔案的位置。
安裝完成後用/usr/local/bin/perdoc -l DBD::mysql看看是否正確安裝了
apache以前編譯的時候沒有開啟suexec功能。在編譯的時候在configure後面加上–enable-suexec引數,可以開啟suexec功能。但是我不想重新編譯
那麼可以用模組的形式來增加這個功能。
首先是找到原來編譯apache的原始碼目錄,如果沒有了,可以重新下載一個相同版本的apache的原始碼解壓縮開
先進行清理
make distclean
然後找一下mod_suexec.c的目錄
find . -name “mod_suexec.c”
./modules/generators/mod_suexec.c

切換到mod_suexec.c的目錄中執行:

cd ./modules/generators/mod_suexec.c
/usr/local/apache2/bin/apxs -c mod_suexec.c
/usr/local/apache2/bin/apxs -i -a -n suexec ./.libs/mod_suexec.so
退回到apache2的原始碼目錄中執行:
#./configure –enable-suexec –with-suexec-caller=daemon
注。這裡不要忘記了–with-suexec-caller=daemon,否則到後面你又要重新來過
#make suexec

#make install-suexec

此時mod_suexec.so就已經生成並且被安裝到apache的modules目錄下了,並且httpd.conf中也自動新增了
LoadModule suexec_module              modules/mod_suexec.so
檢查一下上述改動是否已經成功
[@131.163 httpd-2.2.8]# ls /usr/local/apache2/modules/ -l
total 36
-rw-r–r–    1 root     root         8998 Jun 18 17:35 httpd.exp
-rwxr-xr-x    1 root     root        22509 Jun 18 17:38 mod_suexec.so
如果沒有mod_suexec.so,則需要手動從原始碼目錄中將它複製過去,如果原始碼目錄中沒有,則要檢查上面的編譯過程中是否正確。
[@131.163 httpd-2.2.8]# grep “mod_suexec.so” /usr/local/apache2/conf/httpd.conf
LoadModule suexec_module      modules/mod_suexec.so
如果沒有這一行則手動新增到httpd.conf中
重啟apache就可以啟用suexec了! 這裡建議用apachectl stop;apachectl start而不是apachectl restart的方法,後者有可能導致apache無法正常啟動
前面perl的新版本安裝好了。那麼如何讓它發揮作用呢,方法很多了,有人喜歡把/usr/bin/perl刪除,然後做一個/usr/local/bin/perl->/usr/bin/perl的軟連結
但是我是在生產環境上,為了不干擾原來的程式。就辛苦一下吧。進入到extman的cgi目錄下,開啟出現文章開頭錯誤提示的cgi檔案,如index.cgi
修改第一行
#!/usr/bin/perl
這裡就是定義的perl的直譯器。把這個改成我們自己編譯的perl的版本#!/usr/local/bin/perl
然後再次重新整理頁面。終於可以成功顯示出extman的介面了。(眼淚嘩嘩的)
對於其他報錯的頁面都可以同樣的辦法。如果要看extman的圖形日誌還需要安裝rrdtool。