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

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

我有一个 shell 脚本,可以根据我的需要自动配置新的 Ubuntu 虚拟机。我希望此脚本能够安装并启用unattended-upgrades,但我不知道如何在没有用户交互的情况下执行此操作。

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

答案1

只需按照您喜欢的方式配置 /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

答案2

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

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

答案3

您必须使用 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

答案4

我建议插入配置参数来配置无人值守升级。

sudo touch /etc/apt/apt.conf.d/20auto-upgrades

echo "APT::Periodic::Update-Package-Lists "1"" >> /etc/apt/apt.conf.d/20auto-upgrades

echo "APT::Periodic::Unattended-Upgrade "1" " >> /etc/apt/apt.conf.d/20auto-upgrades

同样,您可以根据需要在 conf 文件中配置/添加参数 /etc/apt/apt.conf.d/50unattended-upgrades

不要忘记重新启动服务来应用更改。

/etc/init.d/unattended-upgrades restart

相关内容