Comparaison des images ISO

Comparaison des images ISO
Afin de configurer et de maintenir les appareils informatiques, les distributeurs Linux fournissent régulièrement en fonction des images ISO pour leurs sorties. Cela simplifie à maintenir nos systèmes à jour avec l'aide d'une compilation complète de logiciels qui s'adapte réellement, dans des circonstances idéales.

Imaginez que vous avez plusieurs de ces images ISO stockées localement. Comment déterminez-vous que les images ISO récupérées sont authentiques? Dans cet article, nous vous montrons comment vérifier l'intégrité et l'authenticité d'une image ISO qui a été téléchargée auparavant, et comment comprendre quelles sont les différences entre le contenu réel de deux images ISO. Cela vous aide à vérifier le processus de construction de l'image ISO et vous permet de voir ce qui peut avoir changé entre deux versions ou des versions disponibles.

Formats d'image

Le format des images disque a sa propre histoire [11]. La norme commune est ISO 9660 [12] qui décrit le contenu d'un disque optique dans son ensemble. Utilisé est l'extension de fichier .ISO afin d'identifier un fichier image (copie clonée).

Le format ISO 9660 d'origine est livré avec un certain nombre de limitations telles que 8 niveaux de répertoire ainsi que la durée des noms de fichiers. Ces limitations ont été réduites par l'introduction d'un certain nombre d'extensions telles que Rock Ridge [13] (préservation des autorisations POSIX et des noms plus longs), Joliet [14] (stockage des noms Unicode dans UCS-2) et les extensions d'Apple ISO 9660 [15] qui a introduit le support HFS.

Afin d'obtenir plus de détails concernant un fichier image, utilisez la commande «fichier» suivie du nom du fichier de données comme suit:

.Listing 1: Affichage des détails d'un fichier ISO

$ fichier *.ISO
debian-10.1.0-AMD64-NETINST.ISO: secteur de démarrage DOS / MBR;
partition 2: id = 0xef, start-chs (0x3ff, 254,63), end-chs (0x3ff, 254,63),
Déclasseur 3808, 5664 secteurs
xubuntu-18.04.3-DESKTOP-AMD64.ISO: secteur de démarrage DOS / MBR;
partition 2: id = 0xef, start-chs (0x3ff, 254,63), end-chs (0x3ff, 254,63),
Starinect 11688, 4928 Secteurs $

Vérification des fichiers ISO téléchargés

Les fournisseurs de logiciels de confiance vous offrent toujours deux choses à télécharger - l'image ISO réelle ainsi que la somme de contrôle en fonction de l'image afin de faire une vérification d'intégrité pour le fichier téléchargé. Ce dernier vous permet de confirmer que votre fichier local est une copie exacte du fichier présent sur les serveurs de téléchargement, et rien ne s'est mal passé pendant le téléchargement. En cas d'erreur pendant le téléchargement, le fichier local est corrompu et peut déclencher des problèmes aléatoires pendant l'installation [16].

De plus, au cas où l'image ISO aurait été compromise (comme cela s'est produit avec Linux Mint au début de 2016 [17]), les deux sommes de contrôle ne correspondront pas. Vous pouvez calculer les sommes de contrôle à l'aide de «md5sum» (dépréciée, plus recommandée) et «sha256sum» comme suit:

.Listing 2: calcul de la somme de contrôle pour les fichiers 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
$

Vous pouvez invoquer la comparaison entre le fichier de somme de contrôle fournie et l'image ISO stockée localement comme affiché dans la liste 3. La sortie d'OK à la fin d'une ligne signale que les deux états de contrôle sont les mêmes.

.Listing 3: Comparez les sommes de contrôle fournies

$ sha256SUM - Vérifiez Sha256Sum.txt xubuntu-18.04.3-DESKTOP-AMD64.ISO: OK
$

Comparaison de deux fichiers ISO stockés localement

