Анализ версии программы и на основании его результата - выполнение действия

Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
no avatar

Автор темы
ogankvik
Сообщения: 178
Зарегистрирован: 22 ноя 2019, 19:12
Благодарил (а): 98 раз
Поблагодарили: 9 раз
Контактная информация:

Анализ версии программы и на основании его результата - выполнение действия

#1

28 апр 2021, 22:55

Здравствуйте. Нужно периодически удаленно обновлять одну программу на многих ПК. Сейчас это сделано с помощью скрипта, помещенного в systemd. Дистрибутив программы размещается на http сервере. При загрузке ОС скрипт ищет 1.deb если находит - программа обновляется. Если нет - то нет :). Минус один - программа будет обновляться после каждой загрузки ос, даже если она уже была обновлена. Как сделать чтобы скрипт анализировал необходимость обновления, сравнивания установленную программу с тем, что находится в 1.deb?
Пара уточнений: обновления происходят редко, раз в пол года. IP адреса компьютеров неизвестны.
Пока мысль такая: сделать чтобы скрипт сопоставлял дату изменения файлов установленной программы с текущей даты на ПК, и если файлы изменены (установлены) не так давно (не больше 10 дней назад) - не запускать процесс установки. Как это реализовать?

Код: Выделить всё

#!/bin/bash
#Скрипт обновления версии 1С для работы с базой 1С Медицина.
#Между выполнением скриптов, добавленных в systemD должна быть пауза, секунд 10-20, в зависимости от того, как долго выполняется предыдущий скрипт.
sleep 12
#Удаляем скачанный ранее установщик 1С.
rm /home/user/.cache/1.deb
#Скачиваем залитый на http сервер установщик 1С.
runuser -l user -c "wget -P /home/user/.cache http://192.168.3.1:8080/1.deb"
#Закрываем 1С, если она запущена.
killall 1cv8c
#Устанавливаем 1С.
dpkg -i /home/user/.cache/1.deb
exit 0

Решение demonlibra » 29 апр 2021, 06:34
Поддерживаю, использовать для синхронизации rsync,
а для установки только новой версии пакета dpkg с ключом --skip-same-version

Код: Выделить всё

dpkg --skip-same-version -i "/home/user/.cache/1.deb"

Перейти к ответу ➙

Аватара пользователя

WWolf
Сообщения: 3898
Зарегистрирован: 14 фев 2018, 00:51
Решено: 31
Откуда: Краснодар
Благодарил (а): 1688 раз
Поблагодарили: 1213 раз
Контактная информация:

Анализ версии программы и на основании его результата - выполнение действия

#2

28 апр 2021, 23:05

ogankvik, man cmp
в частности ключ -s и анализировать код завершения
ogankvik писал(а):
28 апр 2021, 22:55
и если файлы изменены (установлены) не так давно (не больше 10 дней назад)
а если срочная заплатка вышла на следующий день после обновы?

и почему обновление в локальной сети через http? rsync c сжатием быстрее апнет файло в кэше
Последний раз редактировалось пользователем 1 WWolf; всего редактировалось раз: 28

no avatar

Автор темы
ogankvik
Сообщения: 178
Зарегистрирован: 22 ноя 2019, 19:12
Благодарил (а): 98 раз
Поблагодарили: 9 раз
Контактная информация:

Анализ версии программы и на основании его результата - выполнение действия

#3

28 апр 2021, 23:12

WWolf писал(а):
28 апр 2021, 23:05
а если срочная заплатка вышла на следующий день после обновы?
Я заранее добавлю в скрипт строку с 2.deb, который будет устанавливаться без анализа даты установки :)

Код: Выделить всё

runuser -l user -c "wget -P /home/user/.cache http://192.168.3.1:8080/2.deb

Аватара пользователя

demonlibra
Сообщения: 844
Зарегистрирован: 12 авг 2017, 09:09
Решено: 13
Откуда: Ростов-на-Дону
Благодарил (а): 29 раз
Поблагодарили: 204 раза
Контактная информация:

Анализ версии программы и на основании его результата - выполнение действия

#4

29 апр 2021, 06:34

Поддерживаю, использовать для синхронизации rsync,
а для установки только новой версии пакета dpkg с ключом --skip-same-version

Код: Выделить всё

dpkg --skip-same-version -i "/home/user/.cache/1.deb"
Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-21.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Аватара пользователя

rogoznik
Сообщения: 10044
Зарегистрирован: 27 июн 2017, 13:36
Решено: 129
Откуда: Нижний Тагил
Благодарил (а): 776 раз
Поблагодарили: 1958 раз
Контактная информация:

Анализ версии программы и на основании его результата - выполнение действия

#5

29 апр 2021, 07:40

Сравнивать hash ранее скачанного пакета и того что на сервере. И если отличаются, значит обновлять
ИзображениеИзображение

Аватара пользователя

ilikethat
Сообщения: 571
Зарегистрирован: 14 дек 2019, 01:46
Решено: 10
Благодарил (а): 120 раз
Поблагодарили: 129 раз
Контактная информация:

Анализ версии программы и на основании его результата - выполнение действия

#6

29 апр 2021, 09:45

Копался в скриптах с portwine-linux, там тоже предусмотрено обновление. Реализовано как отдельный текстовый файл с 1 строкой - номер версии.
то есть
1)скачал 1.deb, установил
скачал version.txt, положил рядом
2)Периодически скачиваешь новый version.txt
и сравниваешь содержимое с сохраненным на компе, не сходятся - обновляешь по п.1.

PS Все реализовано на обычном wget.

Аватара пользователя

Chocobo
Сообщения: 10015
Зарегистрирован: 27 авг 2016, 22:57
Решено: 215
Откуда: НН
Благодарил (а): 815 раз
Поблагодарили: 3010 раз
Контактная информация:

Анализ версии программы и на основании его результата - выполнение действия

#7

29 апр 2021, 10:44

ogankvik писал(а):
28 апр 2021, 22:55
1.deb
Если организовать средствами системы и без скриптоты - сам пакет оформить в apt-репозиторий, a на клиентах unattended-upgrades на него
Изображение
   
Изображение

no avatar

Автор темы
ogankvik
Сообщения: 178
Зарегистрирован: 22 ноя 2019, 19:12
Благодарил (а): 98 раз
Поблагодарили: 9 раз
Контактная информация:

Анализ версии программы и на основании его результата - выполнение действия

#8

29 апр 2021, 13:57

demonlibra писал(а):
29 апр 2021, 06:34

Код: Выделить всё

dpkg --skip-same-version -i "/home/user/.cache/1.deb"
Это изящное решение работает идеально :). Спасибо вам, и спасибо всем за участие!

Аватара пользователя

demonlibra
Сообщения: 844
Зарегистрирован: 12 авг 2017, 09:09
Решено: 13
Откуда: Ростов-на-Дону
Благодарил (а): 29 раз
Поблагодарили: 204 раза
Контактная информация:

Анализ версии программы и на основании его результата - выполнение действия

#9

29 апр 2021, 17:35

Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-21.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Закрыто

Вернуться в «Программирование, скриптинг, виртуализация»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей