mkctr produces a different files layer on every build

Aberta Para iniciantes
#35 0 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

  • #37 de @RaphaelFakhri — fechado sem integrar

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
82/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
go
Domínio
build-system

Direção de pesquisa

Comece pela função layerFromFiles e inspecione como ela percorre o mapa files para as saídas --files e --gopaths. Reproduza o problema chamando layerFromFiles várias vezes com cinco arquivos e comparando layer.DiffID(); considera-se concluído quando entradas idênticas produzem digests de layer idênticos.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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.

Linguagem predominante
Go
Estrelas
101
Forks
10
Métricas de merge de PRs
Nenhum PR com merge em 30d

Preparar o ambiente

Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de tailscale/mkctr

Todas as issues de tailscale/mkctr

Issues semelhantes

Mais issues de Go

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.