应领导的要求,开发一个源码托管平台,当然还是lamp架构,对于源码的管理,我选择了SVN服务。刚开始我将apache与svn分别安装,但如此便不利于我对svn仓库的管理,如创建仓库、添加用户等,更重要的是svn面向整个互联网,需要走http协议,这不符合网站的要求,推到重来,配置apache+svn。
1、svn独立配置
使用软件:subversion-1.6.5.tar.gz 下载地址:http://subversion.tigris.org/downloads/subversion-1.6.5.tar.gz
subversion-deps-1.6.5.tar.gz 下载地址:http://subversion.tigris.org/downloads/subversion-deps-1.6.5.tar.gz
编译: tar -xzf subversion-1.6.5.tar.gz
tar -xzf subversion-deps-1.6.5.tar.gz
subversion-deps包有四个目录zlib apr apr-util neon这四个目录都是依赖包,编译subversion所必须的代码
#cd subversion-1.6.5
#./configure --prefix=/usr/local/svn --without-berkeley-db --with-zlib=/usr
#make
#make install
测试:#/usr/local/svn/bin/svnserve –version
如果显示如下,安装成功: svnserve, version 1.6.5 (r21228)
配置:建立版本库目录,可建多个: #./mkdir -p /svndata/ 建立版本库:
#cd /usr/local/svn/bin #./svnadmin create /svndata/test
修改版本库配置文件: #vi /svndata/test/conf/svnserve.conf
[general] anon-access = none auth-access = write password-db = /svndata/test/conf/pwd.conf authz-db = /svndata/test/conf/authz.conf realm = repos
配置允许访问的用户: #vi /svndata/test/conf/pwd.conf
注意:对用户配置文件的修改立即生效,不必重启svn。 文件格式如下: [users] <用户1> = <密码1> <用户2> = <密码2> 其中,[users]是必须的。下面列出要访问svn的用户,每个用户一行。示例: [users] xinjie = 123456
文件中定义用户组和版本库目录权限。 注意: * 权限配置文件中出现的用户名必须已在用户配置文件中定义。 * 对权限配置文件的修改立即生效,不必重启svn。 用户组格式: [groups] <用户组名> = <用户1>,<用户2> 其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔。 版本库目录格式: [<版本库>:/项目/目录] @<用户组名> = <权限> <用户名> = <权限> 其中,方框号内部分可以有多种写法: /,表示根目录及以下。根目录是svnserve启动时指定的,我们指定为/svndata。这样,/就是表示对全部版本库设置权限。 test1:/,表示对版本库1设置权限 test2:/abc, ,表示对版本库2中的abc项目设置权限 test2:/abc/aaa, ,表示对版本库2中的abc项目的aaa目录设置权限 权限主体可以是用户组、用户或*,用户组在前面加@,*表示全部用户。权限可以是w、r、wr和空,空表示没有任何权限。 示例: [groups] admin = alan [/] @admin = rw [test1:/abc/aaa] king = rw [test2:/pass]
*=r king = rw
启动:svnserve -d –listen-port 9999 -r /svndata
-d表示以daemon方式(后台运行)运行 –listen-port 9999表示使用9999端口,可以换成你需要的端口。-r /svndata指定根目录是/svndata
2、apache+svn安装
使用软件:httpd-2.2.6.tar.gz
subversion-1.4.5.tar.gz
先安装apache这个没什么好说的。有一点千万要注意,在编辑的时候,一定要加入--enable-dav --enable-so,要不会出现apache不能调用modlues的错误。
我的configure如下:
./configure --prefix=/usr/local/apache --with-mpm=worker --disable-userdir --enable-ssl --enable-headers --enable-deflate --enable-expires --enable-dav --enable-so --disable-status --disable-autoindex --disable-asis --enable-nonportable-atomics=yes
下面安装Subversion # tar xvzf subversion-1.4.5.tar.gz # cd subversion-1.4.5 # ./configure --with-apxs=/usr/local/apache2/bin/apxs --prefix=/usr/local/subversion --with-apr=/usr/local/apache2 --with-apr-util=/usr/local/apache2 --with-ssl --with-zlib --enable-maintainer-mode # make # make install //创建库文件所在的目录 (要svnroot用户进行下面的操作) # mkdir /home/svnroot/repository //进入subversion的bin目录 # cd /usr/local/subversion/bin //创建"test"仓库 # ./svnadmin create /home/svnroot/repository/test //进入到数据仓库"test"目录 # cd /home/svnroot/repository/test //看看是不是多了些文件,如果是则说明Subversion安装成功了 # ls –l //不让其他人有该目录的权限 # chmod 700 /home/svnroot/repository //**注意,直接这么chmod会导致svn客户端无法访问,需要修改apache配置文 件httpd.conf文件: User daemon //将daemon改为svnroot,让apache进程以svnroot的身份运行 Group daemon //把上述内容改成: User svnroot Group svnroot //修改svn仓库的所有者 # chown -R svnroot: svnroot /home/svnroot/repository //修改该目录权限只能svnroot拥有 # chmod 700 /home/svnroot/repository 5. 修改Apache配置文件 # cd /usr/local/apadche2/bin # ./apachect1 stop //停止Apache进程 vi /usr/local/apache2/conf/httpd.conf //在最下面添加 ,如果你的里面没有这两个模块的话 LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so DAV svn SVNParentPath /home/svnroot/repository/ //svn父目录 AuthzSVNAccessFile /home/svnroot/repository/authz.conf //权限配置文件 AuthType Basic //连接类型设置 AuthName "clo.com.cn" //连接框提示 AuthUserFile /home/svnroot/repository/authfile //用户配置文件 Require valid-user //采用何种认证 //其中authfile是通过"htpasswd [–c] /home/svnroot/repository/authfile username password"来创建的 , username指的是用户svnroot,密码也是他的。 //"Require valid-user"告诉apache在authfile中所有的用户都可以访问。如果没有它,则只能第一个用户可以访问新建库
注意:如果想所有人都有svn的访问权限。httpd.conf需要做如下修改
AuthzSVNAccessFile /home/apache2.2.6/htdocs/svndata/authz.conf <LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept>
//启动apache服务 # /usr/local/apache2/bin/apachectl start //打开浏览器访问 http://localhost/svn/test/ ,如果有东西显示就说明成功。 6. 权限管理(即authz.conf的配置) 1)增加用户 # htpasswd [-c] /home/svnroot/repository/authfile user1 //第一次设置用户时使用-c表示新建一个用户文件。回车后输入用户密码,完成对用户的增加,此时是要用root的权限来添加的,添加完后在 authfile中看到用户和加密的密码。 # htpasswd /home/svnroot/repository/authfile 用户名(加入新的用户) //如:"htpasswd /home/svnroot/repository/authfile user2" 2)权限分配(可以根据自己的情况来处理,也可看网上的) # vi /home/svnroot/repository/authz.conf [groups] //这个表示群组设置 Tester = test,svnroot,nbj,user1,user2 //这个表示某群组里的成员 #anonymous = guest [test:/] //这表示,仓库test的根目录下的访问权限 @Tester = rw //test仓库Tseter组中用户具有读和写权限 * = r //test仓库中所有用户具有读的权限 [document:/] //这表示,仓库document的根目录下的访问权限 @Tester = rw //test仓库Tseter组中用户具有读和写权限 #@anonymous = r * = r //test仓库中所有用户具有读的权限 //注意:在编辑authz.conf文件时,所有行都必须要顶头写,不能有缩行出现,否则会报错:"Access denied: 'user1' "。