从shell脚本启用无人值守升级

我有一个shell脚本来自动配置新的Ubuntu虚拟机。 我希望这个脚本能够安装并启用unattended-upgrades ,但我无法弄清楚如何在没有用户交互的情况下这样做。

启用升级的常用方法是dpkg-reconfigure unattended-upgrades ,但当然这是交互式的。 非交互式前端完全避免询问任何问题,并且文本前端似乎已绑定并确定使用tty而不是stdin / stdout执行其I / O.

在按照您喜欢的方式配置后,只需复制/etc/apt/apt.conf.d/20auto-upgrades,然后将其放在目标计算机上。 您可以将其嵌入到脚本中,或者可以从服务器或其他任何方式进行rsync或wget。

所以基本上你的脚本可能会这样做:

 apt-get install unattended-upgrades wget -O /etc/apt/apt.conf.d/20auto-upgrades http://myserver.mytld/confs/20auto-upgrades /etc/init.d/unattended-upgrades restart 

根本没有理由使用dpkg-reconfigure脚本。

如果您不想从远程服务器获取conf文件,那么它非常简短 – 默认版本只提取和安装安全更新,如下所示:

 APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1"; 

因此,您可以直接使用以下内容将这些行回显到配置文件中:

 echo -e "APT::Periodic::Update-Package-Lists \"1\";\nAPT::Periodic::Unattended-Upgrade \"1\";\n" > /etc/apt/apt.conf.d/20auto-upgrades 

如果要使用dpkg-reconfigure,可以使用“debconf-set-selections”设置该值,然后以非交互方式重新配置它。

 echo "unattended-upgrades unattended-upgrades/enable_auto_updates boolean true" | debconf-set-selections; dpkg-reconfigure -f noninteractive unattended-upgrades 

根据我的说法,你必须编写自己的cron脚本,为此目的调用aptitude,请查看第三个主题在本文档中 编写自己的调用aptitude 的cron脚本

你必须使用sudo回显到/etc/apt/apt.conf.d/20auto-upgrades

 if [[ ! -f /etc/apt/apt.conf.d/20auto-upgrades.bak ]]; then sudo cp /etc/apt/apt.conf.d/20auto-upgrades /etc/apt/apt.conf.d/20auto-upgrades.bak sudo rm /etc/apt/apt.conf.d/20auto-upgrades echo "APT::Periodic::Update-Package-Lists \"1\"; APT::Periodic::Download-Upgradeable-Packages \"1\"; APT::Periodic::AutocleanInterval \"30\"; APT::Periodic::Unattended-Upgrade \"1\";" | sudo tee --append /etc/apt/apt.conf.d/20auto-upgrades fi