Simple self-upgrade
Добавлено: 13 сен 2010, 15:38
Интересная задача: реализовать отказоустойчивый самоапгрейд.
Дано:
1) Linux (SuSE SLED 10/11)
2) процесс работает под суперпользователем, предоставляет сервис обычным пользователям
Требуется:
1) без вмешательства админа иметь возможность обновлять процесс
2) проваленный апгрейд не должен класть серсис
3) подлог левого процесса невозможен
Пока придумалось так: сервис периодически проверяет некую папку, при наличии в ней нового исполняемого файла проверяет его неким образом, потом стартует и смотрит на него, не падает ли, ждет от него установления коннекта. Если коннект есть и обмен заканчивается нормально - старый процесс выходит, иначе - убивает новый процесс и докладывает о провале апгрейда.
Много открытых вопросов с безопасностью, но, думаю, все можно решить. Хотя и хочется все сделать попроще. Как можно проще. Проще - меньше проблем :-)
Покопал инет на предмет safe self-upgrade, находятся только статьи типа "как стать лучше", про личностные качества, по программированию - ноль.
Может быть кто-то знает что-нибудь по теме?
Дано:
1) Linux (SuSE SLED 10/11)
2) процесс работает под суперпользователем, предоставляет сервис обычным пользователям
Требуется:
1) без вмешательства админа иметь возможность обновлять процесс
2) проваленный апгрейд не должен класть серсис
3) подлог левого процесса невозможен
Пока придумалось так: сервис периодически проверяет некую папку, при наличии в ней нового исполняемого файла проверяет его неким образом, потом стартует и смотрит на него, не падает ли, ждет от него установления коннекта. Если коннект есть и обмен заканчивается нормально - старый процесс выходит, иначе - убивает новый процесс и докладывает о провале апгрейда.
Много открытых вопросов с безопасностью, но, думаю, все можно решить. Хотя и хочется все сделать попроще. Как можно проще. Проще - меньше проблем :-)
Покопал инет на предмет safe self-upgrade, находятся только статьи типа "как стать лучше", про личностные качества, по программированию - ноль.
Может быть кто-то знает что-нибудь по теме?