Зробіть оновлення та оновлення apt-get автоматизованими та без нагляду


28

У мене є близько 7 серверів Debian, якими я керую, і я хотів би встановити їх для автоматичного оновлення. Отже, я створив сценарій як такий:

#!/bin/sh
apt-get update
apt-get upgrade

і помістив його до rootсписку crontab. На жаль, він завжди висить на розділі Оновлення, запитуючи, чи я впевнений, що хочу оновити. Оскільки це робота з хроном, я не бачу вихід, поки він не надішле мені повідомлення про те, що це не вдалося. Чи є спосіб його пропустити це підказку і просто зробити оновлення автоматично?


3
... або крон-влучний.
derobert

Відповіді:


46

Використовуйте опцію -y apt-get, щоб вона не запитувала. Від man apt-get:

   -y, --yes, --assume-yes
       Automatic yes to prompts; assume "yes" as answer to all prompts and
       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.

Ви також можете встановити змінну env DEBIAN_FRONTEND

DEBIAN_FRONTEND=noninteractive apt-get -y upgrade

1
Що робить DEBIAN_FRONTEND? Чи використовується він і для інших процесів?
Канадський Люк ВІДНОВЛЕННЯ МОНИЦИ

Я намагаюся це зробити на своєму домашньому сервері, і виберу найкращу відповідь, як тільки він запуститься
канадський Лука REINSTATE MONICA

1
@CanadianLuke см тут для DEBIAN_FRONTEND. У моєму Debian це не згадується man debconf, тому це може бути річ Ubuntu.
terdon

@terdon у вас немає пакету -doc для debconf. Це в 7 розділі чоловіка man 7 debconf;)
Брайам

@Braiam ах, добре, я це бачив і намагався, man 7 debconfале нічого не отримав. Тепер я знаю, чому :)
terdon

27

Ну, можливо, ви використовуєте неправильний інструмент. unattended-upgradesпакет щодня встановлює оновлення безпеки (можна налаштувати), ви можете налаштувати, які пакунки потрібно оновити чи не оновити тощо. Можна встановити за допомогою:

sudo apt-get install unattended-upgrades

Від man unattended-upgrades:

Конфігурація проводиться за допомогою підходящого механізму налаштування. Файл конфігурації за замовчуванням можна знайти за адресою /etc/apt/apt.conf.d/50unattended-upgrades


@CanadianLuke він читає всі конфігурації, /etc/apt/apt.conf.d/але тільки ті, що починаються з Unattended-Upgrade::розбору.
Брайам

Я пробую це на одному з серверів на роботі, і виберу найкращу відповідь, як тільки він запуститься
канадський Лука REINSTATE MONICA

10

в той час як попередні відповіді є інформативними, вони не обминають "питання" введення, необхідного людськими засобами протягом upgrade. тому я використовую наступне:

export DEBIAN_FRONTEND=noninteractive
export DEBIAN_PRIORITY=critical
sudo -E apt-get -qy update
sudo -E apt-get -qy -o "Dpkg::Options::=--force-confdef" -o "Dpkg::Options::=--force-confold" upgrade
sudo -E apt-get -qy autoclean

щоб включити оновлення 'розповсюдження', як ядра, використовуйте dist-upgradeкоманду.

будь ласка, перегляньте багажdpkg детальної інформації про ці параметри.

importtat Примітка : дзвінок, sudoвключаючи -Eпараметр, необхідний:

Indicates to the security policy that the user wishes to preserve their existing environment variables. The security policy may return an error if the user does not have permission to preserve the environment.

інакше EXPORTзаяви не вплинуть на дзвінки apt-get!

кредит належить Ремі ван Ельсту ! Спасибі!


1
Чи можете ви пояснити, чому ви додали інші параметри для оновлення apt-get?
FarO

1
Також, чи потрібен "sudo -E", якщо сценарій запускається з кроттобу Rott?
FarO

1
@FarO, це залежить від того, в якому середовищі / в якому контексті ви б хотіли запустити cronjob. загалом, ними керує root- так що вам зовсім не потрібно користуватися sudo. "інші параметри" встановлюються без нагляду в будь-якому випадку. будь ласка, дивіться на вказану manсторінку.
тремтіння

4

Загальним інструментом для подібних речей є yes:

DESCRIPTION
       Repeatedly output a line with all specified STRING(s), or 'y'.

Так, наприклад, ви могли б зробити

yes | sudo apt-get upgrade 

Зверніть увагу, що в конкретному випадку apt-get upgradeвикористання параметрів, запропонованих @Braiam або @ArthurUlfeldt , краще.


Рядок, який я вставляю, коли я хочу це зробити вручну, є apt-get update && yes | apt-get upgrade(наші сервери не повинні використовувати sudo... Не питати ...)
канадський Лука REINSTATE MONICA

Навіщо використовувати хитрість замість уже наданого варіанту ?? "-y" є в apt-get вже.
FarO

3
Тому що, як я вже сказав у відповіді, це універсальний інструмент для подібного роду операцій, тому ця відповідь стосується інших випадків, а не сприятливих. Ви не читали останній абзац? Або перше речення?
тердон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.