Il peut arriver que vous ayez téléchargé deux fichiers ISO, et vous souhaitez déterminer s'ils sont entièrement les mêmes. La commande 'sha256sum' est utile, encore une fois, et nous vous recommandons d'encapsuler cette vérification dans un script shell. Dans Listing 4, vous voyez un script Selon Bash qui combine les quatre commandes «Sha256Sum», «Cut», «Uniq» et «WC» afin de séparer la première colonne pour toutes les lignes de sortie, les fusionner au cas où elles seraient identiques et compter le nombre de lignes qui restent. Si les deux (ou plus) fichiers ISO sont les mêmes, ses sommes de contrôle sont identiques, une seule ligne restera et le script bash publiera le message «les fichiers sont les mêmes», éventuellement:

.Listing 4: Comparaison automatique des sommes de contrôle des fichiers ISO à l'aide de «Sha256Sum»

#!/ bac / bash
Si ['sha256sum *.ISO | Cut -d "-f1 | Uniq | wc -l 'eq 1]
alors
écho "les fichiers sont les mêmes"
autre
écho "les fichiers ne sont pas identiques"
Fi

Dans le cas où le script renvoie que les deux fichiers sont différents, vous pouvez être intéressé par la position exacte de l'inégalité. Une comparaison d'octets peut être effectuée à l'aide de la commande 'CMP' qui publie le premier octet qui diffère entre les fichiers:

.Listing 5: Voir les différences entre deux ou plusieurs fichiers à l'aide de 'CMP'

$ cmp *.ISO
debian-10.1.0-AMD64-NETINST.ISO Xubuntu-18.04.3-DESKTOP-AMD64.ISO Différent: octet 433, ligne 4
$

Comparaison du contenu réel

Jusqu'à présent, nous avons fait une comparaison d'octets, et maintenant nous aurons un examen plus approfondi à l'intérieur - au contenu réel des fichiers ISO à comparer les uns aux autres. À ce stade, un certain nombre d'outils entrent en jeu qui aident à comparer les fichiers uniques, les structures de répertoires entières ainsi que les archives compressées et les images ISO.
La commande 'Diff' aide à comparer un répertoire en utilisant les deux commutateurs '-r' (abréviation pour '-recursive') et '-Q' (abréviation pour '-Brief') suivi des deux répertoires à comparer l'un à l'autre. Comme on le voit dans

Listing 6, «Diff» rapporte quels fichiers sont uniques dans l'un ou l'autre répertoire, et si un fichier au même nom a changé.

.Listing 6: Comparaison de deux répertoires à l'aide de «diff»

$ Diff -qr T1 / T2 /
Seulement dans T1 /: Blabla.confli.
Les fichiers T1 / NSSwitch.conf et t2 / nsswitch.Les conf sont différents.
Seulement dans T2 /: PWD.confli.
$

Afin de comparer deux images ISO, montez simplement les deux fichiers d'image pour séparer les répertoires et partir à partir de là.
Une sortie plus colorée sur la ligne de commande est fournie par les outils «Colordiff» [1,2] et «icdiff» [18,19]. La figure 1 montre la sortie de «icdiff» dans laquelle les différences entre les deux fichiers de «NSSwitch.conf 'est mis en évidence en vert ou en rouge.

Figure 1: Comparaison de deux répertoires à l'aide de 'ICDiff'

Les outils graphiques pour une comparaison des répertoires incluent «fldiff» [5], «xxdiff» [6] et «dirdiff» [7]. `` xxdiff '' a été inspiré par «fldiff», et c'est pourquoi ils ont l'air plutôt similaires. Les inscriptions qui ont un contenu similaire sont livrées avec un fond blanc ou gris, et les entrées qui diffèrent sont livrées avec un fond jaune léger, plutôt. Les inscriptions avec un fond jaune vif ou vert sont uniques à un répertoire.

Figure 2: Comparaison de deux répertoires à l'aide de «fldiff»

'xxdiff' affiche les différences de fichiers dans une fenêtre séparée en cliquant sur une entrée (voir figure 3).

Figure 3: Comparaison de deux répertoires en utilisant 'xxdiff'

