Imagem ISO

Comparando imagens ISO

Comparando imagens ISO
Para configurar e manter dispositivos de computação, os distribuidores Linux fornecem regularmente imagens ISO de acordo com seus lançamentos. Isso simplifica manter nossos sistemas atualizados com a ajuda de uma compilação completa de software que realmente se encaixa, em circunstâncias ideais.

Imagine que você tenha várias dessas imagens ISO armazenadas localmente. Como você descobre que as imagens ISO recuperadas são autênticas? Neste artigo, mostramos como verificar a integridade e autenticidade de uma imagem ISO que foi baixada antes e como descobrir quais são as diferenças entre o conteúdo real de duas imagens ISO. Isso ajuda você a verificar o processo de construção da imagem ISO e permite que você veja o que pode ter mudado entre duas construções ou versões que estão disponíveis.

Formatos de imagem

O formato das imagens de disco tem sua própria história [11]. O padrão comum é ISO 9660 [12] que descreve o conteúdo de um disco óptico como um todo. Em uso está a extensão do arquivo .iso para identificar um arquivo de imagem (cópia clonada).

O formato original ISO 9660 vem com uma série de limitações, como 8 níveis de diretório, bem como o comprimento dos nomes de arquivo. Essas limitações foram reduzidas pela introdução de uma série de extensões, como Rock Ridge [13] (preservação de permissões POSIX e nomes mais longos), Joliet [14] (armazenamento de nomes Unicode em UCS-2) e extensões Apple ISO 9660 [15] que introduziu o suporte HFS.

Para obter mais detalhes sobre um arquivo de imagem, use o comando 'arquivo' seguido do nome do arquivo de dados da seguinte forma:

.Listagem 1: Exibindo os detalhes de um arquivo ISO

$ file *.iso
debian-10.1.0-amd64-netinst.iso: setor de inicialização DOS / MBR;
partição 2: ID = 0xef, start-CHS (0x3ff, 254,63), end-CHS (0x3ff, 254,63),
startupsector 3808, 5664 setores
xubuntu-18.04.3-desktop-amd64.iso: setor de inicialização DOS / MBR;
partição 2: ID = 0xef, start-CHS (0x3ff, 254,63), end-CHS (0x3ff, 254,63),
iniciador 11688, 4928 setores $

Verificando arquivos ISO baixados

Provedores de software confiáveis ​​sempre oferecem duas coisas para download - a imagem ISO real, bem como a soma de verificação correspondente da imagem, a fim de fazer uma verificação de integridade para o arquivo baixado. Este último permite que você confirme que seu arquivo local é uma cópia exata do arquivo presente nos servidores de download, e nada deu errado durante o download. Em caso de erro durante o download, o arquivo local está corrompido e pode causar problemas aleatórios durante a instalação [16].

Além disso, no caso de a imagem ISO ter sido comprometida (como aconteceu com o Linux Mint no início de 2016 [17]), as duas somas de verificação não corresponderão. Você pode calcular as somas de verificação usando 'md5sum' (obsoleto, não mais recomendado) e 'sha256sum' da seguinte maneira:

.Listagem 2: Calculando a soma de verificação para arquivos ISO

$ md5sum *.iso
b931ef8736c98704bcf519160b50fd83 debian-10.1.0-amd64-netinst.iso
0c268a465d5f48a30e5b12676e9f1b36 xubuntu-18.04.3-desktop-amd64.iso
$ sha256sum *.iso
7915fdb77a0c2623b4481fc5f0a8052330defe1cde1e0834ff233818dc6f301e debian-10.1.0-amd64-netinst.iso
3c9e537ee1cf64088251e56b4ca1694944ad59126f298f24a78cd43af152b5b3 xubuntu-18.04.3-desktop-amd64.iso
$

Você pode invocar a comparação entre o arquivo de soma de verificação fornecido e a imagem ISO armazenada localmente, conforme exibido na listagem 3. A saída de OK no final de uma linha sinaliza que ambas as somas de verificação são iguais.

.Listagem 3: Compare as somas de verificação fornecidas

$ sha256sum --check sha256sum.txt xubuntu-18.04.3-desktop-amd64.iso: OK
$

