Скрипт автоматизации обновлений для дистрибутивов, основанных на Debian. Linux статьи
Написать статью
Войдите, чтобы писать статьи

Скрипт автоматизации обновлений для дистрибутивов, основанных на Debian

12

Скрипт автоматизации обновлений для дистрибутивов

Материал написан пользователем сайта.

Начну с того, что при выборе дистрибутива долгое время я отдавал предпочтение дистрибутивам похожим по своей внутренней философии на Linux Mint, Sparky, MX Linux. То есть в них предустановлены и программы, а так же утилиты обслуживания дистрибутива. Но со временем я пришел к тому, что стал использовать минимально оснащенные дистрибутивы Linux, в которых была так называемая базовая система с графической подсистемой, но без необходимых для десктопа программ. Нужные мне программы я до устанавливал из репозитория, и это было хорошо. Но только вот в этих базовых системах отсутствовала утилита, которая следит за обновлениями. И через некоторое время мне пришлось написать простой скрипт который это делает.

Скрипт работает так: при загрузке системы, через 3 минуты после этого, опрашивает apt, если пришли обновления; при наличии обновлений, воспроизводится звуковой сигнал характерный для этого события; и открывается окно терминала, со списком обновлений и предложением их установить.

При отсутствии обновлений воспроизводится другой звуковой сигнал, более короткий, и на экран ничего не выводится.

Хочу добавить, сама утилита состоит из двух скриптов. Первый скрипт производит проверку обновлений; второй скрипт выводит окно терминала и выполняет эти обновления. Также нам необходимо создать desktop файл, для размещения первого скрипта в ~/.config/autostart. Условие: оба скрипта нужно поместить по пути ~/.local/bin/new_updater/

Первый скрипт с именем upd_ceck.sh:

#!/bin/bash

sleep 3m
cd ~/.local/bin/new_updater/
echo "ПРОВЕРИМ_ОБНОВЛЕНИЯ?"
sleep 5
echo "<пароль>" | sudo -S apt update
echo "<пароль>" | sudo -S apt list --upgradable | grep -v Listing >up_lst.txt
a="$(cat ./up_lst.txt)"
if [ -n "$a"]
then
  export DISPLAY=:0 && xterm -e 'sh/home/user/.local/bin/new_updater/upd_exec.sh'
else
  paplay /usr/share/sounds/freedesktop/stereo/dialog-error.oga
  echo "ОБНОВЛЕНИЙ_НЕТ"
  sleep 6
fi

Замечания по первому скрипту: вместо <пароль> введите пароль вашего пользователя. Не стоит этого опасаться, он никуда не отсылается, тем более что по тексту скрипта это читается.

Еще замечание по первому скрипту: если у вас система локализована, то есть язык системы русский, то в строке

echo"<пароль>" | sudo -S apt list --upgradable |grep -v Listing >up_lst.txt

вместо <Listing> пишем <Вывод>

Теперь привожу код второго скрипта который с именем upd_exec.sh:

#!/bin/bash
paplay /usr/share/sounds/freedesktop/stereo/service-login.oga
Y="y"
echo "ОБНОВЛЯЮ СПИСОК ПАКЕТОВ ИЗ РЕПЫ"
echo "<пароль>" | sudo -S apt update
echo "ДЛЯ ОБНОВЛЕНИЯ СЛЕДУЮЩИЕ ПАКЕТЫ"
echo "<пароль>" | sudo -S apt list --upgradable
echo "ХОТИТЕ ОБНОВИТЬ СИСТЕМУ="Y", НЕТ ЛЮБУЮ БУКВУ"
read qu

if [ "$qu"= "$Y" ]; then
  echo "<пароль>" | sudo -S apt dist-upgrade
  echo "<пароль>" | sudo -S apt autoremove
  echo "СИСТЕМА ОБНОВЛЕНА"
  sleep 6s
  echo " "
else
  echo " ВЫ ОТКАЗАЛИСЬ ОТ ОБНОВЛЕНИЯ"
  sleep 6
  echo " "
fi

Теперь привожу код desktop-файла который нужно поместить в  ~/.config/autostart:

[DesktopEntry]
Type=Application
Name=Updater
Exec=/home/user/.local/bin/new_updater/upd_cech.sh
Categories=System;

Даем имя этому desktop-файлу upd.desktop и помещаем его, как сказал выше, в ~/.config/autostart

не забываем, что в строке Exec=/home/user/.local/bin/new_updater/upd_cech.sh вместо <user> пишем имя вашего пользователя.

И последнее. В каталоге ~/.local/bin/new_updater/ создаем текстовый файл с именем up_lst.txt. Этот текстовой файл необходим для сохранения списка обновляемых файлов, и нужен скриптам.

Если вы всё сделаете правильно, как указано в статье, то получите универсальный дистронезависмый инструмент, если в системе нет apt то, скорректировав скрипт под пакетный менеджер дистрибутива, можно автоматизировать процесс обновления на любом linux дистрибутиве.

Upd: Этой статьёй начинаю небольшой цикл по скриптам, у меня их слегка накопилось. И очень надеюсь, что другие пользователи откликнутся, присоединятся и начнут публиковать свои скрипты.

Лайков: +17
войдите, чтобы ставить лайки
12
  • Опубликовано: 02.07.2023
  • totiks

Комментарии

