W zautomatyzowanym procesie tworzony jest plik iso z mkisofs
. Nawet jeśli oryginalne dane są dokładnie takie same, wynikowe pliki iso nie są takie same (ich md5sum
zmienia się). Ponieważ rsync --checksum
wynik, nie podoba mi się, że „to samo iso” jest oczywiście przesyłane ponownie za każdym razem. Spodziewam się, że główną różnicą będą głównie sygnatury czasowe.
Czy jest jakiś przełącznik libfaketime
do generowania iso przez mkisofs
to rzeczywiście byłoby to samo.
Nie wiem, czy liczą się tylko sygnatury czasowe? Porównałem wynikowe pliki iso z ich xxd isofile
wyjściem w następujący sposób:
diff --side-by-side --suppress-common-lines <(xxd a.iso) <(xxd b.iso )
i wydaje się, że jest tylko 51 wierszy reprezentujących 16 bajtów (czyli około 800 bajtów różnicy) w innym dokładnie tym samym pliku.
Polecenie użyte do wygenerowania tego iso to z grubsza to:
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: Czy brakuje mi przełącznika parametru wiersza poleceń z rsync
, który sprawdza sumę kontrolną dla ~ 1 MB fragmentów dużych plików, aby zapobiec ponownemu transferowi, gdy w moim przypadku tylko jakieś 800 bajtów się różni?
Komentarze
Odpowiedź
Najpierw ważna uwaga: nie używaj genisoimage
ponieważ jest to wadliwa odmiana mkisofs
z maja 2004 r.
Do maja 2007 r. wiele błędów specyficznych dla Debiana zostały dodane i od tego czasu są martwe.
Ważne jest, aby wiedzieć, że genisoimage
tworzy wadliwe obrazy systemu plików, które w pewnym momencie mogą nie być już akceptowane przez Twój system operacyjny …
Oficjalny mkisofs
jest jednak nadal aktywnie obsługiwany i naprawiany wiele błędów niezwiązanych z Debianem w sierpniu 2006 r. Obecnie nie są znane żadne błędy.
A teraz do twojego problemu: używasz -R (Rock Rigde) i to dodaje UNIX
jak znaczniki czasu do metadanych plików. To jest problem numer 1 ….
Innym problemem jest to, że superblok systemu plików ISO-9660 (oficjalnie nazywany podstawowym_deskryptorem) zawiera datę utworzenia i datę modyfikacji. Tym ostatnim można sterować za pomocą opcji -modification-date
.
Jeśli uważasz, że jest to naprawdę potrzebna funkcja, mógłbym dodać podobną opcję dla daty utworzenia. Wtedy jednak nadal będziesz potrzebować opcji, aby powiedzieć części formatowania Rock Ridge, aby używała daty modyfikacji plików zamiast czasu ostatniego dostępu do odczytu.
Często aktualizowane wersje oryginalnego źródła są częścią schilytools
archiwum, które można pobrać z: http://sourceforge.net/projects/schilytools/files/
W najnowszym tarballu schilytools wprowadzono obsługę repordukowalnych obrazów systemu plików ISO-9660. Pobierz / skompiluj / zainstaluj schily-2020-03-27.tar.bz2.
Jest kilka nowych opcji:
-
-noatime
mówimkisofs
, aby zarchiwizować czas modyfikacji jako atime. -
-creation-date
ustawia datę utworzenia w PVD -
-expiration-date
ustawia datę wygaśnięcia w PVD -
-effective-date
ustawia datę wejścia w życie w PVD -
-reproducible-date
ustawia wszystkie czasy oprócz-effective-date
i dodatkowo-noatime
.
Działa to dla zwykłych obrazów systemu plików ISO-9660, a także dla obrazów zawierających Rock Ridge
i UDF
. Zobacz ostatnią stronę podręcznika pod adresem: http://schilytools.sourceforge.net/man/man8/mkisofs.8.html
Twój zaktualizowany wiersz poleceń wyglądałby w ten sposób :
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
--no-W
, aby to wymusić. Istniejelibfaketime
ifaketime
narzędzie do emulacji zegara systemowego za pomocąLD_PRELOAD
(jeśli not setuid).schilytools
. Dołączone ulepszonemkisofs
obejmują obsługę odtwarzalnych znaczników czasu. Zobacz zaktualizowaną odpowiedź.