[make-initrd] Fwd: [#269003] TESTED make-initrd.git=2.14.1-alt1

Leonid Krivoshein klark.devel at gmail.com
Wed May 26 18:05:29 MSK 2021


Привет!


07.04.2021 15:57, Alexey Gladkov пишет:
> On Wed, Apr 07, 2021 at 04:51:15AM +0300, Leonid Krivoshein wrote:
>> 06.04.2021 11:28, Alexey Gladkov пишет:
>>> Это сразу наложит ограничение на использование запятой в аргументе. А она
>>> уже используется как разделитель например в опциях монтирования. Недавно я
>>> предлагал вариант передачи дополнительных параметров монтирования:
>>>
>>> pipeline=waitdev,mountfs \
>>> 	waitdev=/dev/sda \
>>> 	mountfs=/dev/sda:nodev,noexec,mode=620
>>>
>>> Я на нём не настаиваю, но как будет выглядеть тоже самое в твоём
>>> синтаксисе ?
>> Вроде как есть два варианта реализации, я склоняюсь ко второму:
>>
>> 1. Использовать register_pipe с разделителем "|" вместо register_string для
>> pipeline=... или парсить токены не по запятым, а по "|", тогда проблемы с
>> запятыми и двоеточиями отпадают:
>>
>> pipeline=waitdev=/dev/sda|mountfs=/dev/sda:nodev,noexec,mode=620
>>
>>
>> 2. Сохранить полностью нынешний синтаксис, добавив в него возможность в
>> простых случаях (где в значении отсутствуют запятые и двоеточия)
>> использовать символ "=" для отделения имени шага от его параметров,
>> разделяемых символом ":" или ";":
>>
>> pipeline=waitdev=/dev/sda,mountfs mountfs=/dev/sda:nodev,noexec,mode=620
>>
>>
>> Первый вариант решает сразу много проблем, но создаёт проблему совместимости
>> (которой, впрочем, можно пренебречь), а также создаёт не всегда интуитивно
>> соответствующее восприятие происходящего, поскольку запятые отражают
>> последовательность запускаемых шагов (их перечисление), тогда как "|"
>> показывает кто-кому передаёт сделанное, а это, как мы выяснили, не всегда
>> будет соответствовать написанному.
>>
>> Второй вариант кажется хорошим компромиссом для экономии байтов в
>> /proc/cmdline и не ломает совместимость. В приведённом выше примере экономия
>> небольшая, но на больших реальных цепочках она будет ощутимей, например:
>>
>> pipeline=waitdev=/dev/sda,mountfs=:/root,ram=/root/rescue,mountfs=:,live=rw,rootfs
>> vs
>> pipeline=waitdev,mountfs,ram,mountfs,live,rootfs waitdev=/dev/sda
>> mountfs=:/root ram=/root/rescue mountfs=: live=rw
> А ещё можно не заниматься метапрограммированием и для сложных случаев
> генерировать файлик с массивом и параметрами. Или же совсем иной синтаксис
> придумать и прицеплять его к initrd, оставив cmdline для переопределения
> того, что сохранено внутри.
>
> Кстати, так сейчас работает root=. При создании initrd текущие параметры
> прописываются в внутренний /etc/fstab, а параметры root= из cmdline просто
> переопределяет эту запись.

Учёл практически все твои замечания. Всё ещё делаю обещанное, однако 
дело уже близится к концу. В коде ещё остаются захардкореными некоторые 
пути и имена, это потом уберётся в альт-специфичный конфиг.

#271420 -- предыдущая версия "всё в одном", около 3 тыс. строк. По ней 
легче понять задумку. Тут предварительно отлажена локальная загрузка. 
altboot сделан шагом pipeline, который выполняет роль вложенной pipeline.

#272587 -- текущая версия разбита на десяток подпакетов, уже более 4200 
строк, устранены первичные замечания, но понять проще предыдущий 
вариант. Тут тоже работает пока только локальная загрузка, но уже с 
плимутом, liverw надо переделывать, ещё не проверялись: nfs, cifs и 
overlayroot. Однако оценить задумку можно уже сейчас. Документации пока 
тоже нет. Здесь отказался от вложенной pipeline, сделал форк в bootchain 
и значительное расширение его функционала, обратная совместимость с 
pipeline сохранена.


Хотел посоветоваться насчёт setsid, слишком неожиданно для меня его 
поведение в теле скрипта, запущенного через openvt. Он ведёт себя так, 
будто бы его нет, приходится использовать амперсанд (&). При этом, когда 
я делаю то же самое руками в обычном терминале, setsid ведёт себя 
ожидаемым образом. Т.е. одна и та же команда работает по-разному:

setsid sleep 10

работает как:

sleep 10

при открытии через openvt, а в консоли работает как:

sleep 10 &

речь об этом фрагменте: 
bootchain-interactive/data/bin/interactive-sh-functions

...
setsid /bin/bash -c "/bin/activate-interactive-vt $delay" &
message "TTY${_IM_VT_number} will be activated after $((1 + delay)) seconds"
...

(в нынешнем варианте задумка работает, но я считаю это неправильно).


-- 
Best regards,
Leonid Krivoshein.



More information about the Make-initrd mailing list