一、环境Centos5.5+apache+subversion+mysql+php 这些都是系统安装时,一起安装上的,没有什么好说的。 除了上面的软件外,还有几个包关系到后面的安装:php-mysqlphp-pearmod_dav_svn 通过如下命令检查:#rpm -qa |grep php#rpm -qa |grep mod_dav_svn 没有安装的话,用安装盘或yum安装就行。yum install subversion httpd php mysql-server mod_dav_svn php-mysql php-pear php-mbstring
二、集成SVN和Apache 1.创建仓库
#mkdir -p/var/svn/repos
#svnadmin create /var/svn/repos/test
#chown -R apache:apache /var/svn
2.配置apache
添加如下内容:vi /etc/httpd/conf/httpd.conf
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so #svn使用,顺序也要这样 如果添加这两行在重启httpd的时候提示已经在运行了就说明这两个不用添加可以再删除掉
<Location /svn/>
DAV svn
SVNListParentPath on
SVNParentPath /var/svn/repos #仓库路径
AuthType Basic
AuthName "ZGSM SVN"
AuthUserFile /var/svn/passwdfile
AuthzSVNAccessFile /var/svn/accessfile
Require valid-user
</Location>
还有个修改下 ServerName localhost:80,不然启动时会出错。
3.创建密码文件及访问文件
#touch /var/svn/passwdfile
#touch /var/svn/accessfile
#chown apache:apache passwdfile accessfile
4.启动apache并验证svn
#service httpd start
在浏览器里输入http://192.168.254.128/svn/test,看是否有提示输入用户名密码,有吗?哈哈
这个只是测试提示就好了,应为你没有添加用户密码所以。。。。。呵呵
三、安装和配置svnmanager
1.下载svnmanager http://nchc.dl.sourceforge.net/sourceforge/svnmanager/svnmanager-1.03.tgz 也可到这个网站找最新版本的下载
解压并放置到/var/www/html/下#tar zxvf svnmanager-1.03.tgz#mv svnmanager-1.03 svnmanager#mv svnmanager /var/www/html/
2.安装VersionControl_SVN 还记得我们最开始提到的php-pear包,安装这个包后会有/usr/bin/pear命令,我们使用它来安装VersionControl_SVN,最新的版本为0.3.3,输入下面的命令:#pear install --alldeps VersionControl_SVN-0.3.3 <http://pear.php.net/package/VersionControl_SVN> 看到这个网站下载最新版本
3.向http.conf文件添加新内容#vi /etc/httpd/conf/httpd.conf 添加如下内容是为了更安全:
<Directory "/var/www/html/svnmanager/">
AllowOverride None
Order deny,allow
Deny from all
Allow from all
</Directory>
4.创建svnmanager使用的mysql数据库
#service mysqld start
#mysql
mysql>create database svn;
mysql>grant all on svn.* to svnmanager@localhost identified by "111111";
mysql>flush privileges;
mysql>quit;
5.更改svnmanager的配置文件
#cd /var/www/html/svnmanager/
#mv config.php.linux config.php
#vi config.php 改为如下内容:
<?php
$htpassword_cmd="/usr/bin/htpasswd";
$svn_cmd="/usr/bin/svn";
$svnadmin_cmd="/usr/bin/svnadmin";
//Subversion locations
$svn_repos_loc="/var/svn/repos"; #注意目录
$svn_passwd_file="/var/svn/passwdfile"; #注意目录
$svn_access_file="/var/svn/accessfile"; #注意目录
//If the following is set, removing a repository will cause it to be
//moved to this location rather than being deleted.
$svn_trash_loc="";
//$svnserve_user_file = "/var/www/repos/svnserve_passwd_file";
$svnserve_user_file="";
//SMTP Server for outgoing mail
$smtp_server="smtp.mailserver.net";
$dsn="mysqli://svnmanager:111111@localhost/svn"; ##连接mysql SVN数据库 用户口令
$admin_name="admin"; ##初始用户名
$admin_temp_password="admin"; ##初始密码
?>
6.验证
重启apache,然后从浏览器里输入http://192.168.254.128/svnmanager,出现了吗?:)
第一次会用提示All tables are missing.
Creating requried tables...
Please reload page!
刷新就好了,输入初始用户名密码。
7 如果要汉化的百度 svnmanager中文语言包 ,不过版本比较老了,英文也很简单,直接英文看吧
在使用的时候如何出现编辑重名出现错误页面的话 selinux 关了重启再试
增加用户时显示邮箱地址无效问题
#vi /var/www/html/svnmanager/svnmanager/UserModule/AddPage.tpl
打开文件后,将第33行 <com:TemailAddressValidator Control…………..com:TEmailAddressValidator>全部注释掉,
<!-- <com:TEmailAddressValidator ControlToValidate="Email" Display="Dynamic">Invalid e-mail address!</com:TEmailAddressValidator> -->
保存退出,重启mysql与http服务。
几个疑难点的处理:
1.进入Repository Admin 菜单时页面提示:skip setlocale() failed, unicode characters might fail!
网上有资料的处理办法是修改$lang = "zh_CN.GBK";
其实这是个表面解决办法,实质上这个是跟php的setlocale函数和操作系统libc库支持的locale有关.
RHEL把几乎所有的locale都在系统中准备好了
而debian则只准备需要的几样
为尽可能少修改软件,并支持utf8编码(也就支持中文了),作如下处理:
在debian系统中,可以把en_US.UTF-8的locale生成好,方法如下:
vi /etc/locale.gen 把en_US.UTF-8前面的注释号去掉
保存后,执行locale-gen
可能要安装locales包,请apt-get install之
在RHEL中,用locale -a | grep en_US显示其正确名称(en_US.utf8),填写到$lang变量中
2.新建/编辑用户时总是提示Invalid e-mail address!
这有两个原因:
1.php pear库中XML_Parser和VersionControl_SVN两个包安装不正确(网上资料)
2.php框架prado的原因,会强制验证邮件地址域对应DNS中的MX记录,如果乱填邮件地址或者是网络问题或者DNS问题,都会导致这个非法邮件提示,很让人头大。
解决办法:
1.重装相关包
2a.确保邮件地址正确,邮件域有MX记录,DNS工作正常~
2b.修改/svnmanager/UserModule/AddPage.tpl删除com:TEmailAddressValidator标签
3.中文用户名支持(虽然不建议这么做)
网上很多资料说的,又要改/etc/my.cnf, 又要修改源码mysql连接代码,在连接数据库时加一句set char之类的...
这些做法都是多余的!
只需要两点:
1.在创建数据库时使用utf8编码
2.$lang使用utf8编码的locale, 比如en_US.UTF-8, zh_CN.UTF-8(en_US.utf8)等
注:在有仓库访问控制时,中文用户名和组名会造成访问制作,估计是某些地方的编码解码不一致造成的,建议避免使用中文用户名
使用过程注意事项:
1.开始时建议马上生成一个admin账号,覆盖内置的admin帐号,并重新登录
2.功能很简单也很实用,不过有些功能很古怪,比如用户可以修改用户名,而存取控制又是跟用户名有关的,所以修改用户名后,肯定要重新设定一次仓库访问权限
3.仓库文件中如果有中文路径的话,在仓库访问控制界面会出错,要避免之.
(1) 用admin登陆,只看到用户管理跟退出,奇怪,其它功能?
后面才发现,原来后台设置的账号是临时账号,你必须自己创建一个管理员的账号,重新登陆.
(2)操作:Repository administration->User/Gropu Privileges->任意一个select
错误信息:
[2] UserPrivilegesEditPage::require_once(VersionControl/SVN.php) [userprivilegeseditpage.require-once]:
failed to open stream: No such file or directory (@line 201 in file C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\svnmanager\svnmanager\RepositoryModule\UserPrivilegesEditPage.php).
Debug Backtrace
#1 UserPrivilegesEditPage.php:201 -- pradoErrorHandler(...)
#2 UserPrivilegesEditPage.php:201 -- UserPrivilegesEditPage::onLoad()
#3 TControl.php:419 -- UserPrivilegesEditPage->onLoad(...)
#4 TPage.php:1079 -- TControl->onLoadRecursive(...)
#5 TPage.php:955 -- TPage->onLoadRecursive(...)
#6 TApplication.php:483 -- TPage->execute()
#7 index.php:5 -- TApplication->run()
解决:
我查看了下VersionControl 没有安装成功
根据提示首先升级php
然后重新安装 就OK了
网络上有人这这解决的每个人的问题不一样
a. 查找查UserPrivilegesEditPage.php中的require_once("VersionControl/SVN.php"),确认下位置
b. 到相关pear下查找SVN.php文件的位置,本人自己找到是以下两个位置
/usr/ports/devel/pear-VersionControl_SVN/work/VersionControl_SVN-0.3.1
/usr/local/share/pear/VersionControl_SVN
c. 经过自己分析,将require_once("VersionControl/SVN.php")改为require_once("VersionControl_SVN/SVN.php")
d. 测试通过.
ps: 本人分析出一个规律是,这里的路径是pear的相对路径.所以这里解决方法只作参考不是所有人都受用,请根据实际情况调整.
同时,解决了用户管理,别忘组的管理也要调整即GroupPrivilegesEditPage.php 文件.
(3)解决中文乱码问题~参考别人,未实验
修改 svnmanager\global\header.tpl 将页面的字符集设置为 gbk 或者 gb2312
因为这里使用的是 mysql 数据库,因此修改
svnmanager\prado-2.0.3\framework\Data\adodb\drivers\adodb-mysql.inc.php
在 function _connect 倒数第三行前加入 mysql_query("set names 'gbk'");
设定操作mysql的字符集为GBK
mysql_query("set names 'gbk'");
if ($this->_connectionID === false) return false;
if ($argDatabasename) return $this->SelectDB($argDatabasename);
return true;
}
(4)用户管理中的邀请操作,邮件发送失败~参考别人,未实验
错误信息:
{
Something went wrong sending email, please contact server administrator!
}
说明: 没找到解决方法
(5)不能自动过滤不属于仓库
错误信息:
{svn: URL 'file:///storage/yslProR/conf' non-existent in that revision (cmd: svn list --non-interactive file:///storage/yslProR/conf)
Command used: svn list --non-interactive file:///storage/yslProR/conf}
说明:由于不支持过涉仓库,所以在获取不是svn仓库时,就会报如上错误了.
通用性考虑不全:
1.不支持ldap的账号,只能管理传统的账号文件
2.不支持导入原有的权限分配,需要重新建立
3.导入现有库不支持自动过滤不属于库的信息即会把指定父目录下的子目录都当作是库
4.不支持多库配不同的权限文件
5.权限文件的格式只能基于[库名:相对路径],不支持[相对路径]
改进建议:
1. 用admin登陆,应该提醒用户创建一个新的管理账号
2. 用新的管理账号登陆,进行数据初始化
a. 导入仓库:指定仓库的目录获取且支持自动过滤不相关的库
b. 用户初始化:
(a)支持一对一即一个仓库对应一份账号文件
(b) 支持多对一即多个仓库对应一份账号文件
(c) 支持ldap账号,获取数据库的账号信息
c. 权限初始化:
(a)支持一对一即一个仓库对应一份权限文件
(b) 支持多对一即多个仓库对应一份权限文件