2008-09-12

MBS设计初稿 


V0.0.3c


jagen<jagen@126.com>;lanzinc<lanzinc@gmail.com>


 


一、简介:


MBSMagic Build System的缩写。MBS是一套运行在一个相对完整的Linux系统环境中的软件系统,这套系统在一个XML主控配置文件的控制下自动完成子配置文件和源代码包的下载,工具链的构建,打包环境的建立,和编译打包工作。最终得到构建一个发行ISO所需的RPM包,配合MI能构成一个完整的ISO发行。


 


二、MBS主要的工作流程


1.         MBS解析“XML主控文件”根据优先级构建需要下载的文件的队列。


2.         MBS启动若干进程,从队列中取出下载任务,并行进行文件的下载,某个进程完成下载后到下载完成列表中登记,然后从队列中取出新的下载任务,继续工作。


3.         当建立工具链需要的文件下载完成后,MBS根据“XML主控文件”在宿主系统(host)上建立编译包的基础环境,工具链。


4.         MBS根据下载任务的完成情况合包的依赖关系构建并动态维护一个可以开始编译打包的包队列(队列成员包含下一工作需要的资源的索引)。


5.         同时MBS启动若干进程,每个进程独立加载Shell,构建合适的环境,然后从4中队列中取出任务进行编译打包。完成后到完成列表中登记,退出。


6.         整个过程中, MBS维持一个独立的进程,接受各个进程的信息,并负责记录到log,和向各个负责和用户交互的前台进程进行交互。


 


 


三、MBS的几个主要的子目标


1.         完整的日志系统方便对整个过程进行监视和分析。


2.         前后台分离,前台可以是本地的一个X窗口,也可以是一个文本界面的前台,也可以是一个web 服务器。前台停止工作不干扰后台的工作。


3.         程序尽可能的做好i18n设计,但优先照顾使用中文的用户


4.         有一个进度记录系统,当过程意外停止后能重新启动系统从合适的位置继续该过程。


5.         MBS的部分组成可以作为MGC3.0用户打包和交流的工具。


 


 


四、详细设计:


1.         XML主控文件”的设计


2.         子配置文件的设计


子配置文件由spec文件和一个附加配置文件构成


3.         几个主要队列和列表的数据结结构


4.         MBS要实现的类:


Class-主控XML文档:


其实例化的对象完成对主控XML文的加载和解析,完成一个磁盘文件到一个抽象对象的转换。


Class-待下载文件队列:


封装了一个待下载文件的队列,和维护该队列的代码


Class-文件下载器:


 


Class-完成下载文件的表:


封装了一个完成下载文件的表,和维护该完成下载文件的表的代码


 


Class-工具链建设者


 


Class-编译打包进程


 


Class-完成包列表


 


Class-需打包包列表


 


Class-待打包包队列


封装了一个具备打包条件等待编译打包的包的队列,和维护该队列的代码


Class-控制与记录进程


Class-前台接口

5.使用到的库,和开发环境包括如下:

   Qt4

 

五、Spec和配置文档库


作为MBS的外部支持,开发组需要维护一个SVN服务器,用来组织和存储“XML主控文件”、spec文件、子配置文件、补丁等文件。MBS通过和服务器的交互获取这些资源。但该服务器一般不存储各个软件的源代码,源代码直接从开发者提供的下载位置下载。开发组的开发工作通过修改或发布新的“XML主控文件”、spec文件、子配置文件、补丁等文件来形成自己的文档集。从而使开发工作能进行技术积累和延续,能进行沟通和配合。并且Fans们能方便的参与进来。



 


 


 


XML主控文件”的设计 草稿:


 


一个ISO发行版本对于一个MBSMCF文档


 


文件名:


MBSMCF.<iso版本号>.xml


 


文档的内容:


XML主控文件”自身信息:


        文档格式版本号:


       


生成的ISO发行版本信息:


        ISO版本号:


        ISO 文件名称:


 


MBS的运行设置:


      任务进程记录文件位置:


      日志文件位置:


      临时文件的位置:


      完成下载的文件的位置:


      RPM文档存放位置:


      最大并行下载进程数:


      最大并行编译进程数:


 


工具链构建控制结:


 


      <<待详细设计>>


      拟参考makefile的设计,或直接调用一个makefile


 


编译打包控制结:


 


      <<待详细设计>>


      一个包列表,


      每个包的文件下载和补丁编译等操作由两个文档控制


spec文档和一个扩展配置文件(也可能采用一个扩展过的spec文档)。