依赖和前置依赖之间有什么区别?


Answers:


20

摘自此链接:https : //www.debian.org/doc/debian-policy/#document-ch-relationships

有5种依赖关系:

五个依赖项字段的含义如下:

要看

  • 这声明了绝对依赖性。除非已经正确配置了“依赖”字段中列出的所有软件包,否则不会配置该软件包。如果依赖包需要依赖包以提供大量功能,则应使用Depends字段。如果postinst或prerm脚本要求解压缩或配置依赖包才能运行,则也应使用Depends字段。在postinst configure的情况下,将首先解压缩并配置依赖包。

  • 对于prerm或其他postinst操作,通常将至少解压缩软件包依赖项,但是如果先前的依赖关系升级失败,则它们可能仅是“半安装”。最后,如果postrm脚本需要依赖包来在删除包后完全清除,则应使用Depends字段。不能保证在运行postrm时可以使用软件包依赖关系,但是如果软件包声明了依赖关系(特别是在postrm remove的情况下),则依赖软件包更可能可用。如果该依赖项不可用,则postrm脚本必须正常跳过需要依赖项的操作。

推荐的

  • 这声明了强但非绝对的依赖。“建议”字段应列出在除异常安装之外的所有安装中都可找到的软件包。

建议

  • 这是用来声明一个包可能对一个或多个其他包更有用。使用此字段可以告诉包装系统和用户列出的软件包与此软件包有关,并且可以增强其实用性,但是在没有软件包的情况下安装该软件包是完全合理的。

增强

  • 此字段类似于“建议”,但方向相反。用于声明一个程序包可以增强另一个程序包的功能。

前依赖

  • 此字段与Depends相似,除了它还会强制dpkg完整完成命名软件包的安装,甚至在开始安装声明依赖项的软件包之前也是如此,当声明依赖项的软件包要执行以下操作时,它的工作原理如下:如果已经完全配置了依赖包,或者即使仅解压缩了依赖包或处于“半配置”状态(前提是已对其进行了配置),则也可以满足先依赖关系正确地在过去的某个时间点(此后未删除或部分删除)。

  • 在这种情况下,先前配置的和当前解压缩的或“半配置的”版本都必须满足“前提条件”字段中的任何版本子句。当声明依赖项的程序包将被配置时,该依赖项将被视为普通的Depends。仅在正确配置了依赖程序包后,才会认为满足。但是,与Depends不同,Pre-Depends不允许破坏循环依赖。如果在尝试遵守前提条件时遇到循环依赖关系,则安装将被中止。

  • 如果preinst脚本依赖于命名包,则还需要Pre-Depends。如果可能的话,最好避免这种情况。应谨慎使用Pre-Depends,最好仅由那些过早升级或安装会妨碍系统继续进行可能正在进行的升级的能力的软件包使用。

较小的版本:

  • 依赖依赖在安装之前提到软件包需要的依赖关系,但是pre-depends甚至在需要依赖的软件包开始之前就强制安装和配置依赖软件包。在处理完所有依赖包之前,dpkg甚至都不会解包主程序包。使用depends时,依赖程序包和主要程序包的顺序并不重要。使用pre-depends时,要考虑到这一点,还要考虑是否配置和安装pre-depends程序包。没有这个,主包甚至都不会被解包,配置或安装。在开始使用主软件包的过程之前,您必须已安装依赖项。如果不是,则必须先下载/配置/安装它们,然后再继续。

2
请注意,还存在诸如冲突和中断之类的反依赖性。并构建依赖项,例如Build-Depends。
Alexis Wilke

3

术语“依赖关系”可以广泛地用于包含“依赖关系”和“依赖关系”(有时甚至是其他较弱的关系),或者可以狭义地用作“依赖关系”的同义词。

“ Depends”和“ Pre-Depends”程序包关系之间的区别在于,如果X 依赖 Y,则必须先完全配置Y,然后再配置X。(配置是安装步骤,在该步骤中,将程序包的文件解压缩到正确的位置(即,一旦“安装”之后),将进行任何其他必要的更改,以便可以实际使用其提供的软件。例如,HTTP服务器的配置可能涉及确保有一个www具有适当能力的用户和一个/var/www具有适当权限的目录。)相反,如果X 预先依赖于Y,则必须先安装Y​​并(通常)对X进行配置,然后X才能被使用。已安装

有关更多详细信息,请参见《 Debian策略手册》的7.2节。我在这里引用了两个最相关的部分,但是该部分(以及更常见的第7章)中还有其他信息可以帮助阐明依赖性的工作方式。


Depends

这声明了绝对依赖性。除非Depends已经正确配置了其字段中列出的所有软件包,否则将不会配置该软件包(除非如上所述存在循环依赖性)。

Depends如果依赖包需要依赖包以提供大量功能,则应使用该字段。

Depends如果postinstprerm脚本要求解压缩或配置依赖包才能运行,则也应使用该字段。在postinst configure的情况下,将首先解压缩并配置依赖包。(如果两个程序包都参与了依赖关系循环,则可能无法按预期方式工作;请参阅后面几段的说明。)对于prerm或其他postinst操作,通常至少会解包这些程序包依赖关系,但它们可能仅仅是如果依赖性的先前升级失败,则“半安装”。

最后,Depends如果postrm脚本需要依赖包以在删除包后完全清除该字段,则应使用该字段。不能保证程序包依赖项在postrm运行时将可用,但是如果软件包声明了依赖项(尤其是在的情况下postrm remove),则依赖软件包更可能可用。postrm如果该依赖项不可用,脚本必须适当地跳过需要依赖项的操作。


Pre-Depends

该字段类似于Depends,除了它还会强制dpkg完成命名的软件包的安装,甚至在开始安装声明依赖项的软件包之前也是如此,如下所示:

当声明依赖关系的包即将被解包时,如果依赖包已被完全配置,或者即使依赖包仅被解包或在“一半”中,也可以满足依赖关系-已配置”状态,前提是它们在过去的某个时间点已正确配置(此后未删除或部分删除)。在这种情况下,以前配置的和当前解压缩的或“半配置的”版本都必须满足该Pre-Depends字段中的任何版本子句。

当声明依赖项的包即将配置时,该依赖项将被视为normal Depends。仅在正确配置了依赖程序包后,才会认为满足。但是,与和不同的是DependsPre-Depends不允许破坏循环依赖性。如果在尝试兑现时遇到循环依赖关系Pre-Depends,则安装将被中止。

Pre-Depends如果preinst脚本依赖于指定的包,则也是必需的。如果可能的话,最好避免这种情况。

Pre-Depends 应当谨慎使用,最好仅用于那些过早升级或安装会妨碍系统继续进行可能正在进行的升级的能力的软件包。

Pre-Dependsdebian-devel邮件列表上已讨论过此项目并已达成共识之前,您不应为软件包指定条目。参见Dependencies,第3.5节

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.