ubuntu服务器升级导致svn失效问题

由于openssl的heartbleed漏洞问题,网络中心邮件过来提示安全问题。该服务器之前采用ubuntu 13.04,但update后发现无对应更新,网络搜索后才发现13.04版本已经不维护了。因此需要更新整个系统到13.10。更新很正常,没有提示问题。

今天小李告诉我不能svn更新了,提示:

SSL handshake failed: SSL 错误:An unexpected TLS packet was received

但之前使用是正常的,结果检查发现所有的apache站点没有工作,这是由于apache2升级到2.4版本后导致的问题,即默认的配置文件需要.conf后缀。修改后发现svn站点仍然不能启动,提示auth_mysql不能工作。

一搜索后发现这是个大问题了,lanchpad上有对应的bug汇报:
https://bugs.launchpad.net/ubuntu/+source/mod-auth-mysql/+bug/1243076
上游的mod代码已经不维护了。但在其中有人提到可以使用dbd mod来代替。

首先需要安装对应的库,然后激活mod:

sudo apt-get install libaprutils1-dbd-mysql libdbd-mysql 
sudo a2enmod authn_dbd

同时修改svn站点的配置:

# mod_dbd configuration
DBDriver mysql
DBDParams "dbname=db user=user pass=pwd"

DBDMin 4
DBDKeep 8
DBDMax 20
DBDExptime 300
     <Location /svn/>
                DAV svn
                SVNParentPath /var/svn
                AuthUserFile /dev/null
                AuthName "westgis.ac.cn"
                AuthType Basic
                AuthBasicProvider dbd
                AuthDBDUserPWQuery   "SELECT passwd FROM auth WHERE username = %s"
                AuthzSVNAccessFile /etc/apache2/svn.authz
                Require valid-user
         </Location>

对应的trac配置也需要修改,这样才算大功告成。

svn merge:主干与分支之间的合并

合并是svn使用的一个难点,合理使用merge功能可以减少很多不必要的工作,提升工作效率。

实例1. 从主干到分支的合并
在主干中某部分的功能已经得到了修改和增强,现在想把这些增强的功能应用到分支上,就可以这样操作:

svn merge -r 1804:HEAD https://svn.westgis.ac.cn/svn/westdc/metadata/trunk/application/admin/controllers/DownController.php

其中,分支自r1804创建以来,只做过小修改,而主干这个功能已经得到极大增强,所以可以合并,在合并的过程中,冲突是最常见的一种情况,要看情况决定使用mc我的版本(即本地版本)、tc他人的版本(即主干中的版本)或e进行编辑直接修改冲突的地方。

合并完成后首先检查本地合并后的版本能否运行,然后再进行提交(有效的文字描述能减少很多工作量)。

svn commit -m “merge trunk admin DownController changes [1804]:[2452] into the branch”

使用branch的策略

在开发过程中,开始可以直接使用trunk进行开发,每到发布一个新版本时候,就拷贝到tags里。但随着系统的复杂化,特性的增加,模块的增多,系统越来越复杂,这个时候,为了系统的稳定性考虑,就可以考虑使用branch来进行开发。每增加一个新特性,首先在branch里进行,当稳定性达到一定程度后,就可以合并到trunk。
这个是由QGIS的开发者提出来的一个策略:

Initial announcement on mailing list

Before starting, make an announcement on the developer mailing list to see if another developerm is already working on the same feature. Also contact the technical advisor of the project steering committee (PSC). If the new feature requires any changes to the QGIS architecture, a request for comment (RFC) ist needed.

Create a branch

Create a new svn branch for the development of the new feature (see UsingSubversion for the svn syntax). Now you can start developing.

Merge from trunk regularly

It is recommended to merge the changes in trunk to the branch on a regular basis. This makes it easier to merge the branch back to trunk later.

Documentation on wiki

It is also recommended to document the intended changes and the current status of the work on a wiki page.

Testing before merging back to trunk

When you are finished with the new feature and happy with the stability, make an announcement on the developer list. Before merging back, the changes will be tested by developers and users. Binary packages (especially for OsX and Windows) will be generated to also involve non-developers. In trac, a new Component will be opened to fill tickets against. Once there are no remaining issues left, the technical advisor of the PSC merges the changes into trunk.

参考:
http://wiki.qgis.org/qgiswiki/DevelopmentInBranches

Continuous Integration: 持续集成