Le prochain candidat est «dirdiff». Il s'appuie sur les fonctionnalités de «xxdiff» et peut comparer jusqu'à cinq répertoires. Les fichiers qui existent dans l'un ou l'autre répertoire sont marqués d'un X. Fait intéressant, le schéma de couleurs qui est utilisé pour la fenêtre de sortie est le même que celle des utilisations «ICDiff» (voir figure 4).

Figure 4: Comparaison de deux répertoires à l'aide de «dirdiff»

La comparaison des archives compressées et des images ISO entières est la prochaine étape. Alors que la commande «ADIFF» du package «atool» [10] peut être déjà connu, nous allons jeter un œil à la commande «diffoscope» [8,9], plutôt. Il se décrit comme «un outil pour atteindre le bas de ce qui rend les fichiers ou les répertoires différents. Il déballait récursivement les archives de plusieurs types et transforme divers formats binaires en formes plus lisibles humaines pour les comparer ». L'origine de l'outil est le projet de construction reproductible [19,20] qui est «un ensemble de pratiques de développement de logiciels qui créent un chemin indépendamment véhicule de la source au code binaire». Entre autres, il prend en charge les formats de fichiers suivants:

* Fichiers Android APK et images de démarrage
* Fichiers de base de données Berkeley DB
* Coreboot CBFS Système de fichiers
* Debian .buildinfo et .modifie les fichiers
* Packages source Debian (.dsc)
* Binaires elfes
* Référentiels Git
* Images CD ISO 9660
* Binaires macos
* OpenSSH Public Keys
* Archives du package OpenWrt (.ipk)
* Messages signés / cryptés PGP
* Documents PDF et PostScript
* RPM Archives Chives

La figure 5 montre la sortie du «diffoscope» lors de la comparaison de deux versions différentes de packages Debian - vous verrez exactement les modifications qui ont été apportées. Cela comprend à la fois les noms de fichiers et le contenu.

Figure 5: Comparaison de deux packages Debian à l'aide de «diffoscope» (extrait)

