linux+apache+subversion版本控制

1、下载安装包

apache的下载地址:http://httpd.apache.org/download.cgi

subversion的下载地址:http://subversion.tigris.org/project_packages.html

本文选择的安装包为httpd-2.2.15.tar.gz和subversion-1.6.17.tar.gz、subversion-deps-1.6.17.tar.gz。

2、安装apache

#tarxvzfhttpd-2.2.15.tar.gz

#cdhttpd-2.2.2

#./configure--prefix=/usr/local/apache2/--enable-so--enable-dav

     --prefix为指定apache的安装位置,后面两个参数则是设置开启相关功能模块。

     apache的功能模块配置很灵活,具体的可以使用# ./configure --help命令查看。

#make&&makeinstall

设置开机启动

#echo'/usr/local/apache2/bin/apachectlstart'>>/etc/rc.local

3、安装subversion

在安装subversion之前,先安装一些依赖包

#yuminstallopenldap-develzlib-develexpat-developenssl-devel

安装

#tarxvzfsubversion-1.6.17.tar.gz

#tarxvzfsubversion-deps-1.6.17.tar.gz

#cdsubversion-1.6.17

     # ./configure --prefix=/usr/local/subversion --with-apxs=/usr/local/apache2/bin/apxs

        --with-apr=/usr/local/apache2 --with-apr-util=/usr/local/apache2

        --with-ssl --with-zlib=/usr/local/zlib --enable-maintainer-mode

#make&&makeinstall

//如果出现类似错误,请修改seclinux的设置。

     // 错误:error while loading shared libraries: /usr/local/software/subversion-1.6.17/subversion

     /libsvn_subr/.libs/libsvn_subr-1.so.0: cannot restore segment prot after reloc: Permission denied 

#vi/etc/selinux/config

找到SELINUX=enforcing改为SELINUX=disabled

#vi/etc/sysconfig/selinux

如果找到SELINUX=enforcing也改为SELINUX=disabled

设置

#PATH=$PATH:/usr/local/subversion/bin

#mkdir/var/svnroot

//创建项目仓库sesame

#svnadmincreate/var/svnroot/sesame

//导入项目文件,假设/tmp下由一个sesame目录,里面有几个文件。

#svnimport/tmp/sesamefile:///var/svnroot/sesame-m"注释"

     // 由于apache安装后默认执行程序的用户和组为daemon

     // 为了避免访问权限上的错误将修改项目仓库的所属用户及组别。

#cd/var/svnroot

#chown-Rdaemonsesame

#chgrp-Rdaemonsesame

4、设置subversion访问权限

1)增加subversion用户

#htpasswd-c/var/svnroot/authfilewumh

第一次设置用户时使用-c参数,表示新建一个用户文件。回车后输入用户密码,完成对用户的增加。

//增加第二个或更多用户时,只需要执行类似如下的命令

#htpasswd/var/svnroot/authfileusername

2)权限分配

#vi/home/svnroot/authz

[sesame:/]//仓库sesame根目录访问权限

wumh=rw//sesame仓库wumh具有读和写权限

zhangs=r//test仓库zhangs只有读权限

[aladdin:/]//仓库aladdin根目录访问权限

wumh=r//wumh在aladdin只有读权限

zhangs=//zhangs在aladdin无任何权限

相关说明:

[/]//这个表示在所有仓库的根目录下

*=r//这个表示对所有的用户都具有读权限

[groups]//这个表示群组设置

dev=wumh,zhangs

test=zhangs

[aladdin:/]

@dev=rw//前面的@符号,表示这是个群组权限设置

5、修改apache配置

#vi/usr/local/apache2/conf/httpd.conf

//在最下面添加

<Location/svn>

DAVsvn

SVNParentPath/var/svnroot//svn父目录

AuthzSVNAccessFile/var/svnroot/authz//权限配置文件

AuthTypeBasic//连接类型设置

AuthName"Subversion-authz.df3c"//连接框提示

AuthUserFile/var/svnroot/authfile//用户配置文件

Requirevalid-user//采用何种认证,valid-user告诉apache在authfile中所有的用户都可以访问。

</Location>

    

       相关说明:

SVNParentPath:支持多个具备相同父目录的bubversion版本库。

SVNPath:只支持一个父目录的Subversion版本库

SVNPath/svn/svnroot/sesame#如果你想对每个项目单独配置,使用该项

     SVNParentPath  /svn/svnroot #设定一个根,所有项目均放在此目录下

     如果设置为SVNParentPath,当访问http://192.168.1.200/svn时,会报forbidden错误。

     须要输入包含项目仓库名的地址http://192.168.1.200/svn/sesame。

配置用域名访问

去除虚拟目录设置<Location/svn>里的“svn”,再在虚拟主机设置中增加域名配置。如下:

<Location/>

DAVsvn

SVNParentPath/var/svnroot

AuthzSVNAccessFile/var/svnroot/authz

AuthTypeBasic

AuthName"Subversion-authz.abc"

AuthUserFile/var/svnroot/authfile

Requirevalid-user

</Location>

<VirtualHost*:80>

[email protected]

DocumentRoot/var/svnroot

ServerNamecode.abc.com

</VirtualHost>

6、其它

       1) 当你配置了SSL来提高版本库安全时,你可能想禁用无SSL的http访问方式,而只允许通过https访问。

      要达到这种效果,你要在<Location>块加入另外一个指示器SSLRequireSSL。    

<Location/svn>

SSLRequireSSL

      </Location>

     

      apache的ssl配置,可以查看博文《linux+apache+ssl的安装配置》,里面有详细说明。

        2) 出现“attempt to write a readonly database”错误

        在subversion 1.6之后,后端数据库使用sqlite。然而sqlite创建文件的时候,并没有按照umask去创建正确权限位的文件。这样就导致svn仓库项目下的db/rep-cache.db不具备组可写权限。解决如下:

           # cd repspath 

        # chmod 664 rep-cache.db

相关推荐