ISO-Image

Vergleichen von ISO-Bildern

Vergleichen von ISO-Bildern
Um Computergeräte einzurichten und zu warten, stellen Linux-Distributoren regelmäßig entsprechende ISO-Images für ihre Releases zur Verfügung. Dies vereinfacht es, unsere Systeme mit Hilfe einer vollständigen Zusammenstellung von Software, die im Idealfall tatsächlich zusammenpasst, auf dem neuesten Stand zu halten.

Stellen Sie sich vor, Sie haben mehrere dieser ISO-Images lokal gespeichert. Wie stellen Sie fest, dass die abgerufenen ISO-Images authentisch sind?? In diesem Artikel zeigen wir Ihnen, wie Sie die Integrität und Authentizität eines zuvor heruntergeladenen ISO-Images überprüfen und wie Sie die Unterschiede zwischen dem tatsächlichen Inhalt zweier ISO-Images herausfinden. Auf diese Weise können Sie den Erstellungsprozess für das ISO-Image überprüfen und sehen, was sich möglicherweise zwischen zwei Builds oder verfügbaren Releases geändert hat.

Bildformate

Das Format von Disk-Images hat seine eigene Geschichte [11]. Der gemeinsame Standard ist ISO 9660 [12], der den Inhalt einer optischen Disk als Ganzes beschreibt. In Verwendung ist die Dateierweiterung .iso, um eine Bilddatei zu identifizieren (geklonte Kopie).

Das ursprüngliche ISO 9660-Format weist eine Reihe von Einschränkungen auf, wie z. B. 8 Verzeichnisebenen sowie die Länge der Dateinamen. Diese Einschränkungen wurden durch die Einführung einer Reihe von Erweiterungen wie Rock Ridge [13] (Bewahrung von POSIX-Berechtigungen und längeren Namen), Joliet [14] (Speicherung von Unicode-Namen in UCS-2) und Apple ISO 9660 Extensions . reduziert [15], das die HFS-Unterstützung eingeführt hat.

Um weitere Details zu einer Bilddatei zu erhalten, verwenden Sie den Befehl 'file' gefolgt vom Namen der Datendatei wie folgt:

.Listing 1: Anzeigen der Details einer ISO-Datei

$-Datei *.iso
debian-10.1.0-amd64-netinst.iso:   DOS/MBR-Bootsektor;
Partition 2 : ID=0xef, start-CHS (0x3ff,254,63), end-CHS (0x3ff,254,63),
Startsektor 3808, 5664 Sektoren
xubuntu-18.04.3-desktop-amd64.iso: DOS/MBR-Bootsektor;
Partition 2 : ID=0xef, start-CHS (0x3ff,254,63), end-CHS (0x3ff,254,63),
Startsektor 11688, 4928 Sektoren $

Heruntergeladene ISO-Dateien überprüfen

Vertrauenswürdige Softwareanbieter bieten Ihnen immer zwei Dinge zum Download an - das eigentliche ISO-Image sowie die zugehörige Prüfsumme des Images, um eine Integritätsprüfung der heruntergeladenen Datei durchzuführen. Mit letzterem können Sie bestätigen, dass Ihre lokale Datei eine genaue Kopie der Datei ist, die auf den Download-Servern vorhanden ist und während des Downloads nichts schief gelaufen ist. Im Falle eines Fehlers während des Downloads ist die lokale Datei beschädigt und kann zufällige Probleme während der Installation auslösen [16].

Außerdem stimmen die beiden Prüfsummen nicht überein, falls das ISO-Image kompromittiert wurde (wie es bei Linux Mint Anfang 2016 geschah [17]). Sie können die Prüfsummen mit 'md5sum' (veraltet, nicht mehr empfohlen) und 'sha256sum' wie folgt berechnen:

.Listing 2: Berechnung der Prüfsumme für ISO-Dateien

$ 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
$

Sie können den Vergleich zwischen der bereitgestellten Prüfsummendatei und dem lokal gespeicherten ISO-Image aufrufen, wie in Listing 3 angezeigt. Die Ausgabe von OK am Ende einer Zeile signalisiert, dass beide Prüfsummen gleich sind.

.Listing 3: Vergleichen Sie die bereitgestellten Prüfsummen

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

Vergleich zweier lokal gespeicherter ISO-Dateien

