Como reembalar o initrd.img?

7

No original /boot/initrd.img- kernel_ver binwalk mostra esta estrutura:

De 0 para 22528 bytes, há um arquivo CPIO que contém apenas o firmware GenuineIntel.bin na hierarquia de pastas específica.
A partir de 22528 bytes, há o gzip archiwe contém o sistema de arquivos apropriado e este gzip também é arquivado com o CPIO

Após descompactar e modificar como posso comprimir initrd.img da mesma forma (com a mesma hierarquia de pastas)? como essa estrutura original:

Após sugestão do comentário:

find . | cpio --quiet --dereference -o -H newc | lzma -7 > ../cusotm.initrd.lz

binwalk :

Esta é uma estrutura completamente diferente.

    
por EdiD 25.05.2016 / 12:42

3 respostas

4

Você remontar com

cd your_working_directory_with_modifications
find . | cpio --quiet --dereference -o -H newc | lzma -7 > ../cusotm.initrd.lz

O segundo comando renomeia o initrd, você especifica o initrd para usar ao inicializar no grub.

Eu sugiro que você teste (inicialize) o initrd personalizado antes de movê-lo ou renomeá-lo.

Informação adicional da discussão nos comentários:

Primeiro, não acho que você esteja entendendo o papel do cpio / tar. Tanto o cpio quanto o tar pegam vários arquivos e / ou diretórios e os transformam em um único arquivo ou arquivo.

Segundo, eu não acho que você entenda o papel da compressão, a compactação simplesmente torna o arquivo resultante menor. Você pode usar qualquer ferramenta que desejar para compactação.

Veja

link

link

Terceiro, o kernel do linux usa cipo ao invés de tar.

Veja

link

Veja o "Por que cpio em vez de tar?" seção

  

Por que o cpio em vez de tar?

     

Esta decisão foi tomada em dezembro de 2001. A discussão começou   aqui:

     

link

     

E gerou um segundo thread (especificamente em tar vs cpio), começando   aqui:

     

link

     

A versão sumária rápida e suja (que não é substituto para   lendo os tópicos acima) é:

     

1) o cpio é um padrão. Tem décadas (dos dias AT & T) e   já amplamente usado no Linux (dentro do RPM, o driver de dispositivo da Red Hat   discos). Aqui está um artigo do Linux Journal sobre isso desde 1996:

  http://www.linuxjournal.com/article/1213
     

Não é tão popular quanto tar, porque o comando tradicional do cpio   ferramentas de linha requerem argumentos de linha de comando _truly_hideous_. Mas   que não diz nada sobre o formato do arquivo e   são ferramentas alternativas, como:

 http://freecode.com/projects/afio
     

2) O formato do arquivo cpio escolhido pelo kernel é mais simples e limpo   (e, portanto, mais fácil de criar e analisar) do que qualquer um dos   dezenas de) vários formatos de arquivo tar. O initramfs completo   O formato do arquivo é explicado em buffer-format.txt, criado em   usr / gen_init_cpio.c e extraído em init / initramfs.c. Todos três   juntos chegam a menos de 26k no total de textos legíveis por humanos.

     

3) A padronização do projeto GNU no tar é aproximadamente tão relevante   como o Windows padronizando no zip. O Linux não faz parte de nenhum deles e   tem liberdade para tomar suas próprias decisões técnicas.

     

4) Como este é um formato interno do kernel, ele poderia ter sido facilmente   algo novo. O kernel fornece suas próprias ferramentas para criar e   extraia este formato de qualquer maneira. Usando um padrão existente foi   preferível, mas não essencial.

     

5) Al Viro tomou a decisão (citação: "tar é feio como o inferno e não   vai ser suportado no lado do kernel "):

  http://www.uwsg.iu.edu/hypermail/linux/kernel/0112.2/1540.html
     

explicou seu raciocínio:

  http://www.uwsg.iu.edu/hypermail/linux/kernel/0112.2/1550.html
  http://www.uwsg.iu.edu/hypermail/linux/kernel/0112.2/1638.html
     

e, mais importante, projetou e implementou o código initramfs.

    
por Panther 25.05.2016 / 17:58
2

Eu descobri como fazer exatamente o mesmo arquivo initrd.img .

A resposta de Bodhi.zazen provavelmente funcionará porque essa é uma solução comumente conhecida:

find . | cpio --quiet --dereference -o -H newc | lzma -7 > ../cusotm.initrd.lz

mas a questão era diferente. Esta resposta seria boa se no arquivo cpio houver um sistema de arquivos gzipado, mas nesta situação existe também o firmware da Intel em uma estrutura de pastas específica que eu quero manter.

Para manter a mesma hierarquia de pastas, são necessários três passos:

  
  1. Crie o arquivo do sistema de arquivos CPIO com a opção -o simples sem o formato newc criado antes, por exemplo. pasta base:

         

    find . | cpio -o | gzip -9 > ../base/file_system.gz

  2.   
  3. Crie um arquivo apropriado com o formato newc contendo kernel / x86 / microcode / GenuineIntel.bin :

         

    find kernel/ | cpio -o -H newc > new_initrd.img

  4.   
  5. Adicione o arquivo do sistema de arquivos gzipado ao apropriado new_initrd.img:

         

    find base/ | cpio -o >> new_initrd.img

  6.   
    
por EdiD 27.05.2016 / 14:25
0

no Ubuntu o initrd.img é compactado em gzip, eu gostaria de preservar isso quando eu editá-lo. é assim:

extrair:

zcat /boot/initrd.img-3.19.0-80-generic | cpio --extract

compress:

find . 2>/dev/null | cpio --quiet --dereference -o -H newc | gzip -9 > /boot/initrd.img-3.19.0-80-generic
    
por Jossef Harush 28.05.2018 / 19:33

Tags