Comparando dois arquivos ISO armazenados localmente

Pode acontecer que você tenha baixado dois arquivos ISO e gostaria de descobrir se eles são inteiramente iguais. O comando 'sha256sum' é útil, novamente, e recomendamos que você encapsule essa verificação em um script de shell. Na Listagem 4, você vê um script bash de acordo que combina os quatro comandos 'sha256sum', 'cut', 'uniq' e 'wc' para separar a primeira coluna de todas as linhas de saída, mesclando-os caso sejam idênticos , e conte o número de linhas que permanecem. Se os dois (ou mais) arquivos ISO forem iguais, suas somas de verificação serão idênticas, apenas uma única linha permanecerá, e o script bash produzirá a mensagem “os arquivos são os mesmos”, eventualmente:

.Listagem 4: Comparando automaticamente somas de verificação de arquivos ISO usando 'sha256sum'

#!/ bin / bash
 
if ['sha256sum *.iso | cut -d "-f1 | uniq | wc -l 'eq 1]
então
echo "os arquivos são iguais"
senão
echo "os arquivos não são idênticos"
fi

Caso o script retorne que os dois arquivos são diferentes, você pode estar interessado na posição exata da desigualdade. Uma comparação de ordem de byte pode ser feita usando o comando 'cmp' que produz o primeiro byte que difere entre os arquivos:

.Listagem 5: Veja as diferenças entre dois ou mais arquivos usando 'cmp'

$ cmp *.iso
debian-10.1.0-amd64-netinst.iso xubuntu-18.04.3-desktop-amd64.iso differ: byte 433, line 4
$

Comparando o conteúdo real

Até agora, fizemos uma comparação de ordem de bytes e agora vamos dar uma olhada mais de perto - no conteúdo real dos arquivos ISO a serem comparados entre si. Neste ponto, uma série de ferramentas entram em jogo que ajudam a comparar arquivos individuais, estruturas de diretório inteiras, bem como arquivos compactados e imagens ISO.
O comando 'diff' ajuda a comparar um diretório usando as duas opções '-r' (abreviação de '-recursive') e '-q' (abreviação de '-brief') seguidos pelos dois diretórios a serem comparados entre si. Como visto em

Listagem 6, 'diff' relata quais arquivos são exclusivos para cada diretório e se um arquivo com o mesmo nome foi alterado.

.Listagem 6: Comparando dois diretórios usando 'diff'

$ diff -qr t1 / t2 /
Apenas em t1 /: blabla.conf.
Os arquivos t1 / nsswitch.conf e t2 / nsswitch.conf são diferentes.
Apenas em t2 /: pwd.conf.
$

Para comparar duas imagens ISO, basta montar os dois arquivos de imagem em diretórios separados e partir daí.
Uma saída mais colorida na linha de comando é fornecida pelas ferramentas 'colordiff' [1,2] e 'icdiff' [18,19]. A Figura 1 mostra a saída de 'icdiff' em que as diferenças entre os dois arquivos de 'nsswitch.conf 'são destacados em verde ou vermelho.

Figura 1: Comparando dois diretórios usando 'icdiff'

As ferramentas gráficas para uma comparação de diretórios incluem 'fldiff' [5], 'xxdiff' [6] e 'dirdiff' [7]. 'xxdiff' foi inspirado por 'fldiff', e é por isso que eles são bastante semelhantes. As entradas com conteúdo semelhante vêm com um fundo branco ou cinza, e as entradas diferentes vêm com um fundo amarelo claro. As inscrições com fundo amarelo brilhante ou verde são exclusivas de um diretório.

Figura 2: Comparando dois diretórios usando 'fldiff'

'xxdiff' exibe as diferenças do arquivo em uma janela separada clicando em uma entrada (ver Figura 3).

Figura 3: Comparando dois diretórios usando 'xxdiff'

O próximo candidato é 'dirdiff'. Ele se baseia na funcionalidade de 'xxdiff' e pode comparar até cinco diretórios. Os arquivos que existem em qualquer um dos diretórios são marcados com um X. Curiosamente, o esquema de cores que está em uso para a janela de saída é o mesmo que o 'icdiff' usa (consulte a Figura 4).

