对于大部分开发团队来讲,通常都须要一套 SCM 系统,一般是 svn + redmine,有些还会有 reviewboard 之类的。html
你们固然不但愿上三套系统就有三套帐号密码,那样记忆起来太麻烦了,因此你们都但愿有统一的验证方案,固然,LDAP 是一种选择,考虑到它部署起来比较难,成本比较高,通常会选择统一使用其中某一个系统的帐户验证。mysql
redmine 是没有办法使用 svn 的帐户验证的,因此你们只好选择 svn 使用 redmine 的帐户验证。可是新版本 redmine 使用了 salt 字段加密,又是 sha1 算法计算 hMAC,因此 mod_auth_mysql 就挂了。网上可以搜索到的通常有如下几个方案:git
1. 给 mod_auth_mysql 打补丁,见:http://www.redmine.org/boards/2/topics/24386?r=39269 。这个补丁在 Ubuntu Server 10.04 个工做得很好,但在 12.04 就不行了。github
2. 改 redmine 的代码,把 salt 机制干掉,见: http://www.jiongsun.com/tag/mod_auth_mysql 。通常人不会选择这种不能升级 redmine 的方案。3. 给 mod_auth_pgsql2 打补丁,再改 redmine 代码,见:http://digzhu.com/redmine+postgresql+svn%20%E5%AE%9E%E7%8E%B0%E7%BB%9F%E4%B8%80%E7%94%A8%E6%88%B7%E7%AE%A1%E7%90%86.html 。一种让人蛋碎的方案。算法
显然,须要一个不须要改代码的终极解决方案。sql
另,由于提供了 hook 机制,reviewboard 使用 redmine 的帐户验证却是容易。数据库
redmine-auth 利用了 apache2 中提供的 AuthProvider 特性和 mod_wsgi WSGIAuthUserScript 特性,编写了一个读取 redmine 帐户信息的脚本,实现帐户验证。apache
得益于 redmine-auth 使用了 sqlalchemy(从 0.2 版本开始),只要 sqlalchemy 支持的数据库,redmine-auth 均可以读取。因此不管 redmine 使用的是 MySQL 仍是 postgresql,甚至是 oracle/mssql/sqlite,均可以无缝地使用 redmine-auth 进行帐户验证。小程序
pip install -U redmine-auth
它会自动安装依赖的程序库,可是数据库驱动须要你手动安装,好比 MySQLdb 须要你自行安装好。oracle
redmine-auth -g /opt/redmine_auth.wsgi回头几个关于 redmine 使用的数据库相关的问题,一个能够运行的 wsgi 脚本就生成到指定的位置了。
<VirtualHost *:1081> <Location /> DAV svn SVNParentPath /opt/svn AuthName "Subversion repository" AuthType Basic AuthBasicProvider wsgi WSGIAuthUserScript /opt/redmine_auth.wsgi AuthzSVNAccessFile /opt/svn-authz Require valid-user </Location> </VirtualHost>
其中最重要的是下面这两行:
AuthBasicProvider wsgi WSGIAuthUserScript /opt/redmine_auth.wsgi
而后重启你的 apache2 就能够了。