Em originais /boot/initrd.img- kernel_ver binwalk
mostra esta estrutura:
De 0 a 22528 bytes, o arquivo CPIO contém apenas o firmware GenuineIntel.bin na hierarquia de pastas específica.
De 22528 bytes, existe o gzip archiwe contém um sistema de arquivos apropriado e esse gzip também é arquivado com o CPIO
Após descompactar e modificar, como posso compactar o initrd.img da mesma maneira (com a mesma hierarquia de pastas)? como esta estrutura original:
Após sugestão do comentário:
find . | cpio --quiet --dereference -o -H newc | lzma -7 > ../cusotm.initrd.lz
binwalk
:
Essa é uma estrutura completamente diferente.
find . | cpio --quiet --dereference -o -H newc | lzma -7 > ../cusotm.initrd.lz
Se esse procedimento não estiver funcionando, esclareça quais comandos você executou e o que não está funcionando.Respostas:
Eu descobri como fazer exatamente o mesmo
initrd.img
arquivo.A resposta do Bodhi.zazen provavelmente funcionará porque esta é uma solução conhecida:
mas a questão era diferente. Essa resposta seria boa se no arquivo cpio houver um sistema de arquivos compactado com gzip, mas nessa situação também houver firmware da Intel na estrutura de pastas específica que desejo manter.
Para manter a mesma hierarquia de pastas, são necessárias três etapas:
fonte
find . | cpio -o | gzip -9 >> new_initrd.img
cpio -id < initrd.img-kernel_ver
;dd if=initrd.img-4.4.0-22-generic of=image.gz bs=22528 skip=1
- combine o nome do arquivo initrd.img e o tamanho do bloco;gunzip image.gz
;cpio -i < image
Você reembalou com
O segundo comando renomeia o initrd, você especifica o initrd a ser usado ao inicializar no grub.
Sugiro que você teste (inicialize) o initrd personalizado antes de movê-lo ou renomeá-lo.
Informações adicionais da discussão nos comentários:
Primeiro, acho que você não está entendendo o papel do cpio / tar. cpio e tar pegam vários arquivos e / ou diretórios e os transformam em um arquivo ou archive.
Segundo, não acho que você entenda o papel da compactação, a compactação simplesmente torna o arquivo resultante menor. Você pode usar qualquer ferramenta que desejar para compactação.
Vejo
https://wiki.ubuntu.com/CustomizeLiveInitrd
https://wiki.gentoo.org/wiki/Initramfs/Guide
Terceiro, o kernel do linux usa cipo e não tar.
Vejo
https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt
Consulte o "Por que cpio em vez de alcatrão?" seção
fonte
Recentemente, me deparei com essa mesma pergunta e minha pesquisa na web me levou a esse segmento, então, caso ajude outras pessoas a seguir esses passos, aqui está uma resposta de 2018 a uma pergunta antiga ...
Parece que nos kernels "recentes" o arquivo initrd.img pode conter um arquivo cpio descompactado (ou seja, contendo atualizações de microcódigo) anexado ao arquivo cpio (compactado) que contém a árvore de diretórios initramfs normal.
Isso é discutido brevemente na página Wiki do Debian:
https://wiki.debian.org/initramfs#How_to_inspect_initramfs
, mas um código mais preciso para analisar através desse tipo de arquivo initrd.img pode ser encontrado na
splitinitramfs()
função dentro dounmkinitramfs
comando encontrado noinitramfs-tools-core
pacote (por exemplo, https://git.launchpad.net/ubuntu/+source/initramfs-tools/tree/unmkinitramfs ).Eu não tentei reconstruir esse tipo de arquivo initrd.img, mas com base nessa página da Wiki, parece que, para editar os scripts de inicialização do initramfs, não seria necessário descompactar o arquivo GenuineIntel. Em vez disso, você pode preservar o arquivo cpio como está em algum lugar separadamente, descompactar o segundo arquivo compactado, modificar a árvore de diretórios e reconstruir o arquivo cpio compactado, concatenar o arquivo de microcódigo salvo com o recém-gerado.
(O código que originalmente gerou esse arquivo "anexado" encontra-se em
/usr/share/initramfs-tools/hooks/intel_microcode
.)fonte
no Ubuntu o
initrd.img
é compactado no gzip, gostaria de preservar isso quando o editar. é assim:extrair:
comprimir:
fonte