[devel] q: installer: Killing all remaining processes (forever)
Evgeny Sinelnikov
=?iso-8859-1?q?sin_=CE=C1_altlinux=2Eru?=
Пт Апр 11 17:18:23 MSD 2008
Здравствуйте,
2008/4/8 Stanislav Ievlev <inger на altlinux.org>:
> Когда будете делать новые патчи - оповестите откуда брать.
>
> Текущая версия по идее уже не выдаёт kernel panic, но неотмонтированный
> /mnt/destination/dev всё ещё остаётся .
>
>
Проблема в том, что не корректно просто так добавлять sleep (1), нужно
ожидать сигнала ECHILD. После этого проблемы с /mnt/destination/dev
исчезают сами собой... Это раз.
Кроме того, я не знаю по какой причине, но у меня на всех тестах
loop_change_fd() на файл с нулями, даже после корректного ожидания
завершения всех процессов, виснет... Причём виснет как на реальных
машинах, так и на виртуальных... Вероятно разница в том, что у нас
разная пакетная база и ещё у меня ядро 2.6.24... Я уже приводил ряд
вариантов исправления этого... Самый оптимальный из них, на мой
взгляд, состоит
в том, чтобы удалять altinst позже, причём перед этим перенося его на
tmpfs, и делая loop_change_fd() на нормальный файл. Это два.
Ряд исправлений к текущему варианту можно найти здесь:
http://git.etersoft.ru/people/sin/packages/installer.git/
В исправления вошли - корректное ожидание сигнала ECHILD после
killall(), корректная отработка postinstall и initinstall при
неудачном завершении отдельных скриптов, создание пустого /etc/mtab
для корректной отработки скриптов в postinstall, корректная отработка
зависания loop_change_fd() путём переноса оригинального образа в
память по окончанию установки.
--
Sin (Sinelnikov Evgeny)
Подробная информация о списке рассылки Devel