Imagen ISO

Comparación de imágenes ISO

Comparación de imágenes ISO
Para configurar y mantener dispositivos informáticos, los distribuidores de Linux proporcionan regularmente imágenes ISO adecuadas para sus lanzamientos. Esto simplifica mantener nuestros sistemas actualizados con la ayuda de una compilación completa de software que realmente encaja, en circunstancias ideales.

Imagina que tienes varias de estas imágenes ISO almacenadas localmente. ¿Cómo se da cuenta de que las imágenes ISO recuperadas son auténticas?? En este artículo, le mostramos cómo verificar la integridad y autenticidad de una imagen ISO que se ha descargado antes, y cómo averiguar cuáles son las diferencias entre el contenido real de dos imágenes ISO. Esto le ayuda a verificar el proceso de creación de la imagen ISO y le permite ver qué puede haber cambiado entre dos versiones o versiones disponibles.

Formatos de imagen

El formato de las imágenes de disco tiene su propia historia [11]. El estándar común es ISO 9660 [12] que describe el contenido de un disco óptico en su conjunto. En uso está la extensión del archivo .iso para identificar un archivo de imagen (copia clonada).

El formato ISO 9660 original viene con una serie de limitaciones, como 8 niveles de directorio, así como la longitud de los nombres de archivo. Estas limitaciones se han reducido con la introducción de una serie de extensiones como Rock Ridge [13] (preservación de los permisos POSIX y nombres más largos), Joliet [14] (almacenamiento de nombres Unicode en UCS-2) y Apple ISO 9660 Extensions [15] que introdujo la compatibilidad con HFS.

Para obtener más detalles sobre un archivo de imagen, use el comando 'archivo' seguido del nombre del archivo de datos de la siguiente manera:

.Listado 1: Visualización de los detalles de un archivo ISO

$ archivo *.Yo asi
debian-10.1.0-amd64-netinst.iso: sector de arranque DOS / MBR;
partición 2: ID = 0xef, inicio-CHS (0x3ff, 254,63), final-CHS (0x3ff, 254,63),
startsector 3808, 5664 sectores
xubuntu-18.04.3-escritorio-amd64.iso: sector de arranque DOS / MBR;
partición 2: ID = 0xef, inicio-CHS (0x3ff, 254,63), final-CHS (0x3ff, 254,63),
startsector 11688, 4928 sectores $

Verificación de archivos ISO descargados

Los proveedores de software confiables siempre le ofrecen dos cosas para descargar: la imagen ISO real y la suma de verificación correspondiente de la imagen para realizar una verificación de integridad del archivo descargado. El último le permite confirmar que su archivo local es una copia exacta del archivo presente en los servidores de descarga y que nada salió mal durante la descarga. En caso de error durante la descarga, el archivo local está dañado y puede desencadenar problemas aleatorios durante la instalación [16].

Además, en caso de que la imagen ISO se haya visto comprometida (como sucedió con Linux Mint a principios de 2016 [17]), las dos sumas de comprobación no coincidirán. Puede calcular las sumas de comprobación usando 'md5sum' (obsoleto, ya no se recomienda) y 'sha256sum' de la siguiente manera:

.Listado 2: Cálculo de la suma de comprobación para archivos ISO

$ md5sum *.Yo asi
b931ef8736c98704bcf519160b50fd83 debian-10.1.0-amd64-netinst.Yo asi
0c268a465d5f48a30e5b12676e9f1b36 xubuntu-18.04.3-escritorio-amd64.Yo asi
$ sha256sum *.Yo asi
7915fdb77a0c2623b4481fc5f0a8052330defe1cde1e0834ff233818dc6f301e debian-10.1.0-amd64-netinst.Yo asi
3c9e537ee1cf64088251e56b4ca1694944ad59126f298f24a78cd43af152b5b3 xubuntu-18.04.3-escritorio-amd64.Yo asi
PS

Puede invocar la comparación entre el archivo de suma de comprobación proporcionado y la imagen ISO almacenada localmente como se muestra en el listado 3. La salida de OK al final de una línea indica que ambas sumas de verificación son iguales.

.Listado 3: Compare las sumas de comprobación proporcionadas

