Ich untersuche reproduzierbare Builds und möchte, dass dies mit einem Skript endet, das ein konstantes VM-Image enthält, das meine Build-Umgebung enthält. Im Moment werde ich Probleme mit Zeitstempeln und anderen Quellen von Unterschieden beiseite legen. Mit " konstant " meine ich eine reproduzierbare Umgebung. Mir ist die Anstrengung von Debian ReproducibleBuilds bekannt, die Paketversionen erfordert, um einen identischen Build zu gewährleisten. Ich möchte etwas ähnliches, aber im System - Ebene.
Ich habe mit Alpine angefangen, wodurch ich sehr leicht eine VM erstellen kann, die auf einer bestimmten Version basiert .
Wie mache ich dasselbe für Debian, das beispielsweise die Stretch- Releases 9.0 bis 9.4 enthält?
Das Beste, was ich bisher finden konnte, war folgendes: Ich habe mir das Release-Änderungsprotokoll angesehen und dann den nächsten Snapshot als Paketquelle für debootstrap verwendet .
$ wget -q -O- http://ftp.debian.org/debian/dists/stretch/ChangeLog | grep "Debian.*released" Sat, 10 Mar 2018 - Debian 9.4 released Sat, 09 Dec 2017 - Debian 9.3 released Sat, 07 Oct 2017 - Debian 9.2 released Sat, 22 Jul 2017 - Debian 9.1 released Sat, 17 Jun 2017 - Debian 9.0 released $ # Looking at release 9.2 $ wget -q -O- "http://snapshot.debian.org/archive/debian/?year=2017&month=10" | html2text | sed -e 's/[:-]//g' -e 's/_/T/g' | awk '/20171007/ ' http://snapshot.debian.org/archive/debian/20171007T032909Z/ http://snapshot.debian.org/archive/debian/20171007T103908Z/ http://snapshot.debian.org/archive/debian/20171007T213914Z/ $ mkdir -p chroot_stretch_20171007T103908Z $ sudo debootstrap --arch=amd64 --variant=minbase stretch chroot_stretch_20171007T103908Z http://snapshot.debian.org/archive/debian/20171007T103908Z/ I: Retrieving InRelease I: Retrieving Release I: Retrieving Release.gpg I: Checking Release signature I: Valid Release signature (key id 067E3C456BAE240ACEE88F6FEF0F382A1A7B6500) I: Retrieving Packages (...) $ find -maxdepth 1 -name "chroot_stretch_2017100*" | sort | while read d; do echo $d; cat $d/etc/debian_version; sudo chroot $d apt-cache policy | grep stretch; echo ""; done ./chroot_stretch_20171006T213452Z 9.1 500 http://snapshot.debian.org/archive/debian/20171006T213452Z stretch/main amd64 Packages release v=9.1,o=Debian,a=stable,n=stretch,l=Debian,c=main,b=amd64 ./chroot_stretch_20171007T032909Z 9.1 500 http://snapshot.debian.org/archive/debian/20171007T032909Z stretch/main amd64 Packages release v=9.1,o=Debian,a=stable,n=stretch,l=Debian,c=main,b=amd64 ./chroot_stretch_20171007T103908Z 9.1 900 http://snapshot.debian.org/archive/debian/20171007T103908Z stretch/main amd64 Packages release v=9.2,o=Debian,a=stable,n=stretch,l=Debian,c=main,b=amd64 ./chroot_stretch_20171007T213914Z 9.1 500 http://snapshot.debian.org/archive/debian/20171007T213914Z stretch/main amd64 Packages release v=9.2,o=Debian,a=stable,n=stretch,l=Debian,c=main,b=amd64 ./chroot_stretch_20171008T032534Z 9.1 500 http://snapshot.debian.org/archive/debian/20171008T032534Z stretch/main amd64 Packages release v=9.2,o=Debian,a=stable,n=stretch,l=Debian,c=main,b=amd64
Wie wir sehen, ändert sich das Release-Tag aus der apt-cache-Richtlinie zwischen zwei Snapshots desselben Tages. Allerdings / etc / debian_version nicht aktualisiert, auch wenn bei der Suche Basis-Dateipaketversionen zeigt eine neue Version zur Verfügung gestellt. Beachten Sie, dass bei einer Veröffentlichung kein expliziter Snapshot erstellt wird. Daher ist dieser Ansatz "Best Effort". Folglich gibt es mehrere Möglichkeiten, zu definieren, was Debian Version 9.2 ist.
Ich verstehe den Punkt der Punktveröffentlichungen nicht wirklich, wenn es keine einfache Möglichkeit gibt, auf sie zu zielen. Daher muss etwas Offensichtliches fehlen.