Настройка автоматического обновления пакетов

Отключите интерактивный режим dnf. Это первое. Без него автоматизация не работает как надо. Правка конфигурации минимальна: в /etc/dnf/dnf.conf дописать assumeyes=True. Всё. Диалогов не будет. Система не зависнет в ожидании ответа.

Следующий шаг – dnf-automatic. В Red OS этот модуль уже в составе базовой поставки, но по умолчанию не активен. Запускаем:

dnf install dnf-automatic

Далее – конфигурация. Файл /etc/dnf/automatic.conf. В секции [commands] прописать apply_updates = yes, чтобы обновления не просто скачивались, а ставились. В [emitters] включить emit_via = motd, если надо оповещение через терминал. Можно и через email, но это уже опционально, если настроен MTA.

Важно: не включайте random_sleep без нужды. Он задерживает запуск на случайный период. В продакшене это может аукнуться. Особенно в кластере.

Активируем службу. Это must do, без systemd всё вышеописанное мёртво. Используйте:

systemctl enable --now dnf-automatic.timer

Проверка статуса:

systemctl list-timers | grep dnf-automatic

Видите таймер? Значит работает. Не видите – разбирайтесь. Логика проста: нет таймера – нет обновлений.

Хотите конкретное расписание? Правьте /usr/lib/systemd/system/dnf-automatic.timer или создайте override-файл в /etc/systemd/system/. Пример замены: запуск каждый день в 4 утра – OnCalendar=*-*-* 04:00:00.

Помните: любые ручные правки в unit-файлах требуют systemctl daemon-reexec или хотя бы daemon-reload. Без этого ничего не применится.

Почему всё так? Потому что Red OS следует строгой логике безопасности. Здесь нет места случайностям. Всё предсказуемо, но требует точности.

Не используйте crontab. Это ошибка новичков. systemd.timer – современное, встроенное, логируемое решение. Только оно гарантирует совместимость с текущими механизмами инициализации и ведения журнала.

Нет желания ставить обновления, но хотите оповещения? Меняйте apply_updates = yes на no. Всё остальное оставить. Это удобно для тестирования и анализа.

Вам нужно автоматическое обновление только по security-фиксам? Используйте dnf updateinfo и отбор по типу:

dnf updateinfo list security

Скриптуйте. Комбинируйте с grep и awk. Это уже уровень старшего администратора. Здесь включается своя логика фильтрации. И своя ответственность.

Нельзя просто включить обновление и забыть. Нужно знать, что именно ставится. Нужно логировать, следить, быть в курсе. Red OS вам в этом не поможет. Это зона вашей ответственности.

Настройка автоматического обновления пакетов через apt на Ubuntu

Установите unattended-upgrades. Без этого ни одна автоматизация не сработает. Пакет нужен. Пишем:

Читайте также:  Полная инструкция по установке Zabbix на операционную систему CentOS 7

apt install unattended-upgrades

Далее проверьте, активирован ли он по умолчанию. Часто он уже работает, но слепо верить системе – глупо. Выполните:

dpkg-reconfigure --priority=low unattended-upgrades

Выберите Yes, если хотите, чтобы обновления ставились без участия пользователя. Это не рекомендация. Это обязательное условие.

Файл конфигурации – /etc/apt/apt.conf.d/50unattended-upgrades. Здесь вся логика. Выбирайте источники обновлений. Пример – только безопасность:


// Automatically upgrade packages from these (origin:archive) pairs
Unattended-Upgrade::Allowed-Origins {
"Ubuntu stable";
"Ubuntu ${distro_codename}-security";
};

Для тонкой настройки используйте параметры ниже в том же файле. Пример: автоматическая очистка старых версий:

Unattended-Upgrade::Remove-Unused-Dependencies "true";

Время запуска задаётся в /etc/apt/apt.conf.d/10periodic. Ключевые параметры:


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

Единица означает ежедневный запуск. Ноль – отключение. Можно поставить «7» – раз в неделю. Решать вам. Только не путайте: Update-Package-Lists – обновление списка, Unattended-Upgrade – установка.

Важно помнить: если нет второго параметра, обновления не применяются даже при включённом первом. Список обновится – установка нет. Ловушка новичков.

Хотите логировать? Логи в /var/log/unattended-upgrades/. Всё там. Успешные, проваленные, пропущенные. Смотрите логи. Не читайте мануалы – читайте логи.

Нужна симуляция без установки? Проверьте, что будет обновляться, не применяя изменения:

unattended-upgrade --dry-run --debug

Это полезно. Особенно если работаете с кастомными репозиториями. Иногда они мешают. Иногда ломают систему.

Внимание! Если используете прокси или зеркала – обязательно проверьте, совпадают ли идентификаторы источников с ожидаемыми. Механизм сравнивает origin, а не URL. Ошибётесь – ничего не обновится.

Автоматизация без понимания логики apt – бомба замедленного действия. Ubuntu прощает ошибки. Но только до первого падения после обновления ядра.

Проверьте, установлены ли initramfs-tools и update-notifier-common. Иногда без них слетает post-install скрипт, и вы даже не узнаете, что ядро не применилась.

Хотите полный контроль? Перенаправьте stderr и stdout в собственный журнал. Cron + custom wrapper. Пример:

Читайте также:  Как установить медиаплеер Banshee на Fedora 20/19/18


0 3 * * * root /usr/bin/unattended-upgrade >> /var/log/custom-upgrade.log 2>&1

Да, это костыль. Но когда штатный механизм вас не устраивает – приходится.