Figura 4: Comparando dois diretórios usando 'dirdiff'

Comparar arquivos compactados e imagens ISO inteiras é a próxima etapa. Embora o comando 'adiff' do pacote 'atool' [10] já seja conhecido por você, daremos uma olhada no comando 'diffoscope' [8,9], em vez. Ele se descreve como “uma ferramenta para descobrir o que torna os arquivos ou diretórios diferentes. Ele descompacta recursivamente arquivos de vários tipos e transforma vários formatos binários em formas mais legíveis por humanos para compará-los ”. A origem da ferramenta é The Reproducible Builds Project [19,20], que é "um conjunto de práticas de desenvolvimento de software que criam um caminho verificável de forma independente da fonte ao código binário". Entre outros, ele suporta os seguintes formatos de arquivo:

* Arquivos Android APK e imagens de inicialização
* Arquivos de banco de dados Berkeley DB
* Imagens do sistema de arquivos Coreboot CBFS
* Debian .buildinfo e .muda os arquivos
* Pacotes fonte Debian (.dsc)
* Binários ELF
* Repositórios Git
* Imagens de CD ISO 9660
* Binários MacOS
* Chaves públicas OpenSSH
* Arquivos de pacotes OpenWRT (.ipk)
* Mensagens criptografadas / assinadas por PGP
* Documentos PDF e PostScript
* RPM arquiva cebolinhas

A Figura 5 mostra a saída do 'diffoscope' ao comparar duas versões diferentes de pacotes Debian - você verá exatamente as mudanças que foram feitas. Isso inclui nomes de arquivo e conteúdo.

Figura 5: Comparando dois pacotes Debian usando 'diffoscope' (trecho)

A Listagem 7 mostra a saída do 'diffoscope' ao comparar duas imagens ISO com um tamanho de 1.9G cada. Neste caso, as duas imagens ISO pertencem ao Linux Mint Release 19.2 enquanto um arquivo de imagem foi recuperado de um servidor francês e o outro de um servidor austríaco (daí as letras 'fr' e 'at'). Dentro de segundos 'diffoscope' afirma que os dois arquivos são inteiramente idênticos.

.Listagem 7: Comparando duas imagens ISO usando 'diffoscope'

$ diffoscope linuxmint-19.2-xfce-64bit.fr.iso linuxmint-19.2-xfce-64bit.no.iso
| ######################################################################################################################## ### | 100% Tempo: 0:00:00
$

Para olhar os bastidores ajuda chamar 'diffoscope' com as duas opções '-debug' e '-text -' para ambas as saídas mais detalhadas para o terminal. Isso permite que você aprenda o que a ferramenta está fazendo. A Listagem 8 mostra a saída de acordo.

.Listagem 8: nos bastidores do 'difoscópio'

$ diffoscope --debug --text - linuxmint-19.2-xfce-64bit.fr.iso
linuxmint-19.2-xfce-64bit.no.iso
03/10/2019 13:45:51 D: difoscópio.principal: Difoscópio inicial 78
03/10/2019 13:45:51 D: difoscópio.locale: normalizando localidade, fuso horário, etc.
03/10/2019 11:45:51 D: difoscópio.main: Começando a comparação
03/10/2019 11:45:51 D: difoscópio.progresso: registrando < diffoscope.progress.ProgressBar object at 0x7f4b26310588> como um observador de progresso
03/10/2019 11:45:52 D: difoscópio.comparadores: carregadas 50 classes de comparação 64 bits.fr.iso ETA: -: -:--
03/10/2019 11:45:52 D: difoscópio.comparadores.útil.especializar: arquivo não identificado. Magic diz: setor de inicialização DOS / MBR; partição 2: ID = 0xef, start-CHS (0x3ff, 254,63), end-CHS (0x3ff, 254,63), iníciosector 652, 4672 setores
03/10/2019 11:45:52 D: difoscópio.comparadores.útil.specialize: arquivo não identificado. Magic diz: setor de inicialização DOS / MBR; partição 2: ID = 0xef, start-CHS (0x3ff, 254,63), end-CHS (0x3ff, 254,63), iníciosector 652, 4672 setores
03/10/2019 11:45:52 D: difoscópio.comparadores.útil.compare: Comparando linuxmint-19.2-xfce-64bit.fr.iso (FilesystemFile) e linuxmint-19.2-xfce-64bit.no.iso (FilesystemFile)
03/10/2019 11:45:52 D: difoscópio.comparadores.útil.arquivo: binário.has_same_content: < linuxmint-19.2-xfce-64bit.fr.iso> < linuxmint-19.2-xfce-64bit.no.iso>
03/10/2019 11:45:53 D: difoscópio.comparadores.útil.compare: has_same_content_as retornou True; pulando outras comparações
| ######################################################################################################################## ### | 100% Tempo: 0:00:01
03/10/2019 11:45:53 D: difoscópio.arquivos temporários: Limpando 0 arquivos temporários
03/10/2019 11:45:53 D: difoscópio.tempfiles: Limpando 0 diretórios temporários
$