$ sha256sum --Compruebe sha256sum.txt xubuntu-18.04.3-escritorio-amd64.iso: OK
PS

Comparación de dos archivos ISO almacenados localmente

Puede suceder que haya descargado dos archivos ISO y le gustaría saber si son completamente iguales. El comando 'sha256sum' es útil, nuevamente, y le recomendamos encapsular esta verificación en un script de shell. En el Listado 4, verá un script bash acorde que combina los cuatro comandos 'sha256sum', 'cut', 'uniq' y 'wc' para separar la primera columna de todas las líneas de salida, fusionarlas en caso de que sean idénticas y cuente el número de líneas que quedan. Si los dos (o más) archivos ISO son iguales, entonces sus sumas de verificación son idénticas, solo quedará una línea y el script bash generará el mensaje "los archivos son los mismos", eventualmente:

.Listado 4: Comparación automática de sumas de comprobación de archivos ISO usando 'sha256sum'

#!/ bin / bash
 
si ['sha256sum *.iso | cortar -d "-f1 | uniq | wc -l 'eq 1]
luego
echo "los archivos son iguales"
demás
echo "los archivos no son idénticos"
fi

En caso de que el script devuelva que los dos archivos son diferentes, es posible que le interese la posición exacta de la desigualdad. Se puede hacer una comparación de orden de bytes usando el comando 'cmp' que genera el primer byte que difiere entre los archivos:

.Listado 5: vea las diferencias entre dos o más archivos usando 'cmp'

$ cmp *.Yo asi
debian-10.1.0-amd64-netinst.iso xubuntu-18.04.3-escritorio-amd64.iso difieren: byte 433, línea 4
PS

Comparando el contenido real

Hasta ahora, hicimos una comparación por orden de bytes, y ahora veremos más de cerca el contenido real de los archivos ISO que se compararán entre sí. En este punto entran en juego una serie de herramientas que ayudan a comparar archivos individuales, estructuras de directorios completas, así como archivos comprimidos e imágenes ISO.
El comando 'diff' ayuda a comparar un directorio usando los dos conmutadores '-r' (abreviatura de '-recursive') y '-q' (abreviatura de '-brief') seguidos de los dos directorios que se compararán entre sí. Como se vio en

Listado 6, 'diff' informa qué archivos son únicos para cada directorio y si un archivo con el mismo nombre ha cambiado.

.Listado 6: Comparación de dos directorios usando 'diff'

$ diff -qr t1 / t2 /
Solo en t1 /: blabla.conf.
Los archivos t1 / nsswitch.conf y t2 / nsswitch.conf son diferentes.
Solo en t2 /: pwd.conf.
PS

Para comparar dos imágenes ISO, simplemente monte los dos archivos de imagen en directorios separados y vaya desde allí.
Las herramientas 'colordiff' [1,2] y 'icdiff' [18,19] proporcionan una salida más colorida en la línea de comandos. La figura 1 muestra la salida de 'icdiff' en la que las diferencias entre los dos archivos de 'nsswitch.conf 'están resaltados en verde o rojo.

Figura 1: Comparación de dos directorios usando 'icdiff'

Las herramientas gráficas para comparar directorios incluyen 'fldiff' [5], 'xxdiff' [6] y 'dirdiff' [7]. 'xxdiff' se inspiró en 'fldiff', y es por eso que se parecen bastante. Las entradas que tienen un contenido similar vienen con un fondo blanco o gris, y las entradas que difieren vienen con un fondo amarillo claro. Las entradas con un fondo de color amarillo brillante o verde son exclusivas de un directorio.

Figura 2: Comparación de dos directorios usando 'fldiff'

'xxdiff' muestra las diferencias de archivo en una ventana separada al hacer clic en una entrada (ver Figura 3).

Figura 3: Comparación de dos directorios usando 'xxdiff'

El próximo candidato es 'dirdiff'. Se basa en la funcionalidad de 'xxdiff' y puede comparar hasta cinco directorios. Los archivos que existen en cualquiera de los directorios están marcados con una X. Curiosamente, el esquema de color que se usa para la ventana de salida es el mismo que usa 'icdiff' (ver Figura 4).

