Автор Тема: Автоматизация установки обновлений  (Прочитано 1454 раз)

Оффлайн User85vv

  • Начинающий
  • *
  • Сообщений: 11
Есть ли не через gui, а через конфигфайлы или через bash, автоматизировать установку обновлений на АльтЛинукс для случая репозиториев без интернета, настроенных через локальный сервер?
Встроенный sisyphus-updates описан через веб-интерфейс.
Понятно что можно выполнять по крону apt-get dist-upgrade, но все-таки хотелось расширенные средства обновления, как dnf-automatic или unattended-upgrades

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 307
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
А кто будет контролировать процесс от ошибок обновления ?
PS веб интерфейс только инициализирует запуск скрипта.

Оффлайн User85vv

  • Начинающий
  • *
  • Сообщений: 11
Лог ошибок) Как я понял основной скрипт /usr/sbin/sisyphus-updates, но он требует запущенного демона avahi-daemon.service

Я его запустил вручную, но при запуске скрипта выше возникает ошибка:
/usr/sbin/sisyphus-updates
service_browser failed: DNS failure: NXDOMAIN
При этом 3 последние команды в этом скрипте вручную отрабатывают штатно. И есть еще скрипт /usr/lib/alterator/backend3/updates, но при его запуске ничего не происходит, он кстати ссылается на /usr/sbin/sisyphus-updates в командах
« Последнее редактирование: 15.02.2024 08:20:17 от User85vv »

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 003
    • Домашняя страница
    • Email
Изучите код, там тривиально. Надо настроить конфигурацию и запустить sisyphus-updates.
avahi-daemon не нужен, если не используется обновление, управляемое сервером.
Андрей Черепанов (cas@)

Оффлайн rits

  • Завсегдатай
  • *
  • Сообщений: 1 120
  • ITS
# mkdir -p /var/adm/crons && touch /var/adm/crons/update && chmod +x /var/adm/crons/update
содержание скрипта (добавить):
# nano -b /var/adm/crons/update
или
# mcedit /var/adm/crons/update

#!/bin/sh

## каталог сохранения логов
logdir=/var/log/sysupdate

## если каталог существует то удалить в нем файлы логов за -mtime  дней
if [ -d $logdir ]
then
cd $logdir
find . -mtime +7 -type f -name "*.log" -delete
else
mkdir -p $logdir
fi

## произвести обновление с записью в логфайл
echo -e "log-START_`date +%Y-%m-%d_%H-%M-%S`" >> "$logdir/apt-update_`date +%Y-%m-%d`.log"
(apt-get update && yes | apt-get dist-upgrade) >> "$logdir/apt-update_`date +%Y-%m-%d`.log"
echo -e "log-END_`date +%Y-%m-%d_%H-%M-%S`\n" >> "$logdir/apt-update_`date +%Y-%m-%d`.log"

Каталог с логами /var/log/sysupdate создается атоматически, ротация зависит от параметра (-mtime +7)
Добавить для правки crontab свой редактор по умолчанию командой:
- на время сессии export EDITOR=mcedit; crontab -e
- для постоянной работы добавить строчку  export EDITOR="nano" в файл ~/.bashrc
(export EDITOR="mcedit" && echo -e "\nEDITOR=\"mcedit\"\nexport EDITOR" >> /root/.bashrc) -одной строкой добавить в .bashrc
- добавить задание запуска скрипта в планировщик crontab
задания находяться в каталоге /var/spool/cron (файл по имени пользователя 'root')

# crontab -l
#minute (0-59),
#|      hour (0-23),
#|      |       day of the month (1-31),
#|      |       |       month of the year (1-12),
#|      |       |       |       day of the week (0-6 with 0=Sunday).
#|      |       |       |       |       commands
0       9,12,14  *       *       *       /bin/bash /var/adm/crons/update
# обязательно в конце задания выполнить перевод строки (EOF)
- в данном случае выполнять задания ежедневно в 9,12,14 часов

(tail /var/log/sysupdate/* - просмотреть по 10 строк с конца каждого файла в каталоге ...sysupdate)

Сейчас я хоть и настраиваю системники так, но комментирую в crontab строчку "0       9,12,14  * ..."
Пару раз обжегся с xfreerdp теперь лучше ручной режим.
Но уже думаю доработать скрипт, к примеру добавить проверку маркера обновлений в базе данных или иным способом. Чтобы изменил значение маркера, и системники обновились. Естественно, проверив на тестовом отсутствие слетов по критическому функционалу.
Некоторые на p8 годами работают без обновлений. Если оно терминальный клиент или печатная машинка, зачем это обновлять так часто? Windows-блудство с обновлениями в Linux, как то не приживается.

Оффлайн User85vv

  • Начинающий
  • *
  • Сообщений: 11
Спасибо за код, я проще сделал через службу и по sytemd timer.
Спойлер
[Service]
Type=oneshot
ExecStart=/bin/bash -c '/usr/bin/apt-get update && /usr/bin/apt-get -y dist-upgrade >> /var/log/apt-get.log && /usr/bin/apt-get clean'

Ну и добавил ротацию логов штатными службами

Но мне интересно было запустить именно через /usr/sbin/sisyphus-updates
Да, я поизучал код, но повторюсь ошибка
/usr/sbin/sisyphus-updates
service_browser failed: DNS failure: NXDOMAIN

Если демон avahi-daemon не запускать, то при запуске скрипта вот так получается:
"Failed to create client object: Daemon not running"

Оффлайн rits

  • Завсегдатай
  • *
  • Сообщений: 1 120
  • ITS
Спасибо за код, я проще сделал через службу и по sytemd timer.
psql -U ваше_имя_пользователя -d ваша_база_данных -t -c 'SELECT ваше_значение FROM ваша_таблица WHERE ваше_условие;'или
Переменная_для_условия=`psql -h ваш_IP_адрес -p ваш_порт -U ваше_имя_пользователя -d ваша_база_данных -t -c 'SELECT ваше_значение FROM ваша_таблица WHERE ваше_условие;'`
Можно получить одно значение из базы postgresql  и на клиентах обновления будет получена команда что делать.  Возможно и отдельную программу обновить и всю систему и т.д. на что фантазии хватит. Не думаю, что скрипт придется часто менять. Переменная_для_условия - может быть и самой командой обновления или ее частью.
« Последнее редактирование: 15.02.2024 12:08:04 от rits »