软件包依赖关系建模方法

文档序号:6606849阅读:187来源:国知局
专利名称:软件包依赖关系建模方法
技术领域
本发明涉及软件包管理技术领域特别是指一种适用于Linux操作系统的,对 Linux下的软件包中存在的依赖关系进行提取并统一建模的方法。
背景技术
随着Linux操作系统的广泛发展,Linux操作系统的管理越来越受到人们的重视 一个Linux操作系统分发版是由大量的可安装的软件包组成的。伴随着互联网的发展, Linux操作系统的规模也越来越大,所包含的软件包的数量也越来越多。软件包之间存在着 大量复杂的依赖关系。同时,Linux系统拥有多种分发版本,有多种不同的软件包格式。如Redhat Linux 软件包为RPM格式,Debian Linux为DEB格式,软件包也可以为tgz或pkg格式。不同的 软件包格式有着较大差异。这同样增加了 Linux软件包管理的难度。具体来说,Linux下的软件包管理可分为客户端软件包管理和分发池软件包管理 两中不同的类型,分别负责软件包的本地安装维护、依赖关系处理(根据依赖关系计算结 果自动从分发系统中获取所需的软件包)和分发端的软件包维护。由于Linux操作系统的规模和复杂性通常一个分发版本由几千个可安装单元包 组成,这使得可安装软件包分发池的规模庞大,软件包之间的依赖关系更为复杂。通过可安 装软件包依赖关系管理保证每个可安装软件包的可安装性、Linux操作系统分发版本和分 发池的依赖完整性。由人工来完成可安装软件包依赖关系管理的话,分发池的规模,以及 频繁的版本变更和更新,使得该任务在集成和更新支持过程中为一个成本很高的活动。所 以,分发池的软件包管理工作就变得非常重要。在国外,国外著名的Linux分发厂商如Red Hat、Wxmtu等,都拥有自己的分发池管理工具,但这些工具都属于企业的保密资源。在国 内,对于分发池的管理还都是由工作人员人工来完成。目前,对于软件包依赖建模的工具数量并不是很多,而且多数都属于企业专用的 工具。在客户端却存在几个可以展示包依赖关系的工具。1. apt-rdepends :apt_rd印ends可以提取软件包的依赖信息,并将所提取的依赖 信息格式化为Dot语言文件。它与Graphviz的组件Dot—起工作就可以显示出某个软件 包的依赖关系。这个工具功能上有较多的限制,它只能显示的软件包的依赖信息,不能显示 冲突信息。在元数据提取上,它并没有解析所有的包的元数据,而只是对Depends关系进行 了解析。2. Linux包依赖的可视化工具在网上有一个人做了一个关于Linux包依赖的可 视化工具,它是一个web系统,服务端用Python语言框架Django写成,将包的依赖信息提 取后格式化为json的数据格式。客户端使用Mootools包解析json数据,其可视化结果是 通过利用JavaScriptlnfoVis ToolKit包来实现的。3. Ignominy Ignominy是在项目CMS IGUANA中开发出来的一个工具,它是用来对 软件系统进行分析的。它的主要部分是一个构件依赖关系的查看器,这个查看器会将依赖关系详细的解析成为可读的格式。它同时还包括了可视化收集到的数据为图像的工具。这 个工具主要用途是能够查看自己开发的软件可能出现的结构错误,来改进软件的质量。同 时它还可以对现在正在使用的外部组件进行评估和研究学习。但是,上述可以展示包依赖关系建模工具都是基于客户端软件包管理,并非分发 池软件包管理,而基于客户端软件包管理主要负责软件包的本地安装维护、依赖关系处理, 并不适用于分发端的软件包依赖关系管理。对于分发端软件包依赖关系建模技术来说,尚 没有公开的Linux下的软件包依赖关系建模方法。

