快速检测apt仓库源依赖完整性的方法,根据软件源中的资源建立一个索引文件,可以加快在软件源中查找软件包的速度。在Linux中使用刷新软件源的命令时,会扫描各软件源,并对各软件源所具有的软件包资源建立索引文件,存放在Linux操作系统本地。一种快速检测apt仓库源依赖完整性的方法就是利用操作系统本地的索引文件,对软件包的依赖完整性进行检测。本发明专利技术在检测软件依赖关系时,不需要提前构建所有软件包的依赖关系描述模型,直接利用软件源端的索引文件中对各软件包依赖关系的描述信息即可;本发明专利技术的功能重在检测,会返回导致依赖错误的具体原因,提高了软件包之间依赖关系的维护效率。维护效率。维护效率。
【技术实现步骤摘要】
快速检测apt仓库源依赖完整性的方法
[0001]本专利技术涉及软件包依赖检测
,具体涉及快速检测apt仓库源依赖完整性的方法。
技术介绍
[0002]Linux的低成本、强大的定制功能以及良好的移植性能,使得Linux在嵌入式系统方面得到广泛应用。根据用户的不同需求,发布Linux操作系统的企业需同时开发众多定制的Linux操作系统,每种定制Linux操作系统又有众多的版本,且Linux操作系统又是由大量可安装的软件包组成的,这其中所包含的软件包之间有大量复杂的依赖关系需要检测。若在软件仓库源存在软件包的依赖错误,往往在安装软件包时才会被发现,需要解决这些错误才能交付该Linux操作系统,这会导致产品交付周期变长。若通过人工完成Linux操作系统软件包依赖关系的管理,软件包维护人员工作量、管理成本则会随着Linux操作系统和软件包规模不断增长,以及版本频繁的变更和更新而日益庞大。因此,如何快速有效地检测Linux操作系统软件包的依赖关系,提高企业发布Linux操作系统的效率显得尤为重要。
[0003]现有软件包依赖分析的方法包括基于集合分析、基于分层图分析等,其中效果较好的是分层图分析方法,其实现过程为:首先对指定操作系统的软件包构建分层图,针对某给定的软件,在图中查询其依赖关系,最后将相关关系进行导出。
[0004] Linux操作系统中,软件包依赖关系也可以通过系统内置的命令进行查询,如“apt
‑
cache show+软件包包名”,可以查询该软件包直接依赖的软件包的包名和版本信息。
[0005]基于分层图分析衍生出了一些软件包的检测方法,其步骤大致相同,首先基于软件依赖关系生成一张用于描述所有依赖关系的有向图,然后再输入软件包在图中节点的位置,从而对该软件包依赖路径上的各软件包的依赖关系是否满足进行判断检测。
[0006]Linux系统内置命令的方法,只能返回或检测软件包与软件包之间的直接依赖关系,而不能查询软件包的间接依赖关系;在Linux中,软件包之间可能有复杂的依赖链,例如,若软件包A依赖软件包B,软件包B又依赖于软件包C时,则软件包A间接地依赖软件包C。若要安装软件包A,则需要检查该依赖链上的每个软件包的依赖关系是否满足要求;因此单独返回、检测某一个软件包依赖的方法,效率低,需进行多步才能对某一软件包的依赖完整性进行检查与显示。
[0007]基于分层图的分析方法和基于分层图衍生的软件包检测方法,分别对所有软件包依赖关系构建图模型,再基于该关系图进行导出和检测。当部分软件包发生变化时,则需重新构建软件包依赖关系图,所需时间成本高,而若不及时更新软件包依赖关系图,则可能导致输出和检测的结果不准确,降低方法的精确度。其中,基于分层图的分析方法只显示软件包依赖关系,没有判断该依赖关系是否满足要求,也没有处理依赖问题的相应措施。因此,一旦出现依赖问题,该类方法不提供任何处理措施或处理建议。
[0008]因此,我们迫切需要一种能更全面检测特定软件包依赖关系的检测方法,旨在快速、高效、准确地检测某一软件包的依赖关系甚至整个Linux软件源仓库的依赖完整性是否
满足。
[0009]中国专利技术专利“基于依赖的软件包依赖关系检查方法”(申请号CN201010241133X)、中国专利技术专利“一种软件包依赖关系检测方法”(申请号CN202111533240.4)和中国专利技术专利“一种Linux操作系统软件包依赖关系检测方法”(申请号CN201210324556.7),都提供了一种软件包依赖关系的检测方法,但是这些方法在检测软件包依赖之前,都要对所有软件包的依赖关系进行建模,只是使用不同的模型形式来表达所有软件包的依赖关系,利用这个模型来检测依赖关系,最后生成一个软件包的依赖关系的有向图。
技术实现思路
[0010]为解决已有技术存在的不足,本专利技术提供了一种快速检测apt仓库源依赖完整性的方法,包括如下步骤:步骤S1:根据用户输入软件包的情况确定需要检测其依赖完整性的软件包,得到一个软件包列表packlist1;步骤S2:遍历软件包列表packlist1,从软件包列表packlist1中按照顺序获取一个软件包package1,通过下述步骤判断软件包package1的依赖完整性;步骤S3:判断软件包package1是否为虚包,若为虚包,则获取软件包package1的真实包名后再执行步骤S4,若不为虚包,则直接执行步骤S4;步骤S4:获取软件包package1所直接依赖的软件包,得到一个软件包列表packlistⅠ;步骤S5:判断软件包列表packlistⅠ是否为空,为空则说明软件包package1不依赖其它软件包,跳转至步骤S10或步骤S11,不为空则继续执行步骤S6;步骤S6:判断软件包package1是否存在依赖冲突,若存在则结束整个流程并输出结果,若不存在,则继续执行步骤S7;步骤S7:遍历软件包列表packlistⅠ,从中顺序获取一个软件包packageⅠ,检测软件包候选版本的情况,若没有候选版本,则结束整个流程并输出结果,若有候选版本,则获取候选版本号并继续执行步骤S8;步骤S8:判断候选版本号是否满足安装要求,若不满足安装要求,则结束整个流程并输出结果,若满足安装要求,则跳转至步骤S7继续顺序获取下一个软件包packageⅡ,直至软件包列表中所有的软件包packageⅠ、软件包package
Ⅱ……
均具备符合要求的候选版本;步骤S9:递归跳转至步骤S2,按照步骤S2
‑
步骤S8的方法,对软件包列表packlistⅠ中的软件包packageⅠ、软件包package
Ⅱ……
的依赖完整性进行循环递归检查;步骤S10:判断是否完成循环递归检查,若完成,则跳转至步骤S11;步骤S11:跳转至步骤S2,从软件包列表packlist1中顺序获取软件包package2、软件包package3
……
,并依次完成其依赖完整性检测,直至遍历完软件包列表packlist1中的所有软件包,然后结束整个流程。
[0011]其中,所述步骤S1中,若用户输入了指定的软件包包名,仅检测传入的软件包的依赖完整性;若用户未输入软件包包名,则遍历软件源中所有的软件包,检查所有软件包的依
赖完整性。
[0012]其中,所述步骤S6中,通过如下步骤判断某个软件包package是否存在依赖冲突:步骤S61:获取该软件包package所依赖的软件包package
‑
a、package
‑
b
……
,得到该软件包的依赖链;步骤S62:针对依赖链上的软件包package所依赖的每一个软件包package
‑
a、package
‑
b
……
,找出与其各自存在冲突关系的软件包,并判断与其各自存在冲突关系的软件包是否包括软件包package,若包括,则说明当前正在检测的软件包package存在依赖冲突,若不包括,则本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.快速检测apt仓库源依赖完整性的方法,其特征在于,包括如下步骤:步骤S1:根据用户输入软件包的情况确定需要检测其依赖完整性的软件包,得到一个软件包列表packlist1;步骤S2:遍历软件包列表packlist1,从软件包列表packlist1中按照顺序获取一个软件包package1,通过下述步骤判断软件包package1的依赖完整性;步骤S3:判断软件包package1是否为虚包,若为虚包,则获取软件包package1的真实包名后再执行步骤S4,若不为虚包,则直接执行步骤S4;步骤S4:获取软件包package1所直接依赖的软件包,得到一个软件包列表packlistⅠ;步骤S5:判断软件包列表packlistⅠ是否为空,为空则说明软件包package1不依赖其它软件包,跳转至步骤S10或步骤S11,不为空则继续执行步骤S6;步骤S6:判断软件包package1是否存在依赖冲突,若存在则结束整个流程并输出结果,若不存在,则继续执行步骤S7;步骤S7:遍历软件包列表packlistⅠ,从中顺序获取一个软件包packageⅠ,检测软件包候选版本的情况,若没有候选版本,则结束整个流程并输出结果,若有候选版本,则获取候选版本号并继续执行步骤S8;步骤S8:判断候选版本号是否满足安装要求,若不满足安装要求,则结束整个流程并输出结果,若满足安装要求,则跳转至步骤S7继续顺序获取下一个软件包packageⅡ,直至软件包列表中所有的软件包packageⅠ、软件包package
Ⅱ……
均具备符合要求的候选版本;步骤S9:递归跳转至步骤S2,按照步骤S2
‑
步骤S8的方法,对软件包列表packlistⅠ中的软件包packageⅠ、软件包package
Ⅱ……
的依赖完整性进行循环递归检查;步骤S10:判断是否完成循环递归检查,若完成,则跳转至步骤S11;步骤S11:跳转至步骤S2,从软件包列表packlist1中顺序获取软件包package2、软件包package3
……
,并依次完成其依赖完整性检测,直至遍历完软件包列表packlist1中的所有软件包,然后结束整个流程。2.如权利要求1所述的快速检测apt仓库源依赖完整性的方法,其特征在于,所述步骤S1中,若用户输入了指定的软件包包名,仅检测传入的软件包的依赖完整性;若用户未输入软件包包名,则遍历软件源中所有的软件包,检查所有软件包的依赖完整性。3.如权利要求1所述的快速检测apt仓库源依赖完...
【专利技术属性】
技术研发人员:谌志华,陈斌,陆志平,谢炜,毛周,史晶,郭俊余,魏立峰,程启,
申请(专利权)人:麒麟软件有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。