How APT Interprets Priorities

混源是怎么规定优先级的.google 找打了这个
https://manpages.debian.org/unstable/apt/apt_preferences.5.en.html#How_APT_Interprets_Priorities
但是实在是搞不清楚不同的优先级到底区别是什么,也通过修改区间(修改preferences文件的Pin-Priority: xx),查看需要更新的软件列表这种笨方法企图看出他们的区别,但是无奈,还是看不懂!
感觉man说的也不是很清楚啊!

P >= 1000
causes a version to be installed even if this constitutes a downgrade of the package
990 <= P < 1000
causes a version to be installed even if it does not come from the target release, unless the installed version is more recent
500 <= P < 990
causes a version to be installed unless there is a version available belonging to the target release or the installed version is more recent
100 <= P < 500
causes a version to be installed unless there is a version available belonging to some other distribution or the installed version is more recent
0 < P < 100
causes a version to be installed only if there is no installed version of the package
P < 0
prevents the version from being installed
P = 0
has undefined behaviour, do not use it.

哪位大神是接触过这个的,求解答!

你哪里不清楚来着?我看手册页把能说的都说了

首先明确手动指定安装优先级最高,毕竟用户命令高于一切,P 值是多少都不会阻挡用户的命令,用户要装就装,要装什么版本就什么版本

下面说自动依赖处理中选择软件包及版本的依据,全是自动分析的,或是因为依赖关系而被引入,或是用户光指定了包名没指定版本号,需要此处自动分析。这里 P 值会起作用。某个软件包来源于某一个软件源(体现为 sources.list 中的一个 deb 行),这个软件源有其固有的一个 P 值,这决定了其中的软件被引入安装的策略。

下面我把那些英文翻译一下

  • 1000 及以上:即使分析过依赖关系发现安装该软件源中的包需要降级其它软件包,也会安装该包
  • 990 - 1000(不含):即使这个软件包并不来自目前的目标发行版(例如,当前系统为 stretch 但是你的软件源是 xenial 的),也会从这个软件源下载安装软件;除非你已经装了该软件而且版本比那个源中的更新。
  • 500 - 990(不含):除非(该软件已安装且已安装软件版本号比本软件源内目标软件版本号高)或者(该软件尚未安装但是有另一个版本代号和当前系统相符,而且对方软件源有所需要软件存在的软件源存在),否则从本软件源安装目标软件
  • 100 - 500(不含):除非(该软件已安装且已安装软件版本号比本软件源内目标软件版本号高)或者(该软件尚未安装但是有另一个版本代号和当前系统不相符,而且对方软件源有所需要软件存在的软件源存在),否则从本软件源安装目标软件
  • 大于0小于100:除非(除了本软件源以外哪里都找不到目标软件了),否则不从本软件源安装
  • 0:未定义行为
  • 负数:任何情况下都不安装,除非用户手动指定

如果分析完发现还是有多个软件源可以提供同一软件,估计只有再分析 P 值的大小和软件版本号高低来决断了。(这句话未经研究不保证正确)

1 个赞