mkctr produces a different files layer on every build

Ouverte Adaptée aux débutants
#35 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

  • #37 par @RaphaelFakhri — fermée sans fusion

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
82/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
go
Domaine
build-system

Piste de recherche

Commencez par la fonction layerFromFiles et examinez comment elle parcourt la map files pour les sorties --files et --gopaths. Reproduisez le problème en appelant plusieurs fois layerFromFiles avec cinq fichiers et en comparant layer.DiffID() ; le travail est terminé lorsque des entrées identiques produisent des digests de couche identiques.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

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.

Langage dominant
Go
Étoiles
101
Forks
10
Métriques de merge des PR
Aucune PR mergée en 30 j

Préparer son environnement

Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de tailscale/mkctr

Toutes les issues de tailscale/mkctr

Issues similaires

Plus d'issues Go

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.