开源软件定制开发中的软件工程
CoSign 是密歇根大学的一个开源项目,提供单点认证功能。我对该软件进行了改造,产品化,使之成为我们公司——群英汇 集中管理平台的一个模块。
本话题将涵盖:
开源软件宝藏图
我们Hack 过的开源软件
ProjectMgmt _,-> (Redmine) -._ * Redmine * CoSign _/ \_ trac _/ \_ mantis VCS CI TestMgmt (SVN,pySvnMager (CruiseControl) (Testlink) * Subversion * GOsa Git ...) pySvnManager Git (topgit,gitosis) o o \ o / o o /|\ /|\ | /|\ /|\ * Testlink * CruiseControl / \ / \ / \ / \ / \ |----------------------------------------------------| * MoinMoin * Nutch | (Search Engine) | MediaWiki Lucene |----------------------------------------------------| | Knowledge Base Communication | * WordPress | (Moin+WordPress) (Mailman+IM?) | typo |----------------------------------------------------| | (UserMgmt + Single Signon) | * Mailman |____________________________________________________| phpbb smf
什么是 cosign
可以参考我们写的手册:
- http://www.ossxp.com/doc/cosign/admin-guide/admin-guide.html
- http://www.ossxp.com/doc/cosign/user-guide/user-guide.html
CoSign 组成
APPS --> Filter (IIS)------+ APPS --> Filter (Java)-----+ APPS --> Filter (Apache)---+ ./ | ./ | ./ V login <---+ / +--> Daemon (tcp/6663) |--> CGI --| logout <--+ +--> Factors -> AuthSource(DB, LDAP)
CoSign 演示
略
产品定制需求
不说中国话
改说中国话也有问题
增加邀请码认证
- 为了让亲朋好友免注册
- 邀请码也要输入 login,如果任意设置 login 导致安全风险
- 改造应用还是改造CoSign?
不支持邮件地址登录
- 认证因子返回0 代表认证成功
- 认证成功后,用户输入的登录ID即作为 REMOTE_USER
双因子认证来自于 OpenSesame 的需求
如何设置谁能够打开 22 端口?
请求认证因子的或运算
邮件列表管理认证:在请求列表审核操作,请求 admin_list_mod 或 admin_list 认证
其它一些痒痒的小问题
- 认证因子的本地化
需求管理
- redmine.bj.ossxp.com
- ossxp-3.1 里程碑
- 需求
改造后的 CoSign
- 邮件地址登录
- 双因子认证
- OpenSesame
- Mailman
- 邀请码认证
- 多语言模板
- 本地化(核心本地化以及模板本地化)
Hacking
- 编译
- 运行
- Hacking
- 验证
- 代码修改了,如何版本控制?
开发中的版本控制
为什么 subverson 不是最佳选择
SVN 的 vendor branch 的问题:补丁越多,跟踪上游版本库越痛苦。这就是为什么很多基于开源定制软件无法及时跟踪上游的原因
X try to merge..., but CONFLICT! | 58 O Import v3.x: AMD /branches/upstream/* | 57 O hack 55: M /trunk/src/zzz | ... | 4 O hack 02: A /trunk/include/bbb | 3 O hack 01: M /trunk/src/aaa | 2 O Vendor branch: cp /trunk /branches/upstream | 1 O Import v2.x: A /trunk/*
正确的与上游同步的方法在哪里?
- 只有每个 Hack 拥有一个独立的分支,才能实现对上游的跟踪
- 我们不需要所有 Hacking 都合并到一起的分支,因为徒增烦恼!
每个分支一个 Hacking:
+--------------------O(v3.x)--------- upstream / \ ---O(v2.x)..................\............. /trunk \``\``\ \ \ \ +--O--------------X----------- hack1 \ +---O------O-+------O-X---------- hack2 +--O------O-----\------\-X--------- hack3 \ \ \ +--O---Y-X------- hack4
Quilt 让你无须将分支合并一处:
- Quilt 是一个 Patch Queue Management System
- Quilt 使用方法:后面讲
我用 Hg/MQ 一段时间,但只适合个人
实际上是两个版本库完成的
O'(patch2 cont.) | \ series O (patch2) \ + patch1 | +-- > patch2 O (patch1) - patch3 | - patch4 O (v2.x) / \ O O | O
Hg/MQ 的问题: 补丁的冲突!我的天!
群英汇采用 Git + Topgit 方案
+--------------------O(v3.x)--------- master / \ ---O(v2.x) \ \``\``\ \ \ \ +--O--------------X----------- hack1 \ +---O------O-+------O-X--+------- hack2 +--O------O-----\--------X--\------ hack3 \ \ +--O--------Y---- hack4 附加文件: .topmsg, .topdeps 附加分支: top-bases/*
没有单元测试的教训
- 当浏览器支持语种的数量达到某个值,可能导致异常。coredump
- gdb 诊断异常
- 增加单元测试
代码审核帮助消灭Bug
- 一个明眼人能够看出的 Bug,常规测试不易发现
- Redmine 的 code_review 插件,帮助消灭此类 Bug
开发中的缺陷跟踪
- redmine
软件集成
- 制作 deb 包
- cdbs 实现无痛 rules 制作
- cdbs 通过钩子任务进行集成过程的定制
- quilt 补丁列表在集中过程的自动化管理
文档
关于文档的需求
- 至少包括:用户手册和管理员手册
- 软件不同版本的手册也会不同
- 文档的输出格式:HTML, PDF
可选的文档格式
- Markdown: Ruby 中常用的标识语言。例如 gitbook 用 markdown
- Docbook: 老牌的基于 XML 的文档格式。例如: svnbook 用 Docbook
- reST: Python 社区的发明,易用性最佳。
最终的方案
- 采用 reST 格式
- 文档和代码用同一个版本库/目录维护
- 开发了 Docbones 项目
- 使用 Rakefile 管理文档编译
- 支持多种文档格式的编译:Docbook,Textile, Markdown, reST
- 内置缺省文档模板
- 用户可自定义文档模板
- Hack 了 Python docutils 项目
- HTML 输出增加灯箱效果
- HTML 输出的样式表定制
- PDF 输出的中文和格式规范化(进行中...)
后记
笔者本次活动纪实: 《北京五月柳燕隙阳》
建立者:worldhello 建立时间:五月 31, 2010
所属活动:柳燕隙阳 日期:五月 15, 2010
网络投票数:3
本话题所属活动已经结束