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:
- Tener un servidor Web disponible.
- 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.