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