LINUX.ORG.RU

Как правильно пропатчить initramfs?

 , ,


1

2

Пытаюсь сделать загрузку drweb по сети с помощью ipxe. Такой коммандой грузится только до Busybox и дальше не загружается:

:drweb dhcp set server_ip 192.168.1.76 set nfs_path /images/drweb kernel nfs://192.168.1.76/images/drweb/casper/vmlinuz || read void initrd nfs://192.168.1.76/images/drweb/casper/initrd.lz || read void imgargs vmlinuz initrd=initrd.lz root=/dev/nfs boot=casper netboot=nfs nfsroot=192.168.1.76:/images/drweb ip=dhcp language=ru locale=ru_RU.UTF-8 quiet splash noapic -- boot

Нашел на сайте drweb скрипт, который патчит initframfs для загрузки модулей, но у меня не получается его пропатчить. Естественно initrd.lz был распакован.

Патчим initramfs:

sed -i '/# Scan local devices for the image/,/done/ { /#/ i\ # Configuring network and fetching squashfs\ ipconfig eth0\ livefs_root=/cdrom\ mkdir -p ${livefs_root}/casper\ for x in drweb-10bin drweb-25key drweb-50bases filesystem\ do netboot=nfs netroot=ip:/images/drweb/$x.squashfs-P ${livefs_root}/casper\ done d }' scripts/casper

С помощью patch -normal пытается пропатчить, но выдает ошибку на линии 37 и предлагает вручную пропатчить файл, я не понимаю какой файл ему нужно подсунуть.

Собственно вопрос: Как правильно пропатчить initramfs?

p.s. Я в linux не очень силен, но если подскажите смогу разобраться.



Последнее исправление: filisdiez (всего исправлений: 1)

Вам нужно распаковать initramfs, удостовериться, что в директории с модулями ядра (<initramfs>/lib/modules/версия_ядра) есть модули для вашей сетевой карты.

Если модулей нет, то их нужно скопировать из загруженной LiveCD системы DrWeb в теже директории, что они лежат и сейчас в директории модулей. И так же скопировать файл modules.dep из директории модулей.

И возможно, нужно прописать загрузку модулей в соответствующий файл со списком загружаемых модулей, но возможно ядро само загрузит модули, как только «увидит», что они подходят для оборудования.

После чего всего навсего нужно запаковать initramfs.

infomeh ★★
()
Ответ на: комментарий от Deleted

Просто, когда понимаешь что делаешь. Нужно определить тип initramfs, это архив cpio или образ файловой системы, сжатый или нет, каким архиватором.

В помощь утилита file.

Далее распаковать и/или смонтировать и поправить файлы.

Запаковать обратно.

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

Просто

Я тоже так думал, пока не столкнулся с указанным трэдом (см. выше). Если почитать повнимательней, люди не один час «бились» над этим самым «просто».

Deleted
()
Ответ на: комментарий от infomeh

Повторюсь

И я повторюсь. Простая распаковка initramfs не всегда работает (см. указанный трэд).

Deleted
()
Ответ на: комментарий от Deleted

Мне не понятен вообще предмет спора.

Если тебе хочется спорить, то спорт сколько хочешь.

Я ничего не буду тебе доказывать я уже высказал свою мысль.

Если у ТС будут вопросы по распаковке, то буду рад помочь.

Тебе спасибо за ссылку на тему, она будет полезна ТС.

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

но выдает ошибку (ТС)

Мне не понятен вообще предмет спора.

Вот это меня смущает. Наводит на размышления.

Deleted
()
Ответ на: комментарий от infomeh

распаковывал этой коммандой:

zma -dc -S .lz initrd.lz | cpio -id && rm initrd.lz

а вот запаковываться с помощью этой комманды не хочет:

find -mindepth 1 | grep -ve «vmlinuz\|initrd.lz\|\.squashfs» | cpio --quiet --dereference -o -H newc | lzma -9 > initrd.lz

выдает ошибки что таких каталогов не найдено:

cpio: ./usr/share/plymouth/themes/text.plymouth: не удаётся stat: Нет такого файла или каталога cpio: ./etc/ld.so.conf.d/i386-linux-gnu_GL.conf: не удаётся stat: Нет такого файла или каталога cpio: ./etc/ld.so.conf.d/i386-linux-gnu_EGL.conf: не удаётся stat: Нет такого файла или каталога

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

Распаковка:

mkdir /tmp/initrd
cd /tmp/initd
xz -F lzma -d -c ../initrd.lz | cpio -i -d -H newc

Запаковка:

cd /tmp/initrd
find ./ | cpio -o -H newc | xz -F lzma -c > ../initrd2.lz

Исходный файл initrd.lz в данном случае должен находиться в /tmp/initrd.lz, а новый будет в /tmp/initrd2.lz

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

Возьмите SystemRescueCD, который на Gentoo основан ещё, там initrd - это cpio архив.

SystemRescueCD - это кончено хорошая штука, но то, что его разработчики - рукожопы, было известно всегда.

Deleted
()
Ответ на: комментарий от Deleted

Ну я надеюсь ты не скажешь, что Debian - рукожопы?

file /boot/initrd.img-4.9.0-8-amd64
/boot/initrd.img-4.9.0-8-amd64: gzip compressed data, last modified: Tue Jan 15 21:44:53 2019, from Unix
cp /boot/initrd.img-4.9.0-8-amd64 /tmp/
cd /tmp
mv initrd.img-4.9.0-8-amd64 initrd.img-4.9.0-8-amd64.gz
gunzip initrd.img-4.9.0-8-amd64.gz
file initrd.img-4.9.0-8-amd64
initrd.img-4.9.0-8-amd64: ASCII cpio archive (SVR4 with no CRC)
infomeh ★★
()
Ответ на: комментарий от infomeh

запаковал файл без ошибок, подкинул новый initrd.lz на нфс шару, пытаюсь загрузится, но опять появляется busybox и говорит

mkdir: can't create directory '//0filesystem.squashfs: file exists mount: mounting /dev/loop0 on //0filesystem.squashfs failed: not a directory can not mount /dev/loop0 (/cdrom/casper/0filesystem.squashfs) on //0filesystem.squashfs

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

Не могу сказать с полной уверенностью, но я промоделировал на одной из систем сетевую загрузку

label drweb
kernel casper/vmlinuz
append initrd=casper/initrd.lz root=/dev/nfs boot=nfs netboot=nfs nfsroot=server:/var/lib/tftpboot/casper language=ru locale=ru_RU.UTF-8 ip=dhcp
И могу предположить, что сценарии ожидают, что в моём случае в /var/lib/tftpboot/casper, смонтированном по NFS будут лежать не squashfs образы, а уже сама файловая система.

Посмотрите что у вас происходит, когда у вас останавливается загрузка, введите команду

mount
и посмотрите содержимое /root
ls /root

Скорее всего, вы там увидите ваш NFS ресурс.

infomeh ★★
()
Ответ на: комментарий от filisdiez

Проверить дальше не могу, там старая система и она смонтировать squashfs образ не может.

Попробуйте сами, т.е. смонтируйте в NFS squashfs образ, как минимум 0filesystem.squashfs, а возможно придётся подключить и остальные части в правильной последовательности.

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

Ну я надеюсь ты не скажешь, что Debian - рукожопы?

Ну если они назвали файл с initramfs «initrd», то да. Нет, я понимаю, что название файла само по себе ни на что не влияет, но всё ж это не правильно.

Deleted
()
Ответ на: комментарий от anonymous

[urljhttps://bugs.debian.org/cgi-bin/bugreport.cgi?bug=544651]Рукожопы Debian

Обратите внимание на даты создания отчёта и на последнюю дату со статусом в процессе решения. Спойлер: нужно поменять последовательность...

Черепаха относительно разработчиков Debian летает со скоростью света)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.