`apt update` 包没有标记为手动安装?

`apt update` 包没有标记为手动安装?

如何升级单个 Debian 软件包而不将其标记为“手动安装”?apt install upgradeable-lib当然可以,但是我必须这样做apt-mark auto(或者该包不再可自动删除)。

答案1

经过探究源头,我找到了您正在寻找的功能,但它仅在几个月前做出的承诺,所以仅在 bullseye(未来的 Debian 11)中可用:

支持将所有新安装的软件包标记为自动安装

将选项“--mark-auto”添加到“apt install”,将所有新安装的软件包标记为自动安装。

等效的配置选项(在 Debian 10 中无效)是APT::Get::Mark-Auto.

答案2

由于我厌倦了复制/粘贴,所以我最终写了aptup完成升级指定软件包的简单工作(或通过从可升级列表中进行选择dialog)。apt-mark showauto pkg...打印自动安装的状态,之后可以恢复apt-install

答案3

不久前我遇到了这个问题,尝试使用dpkg -l旧系统上运行提供的软件包列表将旧安装中的所有内容安装到新安装中。

如果您想要以前拥有的所有内容,但无法记住在已安装系统的生命周期中安装的所有内容,这会很方便。

以下脚本通过尝试使用该install_new函数安装所有内容来实现此目的。诀窍是先跑dpkg -s package-name。如果找不到该软件包,则会返回错误,以便您知道该软件包尚未安装。

下面的脚本在命令echo上有一个前缀apt,因此在您删除该前缀之前,这将是一次试运行。这将允许您首先查看它将执行的操作,以便您可以编辑输入列表并消除您不想保留到新系统的内容,或者将脚本的输出重定向到文件中以便稍后运行以进行安装。这特别有用,因为某些“重新安装”可能会失败,因此您可能需要修复问题并编辑文件以从上次中断的位置重新启动。

使用该脚本生成安装脚本,echo需要注释掉脚本中的其他命令。

#!/bin/bash

function install_new () {
  if [[ -z "$1" ]]
  then
    echo "install_new called with empty argument"
    rc=1
  else
    dpkg -s "$1" &> /dev/null
    rc=$?
    if (( rc ))
    then
      echo sudo apt-get install "$1"
      rc=$?
    else
      echo -e "\tSkipping [$1] - already installed"
      rc=1
    fi
  fi
  return ${rc}
}

while read package action
do
  echo "Package [${package}] Action [${action}]"
  action="${action:-install}"  ## If action is not present, default to install
  
  case "${action}" in
    # 
    "install")
      install_new "${package}"
    ;;
    #
    *)
      echo -e "\tDon't know how to ${action} ${package}"  
    ;;
  esac

done < "${1}"

答案4

你不能在 中apt,但是 的交互模式aptitude可以做到这一点。

我质疑你为什么要这样做。之所以会安装自动安装的库,是因为您表示希望安装的某些内容需要该库才能运行。通过要求apt安装该库的不同版本,表明您表达了安装它的愿望。它不再是自动的 - 您已经要求它,并且apt当依赖包消失时将不再认为它是可移动的。

相关内容