一种Linux操作系统软件包依赖关系检测方法

文档序号:6376363阅读:655来源:国知局
专利名称:一种Linux操作系统软件包依赖关系检测方法
技术领域
本发明涉及一种Linux操作系统领域,尤其涉及Linux操作系统软件包依赖关系检测方法。
背景技术
当前操作系统的软件包依赖关系主要通过系统内置的命令进行依赖文件的查询,如“rpm-q—provide或一requires+软件包包名”,每次只能查询软件包与软件包之间的直接依赖,即只能查询某个软件包所直接依赖或直接提供的文件,而不能查询某个软件包与软件包之间的间接依赖关系。例如,当软件包A依赖于软包B,而软件 包B又依赖于软件包C时,软件包A间接依赖于软件包C,但上述的rpm命令则无法很好地查询这种依赖关系并友好地显示给用户。需要说明的是,对于Linux操作系统分发端而言,检测各软件包是否满足依赖性至关重要,否则只能通过安装及反复测试来判断要发布的操作系统是否满足依赖性。加之,随着Linux操作系统的个性化发展,往往发布Linux操作系统的企业要同时开发众多定制的Linux操作系统,每种定制Linux操作系统又有众多的版本。因此,如何较快速地检测Linux操作系统软件包依赖关系以提高Linux操作系统发布者的工作效率显得越来越重要。存在一种从冲突的角度出发通过排除与软件包关联的冲突来对Linux分发端的软件包依赖完整性进行检查的软件包依赖关系检测方法,但是这种关注软件包依赖关系冲突的检查方法一般只强调依赖树的概念来解决判断依赖性,而忽视了软件包之间的多层依赖关系。这种方法对于特定软件包而言,只能分析出该特定软件包的下层的依赖关系。因此,需要一种能够更全面检测某个特定软件包的依赖关系检测方法,使得在Linux操作系统进行裁剪或添加新功能时,能够较快速地检测操作系统的软件包是否满足依赖关系。

发明内容
本发明所要解决的技术问题之一是需要提供一种能够较快速地全面检测某个特定软件包的依赖关系的Linux操作系统软件包依赖关系检测方法。为了解决上述技术问题,本发明提供了一种Linux操作系统软件包依赖关系检测方法。该方法包括如下步骤构建参考操作系统的所有软件包的依赖关系数据;基于所述依赖关系数据,依照设定的分层逻辑生成与待检测操作系统中特定软件包相关的分层依赖关系;基于所述分层依赖关系生成并显示所述特定软件包的分层依赖关系图;其中,所述分层依赖关系图中的各节点表示与所述特定软件包存在依赖或被依赖关系的软件包。
根据本发明又一方面,所述构建参考操作系统的所有软件包的依赖关系数据的步骤进一步包括获取所述参考操作系统的所有软件包;利用Linux系统内置的createrepo命令,生成软件包的依赖关系数据库,作为所述依赖关系数据。根据本发明又一方面,所述参考操作系统所包括的软件包是所述待检测操作系统中软件包的子集,所述参考操作系统满足软件包依赖性。根据本发明又一方面,所述设定的分层逻辑包括基于所述参考操作系统的如下步骤blO)、将所述特定软件包作为待分析软件包;bll)、确定所述待分析软件包的唯一标识;bl2)、依据所述待分析软件包的唯一标识确定所述待分析软件包提供的文件;
bl3)、基于所述待分析软件包提供的文件,确定依赖于所述待分析软件包所提供的文件的软件包的唯一标识;bl4)、将与所述软件包的唯一标识对应的软件包确定为所述待分析软件包的上层软件包;bl5)、将所述待分析软件包的上层软件包作为所述待分析软件包,返回子步骤bll),以进一步确定所述待分析软件包的上层软件包的上层软件包。根据本发明又一方面,所述设定的分层逻辑包括基于所述参考操作系统的如下步骤b20)、将所述特定软件包作为待分析软件包;b21)、基于所述参考操作系统确定所述待分析软件包的唯一标识;b22)、基于所述参考操作系统,依据所述待分析软件包的唯一标识确定所述待分析软件包所依赖于的文件;b23)、基于所述待分析软件包所依赖于的文件,确定提供所述待分析软件包所依赖于的文件的软件包的唯一标识;b24)、将与所述软件包的唯一标识对应的软件包确定为所述待分析软件包的下层软件包;b25)、将所述待分析软件包的下层软件包作为所述待分析软件包,返回子步骤b21),以进一步确定所述待分析软件包的下层软件包的下层软件包。根据本发明又一方面,依据指定层数来确定通过返回处理而执行的循环的次数。根据本发明又一方面,在基于所述依赖关系数据、依照设定的分层逻辑生成与待检测操作系统中特定软件包相关的分层依赖关系的步骤中,根据用户输入的软件包名来确定所述特定软件包;或者,将所述待检测操作系统中区别于所述参考操作系统的软件包确定为所述特定软件包。根据本发明又一方面,所述基于所述分层依赖关系生成并显示所述特定软件包的分层依赖关系图的步骤进包括基于所述分层依赖关系,依照设定的分层逻辑生成符合指定层数要求的所述特定软件包的分层依赖关系图、或者依照设定的分层逻辑生成所述特定软件包的分层依赖关系显示所生成的符合指定层数要求的所述特定软件包的分层依赖关系图;其中,所述指定层数包括所述特定软件包的分层依赖关系图的总层数、位于所述特定软件包的上层的层数和/或下层的层数。根据本发明又一方面,所述基于所述分层依赖关系生成并显示所述特定软件包的分层依赖关系图的步骤包括基于所述分层依赖关系,依照设定的分层逻辑生成所述特定软件包的分层依赖关系图;检测所述待测操作系统中是否存在所述特定软件包的分层依赖关系图中各结点表示的软件包;