Es kann vorkommen, dass Sie zwei ISO-Dateien heruntergeladen haben und herausfinden möchten, ob sie vollständig identisch sind. Der Befehl 'sha256sum' ist wiederum nützlich, und wir empfehlen Ihnen, diese Prüfung in einem Shell-Skript zu kapseln. In Listing 4 sehen Sie ein entsprechendes Bash-Skript, das die vier Befehle 'sha256sum', 'cut', 'uniq' und 'wc' kombiniert, um die erste Spalte für alle Ausgabezeilen zu trennen, sie zusammenzuführen, falls sie identisch sind , und zähle die Anzahl der verbleibenden Zeilen. Wenn die beiden (oder mehr) ISO-Dateien gleich sind, sind ihre Prüfsummen identisch, es bleibt nur eine einzige Zeile übrig und das Bash-Skript gibt schließlich die Meldung „Die Dateien sind gleich“ aus:

.Listing 4: Prüfsummen von ISO-Dateien automatisch mit 'sha256sum' vergleichen

#!/bin/bash
 
if [ 'sha256sum *.iso | cut -d" -f1 | uniq | wc -l' eq 1 ]
dann
echo "Die Dateien sind gleich"
sonst
echo "Die Dateien sind nicht identisch"
fi

Falls das Skript zurückgibt, dass die beiden Dateien unterschiedlich sind, interessiert Sie möglicherweise die genaue Position der Ungleichung. Ein Vergleich der Byte-Reihenfolge kann mit dem Befehl 'cmp' durchgeführt werden, der das erste Byte ausgibt, das sich zwischen den Dateien unterscheidet:

.Listing 5: Sehen Sie die Unterschiede zwischen zwei oder mehr Dateien mit 'cmp'

$ cmp *.iso
debian-10.1.0-amd64-netinst.iso xubuntu-18.04.3-desktop-amd64.ISO-Unterschied: Byte 433, Zeile 4
$

Vergleich der tatsächlichen Inhalte

Bisher haben wir einen Vergleich der Byte-Reihenfolge durchgeführt, und jetzt schauen wir uns das Innere genauer an - auf den tatsächlichen Inhalt der ISO-Dateien, die miteinander verglichen werden sollen. An dieser Stelle kommen eine Reihe von Tools ins Spiel, die helfen, einzelne Dateien, ganze Verzeichnisstrukturen sowie komprimierte Archive und ISO-Images zu vergleichen.
Der Befehl 'diff' hilft beim Vergleichen eines Verzeichnisses mit den beiden Schaltern '-r' (kurz für '-rekursiv') und '-q' (kurz für '-brief') gefolgt von den beiden zu vergleichenden Verzeichnissen. Wie in ... gesehen

Listing 6, 'diff' gibt an, welche Dateien in einem der Verzeichnisse eindeutig sind und ob sich eine Datei mit demselben Namen geändert hat.

.Listing 6: Vergleich zweier Verzeichnisse mit 'diff'

$ diff -qr t1/ t2/
Nur in t1/: blabla.conf.
Die Dateien t1/nsswitch.conf und t2/nsswitch.conf sind anders.
Nur in t2/: pwd.conf.
$

Um zwei ISO-Images zu vergleichen, mounten Sie einfach die beiden Image-Dateien in separate Verzeichnisse und gehen Sie von dort aus.
Eine farbigere Ausgabe auf der Kommandozeile bieten die Tools 'colordiff' [1,2] und 'icdiff' [18,19]. Abbildung 1 zeigt die Ausgabe von 'icdiff', in der die Unterschiede zwischen den beiden Dateien von 'nsswitch.conf' sind entweder grün oder rot markiert.

Abbildung 1: Vergleich zweier Verzeichnisse mit 'icdiff'

Grafische Werkzeuge zum Vergleich von Verzeichnissen sind 'fldiff' [5], 'xxdiff' [6] und 'dirdiff' [7]. 'xxdiff' wurde von 'fldiff' inspiriert, und deshalb sehen sie ziemlich ähnlich aus. Einträge mit ähnlichem Inhalt haben einen weißen oder grauen Hintergrund, Einträge, die sich unterscheiden, werden stattdessen mit einem hellgelben Hintergrund angezeigt. Einträge mit hellgelbem oder grünem Hintergrund sind für ein Verzeichnis eindeutig.

Abbildung 2: Vergleich zweier Verzeichnisse mit 'fldiff'

'xxdiff' zeigt die Dateiunterschiede in einem separaten Fenster durch Klick auf einen Eintrag an (siehe Abbildung 3).

Abbildung 3: Vergleich zweier Verzeichnisse mit 'xxdiff'

Der nächste Kandidat ist 'dirdiff'. Es baut auf der Funktionalität von 'xxdiff' auf und kann bis zu fünf Verzeichnisse vergleichen. Dateien, die in einem der Verzeichnisse vorhanden sind, sind mit einem X gekennzeichnet. Interessanterweise ist das Farbschema, das für das Ausgabefenster verwendet wird, das gleiche wie bei 'icdiff' (siehe Abbildung 4).

