Setup del nuevo método de pruebas para paquetes reproducibles en debian

2018/11/16

Objetivos

  1. Crear entorno de trabajo para builds reproducibles en debian buster (testing).
  2. 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:

  1. 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.

  2. 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

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:

  1. 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
    
  2. Se agrega la opción –store-dir para salvar los artefactos generados por reprotest.

  3. 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.

  4. 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