4 votes

Cpio décompresse incorrectement initrd dans Ubuntu Xenial

Je suis en train de déballer l'image initrd :

# file /boot/initrd.img-4.11.0-14-generic
/boot/initrd.img-4.11.0-14-generic: Archive cpio ASCII (SVR4 sans CRC)
# mkdir /tmp/initrd; cd /tmp/initrd
# cpio -i -d -H newc --no-absolute-filenames -F /boot/initrd.img-4.11.0-14-generic
194 blocs
# ls -R
.:
kernel

./kernel:
x86

./kernel/x86:
microcode

./kernel/x86/microcode:
GenuineIntel.bin

Ainsi cpio n'extrait que le sous-répertoire ./kernel de l'archive. Mais lsinitramfs montre beaucoup plus de fichiers à l'intérieur :

# lsinitramfs /boot/initrd.img-4.11.0-14-generic
/boot/initrd.img-4.11.0-14-generic
kernel
kernel/x86
kernel/x86/microcode
kernel/x86/microcode/GenuineIntel.bin
.
lib
lib/libnss_files.so.2
lib/cryptsetup

...

bin/egrep
init
run

Comment puis-je obtenir tout le contenu de l'archive ?

7voto

Benjamin Drung Points 101

Lorsque vous avez intel-microcode (vous avez) et/ou amd64-microcode installé, l'initrd se compose de deux images concaténées. La première image contient uniquement le microcode. La seconde contient tout le reste. Votre commande cpio extrait simplement la première.

Le moyen le plus simple est d'utiliser unmkinitramfs à partir de initramfs-tools >= 0.126, qui est inclus dans Ubuntu 18.04 (bionic) et plus récent. Sur xenial, vous pouvez simplement cloner https://salsa.debian.org/kernel-team/initramfs-tools et appeler unmkinitramfs à partir de ce répertoire.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X