是否有一个命令可以升级一个包及其所有依赖项,而无需升级所有包?

是否有一个命令可以升级一个包及其所有依赖项,而无需升级所有包?

我们有一个类似于 ubuntu-desktop 的元包,它需要一堆依赖项来运行一些内部的、尚未打包的代码。目前,我们正在更新元包,以便每次重新打包时都需要 >= 当前版本,这样它的依赖项就会在安装时升级。但是,如果有一种方法可以升级包及其所有依赖项而无需升级所有包,那么这会简单得多。这可能吗?

答案1

据我所知,不是直接的。您可以使用一小段 shell 代码来生成包的依赖项列表并升级它们(假设您对递归依赖项不感兴趣):

apt-get install our-metapackage $(dpkg-query -Wf '${Depends}' our-metapackage | sed 's/ *\(([^()]*)\)\? *[,|] */\n/g')

另一种方法是通过具有唯一来源的存储库提供软件包。编写一个 APT 首选项文件,仅指定您的存储库具有正常优先级,而其他所有内容的优先级太低,无法自动安装。(请参阅APT 手册中的 APT pinning 有详细说明。)我不会详细介绍如何创建存储库(这将是一个单独的问题,可能已经存在)。要指定存储库中的软件包升级而其他软件包不升级,请将以下文件编写为/etc/apt/preferences.nnutter

Package: *
Pin: release o=nnutter
Pin-Priority: 500

Package: *
Pin-Prority: 100

500 是正常优先级。100 导致不升级软件包,但如果依赖项需要,则会安装该软件包。当您只想从 nnutter 存储库升级软件包时,使用此 APT 首选项文件运行apt-get upgrade或:apt-get dist-upgrade

apt-get -o Dir::Etc::Preferences=/etc/apt/preferences.nnutter -o Dir::Etc::PreferencesParts=/etc/apt/preferences.nnutter.d upgrade

答案2

您可以使用瓦吉格升级时可用于暂停某些软件包的命令

只需输入:

sudo wajig hold SomePackage

sudo wajig unhold 

查看手册页了解更多信息

相关内容