有没有办法apt-get dist-upgrade在 Debian 中做一个不仅自动对所有提出的问题回答“是”,而且还使用合理的默认值作为复杂到需要弹出各种交互式对话框的问题的答案?我在这里考虑的是升级时显示的键映射内容libc6和内核映像选择。
目标是能够远程启动一个相当大dist-upgrade的机器——即使是一台严重落后于时代的机器——而且根本不需要照看它,除非出现了可怕的、灾难性的错误。
这当然有可能吗?
提前致谢!
wom*_*ble 46
如果设置DEBIAN_FRONTEND=noninteractive(停止出现的debconf提示),并添加force-confold和force-confdef你的/etc/dpkg/dpkg.cfg文件,你应该有一个完全非交互式软件包安装经验。任何仍然提示您输入信息的软件包都有一个发布严重错误(我说这是自动化迷和Debian 开发人员)。
Jo *_*iss 25
Florian Lohoff发布了一种方法,可以将 womble 的建议转化为单个命令:
DEBIAN_FRONTEND=noninteractive \
apt-get \
-o Dpkg::Options::="--force-confnew" \
--force-yes \
-fuy \
dist-upgrade
Run Code Online (Sandbox Code Playgroud)
当然,您也可以使用-o Dpkg::Options::="--force-confnew --force-confdef"(在dpkg 手册页中搜索 confnew)。我不确定在什么情况下这会有所作为。我个人需要非交互式升级来更新 vanilla 图像,在这种情况下,我认为总是选择新的配置文件(没有--force-confdef)是合理的。
尽管 womble 上面的回答通常很好,但它对我不起作用,我不得不做一些额外的研究才能 100% 无人值守。我想我会以简洁的方式分享结果,以使未来的访问者更简单。
以下是一个脚本,它将根据 debian 8 发行说明升级建议(主要是)以及将使其无人值守的标志和环境变量运行。(echos 仅用于调试,可以删除 - 尽管我建议保留它们,以便如果脚本卡住,您将知道在哪里)
#!/bin/bash
apt-get remove apt-listchanges --assume-yes --force-yes &&
#using export is important since some of the commands in the script will fire in a subshell
export DEBIAN_FRONTEND=noninteractive &&
export APT_LISTCHANGES_FRONTEND=none &&
#lib6c was an issue for me as it ignored the DEBIAN_FRONTEND environment variable and fired a prompt anyway. This should fix it
echo 'libc6 libraries/restart-without-asking boolean true' | debconf-set-selections &&
echo "executing wheezy to jessie" &&
find /etc/apt -name "*.list" | xargs sed -i '/^deb/s/wheezy/jessie/g' &&
echo "executing autoremove" &&
apt-get -fuy --force-yes autoremove &&
echo "executing clean" &&
apt-get --force-yes clean &&
echo "executing update" &&
apt-get update &&
echo "executing upgrade" &&
apt-get --force-yes -o Dpkg::Options::="--force-confold" --force-yes -o Dpkg::Options::="--force-confdef" -fuy upgrade &&
echo "executing dist-upgrade" &&
apt-get --force-yes -o Dpkg::Options::="--force-confold" --force-yes -o Dpkg::Options::="--force-confdef" -fuy dist-upgrade
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 Apt 1.1 或更高版本,--force-yes已被弃用,因此您必须使用以 开头的选项--allow,例如--allow-downgrades, --allow-remove-essential, --allow-change-held-packages。
所以命令是:
DEBIAN_FRONTEND=noninteractive \
apt-get \
-o Dpkg::Options::=--force-confold \
-o Dpkg::Options::=--force-confdef \
-y --allow-downgrades --allow-remove-essential --allow-change-held-packages \
dist-upgrade
Run Code Online (Sandbox Code Playgroud)
注意:用于--force-confold保留旧配置,并--force-confnew用于保留新配置。
来源:CFE-2360:使 apt_get 包模块版本感知。
有关的: