日志标签 pySvnManager

Subversion 管理后台升级
9月25日
Subversion 管理后台最近版本升级解决两个主要问题:Subversion版本库同步的同步锁清除,以及 IE8兼容性问题。
Subversion 版本库同步时同步锁的清除
Subversion版本库容灾备份,主版本库提交时,会临时在镜像版本库的 rev0 的版本属性中添加 svn:sync-lock 和 svn:sync-currently-copying 两个临时属性作为同步锁,避免针对一个版本库同时有多个同步进程。这么设计是因为 SVN 镜像可以是远程调用。
在特定情况下,会造成死锁:
- 同步开始后,突然的网络中断,导致同步失败,而同步的目标版本库(镜像版本库)的 rev0的锁尚未删除。
- 再次同步时,由于 rev0 的版本属性中的锁的存在,导致同步失败。
- Subversion 的主从备份失效。
死锁发生后,客户端的感受
- 客户端提交会发现速度很慢,会被阻塞10秒钟以上
- 实际上,提交已经完成,在进行主从同步时被阻塞
- Subversion的同步一旦发现被同步锁阻塞时,会持续尝试10次,每次间隔1秒钟
最新的同步机制,能够自动判断锁的有效性,避免主从同步失效
- 在同步发起时,会记录同步进程的 PID 到一个临时文件
- 当发现镜像中存在锁的时候,会检测本地锁文件,以及是否有对应的同步进程
- 如果发现锁是僵尸锁,则删除镜像版本库rev0 中的僵尸锁,继续执行版本库同步
- 如果同步过程有错误发生时,会通过钩子脚本(post-commit 或 post-revprop-change)将同步的错误会直接通过用户提交通知界面进行显示。
- 管理员也可以设置 debug 诊断标志,当 debug 打开,同步成功的信息也会以“错误通知”的方式显示在提交后的通知界面中。(同步成功的消息显示为控制台错误,这是 Subversion 的 post-commit 等脚本的设计机制决定的)

