100%非交互式Debian dist-upgrade

有没有办法在Debian中进行apt-get dist-upgrade ,不仅自动回答所有问题的答案是“是”,而且还使用合理的默认值作为问题的答案,这些答案足够复杂,需要各种交互式对话框popup? 我在这里想到当升级libc6和内核映像select时出现的键盘映射。

我们的目标是能够远程启动一个相当大的远程dist-upgrade – 即使是一台严重落后于时代的机器 – 也不必一概而论,除非有什么可怕的, 灾难性的错误。

这当然有可能吗?

提前致谢!

如果您设置DEBIAN_FRONTEND=noninteractive (以停止出现debconf提示),并将force-confoldforce-confdef/etc/dpkg/dpkg.cfg文件中,则应具有完全非交互式软件包安装体验。 任何仍然提示您提供信息的软件包都有一个发行版的严重错误(我认为这既是自动化的瘾君子也是作为Debian的开发者)。

弗洛里安·洛霍夫(Florian Lohoff)提出了一个方法来把一个想法build议成一个命令:

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

当然,你也可以使用-o Dpkg::Options::="--force-confnew --force-confdef" (在dpkg手册页中searchconfnew)。 我不确定在什么情况下,这将有所作为。 我个人需要非交互式的升级来使香草图像保持最新,在这种情况下,我总是select新的configuration文件(没有--force-confdef )是合理的。

尽pipewomble上面的回答总的来说是好的,但对我来说这并不起作用,我不得不进行一些额外的研究,以100%无人值守。 我想我会以简洁的方式分享这个结果,为将来的访问者做些简单的事情。

以下是一个脚本,它将根据debian 8发行说明升级build议(大部分)以及将使其无人值守的标志和环境variables运行。 ( echo只是为了debugging,可以删除 – 虽然我build议保留它们,如果脚本卡住,你会知道在哪里)

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

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)