Przeprowadzam test, tworząc dwa smoły z tego samego katalogu (jego pliki pozostały niezmienione) i stwierdziłem, że ich sumy md5 były różne. Zakładam, że w nagłówku tar znajduje się znacznik czasu, ale nie znalazłem sposobu, aby go zastąpić. Mój system operacyjny to Ubuntu 9.1. Jakieś pomysły ?
Dzięki.
touch filename
która zmiana zmodyfikowanego czasu pliku wystarczy, aby zmienić sumę kontrolną.Odpowiedzi:
Jak wskazał Dennis powyżej, to gzip. Część nagłówka gzip to czas modyfikacji dla wszystkiego, co jest skompresowane w pliku. Jeśli potrzebujesz gzip, możesz skompresować plik tar jako dodatkowy krok poza tar, zamiast używać wewnętrznego gzip tar. Polecenie gzip ma flagę, która powstrzymuje oszczędzanie czasu modyfikacji.
Nie wpłynie to na czasy wewnątrz pliku tar, tylko ten w nagłówku gzip.
źródło
GZIP=-n tar -cz ...
Aby utworzyć plik tar ze spójną sumą kontrolną, po prostu wstaw w
GZIP=-n
następujący sposób:Jak to działa: Tar może akceptować opcje gzip przy użyciu tymczasowej
GZIP
zmiennej środowiskowej, jak wyżej. Jak powiedział Valter, tar używa gzip, który domyślnie umieszcza znacznik czasu w archiwum. Oznacza to, że otrzymujesz inną sumę kontrolną podczas kompresji tych samych plików. Ta-n
opcja wyłącza tę sygnaturę czasową.źródło
Miałem też ten problem, aby gzip nie zmieniał znacznika czasu, użyj
gzip -n
-n, --no-name nie zapisuje ani nie przywraca oryginalnej nazwy i znacznika czasu
Przykład:
źródło
Zaskoczyłem króliczą dziurę po tym, jak inne odpowiedzi zawiodły mnie, i udało mi się dowiedzieć, że moja wersja tar (1.27.1 z repozytorium OSS openSUSE 42.3)
pax
domyślnie używa niedeterministycznego formatu archiwalnego, co oznacza, że nawet bez kompresji (a nawet jawnego ustawienia mtime) archiwa utworzone przy pomocy tar z tych samych plików mogą się różnić:Zauważ, że powyższe dane wyjściowe różnią się, mimo że nie jest używana żadna kompresja ; nieskompresowane treści archiwów (generowane przez dwukrotne uruchomienie tar na tej samej zawartości) są różne, więc skompresowana zawartość będzie się różnić, nawet gdy będzie używana,
GZIP=-n
jak sugerują inne odpowiedziAby obejść ten problem, możesz określić
--format gnu
:Działa to z powyższą sugestią dotyczącą gzip:
Jednak oprócz uzasadnionych powodów preferowania lepszych formatów kompresji niż gzip , możesz rozważyć użycie zamiast tego xz (który tar obsługuje również z flagami
--xz
lub-J
zamiast-z
), ponieważ oszczędza ci to kroku; domyślnym zachowaniemxz
jest generowanie tego samego skompresowanego wyjścia, gdy nieskompresowana zawartość jest taka sama, więc nie ma potrzeby określania opcji takiej jakGZIP=-n
:źródło