автообновление ПО

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

автообновление ПО

Сообщение Attid » 01.03.2009 17:55:16

автообновлялку для своего ПО я писал еще давно под вендой.

там все было просто

1, качаешь новую версию.
2, переименовываешь paramstr(0) в paramstr(0).old
3, распаковываешь обновление
4, запускаешь его
5, сам выходишь.

если надо было сохронять какие-то настройки при выходе, тогда между 3 и 4 из ресурсов запускалась мелкий прог
которая дожидалась выхода первой программы и запускала новую.

в линуксе же процессы зависимы и все что я запускаю закрывается при выходе первого процесса.
при наличии ДЕ можно запустить от его имени, а при отсутствии ?

выходит варианта два.
1, использовать "запускатор" который при выходе процесса просто его перезапускает. и можно пропускать 4 шаг. (минусы, это прийдется везде переделывать структуру запуска)
2, запускать ПО по флагу при выходе из ПО. а первоначальный просто прятать. недостаток будет в том что процесс будет висеть в памяти,но даже при обновлении раз в неделю(у меня обычно реже) думаю что это не страшно и все компы перужаются хотябы раз в пару месяцев.

может еще какие будут предложения ?
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: автообновление ПО

Сообщение Иван Шихалев » 01.03.2009 20:09:05

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

Добавлено спустя 1 минуту 18 секунд:
Выделить то, что обновлять реально надо в подгружаемые/выгружаемые библиотеки.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: автообновление ПО

Сообщение Attid » 02.03.2009 12:58:11

пакеты мне не грозят, узкоспециализированое ПО + работает с БД.

то есть теоритически можно былобы собрать пакет прописать везде репозаритарии, и расписание на обновление.
но

1, обновлять всю систему не хочется, если сети с десятками компов с зоопарком машин и версий убунты

2, обновлять клиентов надо только после обновления БД. если обновятся раньше тупо не смогут работать.

3, пакетные менеджерыпри обновлении не будут перезапускать ПО

а про выгружаемые библиатеки, не стоит оно того.
во первых выделить что-то трудно
во вторых очень часто это касается ГУИ, а гуй и so в паскеле трудно совмещаются.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: автообновление ПО

Сообщение Иван Шихалев » 02.03.2009 13:32:04

Attid писал(а):а гуй и so в паскеле трудно совмещаются

Сказал бы уж «в Лазарусе»... Паскаль-то тут причем?
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: автообновление ПО

Сообщение v-t-l » 02.03.2009 14:50:23

так блокировок исполняемых файлов в линуксе нет или я не прав? - можно обновляться без выхода.
а перезапускаться можно например шеллом
Код: Выделить всё
fpexec('/bin/sh -с "'+ParamStr(0)+' &"'); // или что-то вроде того (точный синтаксис не помню)
v-t-l
энтузиаст
 
Сообщения: 734
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: автообновление ПО

Сообщение Attid » 03.03.2009 12:01:40

Иван Шихалев писал(а):Сказал бы уж «в Лазарусе»... Паскаль-то тут причем?

в МСЕ я тоже не рискну это делать =)


v-t-l писал(а):а перезапускаться можно например шеллом

получится цепочка
ПО-шелл-ПО и при выходе первого вся цепь закроется.

v-t-l писал(а):можно обновляться без выхода.

проблем обновится нет, есть проблема перезапуска.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: автообновление ПО

Сообщение v-t-l » 03.03.2009 13:12:07

Attid писал(а):получится цепочка
ПО-шелл-ПО и при выходе первого вся цепь закроется.

А амперсанд "&" в конце не помогает?

Добавлено спустя 8 часов 5 минут 15 секунд:
Странное поведение:
исполняемый файл проекта назвал restart1, рядом положил restart1.new (в тот же проект на форму налепил Label, скомпилил и переименовал бинарник).

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

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  FpExecv(paramstr(0)+'.new', nil);
end;


Запускаю restart1, нажимаю кнопку Button1 - форма от restart1 исчезает, вместо нее появляется форма из restart1.new, но в списке процессов виден только restart1, restart1.new не наблюдается. Для обновлений - замечательно подходит, но не исправят ли это в будущем?

Вру, что не виден: gnome-system-monitor его по-прежнему показывает как restart1, а ps вот как отрабатывает:

до нажатия на кнопку
Код: Выделить всё
root@vitalin:~# ps aux | grep -i restart1
vital     6174  0.5  1.1  21356 10832 ?        S    19:06   0:00 /home/vital/PROGR/lazarus/projects/restart1/restart1
root      6515  0.0  0.0   3016   844 pts/1    R+   19:07   0:00 grep -i restart1

после нажатия
Код: Выделить всё
root@vitalin:~# ps aux | grep -i restart1
vital     6174  1.0  1.2  21356 11024 ?        S    19:06   0:00 [restart1.new]
root      6662  0.0  0.0   3016   844 pts/1    R+   19:07   0:00 grep -i restart1


З.Ы.
Код: Выделить всё
root@vitalin:~# uname -a
Linux vitalin 2.6.24-21-generic #1 SMP Tue Oct 21 23:43:45 UTC 2008 i686 GNU/Linux
v-t-l
энтузиаст
 
Сообщения: 734
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: автообновление ПО

Сообщение Attid » 06.03.2009 18:30:41

v-t-l писал(а):А амперсанд "&" в конце не помогает?

нет

остальное попробую, пока руки не дошли.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E


Вернуться в Lazarus

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

Сейчас этот форум просматривают: Google [Bot] и гости: 19

Рейтинг@Mail.ru