Estou modificando um monte de initramfs
archives de diferentes distribuições do Linux nas quais normalmente apenas um arquivo está sendo alterado.
Eu gostaria de automatizar o processo sem alternar para o usuário root para extrair todos os arquivos dentro da imagem initramfs
e empacotá-los novamente.
Primeiro, tentei gerar uma lista de arquivos para gen_init_cpio
sem extrair todo o conteúdo no initramfs
archive, ou seja, analisar a saída de cpio -tvn initrd.img
(como ls -l
output ) através de um script que muda todas as permissões para octal e organiza a saída para o formato gen_init_cpio
want, como:
dir /dev 755 0 0
nod /dev/console 644 0 0 c 5 1
slink /bin/sh busybox 777 0 0
file /bin/busybox initramfs/busybox 755 0 0
Isso envolve algumas substituições e o script pode ser difícil de escrever para mim, então encontrei uma maneira melhor e estou perguntando sobre o quão seguro e portátil é:
Em algumas distros temos um arquivo initramfs
com partes concatenadas, e aparentemente o kernel analisa o arquivo inteiro extraindo todas as partes empacotadas em um limite de 1 byte, então não há necessidade de preencher cada parte para um múltiplo de 512 bytes. Eu pensei que esse 'recurso' pode ser útil para evitar a recriação do arquivo ao modificar arquivos dentro dele. De fato funciona, pelo menos para Debian
e CloneZilla
.
Por exemplo, se tivermos modificado o arquivo /init
em initrd.gz
do Debian 8.2.0, podemos anexá-lo a initrd.gz
image com:
$ echo ./init | cpio -H newc -o | gzip >> initrd.gz
então initrd.gz
tem dois arquivos concatenados, o original e suas modificações. Vamos ver o resultado de binwalk
:
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 gzip compressed data, maximum compression, has original file name: "initrd", from Unix, last modified: Tue Sep 1 09:33:08 2015
6299939 0x602123 gzip compressed data, from Unix, last modified: Tue Nov 17 16:06:13 2015
Funciona perfeitamente. Mas é confiável? que restrições temos quando anexamos dados a initfamfs
files? é seguro anexar sem preencher o arquivo original em um múltiplo de 512 bytes? de qual versão do kernel este recurso é suportado?