I know dracut can update modules in initramfs, but I think it is too slow. So I’m wondering what is the fastest way to update modules in initramfs of CentOS 7?
Thanks!
6 thoughts on - How To Update Modules In Iniramfs Fastly
This solution does not work in CentOS 7, because initramfs in CentOS 7 is not a gzipped cpio:
[root@bogon a]# file /boot/initramfs-3.10.0-693.el7.x86_64.img
/boot/initramfs-3.10.0-693.el7.x86_64.img: ASCII cpio archive (SVR4 with no CRC)
If I use
zcat /boot/initrd-2.6.18-164.6.1.el5.img | cpio -idmv to uncompress initramfs, it will report errors:
[root@bogon a]# zcat /boot/initramfs-3.10.0-693.el7.x86_64.img | cpio -idmv
gzip: /boot/initramfs-3.10.0-693.el7.x86_64.img: not in gzip format
cpio: premature end of archive
i think you have that backwards … mkinitrd is simply a wrapper around a call to dracut, which builds an initramfs.
it is, but to get to the content, you need to use “skipcpio” to jump over the initial tiny cpio archive. see, for example:
Maybe some ucode archive is in front of the initrd archive.
Did you try to unpack it without uncompressing it? Whats the contents?
[root@bogon a]# cpio -id < /boot/initramfs-3.10.0-693.el7.x86_64.img
28 blocks
[root@bogon a]# ls -R
.:
early_cpio kernel
./kernel:
x86
./kernel/x86:
microcode
./kernel/x86/microcode:
GenuineIntel.bin
Obviously, above is not what I want. In order to get full contents of initramfs, I have to use skipcpio to skip initial cpio of initramfs:
[root@bogon a]# /usr/lib/dracut/skipcpio /boot/initramfs-3.10.0-693.el7.x86_64.img | zcat | cpio -id
85469 blocks
[root@bogon a]# ls bin etc lib proc run shutdown sysroot usr dev init lib64 root sbin sys tmp var
I can use skipcpio to get full contents of initramfs, and then edit files in it. But the problem is how to recreate initramfs by extracted contents?
6 thoughts on - How To Update Modules In Iniramfs Fastly
`dracut` calls `mkinitrd` which rebuilds the initrd file. . . you could do it manually but that is prone to errors (
https://access.redhat.com/solutions/24029).
This solution does not work in CentOS 7, because initramfs in CentOS 7 is not a gzipped cpio:
[root@bogon a]# file /boot/initramfs-3.10.0-693.el7.x86_64.img
/boot/initramfs-3.10.0-693.el7.x86_64.img: ASCII cpio archive (SVR4 with no CRC)
If I use
zcat /boot/initrd-2.6.18-164.6.1.el5.img | cpio -idmv to uncompress initramfs, it will report errors:
[root@bogon a]# zcat /boot/initramfs-3.10.0-693.el7.x86_64.img | cpio -idmv
gzip: /boot/initramfs-3.10.0-693.el7.x86_64.img: not in gzip format
cpio: premature end of archive
i think you have that backwards … mkinitrd is simply a wrapper around a call to dracut, which builds an initramfs.
it is, but to get to the content, you need to use “skipcpio” to jump over the initial tiny cpio archive. see, for example:
https://sites.google.com/site/syscookbook/rhel/rhel-kernel-rebuild
rday
So, in the end, we can’t recreate initramfs of CentOS 7 manually just like https://access.redhat.com/solutions/24029 did in CentOS 6?
Maybe some ucode archive is in front of the initrd archive.
Did you try to unpack it without uncompressing it? Whats the contents?
[root@bogon a]# cpio -id < /boot/initramfs-3.10.0-693.el7.x86_64.img 28 blocks [root@bogon a]# ls -R .: early_cpio kernel ./kernel: x86 ./kernel/x86: microcode ./kernel/x86/microcode: GenuineIntel.bin Obviously, above is not what I want. In order to get full contents of initramfs, I have to use skipcpio to skip initial cpio of initramfs: [root@bogon a]# /usr/lib/dracut/skipcpio /boot/initramfs-3.10.0-693.el7.x86_64.img | zcat | cpio -id 85469 blocks [root@bogon a]# ls bin etc lib proc run shutdown sysroot usr dev init lib64 root sbin sys tmp var I can use skipcpio to get full contents of initramfs, and then edit files in it. But the problem is how to recreate initramfs by extracted contents?