In einem automatisierten Prozess wird eine ISO-Datei mit mkisofs erstellt. Auch wenn die Originaldaten genau gleich sind, sind die resultierenden ISO-Dateien nicht gleich (ihre md5sum -Änderungen). Da ich rsync --checksum das Ergebnis bin, mag ich es nicht, dass die „gleiche ISO“ natürlich jedes Mal erneut übertragen wird. Ich erwarte, dass hauptsächlich Zeitstempel den Hauptunterschied ausmachen.

Gibt es einen libfaketime eingebauten Schalter, um eine ISO über mkisofs das wäre ja das gleiche.

Ich weiß nicht, ob nur Zeitstempel wichtig sind? Ich habe die resultierenden ISO-Dateien mit ihrer xxd isofile Ausgabe wie folgt verglichen:

diff --side-by-side --suppress-common-lines <(xxd a.iso) <(xxd b.iso ) 

und es scheint nur solche zu geben 51 Zeilen, die 16 Bytes (also ungefähr 800 Bytes Unterschied) in der sonst genau gleichen Datei darstellen.

Der Befehl, der zum Generieren dieser fraglichen ISO verwendet wird, lautet ungefähr folgendermaßen:

genisoimage -o "file.iso" -b isolinux/isolinux.bin \ -c isolinux/boot.cat -no-emul-boot \ -boot-load-size 4 -boot-info-table \ -J -R -v -T -V "CDLABEL" "datadir/" 

BS: Fehlt mir ein Befehlszeilen-Parameer-Schalter mit rsync, der eine Prüfsumme für ~ 1 MB große Dateien erstellt, um die erneute Übertragung zu verhindern, wenn als in meinem Fall unterscheiden sich nur etwa 800 Bytes?

Kommentare

  • rsync überprüft normalerweise Teile von Dateien, um Aktualisierungen zu optimieren, jedoch nicht, wenn beide scheinbar lokal sind (z. B. auf nfs). Fügen Sie --no-W hinzu, um dies zu erzwingen. Es gibt ein Dienstprogramm libfaketime und faketime zum Emulieren der Systemuhr mithilfe von LD_PRELOAD (if nicht setuid).
  • Hallo, ich habe gerade eine neue Version von schilytools veröffentlicht. Das mitgelieferte erweiterte mkisofs bietet Unterstützung für reproduzierbare Zeitstempel. Siehe die aktualisierte Antwort.

Antwort

Zuerst ein wichtiger Hinweis: Verwenden Sie nicht genisoimage, da es sich um eine fehlerhafte Variante eines mkisofs von Mai 2004 handelt.

In der Zeit bis Mai 2007 gab es viele Debian-spezifische Fehler wurden hinzugefügt und seitdem ist es tot.

Wichtig hierbei ist, dass genisoimage fehlerhafte Dateisystem-Images erstellt, die zu einem bestimmten Zeitpunkt möglicherweise nicht mehr akzeptiert werden von Ihrem Betriebssystem …

Die offizielle mkisofs wird jedoch weiterhin aktiv gepflegt und hat im August 2006 viele nicht Debian-spezifische Fehler behoben. Derzeit sind keine bekannt Fehler.

Nun zu Ihrem Problem: Sie verwenden -R (Rock Rigde) und dies fügt den Metadaten der Dateien UNIX ähnliche Zeitstempel hinzu. Dies ist Problem Nummer 1 ….

Das andere Problem besteht darin, dass der Superblock des ISO-9660-Dateisystems (offiziell als Primärbeschreibung bezeichnet) das Erstellungsdatum und das Änderungsdatum enthält. Letzteres kann über die Option -modification-date gesteuert werden.

Wenn Sie der Meinung sind, dass dies eine wirklich benötigte Funktion ist, könnte ich eine ähnliche Option für das Erstellungsdatum hinzufügen. Dann benötigen Sie jedoch immer noch eine Option, um den Rock Ridge-Formatierungsteil anzuweisen, das Änderungsdatum der Dateien anstelle des Zeitpunkts des letzten Lesezugriffs zu verwenden.

Häufig aktualisierte Versionen der Originalquelle sind Teil von Der Tarball schilytools, der abgerufen werden kann von: http://sourceforge.net/projects/schilytools/files/

Der derzeit neueste Schilytools-Tarball hat die Unterstützung für wiederbeschaffbare ISO-9660-Dateisystem-Images eingeführt. Bitte holen / kompilieren / installieren Sie schily-2020-03-27.tar.bz2.

Es gibt einige neue Optionen:

  • -noatime weist mkisofs an, die Änderungszeit als Zeitpunkt zu archivieren.

  • -creation-date legt das Erstellungsdatum in der PVD fest

  • -expiration-date legt das Ablaufdatum in der PVD fest

  • -effective-date legt das Datum des Inkrafttretens in der PVD fest

  • -reproducible-date setzt alle Zeiten außer -effective-date und -noatime zusätzlich.

Dies funktioniert sowohl für Vanilla ISO-9660-Dateisystem-Images als auch für Images, die Rock Ridge und . Die aktuelle Manpage finden Sie unter: http://schilytools.sourceforge.net/man/man8/mkisofs.8.html

Ihre aktualisierte Befehlszeile würde so aussehen :

mkisofs -b isolinux/isolinux.bin \ -c isolinux/boot.cat -no-emul-boot \ -boot-load-size 4 -boot-info-table \ -J -R -v -T -V "CDLABEL" \ -reproducible-date=20200327 "datadir/" > file.iso 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.