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

  • rsync sjekker vanligvis deler av filer for å optimalisere oppdateringer, men ikke hvis de begge tilsynelatende er lokale (f.eks. på nfs). Legg til --no-W for å tvinge det. Det er et libfaketime og faketime verktøy for å etterligne systemklokken ved å bruke LD_PRELOAD (hvis ikke setuid).
  • Hei, jeg har nettopp publisert en ny versjon av schilytools. Den medfølgende forbedrede mkisofs inkluderer støtte for reproduserbare tidsstempler. Se det oppdaterte svaret.

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 forteller mkisofs 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 

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *