Eu tenho que descobrir o tipo de compressão do kernel linux do meu sistema arch linux, mas não consigo encontrar uma maneira de obtê-lo mais do que a teoria: agora bzip2 (bz), anteriormente gzip (z).
No meu computador eu executo o comando:
$ file /boot/vmlinuz-linux
/boot/vmlinuz-linux: Linux kernel x86 boot executable bzImage, version 5.3.11-arch1-1 (linux@archlinux) #1 SMP PREEMPT Tue, 12 Nov 2019 22:19:48 +0000, RO-rootFS, swap_dev 0x5, Normal VGA
Olhando para a teoria, vejo que bzImage
deve ser compactado por gzip (z)
, mas não consigo provar:
O bzImage foi compactado usando gzip até o Linux 2.6.30 que introduziu mais algoritmos. Embora haja o equívoco popular de que o prefixo bz significa que a compactação bzip2 é usada (o pacote bzip2 geralmente é distribuído com ferramentas prefixadas com bz, como bzless, bzcat etc.), esse não é o caso.
Existe alguma maneira de provar isso na minha própria máquina? ou a própria teoria, neste caso, é "empírica"?
Para determinar conclusivamente qual compactação foi usada para uma determinada imagem do kernel, sem precisar executá-la ou encontrar sua configuração, você pode seguir a abordagem usada pelo próprio
extract-vmlinux
script do kernel:procure a assinatura do compressor na imagem:
gunzip
:\037\213\010
xz
:\3757zXZ\000
bzip2
:BZh
lzma
:\135\0\0\0
lzo
:\211\114\132
lz4
:\002!L\030
zstd
:(\265/\375
tente extrair os dados da imagem, começando pelo deslocamento de qualquer assinatura que encontrar;
verifique se o resultado (se houver) é uma imagem ELF.
Eu adaptei o script aqui para que ele relate apenas o tipo de compactação. Não estou incluindo aqui porque está licenciado apenas sob a GPL 2.
Você pode ver quais métodos de compactação seu kernel suporta. Apenas um pode ser selecionado, então isso prova qual é.
Aqui, estou usando o gzip:
VMlinuz foi compactado em gzip como você pode ver nos links a seguir:
http://www.linfo.org/vmlinuz.html
https://www.ibm.com/developerworks/community/blogs/mhhaque/entry/anatomy_of_the_initrd_and_vmlinuz?lang=en
https://en.wikipedia.org/wiki/Vmlinux
Ironicamente, a página diz que muita gente confunde a extensão com bzip2 como você pode ver abaixo:
Espero que você ache a informação útil.