Objetivos
- Crear entorno de trabajo para builds reproducibles en debian buster (testing).
- Probar el entorno con el paquete supercat que aparece como no reproducible a la fecha.
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).
Preparación del entorno
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 mediantecron
.
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
Prueba del entorno
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