同时,还为 subversion 钩子提供手工版本库同步的接口:
(其中 /opt/svn/svnroot 是版本库的根目录)
- 显示版本库的状态:
$ sudo python /etc/subversion/hooks/scripts/svn_mirror.py /opt/svn/svnroot/
- 手工对配置了容灾的版本库进行同步:
$ sudo python /etc/subversion/hooks/scripts/svn_mirror.py sync /opt/svn/svnroot/
IE8 兼容性问题
部分界面在 IE8 不能正常显示。当打开 IE8 浏览器的“兼容视图”,则能够正常显示。
最终定位到是元素显隐,IE8的支持和以前不同。原来的实现是通过设置 element.style.visibility 为 ‘hidden’ 或者 ‘visible’ 实现 DIV 的消隐。当对 div 重复进行隐藏后,再设置显示时, DIV 中的表单域却不能显示出来!
通过 google 查询了半天,也对子元素的 style.visibility 设置为 inherit 也没有什么改观,对IE 恨的牙痒痒的。IE 的调试工具也很匮乏,FireBug lite 让 Firebug 可以在 IE 里运行,但毕竟是 CSS 的问题,也帮不了大忙。
忽的灵机一动,既然框架中已经用了 prototype, 为什么不采用 prototype 本身已经封装好的元素消隐呢,于是利用 Prototype 重写 Javascript,解决这个棘手的问题。
主要的 Javascript 修改,类似于:
- $('path_list_box').style.visibility = 'hidden';
- $('path_list_box').style.position = 'absolute';
+ $('path_list_box').hide();
- $('path_input_box').style.visibility = 'visible';
- $('path_input_box').style.position = 'relative';
+ $('path_input_box').show();
关于 pySvnManager 的回复
9月15日
最近有网友问 pySvnManager 的问题,我把解答放到了这里
关于软件安装
问:
看到你开发的这个pysvnmanager很不错,比较适合于svn的 账户 权限管理,我的操作系统是centos,用easy_install安装的是0.4版本,不知道 哪里 有0.5版本下载呢?
答:
直接从 sourceforge.net 上下载源代码安装吧
安装出错
问:
我下载了源码,按照README中 的指导进行安装
$ cd config $ make $ python setup.py compile_catalog $ paster serve --reload develogment.ini 运行却报错如下: /usr/lib/python2.4/site-packages/PasteScript-1.7.3-py2.4.egg/paste/script/pluginlib.py:81: UserWarning: Unbuilt egg for pySvnManager [unknown version] (/usr/local/pysvnmanager) pkg_resources.require(plugin) Traceback (most recent call last): File "/usr/bin/paster", line 7, in ? .....
答复:
应该是依赖的 pylons 框 架未安装。
其实有源代码,你可以编译出 egg 包哇。
$ python setup.py bdist_egg
然后,就可以安装 dist 目录 下的 egg 包,安装 egg 包会自动安装依赖的 pylons 框架。
你看到 Readme 并执行的指 令是直接运行源码,为调试而用的。
关于认证
问:
还有一个问题想请交一下,我想从LDAP服务器同步帐号来做认证。现在单独从本地密码文件,或者单独LDAP服务登录都可以。但是两个一起用,好像不行。因为看到localconfig.py文件里面说可以二者都用。因为我想把root管理帐号认证放在本地,其他帐号放在LDAP服务器,不知道这样可不可以?谢谢!
答复:
同时用两种认证,就需要在 auth 数组同时加入两种认证方式,如下:
from pysvnmanager.model.auth.http import htpasswd_login
import ldap
from pysvnmanager.model.auth.ldap_login import ldap_login
auth = [htpasswd_login, ldap_login]
## LDAP login parameters
ldap_uri = 'ldap://localhost'
ldap_binddn = 'cn=ldapreader,dc=foo,dc=bar'
ldap_bindpw = 'guess'
ldap_base = 'dc=foo,dc=bar'关于 LDAP 用户组授权
问:
我还有一个问题关于LDAP账户同步的问题。我先在LDAP服务器上建立了一个svnusers用户组,把有权限使用svn的用户都加到这个组里面来;然后在apache里面读取svnusers组里面的memberUid来实现svn对特定组的账户读取。所以我就想问不知道能否在pysvnmanager里面实现这样的功能,也就是读取属于某一个组的用户帐号?
答复:
我的 LDAP 授权模型和你的不同,不是通过用户组而是为用户设置名为 authorizedService 多值属性进行授权。可以通过设置 ldap_filter 加以判断:
ldap_filter = '(&(uid=%(username)s)(authorizedService=svn)(ossxpConfirmed=TRUE))'
我的方案要新增 LDAP schema,可以配合我们公司的统一管理平台进行图形化的用户授权。
你的方案也很好,不过在认证过程增加了一次查询(用户组匹配),会影响执行效率。
pySvnManager 0.5 升级指引
8月9日
对于不能提供 SSH 远程登录服务器的用户,可以参照本文进行 pySvnManager 的升级。关于 pySvnManager 的新功能,参照:《pySvnManager新功能:LDAP用户同步》
升级的步骤简单的说就是:备份 -> 软件升级 -> 重启服务
阅读全部内容 »

pySvnManager 新功能:LDAP用户同步
8月8日
pySvnManager 升级到 0.5 版本,引入了数据库支持,数据库主要用于保存和 LDAP 用户帐号同步的用户帐号信息。
数据库采用 sqlite 数据库(如果需要也可以使用其它类型数据库),无须手动创建数据库,在 pySvnManager 运行时,会根据需要自动创建数据库。
在没有使用 LDAP 用户信息之前,pySvnManager 是读取 SVN 授权文件,从该授权文件中获取用户名单并显示。
可以看出这种实现的问题是:
- 在权限检查的用户列表中,只能看到用户登录ID,而看不到用户 ID 对应的用户名
- 显示的用户帐号很少(只有在 SVN 授权文件中引用的用户帐号才能显示)
- 为新用户授权,如果用户不在授权文件中,需要手工输入用户名,容易出错。
pySvnManager 0.5 增加了内置数据库和LDAP用户同步功能之后,再看 pySvnManager 中显示的用户列表:
你会发现新版本的用户列表(已经完成和LDAP同步):
- 除了显示用户ID外,还显示用户名
- 显示的用户多了很多,除了在 SVN 授权文件中引用到的用户外,LDAP 中授权的 SVN 用户也显示出来了
- 在为新用户授权时,不必手工输入用户,只需要进行一次 LDAP 用户同步,用户帐号信息自动显示出来。
那么如何进行LADP 同步呢?
我们把 LDAP 用户同步的按钮放在“角色管理”界面,只要点击其中的“和LDAP用户同步”图标按钮,自动完成同步。
其它改进还包括:更好的 IE6 支持,UI 的重新设计等等。我们会陆续协助客户完成软件升级。
用户手册也已经更新,参见: 《pySvnManager 用户手册》
关于如何升级到新版本的 pySvnManager,参照《pySvnManager 0.5 升级指引》




最新评论