雖然網路上教程眾多,但版本相依、模組缺失、SSL 配置等細節常導致「按步驟做卻跑不起來」。本文記錄在 CentOS 4.2 上從原始碼編譯安裝 Subversion 1.3.2 + Apache 2.0.55 + Berkeley DB 4.4.20 的完整流程,含 HTTPS 安全通道與權限控管,經實測可直接用於生產環境。
subversion-1.3.2.tar.gz(1.4 版缺少 configure 腳本)httpd-2.0.55.tar.gz(2.2 版相容性風險未驗證)db-4.4.20.tar.gz(Subversion 必須的底層資料庫)全部上傳至 /usr/local/ 目錄。
tar -zxvf httpd-2.0.55.tar.gz
cd httpd-2.0.55
./configure --enable-dav --enable-so --enable-ssl --enable-maintainer-mode \
--prefix=/usr/local/apache2 --enable-mods-shared=all
make && make install
參數解析:
--enable-dav:WebDAV 模組,SVN over HTTP 必備--enable-so:動態共享物件支援,載入 mod_dav_svn 等模組--enable-ssl:SSL 模組,HTTPS 加密傳輸基礎--enable-mods-shared=all:編譯所有模組為共享庫,靈活載入tar -zxvf db-4.4.20.NC.tar.gz
cd db-4.4.20.NC/build_unix/
../dist/configure --prefix=/usr/local/bdb
make && make install
tar -zxvf subversion-1.3.2.tar.gz
cd subversion-1.3.2
./configure --with-berkeley-db=/usr/local/bdb --with-apxs=/usr/local/apache2/bin/apxs
make && make install
關鍵點:--with-apxs 指定 Apache 的 apxs 工具路徑,自動編譯並安裝 mod_dav_svn.so、mod_authz_svn.so 等 Apache 模組。
svnadmin --version
# 輸出版本號與支援的儲存後端(fsfs, bdb)即成功
mkdir -p /opt/svn/repos
svnadmin create --fs-type fsfs /opt/svn/repos
# FSFS 格式無需資料庫鎖定,適合高併發、NFS 掛載場景
/opt/svn/tmp/project_xxx/
├── trunk/ # 主開發線
├── tags/ # 發布標籤
└── branches/ # 分支開發
find projectname/ -name CVS -exec rm -rf {} \;
# 移除 CVS 管理目錄,避免汙染版本庫
svn import -m "initial import" /opt/svn/tmp file:///opt/svn/repos
svn list --verbose file:///opt/svn/repos/
chown -R apache.apache /opt/svn/repos
chmod 770 /opt/svn/repos
chmod -R g+w /opt/svn/repos
# Apache 進程用戶需具備讀寫權限
htpasswd -c /opt/svn/pwd admin # 密碼設為 123456
chmod a+r /opt/svn/pwd
/opt/svn/Accesspolicy[groups]
developers = admin
[repos:/]
@developers = rw
# 可細化至專案、目錄層級:[repos:/project_xxx/trunk]
# 產生私鑰
openssl genrsa -des3 -out my-server.key 1024
# 產生憑證
openssl req -new -key my-server.key -x509 -out my-server.crt -config openssl.cnf
# 放置至 Apache 配置目錄
mkdir /usr/local/apache2/conf/sslfile
mv my-server.key my-server.crt /usr/local/apache2/conf/sslfile/
httpd.conf 核心配置段User apache
Group apache
LoadModule ssl_module modules/mod_ssl.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
SSLMutex default
SSLRandomSeed startup builtin
SSLSessionCache none
ErrorLog logs/SSL.log
LogLevel info
SSLEngine On
SSLCertificateFile conf/sslfile/my-server.crt
SSLCertificateKeyFile conf/sslfile/my-server.key
<Location /svn>
DAV svn
SVNPath /opt/svn/repos
AuthType Basic
AuthName "svn repos"
AuthUserFile /opt/svn/pwd
AuthzSVNAccessFile /opt/svn/Accesspolicy
require valid-user
SSLRequireSSL # 強制 HTTPS,移除此行可同時支援 HTTP
</Location>
/usr/local/apache2/bin/apachectl start
# 輸入 SSL 私鑰密碼(openssl genrsa 時設定的密碼)
svn checkout https://localhost/svn/project_xxx/trunk --username admin
# 接受自簽憑證,輸入密碼 123456,檢出成功即配置完成
--with-apxs 路徑錯誤:導致 Apache 模組未編譯,SVN over HTTP 失效chcon -R -t httpd_sys_content_t /opt/svn/repos 或暫時關閉iptables -A INPUT -p tcp --dport 443 -j ACCEPT從原始碼編譯安裝雖繁瑣,卻能完全掌控版本、模組與編譯參數,避免套件管理器的版本鎖定與殘留相依問題。本配置採用 FSFS 儲存引擎、Apache 2.0 穩定分支、強制 HTTPS 加密、基於路徑的細粒度授權,構成一套生產就緒的 Subversion 服務基礎設施。後續維運重點:定期熱備份 svnadmin hotcopy、監控磁碟空間、升級 OpenSSL 修補安全漏洞、遷移至 Subversion 1.7+ 享受 HTTPv2 與工作副本格式優化。