Listing 7 montre la sortie du «diffoscope» lors de la comparaison de deux images ISO avec une taille de 1.9g chacun. Dans ce cas, les deux images ISO appartiennent à Linux Mint Release 19.2 Tandis qu'un fichier image a été récupéré à partir d'un serveur français, et l'autre d'un serveur autrichien (d'où les lettres «fr» et «at»). En quelques secondes, le «diffoscope» indique que les deux fichiers sont entièrement identiques.

.Listing 7: Comparaison de deux images ISO à l'aide de «diffoscope»

$ diffoscope Linuxmint-19.2-XFCE-64 bits.frousser.ISO Linuxmint-19.2-XFCE-64 bits.à.ISO
| ################################################### ### | 100% Temps: 0:00:00
$

Afin de regarder dans les coulisses, il aide à appeler «diffoscope» avec les deux options «-debug» et «-tex. Cela vous permet d'apprendre ce que fait l'outil. Listing 8 montre la sortie selon.

.Listing 8: Dans les coulisses du «diffoscope»

$ diffoscope --debug --text - linuxmint-19.2-XFCE-64 bits.frousser.ISO
Linuxmint-19.2-XFCE-64 bits.à.ISO
2019-10-03 13:45:51 D: Diffoscope.Main: Démarrage du diffoscope 78
2019-10-03 13:45:51 D: Diffoscope.Locale: normalisation des paramètres régionaux, du fuseau horaire, etc.
2019-10-03 11:45:51 D: Diffoscope.Main: comparaison de démarrage
2019-10-03 11:45:51 D: Diffoscope.Progrès: enregistrement < diffoscope.progress.ProgressBar object at 0x7f4b26310588> En tant qu'observateur du progrès
2019-10-03 11:45:52 D: Diffoscope.Comparators: Classes de comparaison de chargement 64 bits.frousser.ISO ETA: -: -:--
2019-10-03 11:45:52 D: Diffoscope.comparateurs.utils.Spécialiser: fichier non identifié. Magic dit: secteur de démarrage DOS / MBR; partition 2: id = 0xef, start-chs (0x3ff, 254,63), end-chs (0x3ff, 254,63), startector 652, 4672 secteurs
2019-10-03 11:45:52 D: Diffoscope.comparateurs.utils.Spécialiser: fichier non identifié. Magic dit: secteur de démarrage DOS / MBR; partition 2: id = 0xef, start-chs (0x3ff, 254,63), end-chs (0x3ff, 254,63), startector 652, 4672 secteurs
2019-10-03 11:45:52 D: Diffoscope.comparateurs.utils.Comparez: comparer Linuxmint-19.2-XFCE-64 bits.frousser.ISO (FileSystemFile) et Linuxmint-19.2-XFCE-64 bits.à.ISO (Filesystemfile)
2019-10-03 11:45:52 D: Diffoscope.comparateurs.utils.dossier: binaire.has_same_content: < Linuxmint-19.2-XFCE-64 bits.frousser.ISO> < Linuxmint-19.2-XFCE-64 bits.à.ISO>
2019-10-03 11:45:53 D: Diffoscope.comparateurs.utils.Comparez: HAS_SAME_CONTENT_AS RETOURNÉ true; Sauter d'autres comparaisons
| ################################################### ### | 100% Temps: 0:00:01
2019-10-03 11:45:53 D: Diffoscope.Tempfiles: nettoyage 0 fichiers temporaires
2019-10-03 11:45:53 D: Diffoscope.Tempfiles: nettoyage 0 répertoires temporaires
$

Eh bien, jusqu'à présent, tout bon. Les tests suivants ont été effectués sur des images de différentes versions et avec différentes tailles de fichiers. Tous ont abouti à une erreur interne qui remonte à la commande 'Diff' sortant hors de la mémoire interne. Il semble qu'il y ait une limite de taille de fichier d'environ 50 m. C'est pourquoi j'ai construit deux images plus petites de 10 m chacune, et je l'ai remise au «diffoscope» pour une comparaison. La figure 6 montre le résultat. La sortie est une structure d'arbre contenant le fichier 'nsSwitch.confue avec les différences mises en évidence.

Figure 6: Comparaison de deux images ISO à l'aide de «diffoscope»

De plus, une version HTML de la sortie peut être fournie. La figure 7 montre la sortie comme un fichier HTML dans un webbrowser. C'est réalisable via le commutateur

'- HTML Sortie.html '.

Figure 7: Comparaison de deux images ISO à l'aide de «diffoscope» (sortie HTML)

Dans le cas où vous n'aimez pas le style de sortie, ou si vous souhaitez le faire correspondre avec l'identité d'entreprise de votre entreprise, vous pouvez personnaliser la sortie par votre propre fichier CSS à l'aide du style -css Switch '.CSS 'qui charge le style du fichier CSS référencé.

Conclusion

Trouver des différences entre deux répertoires ou même des images ISO entières est un peu délicat. Les outils ci-dessus vous aident à maîtriser cette tâche. Alors, heureux piratage!

Merci
L'auteur tient à remercier Axel Beckert pour son aide lors de la préparation de l'article.

Liens et références

* [1] Colordiff
* [2] Colordiff, package Debian,
* [3] Diffutils
* [4] Diffutiles, package Debian,
* [5] Fldiff
* [6] xxdiff
* [7] Dirdiff
* [8] Diffoscope
* [9] Diffoscope, package Debian
* [10] atool, package debian
* [11] https: // www.winiso.com / articles / formats d'image commun.HTML (actuellement hors ligne)
* [12] ISO 9660, Wikipedia
* [13] Rock Ridge, Wikipedia
* [14] Joliet, Wikipedia
* [15] Extensions Apple ISO 9660, Wikipedia
* [16] Comment vérifier les images ISO, Linux Mint
* [17] Méfiez-vous des isos piratés si vous avez téléchargé Linux Mint le 20 février!
* [18] Icdiff
* [19] Icdiff, package Debian
* [20] Le projet de construction reproductible
* [21] Le projet de construction reproductible, Debian Wiki