自动保留的 APT 软件包未显示

自动保留的 APT 软件包未显示

我无法列出系统本身保留的 apt 软件包。我知道有几个系统保留了软件包。 apt-get upgrade -s显示:

Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  linux-image-amd64 openjdk-11-jre-headless
The following packages will be upgraded:
  ...

但是,当我运行的时候什么apt-mark showholddpkg --get-selections | grep hold没有返回。

有什么方法(除了使用apt-get upgrade)来列出这些包吗?

apt-mark hold <package>当使用或手动保留包时echo "<package> hold" | sudo dpkg --set-selections,包出现。

这对我来说是一个问题,因为 Ansible 使用的 python-apt 模块似乎不支持这些“自动”保留的包。

我的 Ubuntu 18.04.5 LTS 生产系统和 Debian 10.9 实验室系统都遇到了这个问题。Aptitude 未安装(并且从未安装过),并且所有系统都是无头服务器,因此没有发生可怕的 GUI 魔法。

有人熟悉这个问题吗?

答案1

问:apt 模块...无法识别保留的包,并且仍然安装它们。dpkg_selections 使用 dpkg –get-selections 和 –set-selections 命令(根据文档),但在这种情况下也不起作用。

答:我无法在 Ubuntu 20.04 和 Ansible 2.9.6 中重现该问题。当我选择要保留的包时,例如

    - dpkg_selections:
        name: tmux
        selection: hold
      tags: selection

该命令按预期工作

shell> dpkg --get-selections | grep tmux
tmux                        hold

shell> tmux -V
tmux 3.0a

当我尝试升级软件包时,例如

    - apt:
        name: tmux
        state: latest

任务失败

致命:[localhost]:失败!=> 已更改=false cache_update_time:1621240502 cache_updated:false msg:|-'/usr/bin/apt-get -y -o“Dpkg::Options::=--force-confdef”-o“Dpkg::Options::=--force-confold”安装“tmux”失败:E:保留的软件包已更改,并且使用 -y 时没有使用 --allow-change-held-packages。rc:100 stderr:|- E:保留的软件包已更改,并且使用 -y 时没有使用 --allow-change-held-packages。stderr_lines:stdout:|- 正在读取软件包列表... 正在构建依赖关系树... 正在读取状态信息... 以下保留的软件包将被更改:tmux 以下软件包将被升级:tmux 升级了 1 个软件包,新安装了 0 个软件包,要删除 0 个软件包,未升级 68 个软件包。stdout_lines:


当选择设置回安装时

    - dpkg_selections:
        name: tmux
        selection: install

该命令也按预期工作

shell> dpkg --get-selections | grep tmux
tmux                        install

并且可以升级该包,例如

    - apt:
        name: tmux
        state: latest
      register: result
    - debug:
        var: result

给出

ok: [localhost] => 
  result:
    cache_update_time: 1621240502
    cache_updated: false
    changed: true
    diff: {}
    failed: false
    stderr: ''
    stderr_lines: []
    stdout: |-
      Reading package lists...
      Building dependency tree...
      Reading state information...
      The following packages will be upgraded:
        tmux
      1 upgraded, 0 newly installed, 0 to remove and 68 not upgraded.

      ...

    - Preparing to unpack .../tmux_3.0a-2ubuntu0.3_amd64.deb ...
    - Unpacking tmux (3.0a-2ubuntu0.3) over (3.0a-2ubuntu0.2) ...
    - Setting up tmux (3.0a-2ubuntu0.3) ...
    - Processing triggers for man-db (2.9.1-1) ...

相关内容