在Ubuntu中安装某些东西时,“依赖”和“先依赖”是什么意思,以及这两种类型的软件包要求之间的区别?
在Ubuntu中安装某些东西时,“依赖”和“先依赖”是什么意思,以及这两种类型的软件包要求之间的区别?
Answers:
摘自此链接: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,最好仅由那些过早升级或安装会妨碍系统继续进行可能正在进行的升级的能力的软件包使用。
较小的版本:
术语“依赖关系”可以广泛地用于包含“依赖关系”和“依赖关系”(有时甚至是其他较弱的关系),或者可以狭义地用作“依赖关系”的同义词。
“ Depends”和“ Pre-Depends”程序包关系之间的区别在于,如果X 依赖 Y,则必须先完全配置Y,然后再配置X。(配置是安装步骤,在该步骤中,将程序包的文件解压缩到正确的位置(即,一旦“安装”之后),将进行任何其他必要的更改,以便可以实际使用其提供的软件。例如,HTTP服务器的配置可能涉及确保有一个www
具有适当能力的用户和一个/var/www
具有适当权限的目录。)相反,如果X 预先依赖于Y,则必须先安装Y并(通常)对X进行配置,然后X才能被使用。已安装。
有关更多详细信息,请参见《 Debian策略手册》的7.2节。我在这里引用了两个最相关的部分,但是该部分(以及更常见的第7章)中还有其他信息可以帮助阐明依赖性的工作方式。
Depends
这声明了绝对依赖性。除非
Depends
已经正确配置了其字段中列出的所有软件包,否则将不会配置该软件包(除非如上所述存在循环依赖性)。
Depends
如果依赖包需要依赖包以提供大量功能,则应使用该字段。
Depends
如果postinst
或prerm
脚本要求解压缩或配置依赖包才能运行,则也应使用该字段。在postinst configure的情况下,将首先解压缩并配置依赖包。(如果两个程序包都参与了依赖关系循环,则可能无法按预期方式工作;请参阅后面几段的说明。)对于prerm
或其他postinst
操作,通常至少会解包这些程序包依赖关系,但它们可能仅仅是如果依赖性的先前升级失败,则“半安装”。最后,
Depends
如果postrm
脚本需要依赖包以在删除包后完全清除该字段,则应使用该字段。不能保证程序包依赖项在postrm
运行时将可用,但是如果软件包声明了依赖项(尤其是在的情况下postrm remove
),则依赖软件包更可能可用。postrm
如果该依赖项不可用,脚本必须适当地跳过需要依赖项的操作。
Pre-Depends
该字段类似于
Depends
,除了它还会强制dpkg
完成命名的软件包的安装,甚至在开始安装声明依赖项的软件包之前也是如此,如下所示:当声明依赖关系的包即将被解包时,如果依赖包已被完全配置,或者即使依赖包仅被解包或在“一半”中,也可以满足依赖关系-已配置”状态,前提是它们在过去的某个时间点已正确配置(此后未删除或部分删除)。在这种情况下,以前配置的和当前解压缩的或“半配置的”版本都必须满足该
Pre-Depends
字段中的任何版本子句。当声明依赖项的包即将配置时,该依赖项将被视为normal
Depends
。仅在正确配置了依赖程序包后,才会认为满足。但是,与和不同的是Depends
,Pre-Depends
不允许破坏循环依赖性。如果在尝试兑现时遇到循环依赖关系Pre-Depends
,则安装将被中止。
Pre-Depends
如果preinst
脚本依赖于指定的包,则也是必需的。如果可能的话,最好避免这种情况。
Pre-Depends
应当谨慎使用,最好仅用于那些过早升级或安装会妨碍系统继续进行可能正在进行的升级的能力的软件包。
Pre-Depends
在debian-devel
邮件列表上已讨论过此项目并已达成共识之前,您不应为软件包指定条目。参见Dependencies,第3.5节。