Subversion和Apache、apr、apr-util的关系
目录
SVN 服务器和客户端的关系
SVN 服务器
可选 Apache:Subversion 服务器本身不需要 Apache,但可以选择使用 Apache 来支持 HTTP(S) 访问。
访问方式选择:
- file:// 或 svn://:只需安装 SVN,使用
svnserve服务,无需 Apache - http:// 或 https://:必须安装 Apache,配置 SVN 的 Apache 模块
SVN 客户端
Windows 平台:安装 TortoiseSVN,开发者已处理所有依赖关系,一个软件搞定。
Linux/Unix 平台:根据访问协议类型有不同要求:
- file:// 或 svn://:只需编译安装 SVN
- http://:需要与 neon 库编译
- https://:需要与带 SSL 支持的 neon 库编译
- 任何协议:都需要与 apr 和 apr-util 库编译
依赖获取:Subversion 官方发布的代码中通常包含 subversion-deps-xxx.tar.bz2 文件(如 1.4.3 版本对应 subversion-deps-1.4.3.tar.bz2),内含 neon、apr、apr-util 等依赖库。
完整编译部署指南
准备安装包
推荐使用的版本组合:
Apr: apr-1.2.11.tar.gz 和 apr-util-1.5.2.tar.gz
Apache: httpd-2.2.25.tar.gz
Subversion: subversion-1.6.5 和 subversion-deps-1.6.5.tar.gz
Zlib: zlib-1.2.8.tar.gz
Sqlite: sqlite-autoconf-3080002.tar.gz
注意:编译过程中可能提示缺少其他包,根据提示逐一安装。
分步编译
1. 安装 apr-1.2.11
tar –zvxf apr-1.2.11.tar.gz
cd apr-1.2.11
./configure
make
make install
默认安装到 /usr/local/apr
2. 安装 apr-util-1.2.11
tar –zvxf apr-util-1.2.11.tar.gz
cd apr-util-1.2.11
./configure --with-apr=/usr/local/apr
make
make install
3. 安装 Sqlite
tar -zxvf sqlite-autoconf-3080002.tar.gz
cd sqlite-autoconf-3080002
./configure --prefix=/usr/local/sqlite
make
make install
4. 安装 Apache httpd-2.2.25
tar –zvxf httpd-2.2.25.tar.gz
cd httpd-2.2.25
./configure \
--prefix=/usr/local/apache \
--with-apr=/usr/local/apr/bin/apr-1-config \
--with-apr-util=/usr/local/apr/bin/apu-1-config \
--enable-dav \
--enable-maintainer-mod \
--enable-rewrite \
--enable-so \
--with-sqlite=/usr/local/sqlite
make
make install
启动 Apache 并验证:
/usr/local/apache/bin/apachectl -k start
# 访问 http://localhost/ 应看到 "it works"
注意:--with-apr 和 --with-apr-util 参数在编译错误时可省略。
5. 安装和配置 Subversion
tar –zvxf subversion-1.6.5.tar.gz
tar –zvxf subversion-deps-1.6.5.tar.gz
# 两个压缩包会解压到同一个 subversion-1.6.5 目录
cd subversion-1.6.5
./configure \
--prefix=/usr/local/svn \
--with-apxs=/usr/local/apache/bin/apxs \
--with-apr=/usr/local/apr/bin/apr-1-config \
--with-apr-util=/usr/local/apache/bin/apu-1-config \
--with-zlib=/usr/local/zlib-1.2.8 \
--enable-maintainer-mode \
--with-sqlite=/usr/local/sqlite
make
make install
验证安装:
/usr/local/svn/bin/svnserve --version
应看到相关版本信息。
验证 Apache 模块加载:
# 检查 httpd.conf 中是否包含
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
建立和配置 SVN 版本库
创建版本库
/usr/local/svn/bin/svnadmin create /svn/project/www
ls /svn/project/www
# 应显示 db, hooks, locks, format 等文件/目录
导入项目文件
/usr/local/svn/bin/svn import /share/www \
file:///svn/project/www \
-m "Initial import"
此操作将 /share/www 下的文件导入到版本库,修订版为 1。
配置权限
设置目录权限为只有 Apache 用户可访问:
chmod -R 700 /svn/project
chown -R apache:apache /svn/project
重要:直接 chmod 会导致 SVN 客户端无法访问,需要修改 Apache 用户配置。编辑 /usr/local/apache/conf/httpd.conf:
User apache
Group apache
如果系统没有 apache 用户和组,需要先创建:
useradd apache
groupadd apache
Apache 支持 SVN 的配置
编辑 /usr/local/apache/conf/httpd.conf,文件末尾添加:
<Location /svn>
DAV svn
SVNPath /svn/project/www
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /usr/local/apache/svn-auth-file
AuthzSVNAccessFile /usr/local/apache/auth.conf
Require valid-user
</Location>
说明:
DAV svn:启用 WebDAV 支持 SVNSVNPath:版本库根目录AuthUserFile:用户密码文件(由 htpasswd 生成)AuthzSVNAccessFile:权限控制文件
用户和权限管理
添加用户
# 首次创建用户文件(使用 -c 标志)
/usr/local/apache/bin/htpasswd -c /usr/local/apache/svn-auth-file user1
# 后续添加用户(不使用 -c)
/usr/local/apache/bin/htpasswd /usr/local/apache/svn-auth-file user2
配置权限控制
编辑 /usr/local/apache/auth.conf:
[groups]
Admin = user1,user2
Develop = u1,u2
[www:/]
user1 = rw
user2 = r
@develop = rw
[/]
* = r
说明:
[groups]:定义用户组[www:/]:对版本库 www 根目录的权限[/]:对所有版本库的权限rw表示读写,r表示只读@groupname表示整个组
重要:authz.conf 文件中所有行必须顶头写,不能有缩进,否则报错。
启动服务
# 重启 Apache
/usr/local/apache/bin/apachectl -k restart
# 启动 SVN svnserve(可选,用于 svn:// 访问)
/usr/local/svn/bin/svnserve -d -r /svn/project
# 验证
ps -ef | grep svnserve
访问 SVN 版本库
通过 HTTP 访问:
http://192.168.0.1/svn/www
会提示输入用户名和密码。输入后可以看到版本库中的内容。
调试常见问题
查看 Apache 是否安装及版本
# 如果是自动安装的 Apache
apachectl -v
# 如果是源码编译
/usr/local/apache2/bin/apachectl -v
# 或查看配置文件位置
apachectl -c
RPM 安装的 Apache
rpm -q httpd
附录:Linux 下查看 Apache 配置
通过 SSH 查看远程 Linux 上的 Apache 信息:
# 查看是否安装及版本(RPM 安装)
rpm -q httpd
# 查看源码安装的版本和路径
apachectl -v
apachectl -c
通常源码编译的 Apache 安装在 /usr/local/apache2/bin/apachectl。