jfo*_*her 1188 package-management apt
我刚刚为 GIMP 的开发版本添加了一个 PPA 存储库,但出现此错误:
$ apt-get update && apt-get upgrade
...
The following packages have been kept back:
gimp gimp-data libgegl-0.0-0 libgimp2.0
Run Code Online (Sandbox Code Playgroud)
为什么以及如何解决它以便我可以使用最新版本而不是我现在拥有的版本?
Mic*_*haw 1345
根据debian-administration.org上的一篇文章,
如果您安装的其中一个软件包的依赖关系发生了变化,因此必须安装新软件包才能执行升级,那么该软件包将被列为“保留”。
谨慎的解决方案1:
根据Pablo 的回答,您可以运行sudo apt-get --with-new-pkgs upgrade,它将安装保留的软件包。
这样做的好处是不会将保留的软件包标记为“手动安装”,这可能会迫使更多的用户干预(见评论)。
如果 Pablo 的解决方案适合您,请点赞。如果没有,请评论发生了什么问题。
谨慎的解决方案2:
谨慎的解决方案是运行sudo apt-get install <list of packages kept back>. 在大多数情况下,这将为保留的软件包提供成功升级所需的东西。
激进的解决方案:
一个更积极的解决方案是运行sudo apt-get dist-upgrade,这将强制安装这些新的依赖项。
但dist-upgrade 可能相当危险。与升级不同,它可能会删除包以解决复杂的依赖情况。与您不同,APT 并不总是足够聪明,无法知道这些添加和删除是否会造成严重破坏。
因此,如果您发现自己处于“谨慎解决方案”不起作用的地方,dist-upgrade 可能会起作用……但您最好多了解一点 APT 并通过安装和删除“手动”解决依赖问题根据具体情况打包。
把它想象成修理汽车……如果你有时间并且手边有扳手,你会通过阅读和自己修理来获得一些安心。如果你觉得幸运,你可以把你的车交给你的表妹dist-upgrade,希望她知道她的事情。
小智 571
每当您从命令收到apt-get upgrade消息时
The following packages have been kept back:
Run Code Online (Sandbox Code Playgroud)
然后升级一个或所有保留的软件包,而不进行分发升级(dist-upgrade如果我没记错的话,这是这样做的)是发出命令:
apt-get install <list of packages kept back>
Run Code Online (Sandbox Code Playgroud)
这将解决保留的问题,并会要求安装其他软件包等,正如其他答案所解释的那样。
另请参阅:为什么使用 apt-get upgrade 而不是 apt-get dist-upgrade?
Pab*_*chi 284
sudo apt-get --with-new-pkgs upgrade
Run Code Online (Sandbox Code Playgroud)
这允许安装新的软件包。它会让您知道将安装哪些软件包并在实际安装之前提示您。
apt install <pkg>改为使用会将 pkg 标记为“手动安装”!!要将其再次标记为“自动安装”,请使用apt-mark auto <pkg>(另请参阅 subcommand showmanual)。关于这个答案的更多信息。
小智 184
apt-get dist-upgrade 对稳定的环境是危险的,
用例:内核升级保留,你只想升级内核,不想升级整个发行版。
处理保留的包裹的更好方法:
sudo aptitude
Run Code Online (Sandbox Code Playgroud)
如果您保留了包,您应该在列表顶部看到可升级包。
你保留的安装包。
ber*_*nie 126
我添加这个答案是因为我对其他答案如何处理问题的原因部分以了解发生的情况并选择适当的行动方案感到不满意。
希望这能帮助人们避免apt dist-upgrade在绝望中盲目奔跑!
据我所知,包裹在 期间被扣留的原因有 3 类apt upgrade。
sudo apt-mark hold <package>
Run Code Online (Sandbox Code Playgroud)
hold 用于将软件包标记为保留,这将阻止该软件包自动安装、升级或删除。
要列出所有标记为保留的包裹或查明包裹是否处于保留状态,请使用:
apt-mark showhold
apt-mark showhold <package>
Run Code Online (Sandbox Code Playgroud)
要取消对软件包的保留并允许其升级:
sudo apt-mark unhold <package>
Run Code Online (Sandbox Code Playgroud)
apt检测依赖关系变化我能找到的关于此问题的最佳权威信息来源被标记为已过时,但它说:
[Kept back] 意味着这些软件包有新版本,由于某种原因不会安装。可能的原因是依赖关系被破坏(它所依赖的包没有可供下载的版本)或新的依赖关系(自上一个版本以来,该包开始依赖新的包)
这将告诉您该软件包的当前版本和候选升级版本:
$ apt list <package>
# example output:
vim/bionic-updates,bionic-security 2:8.0.1453-1ubuntu1.4 amd64 [upgradable from: 2:8.0.1453-1ubuntu1.3]
N: There are 2 additional versions. Please use the '-a' switch to see them.
Run Code Online (Sandbox Code Playgroud)
使用当前版本(例如2:8.0.1453-1ubuntu1.3)和新版本(例如2:8.0.1453-1ubuntu1.4),我们可以通过以下方式找出更改的依赖关系apt show:
apt show <package>=<old version> <package>=<new version>
# example:
apt show vim=2:8.0.1453-1ubuntu1.3 vim=2:8.0.1453-1ubuntu1.4
Run Code Online (Sandbox Code Playgroud)
(或者只是用来apt show -a直接查看所有版本,但在我看来这使得版本比较变得更加困难)
重要的部分是Depends和Recommends软件包列表。如果保留包的新版本中的这些列表中有新包,则 apt 不会自动升级它。
此时有 2 个选项可以升级保留的包。请注意,下面的两个解决方案都有适当的参数,以避免错误地将包从“自动安装”更改为“手动安装”。
要升级软件包并安装任何新的“推荐”软件包(即就像使用新安装的一样apt install <package>,请使用--with-new-pkgs:
sudo apt upgrade --with-new-pkgs <package>
Run Code Online (Sandbox Code Playgroud)
(提示:添加--dry-run之前先看看会发生什么)
要升级软件包而不安装任何新添加的“推荐”软件包,请使用--only-upgrade。
sudo apt install --only-upgrade <package>
Run Code Online (Sandbox Code Playgroud)
一旦更新发布到 -updates,更新就会分阶段进行,以便逐步向不断扩大的 Ubuntu 用户子集提供更新。此过程使我们能够自动监视回归并在发现任何情况时停止更新过程。
您可以通过以下方式检查分阶段更新:
sudo apt -o APT::Get::Always-Include-Phased-Updates=true upgrade --dry-run
这里有更多信息:什么是分阶段更新,为什么 Ubuntu 使用它们?
docker-ce包docker-ce我首先是在 Ubuntu 18.04 上升级软件包,所以我认为有一个完整的具体示例会很有趣。
$ sudo apt upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
docker-ce
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
$ apt list docker-ce
Listing... Done
docker-ce/bionic 5:20.10.3~3-0~ubuntu-bionic amd64 [upgradable from: 5:19.03.12~3-0~ubuntu-bionic]
N: There are 34 additional versions. Please use the '-a' switch to see them.
Run Code Online (Sandbox Code Playgroud)
好吧,让我们看看是什么阻碍了docker-ce:
$ apt show docker-ce=5:19.03.12~3-0~ubuntu-bionic docker-ce=5:20.10.3~3-0~ubuntu-bionic
Package: docker-ce
Version: 5:19.03.12~3-0~ubuntu-bionic
Priority: optional
Section: admin
Maintainer: Docker <support@docker.com>
Installed-Size: 107 MB
Depends: docker-ce-cli, containerd.io (>= 1.2.2-3), iptables, libseccomp2 (>= 2.3.0), libc6 (>= 2.8), libdevmapper1.02.1 (>= 2:1.02.97), libsystemd0
Recommends: aufs-tools, ca-certificates, cgroupfs-mount | cgroup-lite, git, pigz, xz-utils, libltdl7, apparmor
Conflicts: docker (<< 1.5~), docker-engine, docker-engine-cs, docker.io, lxc-docker, lxc-docker-virtual-package
Replaces: docker-engine
Homepage: https://www.docker.com
Download-Size: 22.5 MB
APT-Manual-Installed: yes
APT-Sources: https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
Description: Docker: the open-source application container engine
Docker is a product for you to build, ship and run any application as a
lightweight container
.
Docker containers are both hardware-agnostic and platform-agnostic. This means
they can run anywhere, from your laptop to the largest cloud compute instance and
everything in between - and they don't require you to use a particular
language, framework or packaging system. That makes them great building blocks
for deploying and scaling web apps, databases, and backend services without
depending on a particular stack or provider.
Package: docker-ce
Version: 5:20.10.3~3-0~ubuntu-bionic
Priority: optional
Section: admin
Maintainer: Docker <support@docker.com>
Installed-Size: 121 MB
Depends: containerd.io (>= 1.4.1), docker-ce-cli, iptables, libseccomp2 (>= 2.3.0), libc6 (>= 2.8), libdevmapper1.02.1 (>= 2:1.02.97), libsystemd0
Recommends: apparmor, ca-certificates, docker-ce-rootless-extras, git, libltdl7, pigz, xz-utils
Suggests: aufs-tools, cgroupfs-mount | cgroup-lite
Conflicts: docker (<< 1.5~), docker-engine, docker-engine-cs, docker.io, lxc-docker, lxc-docker-virtual-package
Replaces: docker-engine
Homepage: https://www.docker.com
Download-Size: 24.8 MB
APT-Sources: https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
Description: Docker: the open-source application container engine
Docker is a product for you to build, ship and run any application as a
lightweight container
.
Docker containers are both hardware-agnostic and platform-agnostic. This means
they can run anywhere, from your laptop to the largest cloud compute instance and
everything in between - and they don't require you to use a particular
language, framework or packaging system. That makes them great building blocks
for deploying and scaling web apps, databases, and backend services without
depending on a particular stack or provider.
Run Code Online (Sandbox Code Playgroud)
版本5:20.10.3~3-0~ubuntu-bionic已添加docker-ce-rootless-extras为新的推荐依赖项。我希望 apt 会更有帮助,只是建议安装它或其他东西,而不是给我留下旧版本......无论如何,这里有 2 个可能的修复(用于--dry-run说明目的):
$ sudo apt upgrade --with-new-pkgs --dry-run docker-ce
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
docker-ce
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Inst docker-ce [5:19.03.12~3-0~ubuntu-bionic] (5:20.10.3~3-0~ubuntu-bionic Docker CE:bionic [amd64])
Conf docker-ce (5:20.10.3~3-0~ubuntu-bionic Docker CE:bionic [amd64])
$ sudo apt install --only-upgrade --dry-run docker-ce
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
docker-ce-rootless-extras
Recommended packages:
slirp4netns
The following NEW packages will be installed:
docker-ce-rootless-extras
The following packages will be upgraded:
docker-ce
1 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Inst docker-ce [5:19.03.12~3-0~ubuntu-bionic] (5:20.10.3~3-0~ubuntu-bionic Docker CE:bionic [amd64])
Inst docker-ce-rootless-extras (5:20.10.3~3-0~ubuntu-bionic Docker CE:bionic [amd64])
Conf docker-ce (5:20.10.3~3-0~ubuntu-bionic Docker CE:bionic [amd64])
Conf docker-ce-rootless-extras (5:20.10.3~3-0~ubuntu-bionic Docker CE:bionic [amd64])
Run Code Online (Sandbox Code Playgroud)
Joe*_*Joe 63
自从我升级到 Ubuntu 22.04 jammy 以来,这种情况发生了更多。
原因通常是分阶段更新。(感谢@louis-waweru 提供的链接。)
解决方案是忽略那些“已被保留”的消息。当存储库维护者认为这些软件包足够安全,可以安装时,您将获得它们。
/etc/apt/apt.conf.d/99-Phased-Updates如果您绝对必须获取这些更新,您可以创建包含以下内容的文件:
Update-Manager::Always-Include-Phased-Updates "1";
APT::Get::Always-Include-Phased-Updates "1";
Run Code Online (Sandbox Code Playgroud)
jbo*_*tie 38
您看到此消息通常有两个原因。
如果升级程序(通过sudo apt-get upgrade)会导致添加或删除程序包,则程序将被阻止。sudo apt-get dist-upgrade在这种情况下,您可以使用它,然后它会提供添加或删除附加程序的功能。
这是很常见的,通常不是问题。偶尔(尤其是在 Ubuntu alpha 期间)adist-upgrade会提供删除许多其他程序的功能,在这种情况下,您可能想要取消它。
如果程序依赖于不可用的包或版本,则程序将被阻止。在这种情况下你真的不能做任何事情,只能等待,因为这个包基本上是可以卸载的。当包被无序添加到存储库、包被重命名或包停止提供虚拟包时,就会发生这种情况。
Afi*_*ilu 32
你也可以试试:
sudo aptitude safe-upgrade
Run Code Online (Sandbox Code Playgroud)
它比full-upgrade(最初命名为 dist-upgrade)更安全,因为“除非未使用,否则不会删除包”。
来自man aptitude:
安全升级
将已安装的软件包升级到最新版本。除非提供了 --no-new-installs 命令行选项,否则不会删除已安装的软件包,除非它们未使用 /.../ 当前未安装的软件包可能会被安装以解决依赖关系。
txw*_*ger 23
这些包很可能被阻止,因为它们的安装会造成依赖不一致。发生这种情况的原因可能是您在活动开发、ppas 下使用档案,或者因为您使用的镜像未完全更新。
在最后一种情况下,只需等待,当依赖项解决后,下次将安装。
编辑:
还有另一种可能性,如果包裹被搁置或被固定,包裹可能会被阻止。
小智 16
这对我有用
sudo aptitude full-upgrade
Run Code Online (Sandbox Code Playgroud)
Joh*_*den 12
这通常是因为包添加了一个依赖项,而升级不想未经许可为您添加它。
如果你运行:
sudo apt-get install gimp gimp-data libgegl-0.0-0 libgimp2.0
Run Code Online (Sandbox Code Playgroud)
然后应将新版本与其新依赖项一起安装。
l -*_*c l 12
Ubuntu 18.04(和更新版本)提供了一种简化的语法,通过apt full-upgrade它可以像sudo apt-get dist-upgrade.
sudo apt full-upgrade
Run Code Online (Sandbox Code Playgroud)
sudo apt upgrade用于从通过 sources.list(5) 配置的源安装系统上当前安装的所有软件包的可用升级。如果需要满足依赖关系,将安装新包,但永远不会删除现有包。如果软件包的升级需要删除已安装的软件包,则不会执行此软件包的升级。
sudo apt full-upgrade执行升级功能,但如果需要从整体上升级系统,则会删除当前安装的软件包。
注意:full-upgrade保留在当前分发中。
更新/升级不起作用 [最后的答案]
保留的软件包 (...) 目前处于分阶段更新中。
Phased Updates is one precaution to prevent everybody from receiving a buggy package via upgrade: Some people get the upgraded a few days earlier, others a few days later. This provides an opportunity to pause distribution if early folks report problems.
Run Code Online (Sandbox Code Playgroud)
没有任何错误。你的系统没有坏。
小智 7
我发现 aptitude 在升级软件包方面做得更好,如果版本略有不同。我遇到过这样的情况:
me@compy:/etc/apt$ apt-cache policy gzip
gzip:
Installed: 1.3.5-15
Candidate: 1.3.5-15+etch1
Version table:
1.3.5-15+etch1 0
500 http://archive.debian.org etch/main Packages
*** 1.3.5-15 0
100 /var/lib/dpkg/status
Run Code Online (Sandbox Code Playgroud)
这使得 apt-get 阻止更新,但 aptitude 更新它就好了。我不确定使用哪种算法来确定是否应该更新包。我猜这两个版本相同,只是“限定符”不同。但无论如何, apt-get 不会更新它,但 aptitude 会。
这看起来像是重新安装保留包的正确方法:
apt-get install --reinstall libjpeg-progs
Run Code Online (Sandbox Code Playgroud)
至少当我libjpeg-progs从 Ubuntu 14.04 升级到 16.04 后遇到困难时,这对我有用。我确信您可以对任何其他保留的应用程序执行相同的操作,例如gimp.
在我的情况下,被阻止的包是那些与linux-headers和内核相关的包。我是通过尝试解决通知区域中有红色感叹号并且无法更新包的问题来解决这个问题的。
为了解决它,我不必使用dist-upgrade或手动apt-get install xxx。
我所做和帮助过的事情简单而干净:
sudo apt-get update
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get upgrade
Run Code Online (Sandbox Code Playgroud)
我必须手动确认 Grub 更新及其配置。
然后我只是在计算机上工作了一段时间,然后再次出现标准更新对话框,最终包括带有内核和相关内容的“Ubuntu base”部分。更新执行没有任何问题,我再也看不到任何保留的包了。
此外,请务必记住,包括内核更新在内的那些 *buntu 更新对休眠很敏感- 我已经多次遇到这个问题,我总是通过重新启动机器并执行上述步骤来解决它。
所以也许这就足够了?!
(这里描述的情况与我2015年12月底的Xubuntu 15.10有关)
虽然其他答案警告说这apt dist-upgrade可能会删除程序,但请注意,您可以只运行该命令,然后对“您想继续吗?”回答“否”。问题以调查 apt 会做什么。
将树莓派从 Buster 更新为 Bullseye 后,我最终得到了 apt 报告
\nThe following packages have been kept back:\n sshfs\nRun Code Online (Sandbox Code Playgroud)\n所以我开始搜索错误消息,登陆此页面,阅读一些答案,然后运行
\n$\xc2\xa0apt-get dist-upgrade\nReading package lists... Done\nBuilding dependency tree... Done\nReading state information... Done\nCalculating upgrade... Done\nThe following packages will be REMOVED:\n fuse\nThe following NEW packages will be installed:\n fuse3 libfuse3-3\nThe following packages will be upgraded:\n sshfs\n1 upgraded, 2 newly installed, 1 to remove and 0 not upgraded.\nNeed to get 147 kB of archives.\nAfter this operation, 196 kB of additional disk space will be used.\nDo you want to continue? [Y/n] \nRun Code Online (Sandbox Code Playgroud)\n此时很明显它fuse已被替换fuse3,我很高兴让 apt 删除它。
您的情况可能有所不同,但进行(潜在的)试运行将为您提供更详细的信息,并很可能回答“为什么”问题。
\n| 归档时间: |
|
| 查看次数: |
1050177 次 |
| 最近记录: |