Figura 4: Comparación de dos directorios usando 'dirdiff'

Comparar archivos comprimidos e imágenes ISO completas es el siguiente paso. Si bien es posible que ya conozca el comando 'adiff' del paquete 'atool' [10], veremos el comando 'diffoscope' [8,9], en su lugar. Se describe a sí mismo como "una herramienta para llegar al fondo de lo que hace que los archivos o directorios sean diferentes. Descomprime de forma recursiva archivos de muchos tipos y transforma varios formatos binarios en formas más legibles por humanos para compararlos ". El origen de la herramienta es The Reproducible Builds Project [19,20], que es "un conjunto de prácticas de desarrollo de software que crean una ruta verificable de forma independiente desde la fuente hasta el código binario". Entre otros, admite los siguientes formatos de archivo:

* Archivos APK de Android e imágenes de arranque
* Archivos de base de datos Berkeley DB
* Imágenes del sistema de archivos Coreboot CBFS
* Debian .buildinfo y .cambia archivos
* Paquetes fuente Debian (.dsc)
* Binarios ELF
* Repositorios de Git
* Imágenes de CD ISO 9660
* Binarios de MacOS
* Claves públicas OpenSSH
* Archivos de paquetes OpenWRT (.ipk)
* Mensajes cifrados / firmados con PGP
* Documentos PDF y PostScript
* Archivos RPM cebolletas

La Figura 5 muestra el resultado de 'diffoscope' al comparar dos versiones diferentes de paquetes Debian; verá exactamente los cambios que se han realizado. Esto incluye tanto nombres de archivo como contenido.

Figura 5: Comparación de dos paquetes Debian usando 'diffoscope' (extracto)

El Listado 7 muestra la salida de 'difoscopio' al comparar dos imágenes ISO con un tamaño de 1.9G cada uno. En este caso, las dos imágenes ISO pertenecen a Linux Mint Release 19.2 mientras que un archivo de imagen se recuperó de un servidor francés y el otro de un servidor austríaco (de ahí las letras 'fr' y 'at'). En segundos, 'diffoscope' indica que los dos archivos son completamente idénticos.

.Listado 7: Comparación de dos imágenes ISO usando 'difoscopio'

$ diffoscope linuxmint-19.2-xfce-64bit.fr.iso linuxmint-19.2-xfce-64bit.a.Yo asi
| ###################################################################################################################################################################################################################################################################################### ### | 100% Hora: 0:00:00
PS

Para mirar detrás de escena, es útil llamar a 'diffoscope' con las dos opciones '-debug' y '-text -' para obtener una salida más detallada en la terminal. Esto le permite saber qué está haciendo la herramienta. El Listado 8 muestra la salida correspondiente.

.Listado 8: Detrás de las escenas de 'diffoscope'

$ diffoscope - depuración --texto - linuxmint-19.2-xfce-64bit.fr.Yo asi
linuxmint-19.2-xfce-64bit.a.Yo asi
2019-10-03 13:45:51 D: difoscopio.principal: Difoscopio inicial 78
2019-10-03 13:45:51 D: difoscopio.locale: normalización de la configuración regional, la zona horaria, etc.
2019-10-03 11:45:51 D: difoscopio.principal: Comparación inicial
2019-10-03 11:45:51 D: difoscopio.progreso: Registro < diffoscope.progress.ProgressBar object at 0x7f4b26310588> como observador del progreso
2019-10-03 11:45:52 D: difoscopio.comparadores: 50 clases de comparador cargadas 64 bits.fr.iso ETA: -: -:--
2019-10-03 11:45:52 D: difoscopio.comparadores.utils.especializarse: archivo no identificado. Magic dice: sector de arranque DOS / MBR; partición 2: ID = 0xef, start-CHS (0x3ff, 254,63), end-CHS (0x3ff, 254,63), startsector 652, 4672 sectores
2019-10-03 11:45:52 D: difoscopio.comparadores.utils.especializarse: archivo no identificado. Magic dice: sector de arranque DOS / MBR; partición 2: ID = 0xef, start-CHS (0x3ff, 254,63), end-CHS (0x3ff, 254,63), startsector 652, 4672 sectores
2019-10-03 11:45:52 D: difoscopio.comparadores.utils.comparar: Comparando linuxmint-19.2-xfce-64bit.fr.iso (FilesystemFile) y linuxmint-19.2-xfce-64bit.a.iso (archivo del sistema de archivos)
2019-10-03 11:45:52 D: difoscopio.comparadores.utils.archivo: Binario.has_same_content: < linuxmint-19.2-xfce-64bit.fr.iso> < linuxmint-19.2-xfce-64bit.a.iso>
2019-10-03 11:45:53 D: difoscopio.comparadores.utils.compare: has_same_content_as devuelto True; omitiendo más comparaciones
| ###################################################################################################################################################################################################################################################################################### ### | 100% tiempo: 0:00:01
2019-10-03 11:45:53 D: difoscopio.tempfiles: limpieza de 0 archivos temporales
2019-10-03 11:45:53 D: difoscopio.tempfiles: Limpiando 0 directorios temporales
PS

