Creando un repositorio Debian personal


La idea es tener un repositorio de paquetes DEB que voy descargando de diferentes fuentes o incluso propios alojados en algún servidor Web para no tener que actualizar máquina por máquina manualmente. El objetivo es que sea un método simple y que no requiera ni tiempo ni esfuerzo mantenerlo.

Aunque actualmente existen PPAs con cantidad de software extra y actualizado, no siempre esto es una solución. Por ejemplo, este blog está hecho con Hugo y éste se distribuye desde GitHub ya empaquetado en formato DEB, pero cada vez que sale una versión tengo que actualizar manualmente el ordenador del trabajo, el portátil y el sobremesa de casa. Así que con esta solución actualizo el repositorio y en la próxima actualización del sistema se actualizan todos.

Algunas referencias con más información al respecto:

Para poner en funcionamiento el respositorio debemos cumplir los siguientes requisitos:

  1. Tener un servidor Web disponible.
  2. Tener una clave GPG para poder firmar los paquetes, en el ejemplo uso minombre@midominio.es

Suponiendo una instalación básica con Apache2 en Debian las páginas Web públicas están en /var/www/html así que se puede crear un directorio /var/www/html/debian para contener todos los paquetes.

Hay que asegurarse tener las herramientas necesarias:

apt install dpkg-dev dpkg-sig

Ahora para automatizar el proceso uso un makefile, así que solo hay que añadirlo en /var/www/html/debian y ejecutar make cada vez que quieras actualizar el repositorio. Por si no lo tienes claro, debes crear un fichero con el nombre makefile en el directorio. Puedes copiar el contenido mostrado, al pegas desde aquí, los tabuladores se cambiarán por espacios y el comando make fallará. Acuérdate de editar lo pegado y cambiar los 4 espacios por tabuladores en todas las líneas.

#!/usr/bin/make -f

all: clean
    dpkg-scanpackages . /dev/null > Packages
    apt-ftparchive release . > Release
    gpg --default-key "minombre@midominio.es" -abs -o Release.gpg Release
    gpg --default-key "minombre@midominio.es" --clearsign -o InRelease Release
    chmod ugo+r *
clean:
    rm -f InRelease Release Packages.gz Release.gpg

Ahora en los equipos que usarán este repositorio sólo hay que añadir la dirección del servidor Web, por ejemplo en /etc/apt/sources.list.d/mirepo.list:

deb http://mi-servidor.com/debian /

Pero tras ejecutar apt update te protestará porque no está la clave pública del firmante de repositorio. En el ejemplo anterior he usado minombre@midominio.es, debes añadir la clave pública usando apt-key y todo funcionará correctamente.

Cada vez que añadas o borres paquetes en ese directorio sólo tendrás que ejecutar make de nuevo y mágicamente están listas las actualizaciones.

#Debian #APT