Publicado 2018-11-16.
Palabras clave: debian reproducible-builds
El sistema en el cual se trabajará es debian testing (buster) amd64.
NOTA: A raíz del artículo se modificó la wiki de debian (revisión 79).
La guía para preparar el entorno se puede encontrar en la wiki de debian.
El nuevo método requiere que se cree un schroot, lo cual se detalla en otra
página de la wiki.
Ya que utilizando este método se deben descargar una y otra vez los paquetes, se
utilizará en su lugar el paquete sbuild-debian-developer-setup
que cuenta con
las siguientes ventajas:
Instala como dependencia apt-cacher-ng
, de la página del
manual:
Apt-Cacher NG is a caching proxy for software packages which are down- loaded by Unix/Linux system distribution mechanisms from mirror servers accessible via HTTP.
Con apt-cacher-ng
se evita que los paquetes se descarguen más de una vez.
Agrega un script para actualizar los schroot
que se ejecuta
automáticamente mediante cron
.
NOTA: Para utilizar el caché de apt-cacher-ng
hay que utilizar como
repositorio: http://localhost:3142/deb.debian.org/debian
.
Respecto al uso de reprotest
, este tiene problemas conocidos relativos a la
variación del dominio o host dentro de un virtual-server, los cuales se
detallan en la página del manual de reprotest:
The non-sudo method fails with "Operation not permitted", even if you edited /proc/sys/kernel/unprivileged_userns_clone. The cause is currently unknown. The sudo method works only if you take measures to avoid sudo password prompts, since containers don't have a method to input this.
Para probar la diferencia entre los paquetes generados se utiliza diffoscope
,
el cual es instalado como dependencia de reprotest
.
$ sudo apt-get install -Vy sbuild-debian-developer-setup reprotest
$ sudo sbuild-adduser $LOGNAME
$ newgrp sbuild
$ sudo sbuild-createchroot --include=eatmydata,ccache,gnupg buster \
/srv/chroot/buster-amd64-sbuild \
http://localhost:3142/deb.debian.org/debian
Luego se permite el uso de sudo sin password con el schroot para poder utilizar la variación del dominio o host:
$ reprotest --print-sudoers \
--variations=user_group.available+=guest-builder,domain_host.use_sudo=1 \
| sudo EDITOR=tee visudo -f /etc/sudoers.d/local-reprotest
$ echo "/etc/sudoers.d/local-reprotest /etc/sudoers.d/local-reprotest none bind 0 0" \
| sudo tee -a /srv/chroot/buster-amd64-sbuild/etc/fstab
Para probar el entorno se utilizará el paquete supercat como se indicó anteriormente.
Para ello se agrega el repositorio de fuentes para testing (buster) a apt
si
este aún no fué agregado:
$ echo "deb-src http://deb.debian.org/debian/ buster main" | sudo tee /etc/apt/sources.list.d/buster-src.list
$ sudo apt-get update
Se descarga el fuente del paquete:
$ mkdir -p ~/workspace-rb; cd ~/workspace-rb
$ apt-get source supercat/buster
Luego para comprobar si el paquete es reproducible se utiliza reprotest
.
$ time sudo reprotest \
--vary=-build_path,domain_host.use_sudo=1 \
--store-dir=output-$(date -u +%s) \
--auto-build supercat_0.5.5-4.3.dsc \
-- schroot buster-amd64-sbuild
NOTAS:
Se debe configurar para la variación domain_host el parámetro use_sudo=1, en caso contrario se obtiene un error del tipo:
WARNING:reprotest.build:Not using sudo for domain_host; your build may fail. See man page for other options.
WARNING:reprotest.build:Be sure to `echo 1 > /proc/sys/kernel/unprivileged_userns_clone` if on a Debian system.
Note, using file './supercat_0.5.5-4.3.dsc' to get the build dependencies
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
unshare: unshare failed: Opération non permise
Se agrega la opción --store-dir para salvar los artefactos generados por
reprotest
.
La opción --auto-build es utilizada para realizar builds adicionales con difefentes variaciones para intentar determinar cuales pueden ser el origen del no determinismo si el paquete no es reproducible despues de dos builds.
Se ejecuta utilizando sudo
para evitar los errores del tipo:
Nous esp�rons que vous avez re�u de votre administrateur syst�me local les consignes traditionnelles. G�n�ralement, elles se concentrent sur ces trois �l�ments�:
#1) Respectez la vie priv�e des autres.
#2) R�fl�chissez avant d'utiliser le clavier.
#3) De grands pouvoirs conf�rent de grandes responsabilit�s.
sudo: sin tty presente y no hay programa askpass especificado