如何升级单个 Debian 软件包而不将其标记为“手动安装”?apt install upgradeable-lib
当然可以,但是我必须这样做apt-mark auto
(或者该包不再可自动删除)。
答案1
答案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
当依赖包消失时将不再认为它是可移动的。