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

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

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

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

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

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

500是正常的优先级。 100会导致程序包无法升级,但如果依赖项需要,将安装程序包。 当您只想从nnutter存储库升级包时,使用此APT首选项文件运行apt-get upgradeapt-get dist-upgrade

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

您可以使用wajig命令,该命令可用于在升级时保留一些包

只需键入:

 sudo wajig hold SomePackage sudo wajig unhold 

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