mkctr produces a different files layer on every build

Abierto Apto para principiantes
#35 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

  • #37 de @RaphaelFakhri — cerrado sin fusionar

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
82/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
go
Área
build-system

Línea de trabajo

Comienza en la función layerFromFiles e inspecciona cómo recorre el mapa files para las salidas --files y --gopaths. Reproduce el problema llamando varias veces a layerFromFiles con cinco archivos y comparando layer.DiffID(); se considera terminado cuando entradas idénticas producen resúmenes de capa idénticos.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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.

Lenguaje dominante
Go
Estrellas
101
Forks
10
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de tailscale/mkctr

Todos los issues de tailscale/mkctr

Issues similares

Más issues de Go

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.