100% 非交互式 Debian dist-upgrade

100% 非交互式 Debian dist-upgrade

有没有办法apt-get dist-upgrade在 Debian 中实现这一点,它不仅会自动对所有问题回答“是”,而且还会使用合理的默认值作为足够复杂的问题的答案,这些问题需要弹出各种交互式对话框?我在这里想到的是升级时显示的键盘映射内容libc6,以及内核映像选择。

我们的目标是能够远程启动一个相当大的机器dist-upgrade——即使对于一个严重落后的机器来说——而且根本不需要照看它,除非有什么事情非常糟糕,灾难性地错误的。

这当然是可能的吗?

提前致谢!

答案1

如果您设置DEBIAN_FRONTEND=noninteractive(以阻止 debconf 提示出现)并将和添加force-confoldforce-confdef您的/etc/dpkg/dpkg.cfg文件中,您应该会获得完全非交互式的软件包安装体验。任何仍然提示您输入信息的软件包都存在发布关键错误(我这么说是因为我既是自动化迷作为一名 Debian 开发人员)。

答案2

弗洛里安·洛霍夫发布将 Womble 建议的内容放入单个命令中的方法:

DEBIAN_FRONTEND=noninteractive \
apt-get \
-o Dpkg::Options::="--force-confnew" \
--force-yes \
-fuy \
dist-upgrade

当然你也可以使用-o Dpkg::Options::="--force-confnew --force-confdef"(搜索dpkg 手册页confnew 的版本)。但我不确定在什么情况下这会产生影响。我个人需要非交互式升级来更新 vanilla 镜像,在这种情况下,我认为总是选择新的配置文件(不带--force-confdef)是合理的。

答案3

尽管 womble 的上述回答总体上不错,但对我来说却不起作用,我不得不做一些额外的研究才能实现 100% 无人值守。我想以简洁的方式分享结果,让未来的访问者更容易理解。

以下是将根据 debian 8 发行说明升级建议(大部分)以及使其无人值守的标志和环境变量运行的脚本。(secho仅用于调试,可以删除 - 尽管我建议保留它们,这样如果脚本卡住你就会知道在哪里)

#!/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

答案4

apt-get(8)手册页中:

   -y, --yes, --assume-yes
       Automatic yes to prompts; assume "yes" as answer to all prompts
       run non-interactively. If an undesirable situation, such as
       changing a held package, trying to install a unauthenticated
       package or removing an essential package occurs then apt-get will
       abort. Configuration Item: APT::Get::Assume-Yes.

作为参考,该选项同样-y有效。yum(8)

相关内容