Abbildung 4: Vergleich zweier Verzeichnisse mit 'dirdiff'

Der Vergleich von komprimierten Archiven und ganzen ISO-Images ist der nächste Schritt. Während Ihnen der 'adiff'-Befehl aus dem 'atool'-Paket [10] vielleicht schon bekannt ist, schauen wir uns stattdessen den 'diffoscope'-Befehl [8,9] an. Es beschreibt sich selbst als „ein Werkzeug, um den Unterschieden von Dateien oder Verzeichnissen auf den Grund zu gehen“. Es entpackt rekursiv Archive verschiedenster Art und wandelt verschiedene Binärformate in für den Menschen lesbarere Formen um, um sie zu vergleichen.“. Der Ursprung des Tools ist The Reproducible Builds Project [19,20], bei dem es sich um „eine Reihe von Softwareentwicklungspraktiken handelt, die einen unabhängig überprüfbaren Pfad vom Quellcode zum Binärcode schaffen“. Es unterstützt unter anderem die folgenden Dateiformate:

* Android APK-Dateien und Boot-Images
* Berkeley DB-Datenbankdateien
* Coreboot CBFS-Dateisystem-Images
* Debian .Bauinfo und .ändert Dateien
* Debian-Quellpakete (.dsc)
* ELF-Binärdateien
* Git-Repositorys
* ISO 9660 CD-Images
* MacOS-Binärdateien
* Öffentliche OpenSSH-Schlüssel
* OpenWRT-Paketarchive (.ipk)
* PGP-signierte/verschlüsselte Nachrichten
* PDF- und PostScript-Dokumente
* RPM archiviert Schnittlauch

Abbildung 5 zeigt die Ausgabe von 'diffoscope' beim Vergleich zweier verschiedener Versionen von Debian-Paketen - Sie sehen genau die vorgenommenen Änderungen. Dies umfasst sowohl Dateinamen als auch Inhalte.

Abbildung 5: Vergleich zweier Debian-Pakete mit 'diffoscope' (Auszug)

Listing 7 zeigt die Ausgabe von 'diffoscope' beim Vergleich zweier ISO-Bilder mit einer Größe von 1.9G jeweils. In diesem Fall gehören die beiden ISO-Images zu Linux Mint Release 19.2 wobei eine Bilddatei von einem französischen Server abgerufen wurde und die andere von einem österreichischen Server (daher die Buchstaben „fr“ und „at“). Innerhalb von Sekunden sagt 'diffoscope', dass die beiden Dateien völlig identisch sind.

.Listing 7: Vergleich zweier ISO-Images mit 'diffoscope'

$ diffoskop linuxmint-19.2-xfce-64bit.fr.iso linuxmint-19.2-xfce-64bit.beim.iso
|################################################## ###| 100 %    Zeit: 0:00:00
$

Um hinter die Kulissen zu blicken hilft es, 'diffoscope' mit den beiden Optionen '-debug' und '-text -' für beides ausführlichere Ausgabe auf dem Terminal aufzurufen. Auf diese Weise erfahren Sie, was das Tool tut. Listing 8 zeigt die entsprechende Ausgabe.

.Listing 8: Hinter den Kulissen von 'diffoscope'

$ diffoscope --debug --text - linuxmint-19.2-xfce-64bit.fr.iso
linuxmint-19.2-xfce-64bit.beim.iso
03.10.2019 13:45:51 D: Diffoskop.main: Startdiffoskop 78
03.10.2019 13:45:51 D: Diffoskop.locale: Normalisieren von Gebietsschema, Zeitzone usw.
03.10.2019 11:45:51 D: Diffoskop.main: Vergleich starten
03.10.2019 11:45:51 D: Diffoskop.Fortschritt: Registrierung < diffoscope.progress.ProgressBar object at 0x7f4b26310588> als Fortschrittsbeobachter
03.10.2019 11:45:52 D: Diffoskop.Komparatoren: 50 Komparatorklassen geladen 64bit.fr.ISO-ETA:  --:--:--
03.10.2019 11:45:52 D: Diffoskop.Komparatoren.utils.spezialisieren: Nicht identifizierte Datei. Magic sagt: DOS/MBR-Bootsektor; Partition 2 : ID=0xef, start-CHS (0x3ff,254,63), end-CHS (0x3ff,254,63), Startsektor 652, 4672 Sektoren
03.10.2019 11:45:52 D: Diffoskop.Komparatoren.utils.spezialisieren: Nicht identifizierte Datei. Magic sagt: DOS/MBR-Bootsektor; Partition 2 : ID=0xef, start-CHS (0x3ff,254,63), end-CHS (0x3ff,254,63), Startsektor 652, 4672 Sektoren
03.10.2019 11:45:52 D: Diffoskop.Komparatoren.utils.vergleichen: Vergleich von linuxmint-19.2-xfce-64bit.fr.iso (DateisystemDatei) und linuxmint-19.2-xfce-64bit.beim.iso (DateisystemDatei)
03.10.2019 11:45:52 D: Diffoskop.Komparatoren.utils.Datei: Binär.has_same_content: < linuxmint-19.2-xfce-64bit.fr.iso> < linuxmint-19.2-xfce-64bit.beim.iso>
03.10.2019 11:45:53 D: Diffoskop.Komparatoren.utils.vergleichen: has_same_content_as hat True zurückgegeben; weitere Vergleiche überspringen
|################################################## ###| 100 %  Zeit: 0:00:01
03.10.2019 11:45:53 D: Diffoskop.tempfiles: 0 temporäre Dateien bereinigen
03.10.2019 11:45:53 D: Diffoskop.tempfiles: 0 temporäre Verzeichnisse bereinigen
$

