我有一个 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