Ничего не делайте руками, если не знаете, что именно делает автомат. Сначала – логика. Потом – команды. И только потом – включение таймера или системной службы.

Конфигурация автоматических обновлений с использованием yum-cron в CentOS

Установите компонент:

yum install yum-cron -y

Проверяйте, что ставится. Без yum-cron система молчит, ничего не делает, даже не сообщает. Это просто таймер. Не больше. Но без него ничего не произойдёт.

Файл управления – /etc/yum/yum-cron.conf. Здесь ключевые параметры. Не трогайте всё подряд. Ищите строки:

apply_updates = yes

Без этой строки обновления только проверяются. Никакой установки. Только отчёт в журнал. Хотите установки – включайте yes.

update_cmd = default

Если нужен только security, меняйте на:

update_cmd = security

Будет применяться только то, что имеет security-метку в metadata. Но! Только если репозитории это поддерживают. Проверяйте. CentOS 7 часто молчит, даже когда есть фиксы.

Внимание! Убедитесь, что директория /etc/yum/yum-cron.conf не перезаписывается при обновлениях. Особенно на CentOS Stream. Лучше делайте копию и смотрите diff после патчей.

Расписание? systemd. Все вопросы туда. Активируйте:

systemctl enable --now yum-cron.service

Работает? Проверьте статус:

systemctl status yum-cron

Ошибки? Ищите в /var/log/cron и /var/log/yum.log. Не в syslog. CentOS пишет всё в свои журналы.

Почта? Если вы не настроили MTA, ничего не получите. Уведомления идут в локальную почту root. Хотите на внешний адрес – прописывайте MAILTO в /etc/crontab. Или настраивайте postfix/sendmail. Но это отдельная головная боль.

Ограничения? Да. yum-cron не понимает зависимости на уровне ядра. Он может обновить kernel, но не перезагрузит. Вы останетесь на старом. Хотите полную автоматизацию – добавляйте перезагрузку скриптом:


if [ -f /var/run/reboot-required ]; then
/sbin/shutdown -r +5
fi

Или cron + systemctl reboot. Сами решайте. Но не рассчитывайте, что yum-cron поднимет сервер без вашего участия.

Важно помнить: CentOS 8 и Stream используют dnf. yum-cron работает, но фактически это обёртка. В новых системах переходите на dnf-automatic.

Если хотите тонкую настройку, используйте /etc/yum/yum-cron-hourly.conf. Этот файл отвечает за частый запуск. Мало кому нужно, но если вы администрируете прокси с агрессивным кэшированием – пригодится.

Читайте также:  Как установить и настроить PyENV на Ubuntu за несколько минут

Не трогайте параметры random_sleep и debuglevel, если не понимаете зачем. Первый мешает синхронности, второй забивает лог бесполезными строками.

yum-cron – старый, прямолинейный. Но именно этим он и хорош. Ошибся в одном символе – и всё становится видно. Никакой магии. Только текстовые конфиги, системный таймер и понимание, что вы делаете.

Создание и использование cron-скриптов для обновления пакетов в Arch Linux

Не используйте systemd для этого. В Arch всё можно сделать проще. cron – старый добрый метод, работает без сюрпризов. Установите cronie, если ещё не стоит:

pacman -S cronie

Активируйте службу. Без неё ничего не произойдёт:

systemctl enable --now cronie.service

Теперь создайте скрипт. Пусть он живёт в /usr/local/bin/update-arch.sh. Пример:


#!/bin/bash
exec >> /var/log/update-arch.log 2>&1
echo "=== $(date) ==="
pacman -Syu --noconfirm

Выставьте права:

chmod +x /usr/local/bin/update-arch.sh

Проверьте вручную. Если скрипт ломается в интерактивном режиме, cron его тоже не осилит. Команда --noconfirm обязательна. Без неё pacman будет висеть и ждать ответа от пустоты.

Теперь crontab. Правьте через crontab -e. Добавьте строку:

0 4 * * * /usr/local/bin/update-arch.sh

Обновление каждый день в 4 утра. Просто. Без лишней магии.

Важно: лог-файл будет бесконечно расти. Очистку тоже надо автоматизировать. Раз в месяц – минимально. Cron может это сделать:

0 0 1 * * truncate -s 0 /var/log/update-arch.log

Теперь о безопасности. Arch не различает критические и обычные изменения. Всё обновляется сразу. Хотите только security? Не получится. Нет встроенного фильтра. Решение – внешние утилиты, типа arch-audit. Но это уже другая история.

Проблема с зависимостями? Да, бывает. pacman -Syu не всегда стабилен при частичном обновлении. Cron не подскажет. Не заметите – получите битую систему. Хотите контроля? Добавьте e-mail оповещение:


MAILTO=your@email.com
0 4 * * * /usr/local/bin/update-arch.sh

Но сначала настройте почтовый агент. Без него это просто мёртвая строка.

Помните: если обновление тянет новое ядро – перезагрузка обязательна. Cron этого не знает. Пропишите отдельный скрипт, который перезагрузит систему после ключевых апдейтов. Или будьте готовы к сюрпризам на уровне initramfs.

Хочется изоляции? Запускайте скрипт через systemd-nspawn или chroot. Для тестирования. Не лейте всё в продакшн сразу. Arch – не про стабильность. Он про ручное управление.

Итог: cron + pacman – рабочая связка. Простая. Логируемая. Контролируемая. Но требует внимания. Хотите автомат – получайте ответственность.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *