QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5647|回复: 11

Auto Build System构想

[复制链接]
发表于 2010-3-1 13:38:28 | 显示全部楼层 |阅读模式
只是构想,什么时候想做了,什么时候再做。

2010年会很忙的。

有愿意合作开发的可以...联系我

我只是在策略上阐述了一下工作原理,而具体的开发平台不限,具体的内部构建方法也不限。

--------------------------------------------------------------------------------

各个服务器在内网,而且数据库 仓库 和 编译服务器必须分开,以减小风险。


这里维护着四张表:
1、总体的包记录,其中包含所有的包信息
2、附表1,记录新添加的包。
3、附表2,记录进入编译队列的包。
4、附表3,记录已完成包。

总表字段有
id, name, src_addr, md5sum, size, SBU, summary
附表1,2,3字段有
id, src_addr, md5sum, size, SBU

id, 在整个数据库中起唯一标识
SBU(Standard Build Unit) 编译时间(约)
size 和 SBU用来决定编译顺序 (只有SBU很大, 且附表1中记录很多时起作用)

src_addr *.src.rpm 下载地址
md5sum 下载后用来效验是否完整, 三次错误后停止, 并认为下载错误,.

各个服务器之间由守护程序监听端口信息完成, 可以将各个模块安装在同一服务器上也可以装在不同服务器上。

守护程序能与数据库连接,操作其中的表。





初步分功能模块来实现

1、网站模块,要求可以提交包信息,根据包状态来锁定记录(即2号状态不能修改),所有的记录只能添加和修改,不能删除。其他附加的扩展功能,如:前台页面,包搜索页面,实现每个包中的评论页面。每个包的投票系统。

注:包状态可以通过查询 附表1 和 附表2 来确定。


2、守护程序,分4块,对应四个服务器功能

   1)端口监听,统一的数据包格式,传递命令和附件。

   2)操作数据库

   3)编译包时逻辑上的先后顺序,遇到错误的处理策略(即操作三个附表)

3、数据库优化


下面是各个模块间概括的接口描述。

数据库维护4张表
1、总体的包记录,其中包含所有的包信息
2、附表1,记录新添加的包。
3、附表2,记录进入编译队列的包。
4、附表3,记录已完成包。

网站添加包记录时在1 2表中各添加记录

各个服务器守护程序对应如下
server_website 网站服务器(1)
server_download 下载服务器(2)
server_compile 编译服务器(3)
server_apt     仓库服务器(4)

server_website 检测 附表2 如果编译队列为空,则检测附表1,将附表1中的记录放入附表2中,即进入编译缓冲队列。

server_website 将附表2(编译缓冲队列)中所有的记录信息发送给 server_download,server_download 根据 src_addr下载包至固定目录。

server_download完成下载,发送信息和下载包所在目录至server_compile,编译服务器对src.rpm包编译(此处不知有没有恶意的script可以执行)

server_compile编译完成后,将包上传到server_apt,同时server_apt更新仓库,并删除数据库 附表2 的相关记录,在附表3中添加记录以表示完成编译。



这样就很明了了,大家手上有什么程序可以实现相关功能,可以直接开发出demo来。
注意各个模块间的接口。

领取各个模块,开一个项目描述具体的接口。各个模块的项目人员可以通过查看其他分项目接口描述来开发。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2010-3-1 16:16:42 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2010-3-1 16:57:18 | 显示全部楼层
npccomet
这个项目是?
有人维护吗?

对了,我想写些wiki,大哥能不能快些,或者给我个权限?

比如我想写EasyRpmBuilder的使用手册.
回复

使用道具 举报

发表于 2010-3-1 23:56:38 | 显示全部楼层
http://www.magiclinux.org/node/896
jagen 原来搞过 但是由于时间原因 不了了之
你愿意维护的我愿意提供一切方便
回复

使用道具 举报

 楼主| 发表于 2010-3-2 00:09:47 | 显示全部楼层

回复 4# npcomet 的帖子

哦,那个Magic Build System 是用来自动化编译整个MagicLinux系统的。类似ALFS

我这个设想是,用户提供打好包的src.rpm地址,服务器自动下载编译,上传仓库并更新。类似Arch的AUR。

(*^__^*) 嘻嘻……我这个也是八字没一撇,关键一些主要的功能实现还缺少实际代码测试。都没有实现过,只是阐述一下整体结构,放在这方便以后参考。当所有的模块都有demo了后我会考虑组建。

还是给我个权限写Wiki吧。
回复

使用道具 举报

发表于 2010-3-2 07:49:53 | 显示全部楼层
好的 注意查收邮件
回复

使用道具 举报

发表于 2010-3-2 13:13:04 | 显示全部楼层
操作完成
回复

使用道具 举报

 楼主| 发表于 2010-3-2 15:05:17 | 显示全部楼层

回复 7# npcomet 的帖子

已经可以编辑Wiki

添加了一个Wiki
http://projects.linuxfans.org/pr ... 8%E6%96%B9%E6%B3%95
感觉不错o,不知道格式是否标准。

首页的Wiki还没有添加,不知道格式应该是怎样的,怕帮了倒忙。
回复

使用道具 举报

发表于 2010-3-2 19:11:21 | 显示全部楼层
标准的 就是URL最好不要有中文
回复

使用道具 举报

 楼主| 发表于 2013-12-19 19:21:28 | 显示全部楼层
最近研究Zeromq,自己回答自己的问题:
其中4个模块加上一个数据库的方式已经可以完成这个模块
容易的是数据库表维护,apt服务器,网站服务器,下载服务器(鸡肋)
剩下的是编译服务器和服务器之间的通信问题

1、自动编译问题;
   分析:因为linux内核运行起来调用init进程之后就可以实现很多功能了,最小依赖系统典型的就是busybox。
   解决:编译服务器:可以在busybox的基础上进行修改,做一个daemon,可以spawn(关于glibc真的很迷人,有空研究一下)很多woker进行编译,daemon开一个socket和命令服务器通讯。
         命令服务器:负责解析规则文件,然后将任务分配到编译服务器上。
         编译服务器(stage1):负责编译交叉工具链,并打包kernel和toolchain,send到编译服务器(stage2)
         编译服务器(stage2):负责接收stage1 发来的 stage1.img,用这个image做文件系统启动系统,启动daemon做进一步编译操作。(这个stage2可以简单用qmeu实现)

2、服务器之间的通讯问题,用socket通信就可以,socket只是收发命令和编译结果的话,并发请求量很小,数据传输量也不大,容易实现。

所有的模块都已经demo过,但是却没时间实现了,操蛋的人生。
回复

使用道具 举报

发表于 2013-12-20 09:54:52 | 显示全部楼层
服务器之间的通讯,用 http 直接访问都能解决……只要有一台提供 http 服务就行。
wget 是无敌的……
现在主要的是数据的采集和整理。这要全自动。
而且编译服务器的环境,也必须是能被主机自动化控制的。这样可以减少依赖(自动卸载不需要的包),也能自动补足依赖(自动安装需要的包)。
回复

使用道具 举报

发表于 2013-12-22 12:49:23 | 显示全部楼层
我习惯修修补补了,无意义的事情坚绝不做。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-3-29 12:52 , Processed in 0.087292 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表