I en automatisert prosess opprettes en isofil med mkisofs
. Selv om de originale dataene er nøyaktig de samme, er de resulterende iso-filene ikke de samme (deres md5sum
endres). Siden jeg rsync --checksum
resultatet, misliker jeg at «samme iso» selvfølgelig blir overført hver gang. Jeg forventer at det meste tidsstemplene er hovedforskjellen.
Er det noen libfaketime
buildin-bryter for å generere en iso via mkisofs
det ville faktisk være det samme.
Jeg vet ikke om bare tidsstempler har betydning? Jeg har sammenlignet de resulterende iso-filene med xxd isofile
-utgangen slik:
diff --side-by-side --suppress-common-lines <(xxd a.iso) <(xxd b.iso )
og det ser ut til å være bare 51 linjer som representerer 16 byte (så omtrent 800 byte av forskjell) i den ellers nøyaktig samme filen.
Kommandoen som brukes til å generere denne aktuelle isoen er omtrent denne:
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: Mangler jeg en kommandolinjeparameterbryter med rsync
som kontrollerer for ~ 1MB biter av store filer, for å forhindre overføring når i mitt tilfelle er det bare 800 byte som er forskjellige?
Kommentarer
Svar
Først en viktig merknad: Ikke bruk genisoimage
da det er en mangelfull variant av en mkisofs
fra mai 2004.
I tiden fram til mai 2007, mange Debian-spesifikke feil har blitt lagt til, og siden er den død.
Det viktige å vite her er at genisoimage
skaper defekte filsystembilder som på et tidspunkt kanskje ikke lenger aksepteres av operativsystemet ditt …
Den offisielle mkisofs
er imidlertid fortsatt aktivt vedlikeholdt og fikset mange ikke-Debian-spesifikke feil i august 2006. Det er foreløpig ingen kjent bugs.
Nå til problemet ditt: Du bruker -R (Rock Rigde) og dette legger til UNIX
som tidsstempler til metadataene for filene. Dette er problem nummer 1 …
Det andre problemet er at superblokken ISO-9660 filsystem (offisielt kalt primær_descriptor) inneholder opprettelsesdato og endringsdato. Sistnevnte kan styres via alternativet -modification-date
.
Hvis du mener dette er en virkelig nødvendig funksjon, kan jeg legge til et lignende alternativ for opprettelsesdatoen. Da trenger du imidlertid fortsatt et alternativ for å fortelle Rock Ridge-formateringsdelen å bruke endringsdatoen for filene i stedet for tidspunktet for siste lesetilgang.
Ofte oppdaterte versjoner av den originale kilden er en del av schilytools
tarball som kan hentes fra: http://sourceforge.net/projects/schilytools/files/
Den siste schilytools tarball introduserte støtte for reporducible ISO-9660 filsystembilder. Hent / kompiler / installer schily-2020-03-27.tar.bz2.
Det er noen få nye alternativer:
-
-noatime
fortellermkisofs
om å arkivere endringstiden når som helst. -
-creation-date
setter opprettelsesdatoen i PVD -
-expiration-date
setter utløpsdatoen i PVD -
-effective-date
setter virkningsdatoen i PVD -
-reproducible-date
angir alle tider unntatt-effective-date
og-noatime
i tillegg.
Dette fungerer for vanilje ISO-9660 filsystembilder, så vel som for bilder som inneholder Rock Ridge
og UDF
. Se den siste man-siden på: http://schilytools.sourceforge.net/man/man8/mkisofs.8.html
Den oppdaterte kommandolinjen din vil se slik ut :
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
for å tvinge det. Det er etlibfaketime
ogfaketime
verktøy for å etterligne systemklokken ved å brukeLD_PRELOAD
(hvis ikke setuid).schilytools
. Den medfølgende forbedredemkisofs
inkluderer støtte for reproduserbare tidsstempler. Se det oppdaterte svaret.