区别显示所述分层依赖关系图中在所述待测操作系统中不存在的软件包所对应的节点。根据本发明又一方面,所述基于所述依赖关系数据、依照设定的分层逻辑生成与待检测操作系统中特定软件包相关的分层依赖关系的步骤包括,依据设定的分层逻辑,将软件包之间的多层依赖关系利用Dot描述语言形式输出到Dot文件中;所述基于所述分层依赖关系生成并显示所述特定软件包的分层依赖关系图的步骤包括基于所述Dot文件,根据用户输入的软件包名、或者包含包名及层数,利用软件包graphviz的dot命令分层显示所述分层依赖关系图。与现有技术相比,本发明的一个或多个实施例可以具有如下优点构建参考操作系统的所有软件包的依赖关系数据,基于依赖关系数据,依照设定的分层逻辑生成与待检测操作系统中特定软件包相关的分层依赖关系。可以较快速地检测特定软件包与操作系统中其它软件包的依赖关系。通过显示特定软件包的分层依赖关系图,可以更方便用户查看软件包的依赖关系。本发明的其他优点、目标,和特征在某种程度上将在随后的说明书中进行阐述,并且在某种程度上,基于对下文的考察研究对本领域技术人员而言将是显而易见的,或者可以从本发明的实践中得到教导。本发明的目标和其他优点可以通过下面的说明书,权利要求书,以及附图中所特别指出的结构来实现和获得。


