[make-initrd] Release make-initrd 2.14.0

Leonid Krivoshein klark.devel at gmail.com
Wed Mar 31 18:54:07 MSK 2021



31.03.2021 18:37, Антон Мидюков пишет:
> 31.03.2021 22:22, Alexey Gladkov пишет:
>> On Wed, Mar 31, 2021 at 09:50:11PM +0700, Антон Мидюков wrote:
>>> 31.03.2021 21:40, Alexey Gladkov пишет:
>>>> On Wed, Mar 31, 2021 at 04:55:18PM +0300, Leonid Krivoshein wrote:
>>>>> Просто давали команду make-initrd, предварительно скармливая разными
>>>>> способами список модулей через /etc/initrd.mk. Перепробованы были разные
>>>>> директивы -- PUT_DIRS/PUT_FILES с указанием полных путей, директивы
>>>>> MODULES_LOAD и MODULES_PRELOAD с указанием только названий модулей. Во всех
>>>>> случаях модули попадают, но в основном не туда, куда надо. См. во вложении
>>>>> пример вывода initrd-ls и один из вариантов скриптов, которым это делается.
>>>> PUT_DIRS с самого момента создания make-initrd копирует содержимое
>>>> каталога без самого каталога. Например так копируется:
>>>>
>>>> PUT_DIRS += /lib/initrd
>>>>
>>> Вот, именно в этом и проблема. Нужно найти все модули в целевых каталогах и добавить в список MODULES_LOAD.
>>> В MODULES_LOAD каталоги добавлять же нельзя?
>> Это список имён модулей. Он же потом будет использован modprobe.
>> Было бы отлично если бы я знал какую задачу вы хотите решить.
>>
> Решается задача упаковки при помощи make-initrd модулей, которые даны списком. В списке есть как каталоги, так и название модулей, вида <имя_модуля.ko>
> Список был изначально предназначен для mkmodpack.
> Конечная задача загрузка iso образа с initrd.img с использованием фичи pipeline вместо propagator.
> Если модули просто добавить в initrd то они не подгружаются. waitdev не находит устройство (файловую систему isofs) по UUID.
> Поэтому весь список модулей загружаем.
>

Другой разговор. Теперь всё получилось!


-- 
Best regards,
Leonid Krivoshein.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: 511.lst.gz
Type: application/gzip
Size: 16759 bytes
Desc: not available
URL: <http://lists.altlinux.org/pipermail/make-initrd/attachments/20210331/2d43cc55/attachment-0001.bin>
-------------- next part --------------
#!/bin/sh -efux
# NB: /etc/initrd.mk carefully prepared by earlier scripts

fatal() { echo "** error: $@" >&1; exit 1; }

kver=
for KFLAVOUR in $GLOBAL_KFLAVOURS; do
	kver+=" $(rpm -qa 'kernel-image*' \
		--qf '%{version}-%{name}-%{release}\n' \
	| grep "$KFLAVOUR" \
	| sed 's/kernel-image-//')"
done

[ -n "$kver" ] ||
	fatal "no kernel version identified"

INITRD_FEATURES+="add-modules compress cleanup rdshell pipeline"

INITRD_MODULES="$(grep -v ^# /.in/modules |
	grep -v / |
	grep .ko |
	sort -u)"

INITRD_PUT_DIRS="$(grep -v ^# /.in/modules |
	grep -v .ko |
	sort -u)"

initrd_modules_find()
{
	if [ -n "$INITRD_MODULES" ]; then
		echo "MODULES_LOAD += \\"
		for INITRD_MODULE in $INITRD_MODULES; do
			MODNAME="$(find /lib/modules/$KVER -type f -name $INITRD_MODULE)"
			[ -z "$MODNAME" ] ||
				echo "  $(basename "$MODNAME" |sed -E 's/\.ko(\.gz)?$//') \\"
		done
		echo "  #"
	fi
	if [ -n "$INITRD_PUT_DIRS" ]; then
		echo "MODULES_LOAD += \\"
		for INITRD_PUT_DIR in $INITRD_PUT_DIRS; do
			[ -d "/lib/modules/$KVER/$INITRD_PUT_DIR" ] ||
				continue
			MODLIST="$(find /lib/modules/$KVER/$INITRD_PUT_DIR -type f)"
			[ -n "$MODLIST" ] ||
				continue
			for MODNAME in $MODLIST; do
				echo "  $(basename "$MODNAME" |sed -E 's/\.ko(\.gz)?$//') \\"
			done
		done
		echo "  #"
	fi
}

# FIXME: large storage systems can get that tmpfs filled up
# with debug data as of make-initrd 2.2.12
rm -vf  /usr/share/make-initrd/data/etc/udev/rules.d/00-debug.rules \
	/usr/share/make-initrd/data/lib/uevent/filters/debug

MAKE_INITRD_OPTS="--no-checks AUTODETECT="
MAKE_INITRD_VER="`make-initrd -V \
	| sed -rn 's/^make-initrd version ([0-9.]+)/\1/p'`"

[ -z "$GLOBAL_VERBOSE" ] ||
	MAKE_INITRD_OPTS="$MAKE_INITRD_OPTS -v"

cd /boot

for KVER in $kver; do
	touch /etc/initrd.mk
	cp -Lvf /etc/initrd.mk /etc/initrd-mk.bak
	initrd_modules_find >> /etc/initrd.mk
	make-initrd $MAKE_INITRD_OPTS -k "$KVER" \
		FEATURES+="$INITRD_FEATURES" ||
		fatal "make-initrd failed"
	mv -vf /etc/initrd-mk.bak /etc/initrd.mk
done

case `arch` in
e2k)
	kname=image;;
*)
	kname=vmlinuz;;
esac

rm -f $kname initrd.img
ln -s $kname-$KVER $kname
ln -s initrd-$KVER.img initrd.img

:


More information about the Make-initrd mailing list