Bueno, hasta ahora todo bien. Las siguientes pruebas se han realizado con imágenes de diferentes versiones y con diferentes tamaños de archivo. Todos ellos dieron como resultado un error interno que se remonta al comando 'diff' que se quedó sin memoria interna. Parece que hay un límite de tamaño de archivo de aproximadamente 50 M. Es por eso que he construido dos imágenes más pequeñas de 10M cada una y se las entregué a 'diffoscope' para una comparación. La figura 6 muestra el resultado. La salida es una estructura de árbol que contiene el archivo 'nsswitch.conf 'con las diferencias resaltadas.

Figura 6: Comparación de dos imágenes ISO usando 'difoscopio'

Además, se puede proporcionar una versión HTML de la salida. La Figura 7 muestra la salida como un archivo HTML en un navegador web. Se puede lograr a través del interruptor

'--html salida.html '.

Figura 7: Comparación de dos imágenes ISO usando 'diffoscope' (salida HTML)

En caso de que no le guste el estilo de salida, o le gustaría que coincida con la identidad corporativa de su empresa, puede personalizar la salida con su propio archivo CSS usando el estilo switch '-css.css 'que carga el estilo del archivo CSS referenciado.

Conclusión

Encontrar diferencias entre dos directorios o incluso imágenes ISO completas es un poco complicado. Las herramientas que se muestran arriba le ayudan a dominar esta tarea. Entonces, feliz piratería!

Gracias
El autor desea agradecer a Axel Beckert por su ayuda durante la preparación del artículo.

Enlaces y referencias

* [1] colordiff
* [2] colordiff, paquete Debian,
* [3] diffutils
* [4] diffutils, paquete Debian,
* [5] fldiff
* [6] xxdiff
* [7] dirdiff
* [8] difoscopio
* [9] diffoscope, paquete Debian
* [10] atool, paquete Debian
* [11] Breve introducción de algunos formatos de archivo de imagen comunes
* [12] ISO 9660, Wikipedia
* [13] Rock Ridge, Wikipedia
* [14] Joliet, Wikipedia
* [15] Extensiones de Apple ISO 9660, Wikipedia
* [16] Cómo verificar imágenes ISO, Linux Mint
* [17] Tenga cuidado con los ISO pirateados si descargó Linux Mint el 20 de febrero!
* [18] icdiff
* [19] icdiff, paquete Debian
* [20] El proyecto de compilaciones reproducibles
* [21] Proyecto de compilaciones reproducibles, Debian Wiki

Cómo cambiar el tamaño, el color y el esquema del puntero del mouse y del cursor en Windows 10
El puntero y el cursor del mouse en Windows 10 son aspectos muy importantes del sistema operativo. Esto también se puede decir de otros sistemas opera...
Motores de juegos gratuitos y de código abierto para desarrollar juegos de Linux
Este artículo cubrirá una lista de motores de juegos de código abierto y gratuitos que se pueden usar para desarrollar juegos 2D y 3D en Linux. Existe...
Tutorial de Shadow of the Tomb Raider para Linux
Shadow of the Tomb Raider es la duodécima incorporación a la serie Tomb Raider, una franquicia de juegos de acción y aventuras creada por Eidos Montre...