发明内容
有鉴于此,本发明的主要目的在于针对Linux软件包格式众多、依赖关系复杂的 情况,提供一种基于统一软件包元数据格式和扩展的GraphML语言的统一建模方法,所要 解决的技术问题是如何对分发端的软件包依赖关系进行建模,以提高软件包依赖关系管理 的效率,降低软件包之间的依赖关系管理的复杂度。本发明的目的及解决其技术问题是采用以下技术方案来实现的。依据本发明提出 的一种基于统一软件包元数据格式和扩展的GraphML语言的统一建模方法,其包括以下步 骤步骤10 解析软件包中的依赖关系表示为统一软件包元数据格式Package格式;步骤 20 将表示为统一软件包元数据格式lockage格式的依赖关系用扩展的GraphML语言描述, 并将其可视化;其中,该统一的软件包元数据格式从依赖关系建模的角度提出,只包含了依 赖关系建模所需的必须信息;该扩展的GraphML是基于GraphML,通过为其元素增加属性和 增加<data>元素内容的方式对其进行了扩展。本发明的目的及解决其技术问题还可以采用以下技术措施进一步实现。前述的基于统一软件包元数据格式和扩展的GraphML语言的统一建模方法,其中 所述的步骤10还包括步骤101 根据各种不同的Linux软件包格式,从依赖关系建模的角 度,提出一种统一的软件包元数据格式Package格式及其XML表示方法;步骤102 根据输 入的软件包格式,读取此种软件包格式的包基的软件包文件或包基的描述文件,解析并提 取软件包元数据的依赖信息;步骤103 将获得的依赖信息转换为统一软件包元数据格式 Package格式,并用XML表示为统一软件包元数据描述的包基描述文件。前述的基于统一软件包元数据格式和扩展的GraphML语言的统一建模方法,其中 所述的步骤101进一步包括步骤1011 根据各种不同的Linux软件包格式,从依赖关系建 模角度给出统一软件包元数据格式Package格式所包含的元素;步骤1012 给出Package 格式中所包含的元素的描述性定义;步骤1013 根据Package格式,给出Package格式的 XML表示方法;所述的步骤102进一步包括步骤1021 根据输入的软件包格式,判断软件 包基的格式;步骤1022 根据包基的格式,读取此种格式的包基的软件包文件或包基的描 述文件;步骤1023 根据读取的软件包文件或包基的描述文件,解析并提取软件包元数据 的依赖信息;步骤103进一步包括步骤1031 将提取的软件包元数据的依赖信息转换为 面向依赖建模的Package结构;步骤1032 将Package结构转换为用XML表示的统一软件 包元数据描述的包基描述文件。前述的基于统一软件包元数据格式和扩展的GraphML语言的统一建模方法,其 中所述的步骤20还包括步骤201 基于包基建模需求,对GraphML进行扩展,得到扩展的GraphML格式;步骤202 将Package结构转换为扩展的GraphML文件格式描述,生成 graphmlxml文件;步骤203 读取graphml. xml并将其可视化。本发明与现有技术相比具有明显的优点和有益效果。借由上述技术方案,本发明 基于统一软件包元数据格式和扩展的GraphML语言的统一建模方法有下列优点及有益效 果1.本发明支持多种不同软件包格式元数据的提取;2.本发明采用统一软件包元数据表示依赖关系,使用扩展的GraphML对依赖关系 进行统一建模,可以降低分发端软件包管理的难度和软件包维护成本,以及提高集成和更 新支持效率;3.本发明面向图形方式描述软件包依赖关系,可自动生成软件包基描述文件和可 视化图形;4.本发明中的软件包元数据格式可以在提取软件包间依赖关系时,每增加一种包 格式,无需要对依赖关系建模部分作出修改;5. GraphML与其它具有各自特有语法的图形文件格式相比,其优点为采用基于 XML的语法,这使得它成为了图形产生、图形文档化处理的理想格式,而且允许用户通过为 其元素增加属性或为<data>元素增加结构化内容的方式进行扩展。另外,GraphML支持超 边,可以用来仿真“与-或图”中的一个软件包与多个软件包间的“或依赖”关系。本发明 中的扩展的GraphML不仅具有GraphML的特性而且还满足包基建模的需求6.本发明通过可安装软件包依赖关系管理保证每个可安装软件包的可安装性、 Linux操作系统分发版本和分发池的依赖完整性。综上所述,本发明具有上述优点及有益效果,在方法和功能上皆有较大的改进,在 技术上有显著的进步,并具有产业的广泛利用价值。上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段, 而可依照说明书的内容予以实施,并且为了让本发明的上述和其他目的、特征和优点能够 更明显易懂,以下特举较佳实施例,并配合附图,详细说明如下。