Bem, até agora tudo bem. Os próximos testes foram feitos em imagens de diferentes versões e com diferentes tamanhos de arquivo. Todos eles resultaram em um erro interno que remonta ao comando 'diff' por falta de memória interna. Parece que há um limite de tamanho de arquivo de cerca de 50 MB. É por isso que construí duas imagens menores de 10 MB cada e as entreguei ao 'difoscópio' para uma comparação. A Figura 6 mostra o resultado. O resultado é uma estrutura em árvore contendo o arquivo 'nsswitch.conf 'com as diferenças destacadas.

Figura 6: Comparando duas imagens ISO usando 'difoscópio'

Além disso, uma versão HTML da saída pode ser fornecida. A Figura 7 mostra a saída como um arquivo HTML em um navegador da web. É alcançável por meio do switch

'--html output.html '.

Figura 7: Comparando duas imagens ISO usando 'diffoscope' (saída HTML)

Caso você não goste do estilo de saída, ou gostaria de combiná-lo com a identidade corporativa de sua empresa, você pode personalizar a saída por seu próprio arquivo CSS usando a opção '-css style.css 'que carrega o estilo do arquivo CSS referenciado.

Conclusão

Encontrar diferenças entre dois diretórios ou mesmo imagens ISO inteiras é um pouco complicado. As ferramentas mostradas acima ajudam você a dominar esta tarefa. Então, feliz hackeando!

Obrigada
O autor gostaria de agradecer a Axel Beckert por sua ajuda na preparação do artigo.

Links e referências

* [1] colordiff
* [2] colordiff, pacote Debian,
* [3] diffutils
* [4] diffutils, pacote Debian,
* [5] fldiff
* [6] xxdiff
* [7] dirdiff
* [8] difoscópio
* [9] diffoscope, pacote Debian
* [10] atool, pacote Debian
* [11] Breve introdução de alguns formatos de arquivo de imagem comuns
* [12] ISO 9660, Wikipedia
* [13] Rock Ridge, Wikipedia
* [14] Joliet, Wikipedia
* [15] Extensões ISO 9660 da Apple, Wikipedia
* [16] Como verificar imagens ISO, Linux Mint
* [17] Cuidado com ISOs hackeados se você baixou o Linux Mint em 20 de fevereiro!
* [18] icdiff
* [19] icdiff, pacote Debian
* [20] The Reproducible Builds Project
* [21] The Reproducible Builds Project, Debian Wiki

Como mostrar o contador de FPS em jogos Linux
Os jogos Linux tiveram um grande impulso quando a Valve anunciou o suporte Linux para o cliente Steam e seus jogos em 2012. Desde então, muitos jogos ...
Como baixar e jogar Sid Meier's Civilization VI no Linux
Introdução ao jogo Civilization 6 é uma versão moderna do conceito clássico introduzido na série de jogos Age of Empires. A ideia era bastante simples...
Como instalar e jogar Doom no Linux
Introdução ao Doom A série Doom teve origem nos anos 90 após o lançamento do Doom original. Foi um sucesso instantâneo e, a partir desse momento, a sé...