[make-initrd] Fwd: [#269003] TESTED make-initrd.git=2.14.1-alt1
Leonid Krivoshein
klark.devel at gmail.com
Wed Apr 7 21:29:10 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 просто
> переопределяет эту запись.
Тут я был неправ. Второй вариант не получится так реализовать из-за
register_array и индексов переменных.
--
Best regards,
Leonid Krivoshein.
More information about the Make-initrd
mailing list