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

nnu*_*ter 5 apt

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

Gil*_*il' 3

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

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

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

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

Package: *
Pin-Prority: 100
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)


Suh*_*aib 0

您可以使用wajig命令,该命令可用于在升级时暂停某些软件包

只需输入:

sudo wajig hold SomePackage

sudo wajig unhold 
Run Code Online (Sandbox Code Playgroud)

查看手册页以获取更多信息