[devel] q: installer: Killing all remaining processes (forever)

Dmitry V. Levin =?iso-8859-1?q?ldv_=CE=C1_altlinux=2Eorg?=
Ср Апр 16 02:23:50 MSD 2008


On Wed, Apr 16, 2008 at 01:39:20AM +0400, Evgeny Sinelnikov wrote:
> 2008/4/16 Dmitry V. Levin <ldv на altlinux.org>:
> > On Tue, Apr 15, 2008 at 09:42:02PM +0400, Evgeny Sinelnikov wrote:
> >  > 2008/4/15 Dmitry V. Levin <ldv на altlinux.org>:
> >  [...]
> >
> > > >  У меня был один простой аргумент: ECHILD не происходит.
> >  > >  Я сделал коммит, который ждёт ECHILD:
> >  > >  http://git.altlinux.org/people/ldv/packages/?p=installer.git;a=commitdiff;h=0.4-alt12-1-g713c354
> >  > >  На практике (в 0.4-alt13) это приводит к таймауту после 20 секунд ожидания.
> >  >
> >  > Кроме того на практике (в 0.4-alt13) loop_change_fd() на 2.6.24 всё
> >  > ещё виснет... Я полагаю, что это влияние оптимизации кода ядра....
> >  > Процесс не весь загружен в память, а после переброски файлового
> >  > дескриптора на файл с нулями грузить его уже неоткуда...
> >
> >  Это вполне вероятно, поэтому reexec, видимо, нужно вернуть.
> 
> Проверьте, тот вариант, который у меня сейчас реализва в alt13.eter1.
> Его можно назвать тем, что вы имели в виду под возвращеннием reexec?
> Там, при старте, делается попытка скопировать /sbin/init в /mnt/init и
> стартануть уже с него. Если попытка удаётся, то повторное монтирование
> уже не делается. Кроме того, переменная окружения NEED_CHANGE_FD
> устанавливатеся равной 0, иначе 1. Также пробрасываются ещё две
> переменных окружения IMAGE_LOOP_DEV и IMAGE_TMP_FILE.
> 
> Далее если переменная NEED_CHANGE_FD выставлена в 1 работает более
> долгий вариант с переброской всего образа в память перед отключением.
> При этом скрипт 00-remove-image.sh проверяет наличие симлинки
> /mnt/altinst.img, указывающей на не удалённый altinst на винте. Этот
> скрипт переносит образ в память, удаляя его на винте... В этом случае
> loop_change_fd() (на 2.6.24) работает.
> 
> Если же NEED_CHANGE_FD выствлен в 0, то 00-remove-image.sh ничего не
> делает, поскольку вместо создания симлинки на образ, как и раньше,
> сразу же после переноса на винт, образ satge2 удаляется. В этом случае
> логика с loop_change_fd() (на 2.6.24 в смысле) на пустой файл
> срабатывает, поскольку сам init уже перенесён в память...

Я не понял, зачем было так сильно усложнять?
Если перед loop_change_fd просто скопировать содержимое /proc/self/exe
(а это статический ELF) в файл на tmpfs и запустить?


-- 
ldv
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 197 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20080416/10662b92/attachment-0002.bin>


Подробная информация о списке рассылки Devel