xKDE
Активный пользователь
Активный
02.07.2023
16:37
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+2
войдите, чтобы ставить лайки
+
А если установить libnotify (при её отсутствии), то уведомления можно слать на рабочий стол более элегантно через notify-send. Либо через Zenity/Qarma отработать варианты: обновлять или нет!
P.S.: а что касаемо самих скриптов, то они не универсальны (x11, один монитор, наличие puls'ы и xterma обязательно), переменная "Y" явно лишняя, но кому нужно - подправят.
totiks
Активный пользователь
Активный
02.07.2023
20:56
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийxKDEРодительский комментарий
+1
войдите, чтобы ставить лайки
цитата: " а что касаемо самих скриптов, то они не универсальны (x11, один монитор, наличие puls'ы и xterma обязательно), переменная "Y" явно лишняя, но кому нужно - подправят." ,-
согласен действительно завязано на x11, один монитор, наличие puls'ы и xterma и с переменой Y избыточно применил, но скрипт работает и делает свое дело, если бы я сегодня сел писать этот скрипт то завернул бы вывод результата проверки в /dev/null и присвоил бы этот результат переменой, то есть таким образом избавился от лишнего списка up_lst.txt , то есть скрипт можно улучшить, что возможно кто-то и сделает основываясь на него.
Minor748
Активный пользователь
Активный
02.07.2023
17:25
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
Здорово, конечно, но я уже привык раз в день-два проверять обновы, пусть даже сейчас есть для этого GUI-инструмент, который, к слову, тоже сам проверяет обновы раз в сутки.
totiks
Активный пользователь
Активный
02.07.2023
20:58
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийMinor748Родительский комментарий
0
войдите, чтобы ставить лайки
<<пусть даже сейчас есть для этого GUI-инструмент,>> -- в тех дистрибутивах которые я применяю GUI-инструмента для проверки обновления нет, пришлось строить свой велосипед.
Minor748
Активный пользователь
Активный
02.07.2023
21:27
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийtotiksРодительский комментарий
0
войдите, чтобы ставить лайки
Эта привычка у меня с Арч-основанных дистрибутивов, там они каждый день приходят, сейчас тоже роликовый дистр, даже в MX я проверял обновы постоянно, потому что и там что-нибудь да валится, хотя бы 1 пакет в день.
origin
Активный пользователь
Активный
02.07.2023
23:43
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийMinor748Родительский комментарий
0
войдите, чтобы ставить лайки
Minor748 ...у меня с Арч...

Вопросик к Вам и не по теме,
а именно:
1-Есть для Винды прога...Тундра...игра с роботом в шашки,
а есть ли точно такая прога...или подобная...Но для Линукс ???
С Уважением !
Minor748
Активный пользователь
Активный
03.07.2023
13:35
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийoriginРодительский комментарий
0
войдите, чтобы ставить лайки
Сегодня ночью сайт не открывался из-за ошибки, может поэтому письмо с уведомлением об ответе не пришло …

Либо я вопроса не понял, либо зачем мне его задавать? Можно же было самому воспользоваться поисковиком с запросом "checkers Linux"

https://aur.archlinux.org/packages/qcheckers
Vitaliy
02.07.2023
20:08
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
Пользовался утилитой
ucaresystem-core. При запуске из терминала последовательно выполняет : update, upgrade, autoremove, clean.
totiks
Активный пользователь
Активный
03.07.2023
10:27
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийVitaliyРодительский комментарий
+2
войдите, чтобы ставить лайки
Интересно , но утилита для ubuntu. Можно её стянуть из PPA и установить самостоятельно, но это плохая практика, да и притянет лишнего, я не то что ратую за скрипт, но у меня сложилась такая практика если есть возможность решить задачу средствами системы без привлечения лишних библиотек, и написанием скрипта я отдаю предпочтение такому способу, всё дело в том что я очень долгое время использовал слабые ограниченные по тех. ресурсам машины, и там каждый мегабайт оперативной памяти на счету, и позже когда стал обладателем мощной машины , привычка беречь ресурсы осталась, и я считаю это хорошей привычкой.

upd: Конкретно ucaresystem-core указанная вами использует системные утилиты, то есть в зависимостях apt, deborphan, lsb-release, xterm то есть всё это есть в системе, я опробую её в виртуалке, интересно стало ,спасибо!

upd2: ucaresystem-core при установке притянуло deborphan , xterm был у меня установлен, весьма неплохо отработало, но всё равно я буду использовать свой скрипт :) , ибо он проще а делает все то же самое.
User
09.07.2023
22:30
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
A unattended-upgrades больше не котируются?
totiks
Активный пользователь
Активный
23.04.2024
13:12
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийUserРодительский комментарий
+1
войдите, чтобы ставить лайки
Котируется! Спасибо ! почти год до меня добирался этот комент, но по предварительно проведеному иследованию unattended-upgrades производит обновление автоматом в фоне, использует файл настройки, обновляет соотнесясь с ним, но иногда возникают ситуации возникновения конфликтов между существующими конфигами, и конфигами при обновлении, то есть теми что прилетают при обновлении с сервера, а так как обновления происходят автоматом и в фоне, то запроса к пользователю нет, и конфиги записываются те что с сервера,а те что были тем присваивается определенный префикс, то есть контроль не такой уж и явный... Но всё равно спасибо, и я присмотрюсь утилита интересная.
xKDE
Активный пользователь
Активный
23.04.2024
15:59
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийtotiksРодительский комментарий
0
войдите, чтобы ставить лайки
А "DEBIAN_FRONTEND=noninteractive" в купе с "--force-confold" "--force-confdef" больше не котируются?

Написать комментарий

Ваше имя:
Текст комментария:
  • Уважать других.
  • Не ругаться.
  • Без оскорблений.
  • Без грубости.
  • Не переходить на личности.
  • Писать на русском языке.
  • Без политики.
  • Без флуда.
Правила