图1为Linux软件包间依赖关系提取过程。图2为统一软件包元数据的XML表示。图3为基于统一软件包元数据包间依赖关系提取和建模过程。图4为扩展的GraphML格式。图5为libc6节点例子。图6为一个edge节点例子。图7为一个hyperedge节点例子。
具体实施例方式为更进一步阐述本发明为达成预定发明目的所采取的技术手段及功效,以下结合 附图,对依据发明提出的基于统一软件包元数据格式和扩展的GraphML语言的统一建模方 法其具体实施方式
、方法、步骤、结构、特征及其功效,详细说明如后。
有关本发明的前述及其他技术内容、特点及功效,在以下配合参考图式的详细说 明中将可清楚呈现。通过具体实施方式
的说明,当可对本发明为达成预定目的的所采取的 技术手段及功效得以更加深入且具体的了解,然而所附图式仅是提供参考与说明之用,并 非用来对本发明加以限制。为了能够更好的理解本发明的内容,下面给出一些相关的概念(1)可安装单元包可安装单元包是一种包含元数据、程序文件、配置信息和安装脚本等内容的文件 集合,是组成软件的一个可安装基本单位。在Linux操作系统中称为软件包,本文重点研究 了 Linux操作系统上的可安装单元包的依赖关系管理,因此以下将可安装单元包简称为软 件包。(2)软件包间的依赖关系一般而言,软件包之间的依赖关系可分为两类依赖和冲突。为了安装软件包pl, 必须首先安装软件包p2,pl对p2存在依赖关系;软件包pl和p2无法共同存在,称pl和 P2之间为冲突关系。可以从软件包的元数据文件获取包的依赖和冲突约束信息。(3)软件包的依赖可满足性对于一个软件包集合R,R中软件包ρ的依赖可满足性指,在软件包集合R中,存 在一个赋值λ,Da(X)为依赖函数,定义Da (X)为X的直接依赖软件包的集合。DnA(p)
表示 Da (Da (Da (... (Da (ρ)...))),对子集 i^yzrI 内中任一软件包 X,使得 P^jdw,(4)软件包可安装对于软件包集合R,给定一个软件包P,如果P相对于软件包集合R符合依赖可满 足性,则称P在软件包集合R上可安装。(5)或依赖、与依赖关系大部分的依赖关系为“与依赖”,如果软件包A “与依赖”软件包B和C,则表示软 件包A在缺少B或C的情况下,都不能使用。有些软件包格式可以支持“或依赖”关系,如果软件包A “或依赖”软件包B和软 件包C,则表示软件包A在B或C任一包存在情况下,就可以使用。在DEB软件包格式中, Depends、Recommands、Suggests 禾口 Pre-Depends 关系都支持“或依赖,,。(6)依赖关系的表示一个依赖关系还经常会限制它所依赖的版本。如果软件包A依赖于libc6( > = 2. 4),就表明软件包依赖于libc6,而且版本必须是大于或等于2. 4。一共有五种不同的关于包的版本的比较关系=完全相等;<=小于或等于;>=大于或等于;<小于;>大于。(7)虚包虚包是指一组具有近似功能的软件的统称,例如tin和trn都是新闻阅读程序,为 系统中其它需要更新阅读的程序提供服务。因此可以说它们都提供了“news-reader(新闻 阅读)”的虚包。同样,smail和sendmail的都提供了邮件传输代理的功能。因此说它们提供了“邮件传输代理(mail transport agent) ”的虚包,两者安装都可以满足其它程序对于“mail transport agent”的虚包要求。虚包没有版本号。(8)依赖关系的分类Linux软件包元数据中包含的8种不同的依赖关系如下Depends关系如果软件包B与软件包A之间存在依赖关系,这就意味着软件包B 不能在缺少软件包A的情况下运行。Recommends关系与D印ends关系相同,不过这里指出的依赖关系并不是强制必 须的。Suggests关系如果软件包B与软件包A之间存在Suggests关系(ASuggests B), 这就意味着软件包A可以增强软件包B的功能。但是在软件包A缺少的情况下,软件包B 仍然可以运行。Pre-Depends关系属于安装时依赖。如果软件包B与软件包A有Pre-D印ends关 系,表明软件包B在安装时需要软件包A的支持。Enhances关系与Suggests关系相似,如果软件包A与软件包B有Enhances关 系,表示软件包A可以增强软件包B的功能。Conflicts关系表示软件包间的冲突关系。如果软件包A与软件包B冲突,则软 件包A与软件包B不能在同一系统中共存。R印laces关系提供了一种能够解决冲突的方法。如果软件包A可以R印laces软 件包B,则软件包B就必须先从系统中移除,然后软件包A才能被安装。Provides关系表示虚包关系。本发明提出的基于统一软件包元数据格式和扩展的GraphML语言的统一建模方 法,包括以下步骤步骤10 解析软件包中的依赖关系表示为统一软件包元数据格式Package格式。如图1所示为Linux软件包间依赖关系提取过程图,包括以下步骤步骤101 根据各种不同的Linux软件包格式,从依赖关系建模的角度,提出一种 统一的软件包元数据格式Package格式及其XML表示方法。首先进入步骤1011 根据各种不同的Linux软件包格式,从依赖关系建模角度给 出统一软件包元数据格式Package格式所包含的元素;然后执行步骤1012 给出Package格式中所包含的元素的描述性定义;有各种不同的Linux软件包格式,如Redhat Linux软件包为rpm格式,Debian Linux为deb格式,软件包也可以为tgz或pkg等格式,不同的软件包格式包含的内容也有 差异,不同软件包格式的分析和对比如表1所示。在提取包间依赖关系时,需要针对不同的 包格式分别进行处理,每增加一种包格式,就需要对依赖关系建模构件的相应部分做出修 改,为使依赖关系建模构件独立于各种不同的包格式,需要其输入为一个统一的包元数据 格式,为此本发明从依赖关系建模角度提出一种统一的软件包元数据格式,该元数据格式 只包含了依赖关系建模所需的必要信息。通过统一包元数据格式将不同格式软件包信息的 解析、依赖关系提取与依赖关系建模构件分离,以增加各自的可扩展性。统一软件包元数据 格式定义如表2所示。表1不同软件包格式对比
权利要求
1.一种软件包依赖关系建模方法,其是基于统一软件包元数据格式和扩展的GraphML 语言的统一建模方法,其特征在于包括以下步骤步骤10 解析软件包中的依赖关系表示为统一的软件包元数据格式Package格式; 步骤20 将表示为统一软件包元数据格式Package格式的依赖关系用扩展的GraphML 语言描述,并将其可视化。
2.根据权利要求1所述的一种软件包依赖关系建模方法,其特征在于统一的软件包元数据格式lockage格式是从依赖关系建模的角度提出,只包含了依赖 关系建模所需的必须信息;扩展的GraphML是基于GraphML,通过为其元素增加属性和增加data元素内容的方式 对其进行了扩展。
3.根据权利要求1所述的一种软件包依赖关系建模方法,其特征在于其中所述的步骤 10还包括步骤101 根据各种不同的Linux软件包格式,从依赖关系建模的角度,提出一种统一 的软件包元数据格式Package格式及其XML表示方法;步骤102 根据输入的软件包格式,读取此种软件包格式的包基的软件包文件或包基 的描述文件,解析并提取软件包元数据的依赖信息;步骤103 将获得的依赖信息转换为统一软件包元数据格式Package格式,并用XML表 示为统一软件包元数据描述的包基描述文件。
4.根据权利要求3所述的一种软件包依赖关系建模方法,其特征在于其中所述的步骤 101进一步包括步骤1011 根据各种不同的Linux软件包格式,从依赖关系建模角度给出统一软件包 元数据格式Package格式所包含的元素;步骤1012 给出Package格式中所包含的元素的描述性定义; 步骤1013 根据Package格式,给出Package格式的XML表示方法。
5.根据权利要求3所述的一种软件包依赖关系建模方法,其特征在于其中所述的步骤 102进一步包括步骤1021 根据输入的软件包格式,判断软件包基的格式;步骤1022 根据包基的格式,读取此种格式的包基的软件包文件或包基的描述文件; 步骤1023 根据读取的软件包文件或包基的描述文件,解析并提取软件包元数据的依赖信息。
6.根据权利要求3所述的一种软件包依赖关系建模方法,其特征在于其中所述的步骤 103进一步包括步骤1031 将提取的软件包元数据的依赖信息转换为面向依赖建模的Package结构; 步骤1032 将lockage结构转换为用XML表示的统一软件包元数据描述的包基描述文件。
7.根据权利要求1所述的一种软件包依赖关系建模方法,其特征在于其中所述的步骤 20还包括步骤201 基于包基建模需求,对GraphML进行扩展,得到扩展的GraphML格式; 步骤202 将Package结构转换为扩展的GraphML文件格式描述,生成graphml. xml文件;步骤203 读取graphml. xml并将其可视化。
8.根据权利要求3所述的一种软件包依赖关系建模方法,其特征在于其中步骤101所 述的统一的软件包元数据,包含了依赖关系建模所需的必须信息,对不同格式的软件包进 行统一软件包元数据表示,统一软件包元数据用XML表示。
9.根据权利要求3所述的一种软件包依赖关系建模方法,其特征在于其中步骤102所 述的软件包依赖关系提取过程,至少支持DEB、RPM、Cache和HDList四种格式文件的元数据 解析工作,转换为面向依赖建模的Package结构。
10.根据权利要求7所述的一种软件包依赖关系建模方法,其特征在于其中步骤203所 述的读取扩展的GraphML文件并将其可视化,包含了对用扩展的GraphML文件描述的信息 用图形化方式表示出来。
11.根据权利要求3所述的一种软件包依赖关系建模方法,其特征在于其中所述的待 描述的软件包的提取及解析过程为DEB软件包的解析。
全文摘要
本发明提供了一种软件包依赖关系建模方法,该方法包括解析软件包中的依赖关系并表示为统一软件包元数据格式Package格式;将表示为统一软件包元数据格式Package格式的依赖关系用扩展的GraphML语言描述,并将其可视化。本发明对不同的软件包管理系统进行建模,可以对可安装软件包依赖关系进行管理,可以提高软件包依赖关系管理的效率,可以降低软件包之间的依赖关系管理的复杂度。
文档编号G06F9/44GK102109991SQ20101024113
公开日2011年6月29日 申请日期2010年7月30日 优先权日2010年7月30日
发明者兰雨晴, 匡明霞 申请人:兰雨晴
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1