Gibt es eine Möglichkeit, eine .tar
-Datei zu erstellen, die die Werte von atime / ctime / mtime für ihre Dateien / Verzeichnisse auslässt?
Wir haben einen Schritt in unserem Build-Prozess, der ein Verzeichnis von Artefakten generiert, das in eine TAR-Datei gepackt wird. Wir erwarten, dass der Build-Schritt idempotent ist - bei gleichen Eingaben erzeugt er genau jedes Mal die gleichen Dateien / Ausgaben.
Idealerweise möchten wir auch, dass der Schritt über cleane Builds bitweise idempotent ist, so dass wir Hashes aufeinanderfolgender Builds verwenden können, um zu überprüfen, ob sich nichts geändert hat. Da die TAR-Dateien für jeden Eintrag Zeitstempel (atime / ctime / mtime) enthalten, sind die von diesem Erstellungsschritt erstellten TAR-Dateien niemals bitweise identisch mit dem vorherigen, obwohl der Inhalt jeder Datei innerhalb des Archivs > ist. em> bitweise identisch.
Gibt es eine Möglichkeit, ein Tarfile zu generieren, das die Zeitstempel seiner Einträge auslässt, so dass der Schritt, der das Archiv erzeugt, bitweise idempotent sein könnte? (Wir möchten andere Dateimetadaten nutzen, die tar
beibehalten, z. B. Dateimodus-Bits und Symlinks.)
GNU-tar hat ein Argument --mtime
, das verwendet werden kann, um ein festes Datum im Archiv zu speichern und nicht die tatsächliche Zeit einer Datei:
Wenn Sie einen Tarball mit gzip komprimieren, müssen Sie auch -n
angeben, um zu verhindern, dass Name und Zeitstempel des tar-Archivs gespeichert werden:
Wir können die TAR-Datei ohne Zeitstempel erstellen, die an sie angehängt wird.
1) Erstellen Sie eine TAR-Datei ohne Komprimierung und Zeitstempel
%Vor%2) Erstellen Sie eine TAR-Datei mit Komprimierung und ohne Zeitstempel
%Vor%3) Alternativer Weg
%Vor%Hinweis: '-n' fügt Zeitstempel und Namen nicht hinzu
4) TAR-Datei extrahieren
%Vor%Um zu überprüfen, dass Sie das tun können
%Vor%