首先下载将要用的软件
apr, apr-util: http://apr.apache.org/
pcre: http://www.pcre.org/
zlib: http://www.zlib.net/
sqlite: http://www.sqlite.org/
编译安装上述软件, 然后继续
2. 开始安装Apache
检查系统是否已安装了Apache, 有的话先卸载: yum remove httpd
前往Apache官方网站下载: http://httpd.apache.org/
解压:tar -xvf httpd-x.x.x.tar
进入httpd-x.x.x, 执行
./configure --prefix=指定Apache将要被安装到的目录
--with-apr=apr安装目录
--with-apr-util=apr-util安装目录
--with-zlib=zlib安装目录
--with-pcre=pcre安装目录
如果执行上述命令提示还缺少依赖软件则自己再下载加上,我在Red Hat 5.5, Ubuntu12, CentOS 6.3上测试是没问题了。
编译:
make
安装:
make install
如果没有错误发生。至此,Apache就算安装完成了,假设您已经安装到了Apache_Home目录。
测试一下Apache是否安装成功,
进入Apache_Home/bin,
启动Apache服务器:
sudo apachectl restart
浏览器访问: http://localhost, 如果能打开则Apache安装成功。
3. 安装Subversion
前往Subversion官网下载: http://subversion.apache.org/download/
解压:tar -xvf subversion-x.x.x.tar
进入suversion-x.x.x, 执行
./configure --prefix=指定Subversion将要被安装到的目录
--with-apr=apr安装目录
--with-apr-util=apr-util安装目录
--with-zlib=zlib安装目录
--with-sqlite=sqlite安装目录
--with-apxs=Apache_Home/bin/apxs
注意这句是SVN与Apache整合的关键: --with-apxs=Apache_Home/bin/apxsapache , 不加上不会安装SVN的modules到Apache
编译:
make
安装:
make install
如果没有错误发生, 那么Subversion就算安装完成了, 假设您的Subversion安装在Svn_Home目录
可以测试一下SVN:
进入Svn_Home/bin, 执行svn, svnadmin命令试试,没问题就可以跳过了。
我的64位Linux操作系统出现: /usr/lib64/libz.so.1: no version information available (required by ....) 错误, 原因是zlib1.2.3的版本有问题, 需要升级即可。
解决办法: su使用root帐号, 执行删除命令:rm /lib64/libz.so.1 /lib64/libz.so.1.2.3,
复制文件: cp /ZLib_Home/lib/libz.so.1 /lib64/libz.so.1
复制文件: cp /Zlib_Home/lib/libz.so.1.x.x /lib64/libz.so.1.x.x
4. 配置Apache加载SVN
执行: vi apache安装目录/conf/httpd.conf
将#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule dav_module modules/mod_dav.so
修改为:
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_module modules/mod_dav.so
完了再看看apache svn的相关模块有没有加载!如下!(没有则手动加上)
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
5. 新建版本仓库, 并由Apache管理
创建版本仓库
svnadmin create /Program/Server/subversion/repos/javaee --用于存储JavaEE项目的仓库
svnadmin create /Program/Server/subversion/repos/javase --用于存储JavaSE项目的仓库
svnadmin create /Program/Server/subversion/repos/android --用于存储Android项目的仓库
执行上述三条命令,创建了三个svn仓库,目录可以改为你本机的目录。 注意三个仓库父文件夹要相同。
执行命令: vi apache安装目录/conf/httpd.conf
在文件末尾加上<Location/svn> #意味着可以通过像这样的URL(http://MyServer/svn)来访问Subversion版本库
DAV svn # 告诉Apache哪个模块负责服务像那样的URL--在这里就是Subversion模块 SVNListParentPath on
SVNParentPath /Program/Server/subversion/repos #告诉Subversion在目录/Program/Server/subversion/repos 下寻找版本库;只有一个版本仓库就用SVNPath, 直接指向仓库具体目录。
AuthType Basic #启用基本的验证,使用用户名/密码验证
AuthName "please input username/password" # 弹出用户验证对话框时的提示信息
AuthUserFile /Program/Server/subversion/repos/passwd #passwd问密码和用户文件,用来验证用户的用户名及密码
AuthzSVNAccessFile /Program/Server/subversion/repos/access #权限控制文件,限定各个用户或组在版本库中目录的访问权限
Require valid-user #限定用户只有输入正确的用户名及密码后才能访问这个路径
</Location>
6. 用户权限管理 创建passwd文件 AuthUserFile 指向的是passwd的策略文件, 系统用户账户密码保存该文件里 前往apache httpd安装目录 bin\htpasswd -c passwd<username>
比 如: bin\htpasswd -c /Program/Server/subversion/repos/passwd admin
命令分析:
c:\svn\passwd 表示会在/Program/Server/subversion/repos/passwd 目录下创建一个passwd文件
admin 表示用户名 要添加更多用户可以htpasswd /Program/Server/subversion/repos/passwd <username> 创建access文件 AuthzSVNAccessFile 指向的是 authz 的策略文件,详细的权限控制可以在这个策略文件中指定。
[groups]使用 SVNParentPath 代替 SVNPath 来指定多个版本库的父目录时,其中所有的版本库都将按照这个策略文件配置。例如上例中 tony 将对所有版本库里的 /tags 目录具有读写权限。如果要对具体每个版本库配置,用如下的语法:
committers = paulex, richard
developers = jimmy, michel, spark, sean
[/]
* = r
@committers = rw
[javaee:/]
@developers = rw
[javase:/]
tony = rw
[android:/]
* =
@committers= r
[groups]
project1_committers = paulex, richard
project2_committers = jimmy, michel, spark, tony, Robert
[repos1:/]
* = r
@ project1_committer = rw
[repos2:/]
* = r
@ project2_committer = rw
这样项目1的 project1_committer 组只能对 repos1 版本库下的文件具有写权限而不能修改版本库 repos2 ,同样项目2的 project2_commiter 组也不能修改 repos1 版本库的文件。
7. 用MySQL认证Subversion 一般情况下,subversion的用户密码文件是以文本文件形式存放在文件系统中的。出于安全性的需要或者单点登陆等可扩展性的考虑,文本文件的管理方式都不能满足需求了。通过 Apache 的 module_auth_mysql 模块,我们可以用 MySQL 来保存用户信息。该模块的主页在 http://modauthmysql.sourceforge.net/,你也可以在 http://modules.apache.org/ 找到它的发行版本。安装方法同其它 Apache 的模块一样,拷贝至 modules 目录并在 httpd.conf 文件中添加如下语句:
LoadModule mysql_auth_module modules/mod_auth_mysql.so相应的 Location 区域改写为:
<Location /repos/>其中,
AuthName "MySQL Testing"
AuthType Basic
AuthMySQLHost db.kysf.net
AuthMySQLUser svnadmin
AuthMySQLPassword PaSsWoRd #必填项
AuthMySQLDB svn
AuthMySQLUserTable users
AuthMySQLNameField user_name
AuthMySQLPasswordField user_password
AuthMySQLGroupField user_group
AuthMySQLPwEncryption none #必填项
require valid-user
</Location>
AuthMySQLHost db.kysf.netAuthMySQLUser svnadminAuthMySQLDB svnAuthMySQLUserTable usersAuthMySQLNameField user_nameAuthMySQLPasswordField user_passwordAuthMySQLGroupField user_group
这7项可以省略。如果省略系统采用默认的值,其默认值如下:
默认值:
AuthMySQLHost localhost然后在 mysql 中添加名为 svn 的数据库,并建立 users 数据表:
AuthMySQLUser ODBC
AuthMySQLDB test
AuthMySQLUserTable user_info
AuthMySQLNameField user_name
AuthMySQLPasswordField user_password
AuthMySQLGroupField user_group
create database svn; use svn; CREATE TABLE users ( user_name CHAR(30) NOT NULL, user_password CHAR(20) NOT NULL, user_group CHAR(10), PRIMARY KEY (user_name) );
在 users 表中插入用户信息
insert into users values('username','password','group');重新启动 Apache,在访问版本库的时候 Apache 就会用 mysql 数据表中的用户信息来验证了。
8. 集成用户文件(UserFile)认证和MySQL数据库认证
更改Location 区域:
<Location /repos/>
DAV svn
SVNListParentPath on
#SVNPath e:/svn/repos1
SVNParentPath e:/svn
AuthzSVNAccessFile E:/usr/Apache2.2/bin/accesspolicy.conf
Satisfy Any
Require valid-user
AuthType Basic
AuthName "MySQL Auth"
AuthMySQLEnable on
AuthMySQLPwEncryption md5
AuthMySQLAuthoritative off
AuthMySQLHost localhost
AuthMySQLUser svnslt
AuthMySQLPassword list
AuthMySQLDB svn_auth
AuthMySQLUserTable users
AuthMySQLNameField user_name
AuthMySQLPasswordField user_passwd
AuthMySQLGroupTable groups
AuthMySQLGroupField user_group
AuthUserFile E:/usr/Apache2.2/bin/passwd.conf
</Location>
说明:
既可以用数据库中的用户名认证,也可以用文件中的用户名认证。如果数据库认证失败,就由用户文件认证。不过最好把用户文件和数据库中的用户名设为一致,防止单点失败。