From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Wed, 7 Apr 2021 14:57:39 +0200 From: Alexey Gladkov To: make-initrd@lists.altlinux.org Message-ID: <20210407125739.jeenqyplba3v6itn@example.org> References: <20210406082842.pg3rejmmnxuxvddf@example.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Subject: Re: [make-initrd] Fwd: [#269003] TESTED make-initrd.git=2.14.1-alt1 X-BeenThere: make-initrd@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: make-initrd@lists.altlinux.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 07 Apr 2021 12:57:41 -0000 Archived-At: List-Archive: 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 просто переопределяет эту запись. -- Rgrds, legion