LINUX.ORG.RU

Arm chroot. Сгенерировать образ initramfs.

 , ,


0

1

Приветствую. На хосте arch, установлены пакеты qemu-user-static-binfmt qemu-user-static. Надо зачрутиться на флешку с Debian arm, и через mkinitcpio, сгенерировать новый образ.

$ls /proc/sys/fs/binfmt_misc | grep aarch64
qemu-aarch64
qemu-aarch64_be

#Примонтированы все разделы гостя в /mnt

$cp /usr/bin/qemu-aarch64-static /mnt/usr/bin/
$cp /etc/resolv.conf /mnt/etc/resolv.conf
$sudo chroot . bin/bash

Гость:
root:/# mkinitramfs -o /boot/initramfs.gz
bash: mkinitramfs: command not found

root:/# /sbin/mkinitramfs -o /boot/initramfs.gz
grep: /boot/config-6.11.7-arch1-1: No such file or directory
W: zstd compression (CONFIG_RD_ZSTD) not supported by kernel, using gzip
grep: /boot/config-6.11.7-arch1-1: No such file or directory
E: gzip compression (CONFIG_RD_GZIP) not supported by kernel

root:/# /sbin/update-initramfs -c -k $(uname -r)
update-initramfs: Generating /boot/initrd.img-6.11.7-arch1-1
/sbin/update-initramfs: 142: mkinitramfs: not found
update-initramfs: failed for /boot/initrd.img-6.11.7-arch1-1 with 127.
root@fehhner:/# exit
Ну ок, $PATH вручную надо в чруте походу прописывать. Не проблема, хоть и неудобно.
Но дело в том, что он пытается сгенерировать образ под ядро моего хоста.
То же самое через proot:
sudo proot -R . -q qemu-aarch64-static

# sudo mkinitramfs -o /tmp/initramfs.gz
grep: /boot/config-6.11.7-arch1-1: No such file or directory
W: zstd compression (CONFIG_RD_ZSTD) not supported by kernel, using gzip
grep: /boot/config-6.11.7-arch1-1: No such file or directory
E: gzip compression (CONFIG_RD_GZIP) not supported by kernel

# uname -a
Linux fehhner 6.11.7-arch1-1 #1 SMP PREEMPT_DYNAMIC Fri, 08 Nov 2024 17:57:56 +0000 aarch64 GNU/Linux
uname в чруте, выдает инфу ядра хоста, однако в конце приписывает, что это арм 64бит.
mkinitramfs, пытается генерировать образ с ядром хоста, которой версии в госте, конечно же, нет.
Как нормально выполнить такую, казалось бы, тривиальную задачу?

Перемещено hobbit из general

★★★★★

Надо посмотреть, нет ли там каких-то ключей для указания версии ядра. В других подобных инструментах обычно есть.

anonymous
()

А это вообще возможно?
Надо опции команды посмотреть. Вот есть параметр --kernel kernelversion

Use kernelversion, instead of the current running kernel. This may be a path to a kernel image (only supported for x86-based architectures), a specific kernel version or the special keyword none. In the latter case, no kernel modules are added to the image
PeleWin
()
Ответ на: комментарий от PeleWin

А это вообще возможно?

Хм, вроде вышло. Позже проверю работоспособность, пока помечу решенным

# ls /usr/lib/modules
6.6.60-v8+
# rm /tmp/initramfs.gz
# cp /boot/config.txt /boot/config-6.6.60\-v8\+
# mkinitramfs -o /tmp/initramfs.gz 6.6.60\-v8\+
# ls /tmp
initramfs.gz ...

fehhner ★★★★★
() автор топика
Ответ на: комментарий от kirill_rrr

А /boot приментирован? На малине он в фат32 отдельным разделом. Возможно скрипт не предполагает что может не быть.

Да, все примонтировано вручную. Проверил config.txt, он почему-то пуст

fehhner ★★★★★
() автор топика
Ответ на: комментарий от mky

А зачем вы перед ″-″ и ″+″ ставите бэкслеш?

Перед «+» - по запарке, переключился с другой задачи. А перед "-" случайно, но это ни на что не повлияло, и я просто копировал :)

Ну дайте ему опцию ″-v″.

На свежую голову все сообразил.

E: gzip compression (CONFIG_RD_GZIP) not supported by kernel

Значит конфиг от ядра не подтянулся, поэтому фатальная ошибка - не найден никакой способ сжатия. В итоге собралось нормально:

# zcat /proc/config.gz > /boot/config-6.6.60-v8+
# mkinitramfs -v -o /tmp/initramfs.gz 6.6.60-v8+
...
...
Building cpio /tmp/initramfs.gz initramfs

fehhner ★★★★★
() автор топика
Последнее исправление: fehhner (всего исправлений: 1)
Ответ на: комментарий от fehhner

Проверил config.txt, он почему-то пуст

Это не конфиг ядра, это конфиг малиновой фирмвари.

zcat /proc/config.gz > /boot/config-6.6.60-v8+

Это ты сдул конфиг хостовой системы. Конфиг малинового ядра лежит где-то здесь. У тебя самосборное ядро или из какого-то репозитория?

undef ★★★
()