原文见:http://www.martinfowler.com/articles/continuousIntegration.html
这儿还有一篇中文的说明:http://bbs.scmlife.com/viewthread.php?tid=5500
我是在研究trac的plugin的时候,发现有一个plugin看不懂,不知道是干什么的,就搜索了一下。 Continue reading “Continuous Integration: 持续集成”

整合phpbb3和svn服务

整合,题目有点大,呵呵。
其实就是把SVN的用户控制交给phpbb3来进行处理。
要求SVN必须采用apache2/mod_auth_mysql来进行控制的。
然后在phpbb3的后台创建一个新的用户组,用于控制可以访问SVN服务的用户。然后在mysql里创建一个视图,提取用户名称和密码。注意,PHPBB3采用的加密方式是直接MD5。假设创建的组名为svn:

create view svnauth (username,passwd,groups) as select users.username,users.user_password,groups.group_name from groups,user_group left join users on user_group.user_id=users.user_id where groups.group_name=”svn” and user_group.group_id=groups.group_id ;

然后在apache2的site文件里设置为:

Auth_MySQL_Encryption_Types PHP_MD5

这样就可以了,具体的操作还需要参考之前的文章:安装subversion: ssl+auth_mysql+mod_svn

估计还需要mysql 5的支持,不知道mysql 4是否支持视图。

svn中转移库及彻底删除某目录

本机上已经有的svn库,如何合并到服务器上已经运营的svn呢?
可以这么处理:

svnadmin dump /your/svn/repository/path > svn.dump

同时,若某个project我不想上传到公共服务器与大家共享,或者是一个脏导入,可以这样删除:

cat svn.dump | svndumpfilter exclude /do/not/upload/project/name > newsvn.dump

然后再上传到服务器上进行处理:

scp newsvn.dump myserver:/path/

ssh登录到服务器上后再接着处理:

svnadmin load /repository/path

这样就可以合并本机的project到服务器上,并且和原有服务器上的project不会冲突。

安装subversion: ssl+auth_mysql+mod_svn

此处采取的方案是:
ubuntu feisty, apache2, auth_mysql, ssl, mod_svn。
其中,apache2+auth_mysql的安装及设置参考前面的文章:http://wlx.westgis.ac.cn/409/
apache2+ssl的安装和设置参考:http://wlx.westgis.ac.cn/407/
然后开始安装:

sudo aptitude install subversion libapache2-svn libapache-mod-dav

添加代码库

sudo mkdir /var/svn
sudo svnadmin create /var/svn/$REPOS
sudo nano .htaccess

设置存取权限

sudo chown -R www-data:www-data /var/svn/$REPOS
sudo chmod -R g+ws /var/svn/$REPOS

配置
参考: /etc/apache2/mods-available/dav_svn.conf
上面的是对所有站点开启SVN支持的,也可以直接修改具体的site文件。
注意事项:
svn库不能和WWW放置在同一个目录下,否则会产生冲突(301错误)。
location不能使用根目录。
location /svn/
注意必须前后都有斜线。见http://www.svnforum.org/2017/viewtopic.php?t=1320&

DAV svn
SVNParentPath /var/svn
AuthType Basic
AuthName “Subversion Repository”
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
SSLRequireSSL

http://alephzarro.com/blog/2007/01/07/installation-of-subversion-on-ubuntu-with-apache-ssl-and-basicauth/

使用trac进行subversion项目的管理

浏览wordpress发现他们用的项目管理系统很好用,可以执行CVS进行项目管理的大部分功能。
以后是否可以架在我们的服务器上进行项目的管理?
http://www.edgewall.com/trac/

What does Trac do?

Trac lets software project developers and users track, use and manage:

* software issues
* bug reports
* feature requests
* overall progress over time
* project tasks
* source code changes
* documentation / wiki text

Having a network of links between issues/bugs/tasks, code changes and wiki text makes the big-picture perspective of a project truly accessible at any time, and it becomes easy to quickly get up-to-speed on the .

SubVersion中的keywords

使用subversion时,commit是不能自动替换相应的keywords,如Id、Author等。
解决办法:
1、对svn add和svn import进来的代码,可以修改~/.subversion/config文件,把enable-auto-props设置为yes,并修改auto-props节部分的内容,把你想要实现的代码类型添加进去:
*.php=svn:keywords:Id
这样就可以在PHP文件中使用Id关键字来替换相应信息。
2、对已经在库中的代码,可以使用如下命令:
svn propset svn:keywords “Id” yourcode.php
然后再进行commit时就可以自动处理了。