From: Alexey Gladkov <gladkov.alexey@gmail.com>
To: make-initrd@lists.altlinux.org
Subject: Re: [make-initrd] Fwd: [#269003] TESTED make-initrd.git=2.14.1-alt1
Date: Tue, 6 Apr 2021 10:28:42 +0200
Message-ID: <20210406082842.pg3rejmmnxuxvddf@example.org> (raw)
In-Reply-To: <b5a8fcf1-6cde-ff72-ba8b-6a5fcf8becbb@gmail.com>
On Mon, Apr 05, 2021 at 11:33:14PM +0300, Leonid Krivoshein wrote:
> Алексей, привет!
>
>
> Снова я, и снова про pipelinie. :-)
>
> Очень черновая сборка для обсуждения готова. Она не для того, чтобы её
> апстримить. Образы (любые -- live, altinst, rescue) с этим уже можно
> собирать. Несколько дней бодались с одной проблемой и наконец удалось её
> победить. Но сейчас немного о другом -- мысли и пожелания вокруг pipeline...
>
> 1. Фича pipeline делалась на замену пропагатора видимо без учёта
> особенностей его работы. Разница оказалась ощутимой и для бесшовного
> перехода из stage1 в stage2 без необходимости править нынешние профили
> дистрибутивов, приходится идти на компромиссы и ухищрения. Менять stage2 под
> pipeline вообще не вариант -- мы даже не знаем, где, когда и что выстрелит,
> и как это тестировать.
Я никогда не планировал pipeline как прозрачную замену пропагатору. Я даже
не пытался наследовать его волшебные параметры поскольку это чёрная магия.
Я хорошо понимаю твои опасения и боль, но если ты не хочешь регрессий, то
продолжай использовать propagator. Иначе изменения в поведении и
параметрах будут.
> 2. В интерфейс pipeline не выведена уже реализованная в make-initrd
> возможность работы с /proc/cmdline. Имею ввиду общие параметры, такие как
> lowmem, live или rescue. У каждой фичи -- свои аргументы. Пока не удалось
> побороть эту проблему, мой "config" оказался нерабочим. Может, нужно просто
> инклюдить какой-то файл?
Я не понял вопроса. Cтрока /proc/cmdline парсится и это окружение
сохраняется в /.initrd/initenv .
> 3. /dev/pipeline/* -- длинные пути в mtab, не только монтируемые каталоги,
> но и устройства. Даже если это имеет право на жизнь в stage1, при переходе в
> stage2 оно должно умереть, как и не секьюрно смонтированный /dev/pipeline,
> куда можно загружать даже ISO'шки. :-) Вместо передачи dev и каталогов можно
> передавать симлинки на них (в дополнение), да и сам devname вместо dev
> передавать куда правильней, по-моему.
Я не понял этого пункта. Все компоненты цепочки должны быть доступны если
только не копировать их в ram-диск. Сделать недоступность можно только
если разместить все компоненты вне mntroot и /dev, который переносится в
mntroot, но в этом случае придётся не удалять initramfs.
О какой секьюрности речь если ты передаёшь управление в mntroot руту ?
> 4. Сделать замену пропагатора одним большим монолитным куском в рамках
> pipeline нельзя. Как сейчас -- гармоничнее и можно чередовать куски из
> "пропагаторного стека" с нативными. Но есть проблемы [1] и [2]. Пропагатор
> монтирует всё внахлёст в /image, /root и /dev/ramN, при это он ещё
> отмонтирует и много чего другого делает, что не вписывается в парадигму
> pipeline.
Порядок этого "монтирования внахлёст" жёстко определён. Затруднительно
даже поменять порядок внутри уже реализованного. В такой парадигме только
такой же монолит будет работать также. Pipeline же спроектирована так,
чтобы в рамках одного синтаксиса можно было описывать разный порядок
стадий и иметь параметры у этих стадий.
Что именно не вписывается в парадигму pipeline ?
Кстати, совершенно не обязательно зацикливаться на использовании
/proc/cmdline как источника конфигурации. Вполне возможно написать
вандерфичу, которая "включит" pipeline. Также можно написать специфичные
шаги для pipeline, которые будут читать не один параметр из cmdline, а
собственный конфиг. Это всё зависит от решаемой задачи.
> 5. Исходная идея pipeline -- организовать цепочку с входом и выходом у
> каждого элемента. А как быть в ситуациях, когда ты заказал дождаться 4х
> устройств?
pipeline=waitdev,waitdev,... \
waitdev=/dev/cdrom \
waitdev=/dev/sda
Это обсуждалось и исправлялось [1]. У любого шага есть начало и конец, но
не обязательно, что на выходе должно быть что-то, что будет монтироваться.
Это может быть шаг с диалоговым окном для корректировки поведения
следующих шагов.
Негибкость, которая тут есть это невозможность ветвления т.е.
невозможность определить другие последующие шаги из предыдущего. Я думал
об этом и у меня есть идеи как такое можно реализовать.
[1] https://github.com/osboot/make-initrd/issues/2
> Выход ведь будет только у одного. Если именовать всю pipeline,
> сделать таких цепочек несколько и в каждой сделать свой waitpipe, можно
> строить более сложную логику загрузки их разных устройств и типов
> источников, синхронизируя события в других цепочках.
Я пока не вижу нужды в таком усложнении как несколько pipeline. Технически
такое возможно, но зачем.
> 6. Я бы облегчил возможность определение одной pipeline
> с: pipeline=waitdev,mountfs,mountfs,rootfs waitdev=/dev/name mounfs=ISO
> mountfs=squash
> до: pipeline=waitdev=/dev/name,mountfs=ISO,mountfs=squash,rootfs
> т.е.: pipeline=step1[=arg1[:arg2...]][,step2[=arg1[:arg2...]]...] и
> регистрировал бы их автоматически.
Это сразу наложит ограничение на использование запятой в аргументе. А она
уже используется как разделитель например в опциях монтирования. Недавно я
предлагал вариант передачи дополнительных параметров монтирования:
pipeline=waitdev,mountfs \
waitdev=/dev/sda \
mountfs=/dev/sda:nodev,noexec,mode=620
Я на нём не настаиваю, но как будет выглядеть тоже самое в твоём
синтаксисе ?
> 7. Интерактивный ввод-вывод на этапе работы pipelined невозможен, разве что
> перенаправить ограниченный код в /dev/console. У пропагатора по ходу это
> было востребовано, что логично. Ну, хотя бы индикация загрузки больших
> образов, запрос режимов и источников загрузки. Хотелось бы во время работы
> шага прервать "фоновое" выполнение и перейти в интерактив, потом вернуться
> обратно.
Использование /dev/console является штатным механизмом. Им пользуются
скрипты, которым нужен интерактив с пользователем (например luks).
> В целом, хотелось услышать твоё мнение, чего с этим делать дальше? Строить
> ли рядышком с готовыми кусками шаги пропагаторного стека, как сейчас в
> черновом варианте, делать замену пропагатора отдельной фичей make-initrd или
> дождёшься (разрешишь) когда я перелопачу pipeline под новый лад и чуть
> больше адаптирую под пропагатор?
Я вполне допускаю, что pipeline вам не подойдёт для переписывания
propagator. Я об этом писал с самого начала. Если она не подходит, то вы
можете написать свою фичу с блэкджэком и обратной совместимостью. Правда в
последнем случае, кажется, она уже есть - make-initrd-propagator.
--
Rgrds, legion
next prev parent reply other threads:[~2021-04-06 8:28 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-05 20:33 ` Leonid Krivoshein
2021-04-05 22:51 ` Leonid Krivoshein
2021-04-06 8:44 ` Alexey Gladkov
2021-04-06 17:38 ` Leonid Krivoshein
2021-04-07 13:13 ` Alexey Gladkov
2021-04-06 8:28 ` Alexey Gladkov [this message]
2021-04-06 16:38 ` Leonid Krivoshein
2021-04-06 19:05 ` Alexey Gladkov
2021-04-06 19:30 ` Alexey Gladkov
2021-04-06 23:13 ` Leonid Krivoshein
2021-04-07 12:28 ` Alexey Gladkov
2021-04-06 23:00 ` Leonid Krivoshein
2021-04-07 12:11 ` Alexey Gladkov
2021-04-06 23:59 ` Leonid Krivoshein
2021-04-07 1:51 ` Leonid Krivoshein
2021-04-07 12:57 ` Alexey Gladkov
2021-04-07 18:29 ` Leonid Krivoshein
2021-05-26 15:05 ` Leonid Krivoshein
2021-05-26 18:12 ` Alexey Gladkov
2021-05-26 19:25 ` Leonid Krivoshein
2021-05-27 8:37 ` Alexey Gladkov
2021-05-27 12:29 ` Leonid Krivoshein
2021-05-27 13:53 ` Alexey Gladkov
2021-05-27 15:10 ` Leonid Krivoshein
2021-05-27 17:04 ` Alexey Gladkov
2021-05-27 17:11 ` Leonid Krivoshein
2021-05-30 20:34 ` Leonid Krivoshein
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210406082842.pg3rejmmnxuxvddf@example.org \
--to=gladkov.alexey@gmail.com \
--cc=make-initrd@lists.altlinux.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Make-initrd development discussion
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/make-initrd/0 make-initrd/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 make-initrd make-initrd/ http://lore.altlinux.org/make-initrd \
make-initrd@lists.altlinux.org make-initrd@lists.altlinux.ru make-initrd@lists.altlinux.com
public-inbox-index make-initrd
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.make-initrd
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git