Usando sbuild para cambiar paquetes fuente

2018/12/12

Objetivo

Se quieren realizar cambios al paquete supercat para hacerlo reproducible en debian testing (buster).

Como no se desean instalar las dependencias de construcción en el sistema (apt-get build-dep), se quiere utilizar un entorno schroot para crear el source del paquete utilizando sbuild.

En lo que sigue se supone familiaridad con el [nuevo método para probar la reproducibilidad de un paquete en debian][wdo rb howto new method].

Esto está asociado al post setup del nuevo método de pruebas para paquetes reproducibles en debian.

Nota: en lo que sigue se intentará disminuir el tiempo utilizado por sbuild para construir el paquete fuente

Creación de schroot

Se desea generar un nuevo schroot, distinto al utilizado con reprotest, ya que se desea que las dependencias queden instaladas para así acelerar la construcción del paquete fuente.

Para ello se creará un segundo schroot a partir de buster (testing), cuyo nombre será devel-buster:

$ sudo sbuild-createchroot --chroot-prefix=devel-buster \
    --include=eatmydata,ccache,gnupg \
    buster \
    /srv/chroot/devel-buster-amd64-sbuild \
    http://localhost:3142/deb.debian.org/debian

Aquí se agregaron los paquetes eatmydata, ccache y gnupg ya que estos son incluidos en el schroot utilizado para construir el paquete de forma reproducible.

Para agregar las dependencias de construcción del paquete supercat se realizará un rebuild de dicho paquete fuente (sin modificarlo):

$ mkdir -p ~/workspace-rb; cd ~/workspace-rb
$ apt-get source supercat/buster
$ sbuild -c devel-buster-amd64-sbuild --purge-deps=never \
    --source --no-arch-any --no-arch-all supercat-0.5.5/

Nota: la opcion --purge-deps=never es la que se utiliza para acelerar las ejecuciones subsiguientes de sbuild al crear un nuevo paquete fuente.

Nota: si bien el reconstruir el paquete fuente parece superfluo, la ventaja radica en que si existe algún error este se detecta enseguida y este puede atribuirse a la creación del entorno de schroot, ya que no se realizaron cambios al paquete.

Creación del paquete fuente luego de realizar cambios

Para construir una nueva versión del paquete fuente se utilizan los archivos descargados en el paso previo.

Para realizar una prueba se modifica solamente el changelog:

$ cd ~/workspace-rb/supercat-0.5.5/
$ dch -i "Change for test 'build source package'"
$ dch -r ''
$ cd ..

y se vuelve a generar el fuente:

$ sbuild -c devel-buster-amd64-sbuild --purge-deps=never \
    --source --no-arch-any --no-arch-all supercat-0.5.5/

En las pruebas realizadas se pasó de utilizar alrededor de 4m30s en el primer build a 55s en los subsiguientes, por lo que se reconoce la utilidad de utilizar un schroot alternativo.

Anexo

Actualización del schroot

Para actualizar el schroot se puede utilizar:

$ sudo sbuild-update --update --upgrade --clean devel-buster-amd64-sbuild
$ sudo schroot --end-session --all-sessions

Cerrar sesiones abiertas

Hay veces que al cancelar el comando sbuild quedan sesiones colgadas. Para listarlas y eliminarlas se puede utilizar:

$ schroot --all-sessions --list
$ sudo schroot --end-session --all

Nota: el comando anterior elimina todas las sesiones, por lo cual al ejecutarlo no se debe estar utilizando sbuild.