mkctr produces a different files layer on every build

Aperta Adatta ai principianti
#35 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

  • #37 di @RaphaelFakhri — chiusa senza merge

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
82/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
go
Ambito
build-system

Direzione di ricerca

Inizia dalla funzione layerFromFiles e analizza come itera sulla map files per gli output --files e --gopaths. Riproduci il problema chiamando più volte layerFromFiles con cinque file e confrontando layer.DiffID(); il lavoro è completato quando input identici producono digest di layer identici.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Two mkctr runs with identical inputs write layers with different digests. The tar entries for the --files and --gopaths outputs are written in random order, so the images are not reproducible.

layerFromFiles ranges over the files map. Go randomizes map iteration order, so the file entries and the parent directory headers land in the tar in a different order each time. The header code sets ModTime to the zero time with the comment "to make the images reproducible", so the ordering is the remaining source of variation.

To reproduce, call layerFromFiles several times with a map of five files and compare layer.DiffID(). The digests differ between calls.

The expected behavior is that identical inputs produce an identical layer. Visiting the sources in sorted order fixes it.

Lingua principale
Go
Stelle
101
Fork
10
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di tailscale/mkctr

Tutte le issue di tailscale/mkctr

Issue simili

Altre issue su Go

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.