网络上关于这种的手册和说明很多很多,我这个也是根据网上的说明加上自己的实践整理出来的,适合初学者。同时,各位自己使用的时候,请注意各自的版本和环境。
要求:能够允许通过http协议访问版本库,并能统一管理各个仓库的用户和权限。
环境:
RedHat 5.4
jdk 1.6
软件:
subversion-1.6.17.tar.gz
下载地址:http://subversion.tigris.org/downloads/subversion-1.6.17.tar.gz
subversion-deps-1.6.17.tar.gz
下载地址:http://subversion.tigris.org/downloads/subversion-deps-1.6.17.tar.gz
httpd-2.2.19.tar.gz
下载地址:http://httpd.apache.org/download.cgi
sqlite-3.6.17
安装步骤:
注意:安装之前,最好检查一下操作系统中是否有expat的包,主要是用来解析xml用得,如果有,要确认一下是否是2.x的包,如果是1.x的包,最好去下载一个2.x的包进行安装后,再进行下面的安装。
将这四个软件上传到linux服务器的/tmp目录下新建的svn目录。
使用root用户登录系统,在/tmp/svn目录下,将三个包解开:
tar zxvf subversion-1.6.17.tar.gz
tar zxvf subversion-deps-1.6.17.tar.gz
tar zxvf httpd-2.2.19.tar.gz
得到两个文件夹:httpd-2.2.19和subversion-1.6.17
在安装之前,要先确保jdk已经安装完成,我这里使用的是jdk1.6:jdk-6u2-linux-i586-rpm.bin,安装在/usr/java目录中。
设置环境变量,编辑/etc/profile文件,在其中增加:
- export JAVA_HOME=/usr/java/jdk1.6.0_02
使用root用户执行httpd和svn的安装工作。
因为都是源码包安装,所以要先进行编译和安装,首先进入httpd-2.2.19目录,执行
- # ./configure --prefix=/usr/local/apache2 --enable-so --enable-dav --enable-dav-fs --enable-maintainer-mode
- # make
- # make install
注意:执行make和make install前,一定要查看前一步的执行结果是否存在error之类的错误,如果存在,先找到原因,然后再重新执行前一步操作,都成功后,再进行一步操作。
执行完了之后,/usr/local/apache2下面的目录结果如下:
- bin cgi-bin error icons lib man modules
- build conf htdocs include logs manual
为了便于管理,所以,需要将apache2交给apache用户管理,所以,先创建apache组和apache用户。
创建完成后,将/usr/local/apache2目录下所有文件的属组改为apache
执行:
- # chown -R apache:apache apache2
为了便于apache组用户的访问,建议,将这些目录属性改为755.
因为安装svn需要用到sqlite3库,所以,先到sqlit3目录下编译出sqlite3.c文件。在sqlite-3.6.17目录下执行:
- # ./configure
- # make
- # make install
编译成功,会生成一个sqlite3.c文件,将该文件拷贝到
/tmp/svn/subversion-1.6.17/sqlite-amalgamation目录下即可。
在subversion-1.6.17目录下执行:
- # ./configure --prefix=/usr/local/svn --with-apxs=/usr/local/apache2/bin/apxs --with-apr=/usr/local/apache2/bin/apr-1-config --with-apr-util=/usr/local/apache2/bin/apu-1-config
- # make
- # make install
注意:编译的时候,可能会提示
- configure: error: no XML parser was found: expat or libxml 2.x required
此时,需要安装libxml2-2.6.32,具体版本可以任意,但是必须是2.0以上的。先将libxml2-2.6.32编译安装,然后重新执行./configure --....命令
编译的时候,如果提示/usr/bin/m4之类的错误,可能是redhat 系统自带的 autoconf 版本低,需要执行
- aclocal
- autoconf
- automake --add-missing
- autoconf
然后再次至此那个libxml的编译安装即可。
执行成功后,在/usr/local/svn目录下其结构如下:
- bin include lib man share
编辑apache的配置文件httpd.conf中的一些内容,如果安装正常的话,在该文件中村中如下的内容:
- LoadModule dav_svn_module modules/mod_dav_svn.so
- LoadModule authz_svn_module modules/mod_authz_svn.so
如果没有这两条,则手工添加。
继续:添加如下代码到httpd.conf文件中
- <Location /svn/>
- DAV svn //定义需要管理的服务
- SVNListParentPath On //允许查看父目录列表
- SVNParentPath /home/svn //指定父目录
- Satisfy Any
- AuthType Basic
- AuthName "SVN REPOS"
- AuthUserFile /usr/local/svn/svn_passwdfile //定义用户密码文件
- AuthzSVNAccessFile /usr/local/svn/svn_accessfile //定义用户访问权限文件
- Require valid-user //需要验证用户,设置后不允许匿名访问
- </Location>
修改apahce管理的用户名和组:
- User svn
- Group apache
保存httpdb.conf文件并退出。
添加用户和密码及权限分配,修改之前定义的文件
#/usr/local/apache2/bin//htpasswd -c svn_passwdfile test
添加一个test用户到文件中,同时需要在提示下输入密码。
注意,第一次需要用到-c参数,之后,使用时,只需要加-m参数即可。
为了便于管理,我们创建一个svn用户,将所有仓库都建立在这个用户下,执行
- # useradd -g apache -d /home/svn svn
设置svn目录的权限为775.
使用svn用户登录,执行
- $svnadmin create test
创建一个test的仓库。
添加test用户的访问权限,使用root用户,编辑svn_accessfile文件。
类似于原来svn目录下,authz的格式。
[/]表示仓库的根目录,这里可以指的是父目录。
[test:/]表示的是test仓库的根目录。
test = rw 表示test用户对该仓库有读写的权限。
设置好了之后,启动apache。
#/usr/local/apache2/bin/httpd -k start
在浏览器中,使用http://ip地址/svn/访问
问题的处理:
不管是浏览器还是svn工具访问仓库,提示svn: Could not open the requested SVN filesystem的信息,可能存在这几个方面的原因,大家可以参考一下。
一个是你创建版本库的工具比svn服务器的版本高;
一个是你本机上得卡巴斯基的问题,可以尝试关闭后连接;
一个是你存放仓库的主目录对apache用户组没有可执行的权限,可以尝试对仓库的主目录执行chmod g+x 命令。