Включение автоматических обновлений из сценария оболочки

17

У меня есть сценарий оболочки для автоматической настройки новых виртуальных машин Ubuntu для моих целей. Я хотел бы, чтобы этот сценарий был установлен и включен unattended-upgrades, но я не могу понять, как это сделать без взаимодействия с пользователем.

Обычный способ включить обновления есть dpkg-reconfigure unattended-upgrades, но, конечно, он интерактивный. Неинтерактивный внешний интерфейс вообще не задает никаких вопросов, а внешний текстовый интерфейс кажется связанным и настроенным на выполнение своих операций ввода-вывода с tty, а не с stdin / stdout.

Грант Уотсон
источник
1
Я не использовал этот инструмент раньше, но похоже, что он позволяет записать 1 в две строки в файле /etc/apt/apt.conf.d/20auto-upgrades. Если вы вручную напишите этот файл, он будет работать?
mfisch

Ответы:

20

Просто сделайте копию /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 -configure.

Если вы не хотите получать файл 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
Джим Солтер
источник
1

Если вы хотите использовать dpkg-reinfigure, вы можете установить значение с помощью «debconf-set-selections», а затем перенастроить его неинтерактивным способом.

echo "unattended-upgrades       unattended-upgrades/enable_auto_updates boolean true" | debconf-set-selections; dpkg-reconfigure -f noninteractive unattended-upgrades
user497484
источник
0

Вы должны использовать 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
Arturo
источник
0
dpkg-reconfigure -f noninteractive unattended-upgrades
aexl
источник
0

Я бы предложил вставить параметры конфигурации для настройки автоматических обновлений.

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

Таким же образом вы можете настроить / добавить параметры в соответствии с вашими требованиями в файле конфигурации /etc/apt/apt.conf.d/50unattended-upgrades.

Не забудьте перезапустить сервис, чтобы применить изменения.

/etc/init.d/unattended-upgrades restart
Кетан Патель
источник