在 Ubuntu 12.10 上更新 SVN 到 1.8.3 後的問題(使用 WANdisco 包)
apache2: Syntax error on line 203 of /etc/apache2/apache2.conf: Syntax error on line 2 of /etc/apache2/mods-enabled/authz_svn.load: Cannot load /usr/lib/apache2/modules/mod_authz_svn.so into server: /usr/lib/apache2/modules/mod_authz_svn.so: undefined symbol: dav_svn_get_repos_path Action 'configtest' failed.
當我嘗試重新啟動伺服器時,在 Ubunutu (12.10 Quantal) 上更新 SVN 後出現此錯誤。所有模組 dav、dav_svn 和 authz_svn 都在執行中。不幸的是,在我選擇的搜尋引擎中搜尋錯誤並沒有讓我更進一步。當通過瀏覽器訪問 svn 時,它仍然告訴版本是 1.7.5.x,當執行“svn help”時它顯示 1.8.3.x
再次降級到 1.7.5 後,我得到了這個:
Syntax error on line 203 of /etc/apache2/apache2.conf: Syntax error on line 2 of /etc/apache2/mods-enabled/authz_svn.load: Cannot load /usr/lib/apache2/modules/mod_authz_svn.so into server: libsvn_repos-1.so.0: cannot open shared object file: No such file or directory
在 Ubuntu 12.04 中安裝自定義 Subversion 1.7 Apache 模組後,我遇到了類似的錯誤。模組必須按以下順序載入:dav -> dav_svn_module -> authz_svn_module,以便庫正確載入。libapache2-svn Ubuntu 軟體包似乎通過 .load 文件頂部的“Depends:”註釋來處理這個問題:
/etc/apache2/mods-available/dav_svn.load:
# Depends: dav LoadModule dav_svn_module /usr/lib/apache2/modules/mod_dav_svn.so
/etc/apache2/mods-available/authz_svn.load
# Depends: dav_svn LoadModule authz_svn_module /usr/lib/apache2/modules/mod_authz_svn.so
根據我的經驗,我的自定義模組是根據這些依賴項啟用/禁用的,但是 Apache 仍然嘗試按字母順序載入 /etc/apache2/mods-enabled/*,因此首先載入 authz_svn.load 並出現上述錯誤。我不知道 libapache2-svn 包如何避免這個問題,而自定義模組卻沒有。
我通過完全刪除 mods-available/mods-enabled dav_svn.load 和 authz_svn.load 文件解決了這個問題。然後我把它放到 /etc/apache2/httpd.conf 中:
LoadModule dav_svn_module /usr/lib/apache2/modules/mod_dav_svn.so LoadModule authz_svn_module /usr/lib/apache2/modules/mod_authz_svn.so
顯然,訂單很重要。Apache 在啟用 mods 後載入 httpd.conf,所以現在 Apache 為我啟動。