1. 安装环境
Apache/Mysql/PHP这些在安装系统的时候安装上就OK了,如果没安装在系统里rpm安装上就可以了,下面是我安装apache,mysql,php,subversion以及svnmanager的版本:
Linux AS 4 我虚拟机里面有的,就没有更新到AS5之类最新的系统了
Apache 2.0.52 安装AS4时自带的,如果没有可以下一个AS4带的RPM包安装
Mysql-5.1.19 用RPM包安装的,如果缺少什么就自己到网上下载吧
subversion-1.4.6 也是通过现成的RPM包安装的
php-5.2.9 下载的RPM包安装,需要三个包,下载地址分别为:ftp://ftp.pbone.net/mirror/rpms.famillecollet.com/el4.i386/php-5.2.9-1.el4.remi.i386.rpm
ftp://ftp.pbone.net/mirror/rpms.famillecollet.com/el4.i386/php-cli-5.2.9-1.el4.remi.i386.rpm
ftp://ftp.pbone.net/mirror/rpms.famillecollet.com/el4.i386/php-common-5.2.9-1.el4.remi.i386.rpm
VersionControl_SVN-0.3.1 其实可以通过pear工具从服务器下载自动安装,不过还是自己下了一份,直接拷贝到svnmanager目录下面也可以用
pear-1.4.3 我安装好系统后,有一个自带的,但是版本太老,需要进行更新,方法后面给出
svnmanager-1.05 下载源码,然后直接解压到/var/www/html/下,更名为svnmanager即可,不过配置它的config.php也是很麻烦的,后面介绍
2. Subversion部署
首先先来部署Subversion,我直接下载了一个RPM包,subversion-1.4.6-1.i386.rpm,运行如下命令即可安装:
#rpm -ivh subversion-1.4.6-1.i386.rpm
安装过程中可能提示缺少如下包,请自己到网上下载:
apr-0.9.12-2.i386.rpm
apr-util-0.9.12-1.i386.rpm
subversion-1.4.6-1.i386.rpm
subversion-debuginfo-1.4.6-1.i386.rpm
subversion-devel-1.4.6-1.i386.rpm
subversion-perl-1.4.6-1.i386.rpm
subversion-tools-1.4.6-1.i386.rpm
swig-1.3.25-1.i386.rpm
如果AS4系统里面已经存在某个包的低级版本,请先卸载掉 rpm –e。
安装完以后,我们后面装svnmanager要用到的svn和svnadmin等命令都默认安装到/usr/bin目录下了。
接下来是要做Subversion的系统配置了,有些网上的配置说明中,将svn相关的配置都写到httpd.conf当中,其实直接在/etc/httpd/conf.d下配置subversion.conf就可以了,httpd.conf会自动的将conf.d下的配置文件加载起来的。
下面是我的配置文件内容,其中红色字体部分需要注意,这些内容可以根据你自己的情况进行调整的。我这里就直接给出了最终的完整配置,我自己配的时候,从网上找的内容都是七零八落的,不是这里错了就是那里错,所以我一次性给出最终答案,方便大家使用。
#################### /etc/httpd/conf.d/subversion.conf ###################
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
#通过像这样的URL(http://MyServer/svn)来访问Subversion版本库
<Location /repos>
#告诉Apache哪个模块负责服务上面的URL-在这里就是Subversion模块
DAV svn
#告诉Subversion在目录/svn/repos下寻找版本库,这是版本库的父目录
SVNParentPath /svn/repos
#版本库必须通过SSL连接才能访问,URL中必须加入HTTPS
SSLRequireSSL
#启用基本的验证,比如用户名/密码对
AuthType Basic
AuthName "subversion repository"
#用这个密码文件来验证用户,这个文件由svnmanager来维护,下面讲述如何创建它
AuthUserFile /svn/repos/passwdfile
#控制这个用户的访问权限,这个文件由svnmanager来维护
AuthzSVNAccessFile /svn/repos/accessfile
#限定用户只有输入正确的用户名及密码后才能访问这个路径
Require valid-user
</Location>
#http权限控制增加如下内容,以加强安全控制
<Directory "/var/www/html/svnmanager/">
AllowOverride None
Order deny,allow
Deny from all
Allow from all
</Directory>
#####################################################################
为了验证你的subversion与apache是否可以正常工作,在配置好svnmanager之前,先用subversion带的工具创建一个版本库,命令如下:
#svnadmin create /svn/repos/testrepos
#chown –R apache.apache /var/svn/repos/testrepos
#/etc/rc.d/init.d/httpd start
用本机的浏览器访问http://127.0.0.1/repos/testrepos,若通过Apache可以访问到则证明Apache与Subversion的结合配置正确。
3. 安装SVNManager
准备SVNManager源代码包(v1.05):下载地址:http://nchc.dl.sourceforge.net/sourceforge/svnmanager/svnmanager-1.05.tar.gz
将文件解压至/var/www/html下:
#tar –xvzf svnmanager-1.05.tar.gz
#mv svnmanager-1.05 /var/www/html/svnmanager
SVNManager需要通过php-pear安装一个叫VersionControl_SVN的。你的机器必须连接上互联网,并执行如下命令:
#pear install --alldeps VersionControl_SVN-0.3.1.tgz
注意,我在我的AS4系统上执行上面的指令总是不成功,报告如下错误:
HTTP error, got response: HTTP/1.1 410 Gone
Didn't receive 200 OK from remote server. (HTTP/1.1 410 Gone)
这就说明可能是机器上的pear工具版本太低了,与服务器之间的网络协议不匹配,所以如果出现上述错误,请先升级pear工具本身,方法如下:
$ pear upgrade --force http://pear.php.net/get/PEAR-1.3.3
$ pear upgrade --force http://pear.php.net/get/Archive_Tar http://pear.php.net/get/XML_Parser http://pear.php.net/get/Console_Getopt-1.2.2
$ pear upgrade --force http://pear.php.net/get/PEAR-1.4.3.tar
$ pear upgrade PEAR
然后再执行VersionControl_SVN-0.3.1的安装:
#pear install --alldeps VersionControl_SVN-0.3.1.tgz
4. 为SVNManager创建数据库
为SVNManager创建访问用户及数据库:
#mysql –u root –p
Mysql>create database svnmanager;
Mysql>grant all privileges on svnmanager.* to svnmanager@localhost identified by ‘[访问用户密码]’;
Mysql>flush prifileges;
Mysql>quit;
全部执行成功后,svn数据库svnmanager创建成功,用户名是svnmanager。
5. 增加权限配置
这一段我就不写了,实际就是在/etc/httpd/conf.d/subversion.conf中的那些内容,不过这里还需要你来手动的创建用户密码文件和访问控制文件,这里我们假定svn代码库的根目录是/svn/repos,密码文件passwdfile以及访问控制文件accessfile
#cd /svn/repos
#chown –R apache.apache passwdfile
#chown –R apache.apache accessfile
6. 配置svnmanager
svnmanager的配置文件在/var/www/html/svnmanager目录下,有一个config.php.linux和config.php.win,分别针对Linux和Windows操作系统下的配置模板,请将config.php.linux拷贝一份,并重命名为config.php。
下面是我的/var/www/html/svnmanager/config.php文件中的全部配置信息,如下:
$htpassword_cmd = "/usr/bin/htpasswd";
$svn_cmd = "/usr/bin/svn";
$svnadmin_cmd = "/usr/bin/svnadmin";
$svn_repos_loc = "/svn/repos";
$svn_passwd_file = "/svn/repos/passwdfile";
$svn_access_file = "/svn/repos/accessfile";
$smtp_server = "smtp.domain.org";
$dsn = "mysql://svnmanager:[password]@localhost/svnmanager";
//Administrator account
$admin_name = "admin";
$admin_temp_password = "admin";
启动Apache、Mysql,并访问http://localhost/svnmanager,初始用户名称为admin,密码为admin,此时你必须创建一个系统管理员,否则是看不到版本库管理菜单的。创建管理员用户后admin帐号失效。至此整个服务部署完毕。
7. 遇到的问题及解决方法
整个的安装过程中,包括apache,mysql,php以及subversion都没有遇到太大的问题,但是安装和部署svnmanager时遇到不少问题,说明这个开源工具还是存在很多不理想的地方,通过上面的努力,我们已经可以正常的看到svnmanager的主页了,用新建立的管理员登录进去以后,可以创建新的用户、组以及版本库,并且可以给每一个版本库以及下属的子目录分配权限。
问题1,在点击创建版本库以后,系统提示创建成功,而我在/svn/repos下却找不到创建出来的版本库目录,而 accessfile里面已经出现了刚刚创建的版本库名称以及默认的用户权限。
问题2,在给用户分配权限的时候报错如下:
svn: Can't open file '/root/.subversion/servers': Permission denied (cmd: usr/bin/svn list --non-interactive file:///svn/repos/testrepos)
Command used: /usr/bin/svn list --non-interactive file:///svn/repos/testrepos
在网上查阅了资料,发现这两个问题其实是一个问题,解决的方法是:
1) 在svnmanager的config.php文件中:
将$svnadmin_cmd = "/usr/bin/svnadmin";改为如下内容:
$svn_config_dir='/tmp';
$svnadmin_cmd="/usr/bin/svnadmin --config-dir /tmp";
2) 进入/var/www/html/svnmanager/svnmanager/RepositoryModule目录,
编辑如下两个文件,UserPrivilegesEditPage.php的249行 和GroupPrivilegesEditPage.php中的243行,替换$switches=array();为$switches=array('config_dir'=>$svn_config_dir);
由于svnmanager刚刚装好,所以目前遇到的问题就这些,可能在后续使用过程中还会遇到新问题,那是再进一步补充这个文档。