2019-08-26, 07:19
I think that ipxe doesn't properly align the initrds into 4-byte boundaries or something, as if one tries to load two initrds of different compressions, it fails and the kernel reports "decompression error", while it works with grub.
For example, the Ubuntu initrd.img is actually two concatenated initrds: [early cpio microcode + main gzip initrd.img]
If I create an additional one of my own with:
And I specify in boot.ipxe:
Then the problem is reproduced; while the same initrds are loaded fine with grub.
On the other hand using same compressions works, maybe because it doesn't have the alignment issue? I.e. [(cpio+gzip)+gzip] or [cpio+(cpio+gzip)] or [(cpio+lz4)+lz4] work.
For example, the Ubuntu initrd.img is actually two concatenated initrds: [early cpio microcode + main gzip initrd.img]
If I create an additional one of my own with:
Code:
# date > date.txt
# echo date.txt | cpio -oH newc | lzma > extra.img
And I specify in boot.ipxe:
Code:
initrd initrd.img
initrd extra.img
Then the problem is reproduced; while the same initrds are loaded fine with grub.
On the other hand using same compressions works, maybe because it doesn't have the alignment issue? I.e. [(cpio+gzip)+gzip] or [cpio+(cpio+gzip)] or [(cpio+lz4)+lz4] work.