附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例共同用于解释本发明,并不构成对本发明的限制。在附图中图I是根据本实施例的Linux操作系统软件包依赖关系检测方法的流程图;图2A和图2B是根据本实施例的Linux操作系统软件包依赖关系检测方法中用于确定特定软件包的上层和下层软件包的各子步骤的流程图;图3A和图3B是根据本发明实施例的Linux操作系统软件包依赖关系检测方法来显示特定软件包的分层依赖关系图的一个例子。
具体实施例方式以下将结合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题,并达成技术效果的实现过程能充分理解并据以实施。需要说明的是,只要不构成冲突,本发明中的各个实施例以及各实施例中的各个特征可以相互结合,所形成的技术方案均在本发明的保护范围之内。另外,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。下面参考图I来说明本实施例的Linux操作系统软件包依赖关系检测方法。步骤S110,构建参考操作系统的所有软件包的依赖关系数据;步骤S120,基于依赖关系数据,依照设定的分层逻辑生成与待检测操作系统中特定软件包相关的分层依赖关系;
步骤S130,基于分层依赖关系生成并显示特定软件包的分层依赖关系图,其中分层依赖关系图中的各节点表示与特定软件包存在依赖或被依赖关系的软件包。下面详细说明步骤S110。当一新版本的支持龙芯平台的Linux操作系统要发布时,这个新版本的操作系统即为待检测操作系统。由于可将新版本之前的那个版本的操作系统已经是测试通过的稳定版本的操作系统,则可将这个稳定版本的操作系统作为参考操作系统。优选地,可新建一个目录,将新版本的支持龙芯平台的Linux操作系统中不属于该稳定版本的操作系统的所有的软件包放入所创建的目录。这样,可利用Linux系统内置的createrepo命令来生成包含该稳定的操作系统(例如,可为X86的操作系统)的全部软件包(即除新创建目录下的软件包以外的全部软件包)的依赖关系数据库,作为依赖关系数据。使得参考操作系统所包括的软件包是待检测操作系统中软件包的子集,参考操作系统满足软件包依赖性。这样,可保证该依赖关系数据库中涉及的软件包都是该稳定的操作系统所包含的,而不会有多余的软件包,从而产生多余的依赖关系。在依照设定的分层逻辑生成与待检测操作系统中特定软件包相关的分层依赖关系的步骤S120中,设定的分层逻辑包括基于参考操作系统如图2A所示的各步骤,这些步骤用于确定特定软件包的上层软件包。下面结合图2A来进行说明。步骤S211,将特定软件包作为待分析软件包。例如,当要对操作系统进行升级时,可输入新版本操作系统中相对于参考操作系统而言新增加的软件包的名称A0,则该输入的软件包名AO对应的软件包即为一特定软件包。将该特定软件包作为待分析软件包。此外,也可将待检测操作系统中区别于参考操作系统的全部软件包确定为特定软件包。需要强调的是,现有对依赖性的分析的技术中,对特定软件包只能通过rpm应用来分析其相邻层的依赖关系,并不能一次性检测包含间接依赖与直接依赖的所有依赖关系,因而导致效率非常低下。其它一些检测方法只能每次只能通过复杂且耗时的检测过程得到整个操作系统是否满足依赖性的检测结果,而无法针对性地对特定软件包的依赖关系,这也导致效率低下。步骤S212,确定待分析软件包的唯一标识。更具体地,从在步骤SllO中利用createrepo命令生成的依赖关系数据库的packages表中获得该软件包对应的软件包唯一标识 pkgkey-AO。 步骤S213,依据待分析软件包的唯一标识确定待分析软件包提供的文件。例如,可通过输入pkgkey-AO,从依赖关系数据库中provides表中获得该软件包对应的一系列文件名provides-names,这些文件名即表示待分析软件包提供的文件。步骤S214,基于待分析软件包提供的文件,确定依赖于该提供的文件的软件包的唯一标识。例如,输入这一系列文件名provides-names,从在步骤SllO中利用createrepo命令生成的依赖关系数据库的requires和files表中获得一系列提供文件名为provides-names的文件的软件包的唯一标识requires-pkgkeys。步骤S215,将与步骤S214所确定的软件包的唯一标识对应的软件包确定为待分析软件包的上层软件包。 可输入一系列软件包唯一标识requires-pkgkeys,从依赖关系数据库中packages表中获得对应的一系列软件包名A1、A2、A3,作为待分析软件包的上层软件包。也就是说,通过上述步骤,确定为Al、A2、A3依赖于A0。步骤S216,将待分析软件包的上层软件包作为待分析软件包,返回子步骤S212,以进一步确定待分析软件包的上层软件包的上层软件包。当然,若在步骤S214中发现没有依赖于该提供的文件的软件包的唯一标识,则步骤S220的处理结束,不再需要返回S212。在上面这个例子中,可将软件包Al、A2、A3均作为待分析软件包,从而通过步骤S212至S215确定A1、A2、A3的上层软件包。在图3A所示的例子中,Al的上层软件包为A4和A5,A2的上层软件包为A6,A3依赖于A6和A7,其上层软件包为A6和A7。依此类推,可继续通过返回步骤S212来进一步分析A4至A7的上层软包。如图3A,A7依赖于A8、A9和AlO,A4至A6没有上层软件包。在依照设定的分层逻辑生成与待检测操作系统中特定软件包相关的分层依赖关系的步骤S120中,设定的分层逻辑还可包括基于参考操作系统如图2B所示的各步骤,这些步骤用于确定特定软件包的下层软件包。下面结合图2B来进行说明。S221,将特定软件包作为待分析软件包。与步骤S211类似地,可输入新版本操作系统中相对于参考操作系统而言新增加的软件包的名称A0,则该输入的软件包名AO对应的软件包即为一特定软件包。将该特定软件包作为待分析软件包。S222,基于参考操作系统,确定待分析软件包的唯一标识。与步骤S212类似地,可从依赖关系数据库中packages表中获得该待分析软件包对应的软件包唯一标识pkgkey-AOοS223,基于参考操作系统,依据待分析软件包的唯一标识确定待分析软件包所依赖于的文件。输入此pkgkey-BO,从依赖关系数据库中requires表中获得该软件包对应的一个以上所依赖的软件包的文件名requires-names,这件文件名表示的即为要待分析软件包所依赖于的文件。S224,基于待分析软件包所依赖于的文件,确定提供该待分析软件包所依赖于的文件的软件包的唯一标识。可输入这一个以上的所依赖于的文件的文件名requires-names,从依赖关系数据库中provides和files表中获得提供了这一个以上的所依赖于的文件的一个以上软件包唯一标识provides-pkgkeys。S225,将与步骤S224所确定的软件包的唯一标识对应的软件包确定为待分析软件包的下层软件包。例如,可输入这一个以上的软件包的provides-pkgkeys,从依赖关系数据库中packages表中获得对应的复数个软件包名BI、B2、B3,作为待分析软件包的下层软件包。S226,将待分析软件包的下层软件包作为待分析软件包,返回子步骤S222,以进一步确定待分析软件包的下层软件包的下层软件包。与步骤S216类似地,可通过返回步骤S222来分别确定软件包BI、B2、B3的下层软件包。图3A中,BI的下层软件包为B4,B2的下层软件包为B5和B6,B3的下层软件包为B6、B7和B8,以及B4的下层软件包为B9,B8的下层软包为B10。优选地,不仅可通过用户可输入的软件包名来确定要检测依赖关系的特定软件包,还可以通过用户输入来确定要分析层数。例如,可通过用户输入指定只分析特定软件包的2个上层、一共分析6层、或者只分析2个上层和3个下层等。这样,依据指定层数来确定通过上述返回处理而执行的循环的次数。
步骤S130中,基于分层依赖关系依照设定的分层逻辑生成并显示特定软件包的分层依赖关系图。更具体地,可基于分层依赖关系,依照设定的分层逻辑生成符合指定层数要求的特定软件包的分层依赖关系图;然后显示所生成的符合指定层数要求的特定软件包的分层依赖关系图。此外,还可以在生成特定软件包的分层依赖关系图之后,检测待测操作系统中是否存在特定软件包的分层依赖关系图中各结点表示的软件包;然后以虚线、点划线、不同的颜色或标亮等区别显示分层依赖关系图中在待测操作系统中不存在的软件包所对应的节点。根据软件包的包名、输入的层数,利用设定的分层逻辑,将软件包之间的多层依赖关系用Dot描述语言形式输出到文件filel,并以dot为格式后缀。对文件filel的进行逻辑处理,如按照字幕排序、去除重复项、再次将软件包之间的多层依赖关系用Dot描述语言形式输出到文件file2,并以dot为格式后缀。这样,可根据输入的软件包的包名、输入的层数,以及Dot语言描述的可视化文件file2,利用软件包graphviz的dot命令dot-Tsvg file2. dot-OXXX. svg,自动分层显示软件包依赖关系图。当用户输入了总层数为4层且2层下层I层上层时,则上面的例子将不显示图3A中的全部层,而是仅示出图3B中的层,这样可以更有利于帮助操作系统发布者有针对性地检测系统的依赖性。此外,图3A还以虚线方式区别显示了分层依赖关系图中在待测操作系统中不存在的软件包所对应的节点A3和B8。本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。虽然本发明所揭露的实施方式如上,但所述的内容只是为了便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属技术领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所 界定的范围为 。
权利要求
1.一种Linux操作系统软件包依赖关系检测方法,其特征在于,包括如下步骤 构建参考操作系统的所有软件包的依赖关系数据; 基于所述依赖关系数据,依照设定的分层逻辑生成与待检测操作系统中特定软件包相关的分层依赖关系; 基于所述分层依赖关系生成并显示所述特定软件包的分层依赖关系图;其中, 所述分层依赖关系图中的各节点表示与所述特定软件包存在依赖或被依赖关系的软件包。
2.根据权利要求I所述的方法,其特征在于,所述构建参考操作系统的所有软件包的依赖关系数据的步骤进一步包括 获取所述参考操作系统的所有软件包; 利用Linux系统内置的createrepo命令,生成软件包的依赖关系数据库,作为所述依赖关系数据。
3.根据权利要求I所述的方法,其特征在于,所述参考操作系统所包括的软件包是所述待检测操作系统中软件包的子集,所述参考操作系统满足软件包依赖性。
4.根据权利要求I所述的方法,其特征在于,所述设定的分层逻辑包括基于所述参考操作系统的如下步骤 blO)、将所述特定软件包作为待分析软件包; bll)、确定所述待分析软件包的唯一标识; bl2)、依据所述待分析软件包的唯一标识确定所述待分析软件包提供的文件;bl3)、基于所述待分析软件包提供的文件,确定依赖于所述待分析软件包所提供的文件的软件包的唯一标识; bl4)、将与所述软件包的唯一标识对应的软件包确定为所述待分析软件包的上层软件包; bl5)、将所述待分析软件包的上层软件包作为所述待分析软件包,返回子步骤bll),以进一步确定所述待分析软件包的上层软件包的上层软件包。
5.根据权利要求I所述的方法,其特征在于,所述设定的分层逻辑包括基于所述参考操作系统的如下步骤 b20)、将所述特定软件包作为待分析软件包;b21)、基于所述参考操作系统确定所述待分析软件包的唯一标识;b22)、基于所述参考操作系统,依据所述待分析软件包的唯一标识确定所述待分析软件包所依赖于的文件; b23)、基于所述待分析软件包所依赖于的文件,确定提供所述待分析软件包所依赖于的文件的软件包的唯一标识; b24)、将与所述软件包的唯一标识对应的软件包确定为所述待分析软件包的下层软件包; b25)、将所述待分析软件包的下层软件包作为所述待分析软件包,返回子步骤b21),以进一步确定所述待分析软件包的下层软件包的下层软件包。
6.根据权利要求4或5所述的方法,其特征在于,依据指定层数来确定通过返回处理而执行的循环的次数。
7.根据权利要求I至5中任一项所述的方法,其特征在于,在基于所述依赖关系数据、依照设定的分层逻辑生成与待检测操作系统中特定软件包相关的分层依赖关系的步骤中, 根据用户输入的软件包名来确定所述特定软件包;或者, 将所述待检测操作系统中区别于所述参考操作系统的软件包确定为所述特定软件包。
8.根据权利要求I至5中任一项所述的方法,其特征在于,所述基于所述分层依赖关系生成并显示所述特定软件包的分层依赖关系图的步骤包括 基于所述分层依赖关系,依照设定的分层逻辑生成符合指定层数要求的所述特定软件包的分层依赖关系图或者依照设定的分层逻辑生成所述特定软件包的分层依赖关系图;显示所生成的符合指定层数要求的所述特定软件包的分层依赖关系图;其中, 所述指定层数包括所述特定软件包的分层依赖关系图的总层数位于所述特定软件包的上层的层数和/或下层的层数。
9.根据权利要求I至5中任一项所述的方法,其特征在于,所述基于所述分层依赖关系生成并显示所述特定软件包的分层依赖关系图的步骤包括 基于所述分层依赖关系,依照设定的分层逻辑生成所述特定软件包的分层依赖关系图; 检测所述待测操作系统中是否存在所述特定软件包的分层依赖关系图中各结点表示的软件包; 区别显示所述分层依赖关系图中在所述待测操作系统中不存在的软件包所对应的节点。
10.根据权利要求I至5中任一项所述的方法,其特征在于, 所述基于所述依赖关系数据、依照设定的分层逻辑生成与待检测操作系统中特定软件包相关的分层依赖关系的步骤包括,依据设定的分层逻辑,将软件包之间的多层依赖关系利用Dot描述语言形式输出到Dot文件中; 所述基于所述分层依赖关系生成并显示所述特定软件包的分层依赖关系图的步骤包括基于所述Dot文件,根据用户输入的软件包名或者包含包名及层数,利用软件包graphviz的dot命令分层显示所述分层依赖关系图。
全文摘要
本发明公开了一种Linux操作系统软件包依赖关系检测方法。该方法包括如下步骤构建参考操作系统的所有软件包的依赖关系数据;基于所述依赖关系数据,依照设定的分层逻辑生成与待检测操作系统中特定软件包相关的分层依赖关系;基于所述分层依赖关系生成并显示所述特定软件包的分层依赖关系图,其中所述分层依赖关系图中的各节点表示与所述特定软件包存在依赖或被依赖关系的软件包。本发明的方法能够较快速地全面检测某个特定软件包的依赖关系的Linux操作系统软件包依赖关系。
文档编号G06F9/44GK102880466SQ20121032455
公开日2013年1月16日 申请日期2012年9月4日 优先权日2012年9月4日
发明者徐晶晶 申请人:中标软件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1