Wie entpacke ich initrd von Ubuntu 18.04 und packe es dann wieder zurück?

Wie entpacke ich initrd von Ubuntu 18.04 und packe es dann wieder zurück?

Ich habe binwalk verwendet, um initrd von Ubuntu 18.04 zu entpacken. Das Paket wurde jedoch nicht entpackt.

command used #  sudo binwalk initrd
===========
result:
==========
DECIMAL         HEX             DESCRIPTION
-------------------------------------------------------------------------------------------------------
0               0x0             ASCII cpio archive (SVR4 with no CRC), file name: "."
112             0x70            ASCII cpio archive (SVR4 with no CRC), file name: "kernel"
232             0xE8            ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86"
356             0x164           ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode"
488             0x1E8           ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode/AuthenticAMD.bin"
28072           0x6DA8          ASCII cpio archive (SVR4 with no CRC), file name: "TRAILER!!!"
28672           0x7000          ASCII cpio archive (SVR4 with no CRC), file name: "kernel"
28792           0x7078          ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86"
28916           0x70F4          ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode"
29048           0x7178          ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode/.enuineIntel.align.0123456789abc"
29212           0x721C          ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode/GenuineIntel.bin"
2440880         0x253EB0        ASCII cpio archive (SVR4 with no CRC), file name: "TRAILER!!!"
===========

Es wurde nichts im Zielordner angezeigt.

# file initrd 
initrd: ASCII cpio archive (SVR4 with no CRC)

Ich habe versucht, mit dem Befehl cpio zu extrahieren.

build@###
:/source/build/1.0.5.00206/nm-gii/software/CD/build/initrd$ sudo cpio -i -F /source/build/1.0.5.00206/nm-gii/software/CD/build/extract-cd/casper/initrd
56 blocks
build@###:/source/build/1.0.5.00206/nm-gii/software/CD/build/initrd$ ll
total 12
drwxr-xr-x 3 root root 4096 Jan 15 05:36 ./
drwxr-xr-x 5 root root 4096 Jan 15 05:01 ../
drwxr-xr-x 3 root root 4096 Jan 15 05:36 kernel/
build@###:/source/build/1.0.5.00206/nm-gii/software/CD/build/initrd$

daher sind alle Dateien damit weiterhin extrahiert.

Antwort1

Für Ubuntu, zumindest für neuere Versionen, können Sie die Befehle lsinitramfs <file>zum Untersuchen und unmkinitramfs <file> <target directory>Extrahieren verwenden.

Antwort2

Das initrd-Format kann eine Aneinanderreihung von Dingen sein. Nämlich cpioArchive und auch ein Dateisystem-Image. SieheDokumentation.

Option 1

Zum dracutExtrahieren erstellter Initrds können Sie lsinitrd --unpackdas mit Dracut mitgelieferte Programm verwenden.

Option 2

Eine weitere Möglichkeit ist die Verwendung des skipcpioTools, das auch mit Dracut geliefert wird. Siehe diesAntwort.

/usr/lib/dracut/skipcpio $your-initrd-img | zcat | cpio -id --no-absolute-file-names

Option 3

Eine andere Möglichkeit ist die Verwendung binwalkvon cpio oder was auch immer sonst der initrd-Teil ist. Siehe diesAntwort.

Option 4(wahrscheinlich das, wonach Sie gefragt haben)

Die beste Antwort zum Durchlaufen von initrd, Extrahieren und Ändern ist jedoch diese: https://unix.stackexchange.com/a/607996/14907

Damit können Sie leichter nur die Teile extrahieren, die Sie ändern möchten, und sie dann auf die gleiche Weise wieder verpacken, wie Sie sie ausgepackt haben. Es handelt sich nicht um eine umfassende Anleitung, aber wenn Sie motiviert sind, sollten Sie die meisten Teile finden.

verwandte Informationen