So weit, so gut. Die nächsten Tests wurden mit Bildern aus verschiedenen Releases und mit unterschiedlichen Dateigrößen durchgeführt. Alle führten zu einem internen Fehler, der darauf zurückzuführen ist, dass dem Befehl 'diff' der interne Speicher ausgeht. Es sieht so aus, als ob es eine Dateigrößenbeschränkung von etwa 50 MB gibt. Deshalb habe ich zwei kleinere Bilder von je 10M gebaut und zum Vergleich an 'diffoscope' übergeben. Abbildung 6 zeigt das Ergebnis. Die Ausgabe ist eine Baumstruktur, die die Datei 'nsswitch . enthält.conf' mit den hervorgehobenen Unterschieden.

Abbildung 6: Vergleich zweier ISO-Bilder mit „Diffoskop“

Außerdem kann eine HTML-Version der Ausgabe bereitgestellt werden. Abbildung 7 zeigt die Ausgabe als HTML-Datei in einem Webbrowser. Erreichbar über den Schalter

'--html-Ausgabe.html'.

Abbildung 7: Vergleich zweier ISO-Images mit 'diffoscope' (HTML-Ausgabe)

Falls Ihnen der Ausgabestil nicht gefällt oder dieser an die Corporate Identity Ihres Unternehmens angepasst werden soll, können Sie die Ausgabe durch eine eigene CSS-Datei mit dem Schalter '-css style . anpassen.css', das den Stil aus der referenzierten CSS-Datei lädt.

Fazit

Unterschiede zwischen zwei Verzeichnissen oder sogar ganzen ISO-Images zu finden ist etwas knifflig. Die oben gezeigten Tools helfen Ihnen, diese Aufgabe zu meistern. Also, viel Spaß beim Hacken!

Vielen Dank
Der Autor bedankt sich bei Axel Beckert für seine Hilfe bei der Erstellung des Artikels.

Links und Referenzen

* [1] Farbunterschied
* [2] colordiff, Debian-Paket,
* [3] diffutils
* [4] diffutils, Debian-Paket,
* [5] fldiff
* [6] xxdiff
* [7] dirdiff
* [8] Diffoskop
* [9] Diffoskop, Debian-Paket
* [10] atool, Debian-Paket
* [11] Kurze Einführung in einige gängige Bilddateiformate
* [12] ISO 9660, Wikipedia
* [13] Rock Ridge, Wikipedia
* [14] Joliet, Wikipedia
* [15] Apple ISO 9660-Erweiterungen, Wikipedia
* [16] So überprüfen Sie ISO-Images, Linux Mint
* [17] Hüten Sie sich vor gehackten ISOs, wenn Sie Linux Mint am 20. Februar heruntergeladen haben!
* [18] icdiff
* [19] icdiff, Debian-Paket
* [20] Das reproduzierbare Builds-Projekt
* [21] Das reproduzierbare Builds-Projekt, Debian-Wiki

Kostenlose und Open-Source-Spiele-Engines für die Entwicklung von Linux-Spielen
Dieser Artikel behandelt eine Liste von kostenlosen und Open-Source-Spiele-Engines, die für die Entwicklung von 2D- und 3D-Spielen unter Linux verwend...
Shadow of the Tomb Raider für Linux Tutorial
Shadow of the Tomb Raider ist die zwölfte Erweiterung der Tomb Raider-Reihe – ein Action-Adventure-Franchise von Eidos Montrealdos. Das Spiel wurde vo...
So steigern Sie die FPS unter Linux?
FPS steht für Bilder pro Sekunde. Die Aufgabe von FPS besteht darin, die Bildrate bei Videowiedergaben oder Spielleistungen zu messen. In einfachen Wo...