[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