Страница 1 из 1

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

Добавлено: 28 апр 2021, 22:55
ogankvik
Здравствуйте. Нужно периодически удаленно обновлять одну программу на многих ПК. Сейчас это сделано с помощью скрипта, помещенного в 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

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

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

и почему обновление в локальной сети через http? rsync c сжатием быстрее апнет файло в кэше

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

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

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

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

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

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

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

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

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

Добавлено: 29 апр 2021, 07:40
rogoznik
Сравнивать hash ранее скачанного пакета и того что на сервере. И если отличаются, значит обновлять

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

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

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

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

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

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

Добавлено: 29 апр 2021, 13:57
ogankvik
demonlibra писал(а):
29 апр 2021, 06:34

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

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

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

Добавлено: 29 апр 2021, 17:35
demonlibra