
Configurar un Repositorio Debian propio
Seguramente te pueda ser interesantecrear tus propios paquetes Debian
y hacer que estosestén disponibles
para la descarga de otras personas.
La ventaja de un repositorio creado de esta forma, es que puedes ir subiendo nuevos programas o actualizaciones a tus programas existentes y todo el que tenga configurado tu repositorio, con un simpleapt -y upgrade
tendrá disponibles esos nuevos programas que subas y siempre actualizados los programas con la última versión, sin necesidad de tener que buscar, descargar e instalar a mano cada uno de ellos.
Para mi la forma más sencilla ha sido utilizando una herramienta llamadadareprepro
Te dejo los pasos necesarios para crear paso a paso tu propio repositorio:
REQUISITOS
- Paquete reprepro
- Servidor Apache 2
Atención: Todas las operaciones que se indican en esta guía se deben realizar con el usuario
root
Instalación de reprepro
Procedemos a instalar el programa 'reprepro':
apt -y update
Actualizamos repositorios
apt -y install reprepro
Instalamos reprepro y sus dependencias si fuese necesario
Ahora debemos crear el directorio en donde crearemos toda la estructura necesaria de un típico repositorio Debian.
Vamos a suponer que lo queremos dejar todo en:/var/www/html/repositoriomkdir -p /var/www/html/repositorio/conf
Creamos todas la rutas usando-p
en un único paso.
Por seguridad, toda la paquetería que publiquemos en nuestro repositorio tiene que estarfirmada
, para ello generaremos una clave para que en la subida de los paquetes nuevos o en sus actualizaciones estos estén firmados:
cd /var/www/html/repositorio
Nos cambiamos a la ruta raiz de nuestro repositorio
Y procedmos a la generación completa de la clave:
gpg --full-generate-key
Por favor seleccione tipo de clave deseado: (1) RSA y RSA (por defecto) (2) DSA y ElGamal (3) DSA (sólo firmar) (4) RSA (sólo firmar) Su elección: 4Escogemos la opción4
(4) RSA (sólo firmar)
las claves RSA pueden tener entre 1024 y 4096 bits de longitud. ¿De qué tamaño quiere la clave? (3072) 3072Indicamos que vamos a usar una clave de3072
bits de longitud.
Por favor, especifique el período de validez de la clave. 0 = la clave nunca caduca <n> = la clave caduca en n días <n>w = la clave caduca en n semanas <n>m = la clave caduca en n meses <n>y = la clave caduca en n años ¿Validez de la clave (0)? 0 La clave nunca caduca ¿Es correcto? (s/n) sIndicamos escribiendo0
que la clave nunca caduca
Respondemos cons
para confirmar que es exactamente eso lo que queremos.
GnuPG debe construir un ID de usuario para identificar su clave. Nombre y apellidos: Luis Gu------ Ló--- Dirección de correo electrónico: luisgulo@s*l*c*nlinux.org.es Comentario: Firma de Paquetes Debian Está usando el juego de caracteres 'utf-8'. Ha seleccionado este ID de usuario: "Luis Gu------- Ló--- (Firma de Paquetes Debian)Introduciremos nuestro" ¿Cambia (N)ombre, (C)omentario, (D)irección o (V)ale/(S)alir? V Nombre y apellidos
.
Luego nuestro
Aceptaremos conV
para validar que los datos son correctos.
Nos mostrará un pequeño mensaje durante unos segundos para que generemos algo de "entropía"...
Es necesario generar muchos bytes aleatorios. Es una buena idea realizar alguna otra tarea (trabajar en otra ventana/consola, mover el ratón, usar la red y los discos) durante la generación de números primos. Esto da al generador de números aleatorios mayor oportunidad de recoger suficiente entropía.Nos solicitará laclave
:
┌────────────────────────────────────────────────────────────┐ │ Por favor introduzca frase contraseña para │ │ proteger su nueva clave │ │ │ │ Frase contraseña: ************************** │ │ │ │ <OK> <Cancelar> │ └────────────────────────────────────────────────────────────┘Una vez introducida, nos vuelve a solicitar laclave
.
Terminado el proceso nos mostrará el mensaje de confirmación de que todo ha sido generado correctamente:
gpg: clave ABCDEFGHIJKLMNO marcada como de confianza absoluta gpg: creado el directorio '/root/.gnupg/openpgp-revocs.d' gpg: certificado de revocación guardado como '/root/.gnupg/openpgp-revocs.d/1234567890123456789012345ABCDEFGHIJKLMNO.rev' claves pública y secreta creadas y firmadas. Tenga en cuenta que esta clave no puede ser usada para cifrar. Puede usar la orden "--edit-key" para crear una subclave con este propósito. pub rsa3072 2021-02-02 [SC] 1234567890123456789012345ABCDEFGHIJKLMNO uid Luis Gu------- Ló--- (Firma de Paquetes Debian)Ahora necesitarmos exportar laclave pública
de nuestra clave para publicarla en nuestro repositorio:
gpg --armor --export ABCDEFGHIJKLMNO > /var/www/html/repositorio/repositorio.key
O tambien puedes hacerlo usando el código largo de la clave:
gpg --armor --export 1234567890123456789012345ABCDEFGHIJKLMNO > /var/www/html/repositorio/repositorio.key
NOTA: Actualmente el formato key se ha deprecado. Debes de transformar antes a formato OpenGPG tu clave.
Para ello ejecuta:
cat repositorio.key | gpg --dearmor > mirepo-keyring.gpg
El siguiente paso es crear un fichero que indicará el tipo de distribución de paquetes que ofrecemos desde nuestro repositorio:
cd /var/www/html/repositorio/conf
Nos situamos en el directorio 'conf'
touch distributions
Creamos un fichero vacio con nombre:distributions
Con nuestro editor de texto favorito, por ejemploVim
, lo editamos y dejamos un contenido como este:
Origin: repositorio.tu-dominio Label: repositorio.tu-dominio Codename: buster Architectures: amd64 i386 Components: main contrib non-free Description: Repositorio publico y personal DebIndices: Packages Release . .gz .bz2 SignWith: ABCDEFGHIJKLMNOSustituyetu-dominio
por el nombre de tu propio dominio.
En la entradaSignWith
, debemos de indicarABCDEFGHIJKLMNO
que el código de nuestra propia firma de los paquetes.
Si no la recuerdas, ni lo apuntaste, la podemos volver a consultar mediante el comandogpg --list-keys
.
Graba el fichero y vuelve a la consola.
NOTA: Si queremos distribuir paquetería de más de una version de Sistema Operativo, como por ejemplo buster y bullseye, simplemente deberemos editar el fichero anterior y dejando una linea entre uno y otro copiar las lineas anteriores y cambiar el Codename
Quedando el fichero así:Origin: repositorio.tu-dominio Label: repositorio.tu-dominio Codename: buster Architectures: amd64 i386 Components: main contrib non-free Description: Repositorio publico y personal DebIndices: Packages Release . .gz .bz2 SignWith: ABCDEFGHIJKLMNO Origin: repositorio.tu-dominio Label: repositorio.tu-dominio Codename: bullseye Architectures: amd64 i386 Components: main contrib non-free Description: Repositorio publico y personal DebIndices: Packages Release . .gz .bz2 SignWith: ABCDEFGHIJKLMNO
Debemos usar ahorareprepro
para que genere la estructura de directorios necesarios:
reprepro -VVV export
reprepro -VVV createsymlinks
Configuración del servidor Apache2
Suponemos que ya tenemos nuestro servidor Apache2 funcionando (la instalación y configuración da para un artículo completo), vamos a configurar unVirtualHost
poder tener nuestro repositorio separado de otros servicios web.
Para que el repositorio sea accesible desde internet con una URL similar a:repositorio-tudominio
, vamos a crear la siguiente configuración:
Crea un ficherorepositorio.conf
para realizar esto:
cd /etc/apache2/sites-available
touch repositorio.conf
Editalo para que tenga un contenido similar, cambiando el literaltu-dominio
por el valor correcto:
<VirtualHost *:80> ServerName repositorio.tu-dominio ServerAdmin webmaster@localhost DocumentRoot /var/www/html/repositorio ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined RewriteEngine on RewriteCond %{SERVER_NAME} =repositorio.tu-dominio RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] </VirtualHost> <IfModule mod_ssl.c> <VirtualHost _default_:443> ServerName repositorio.tu-dominio ServerAdmin webmaster@localhost DocumentRoot /var/www/html/repositorio ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> </VirtualHost> </IfModule>
Ahora hay que activar esteVirtualHost
en Apache2, simplemente ejecuta:
a2ensite repositorio.conf
Ya tenemos nuestro propio Repositorio Debian perfectamente creado y configurado
Configuración de los equipos clientes que usen nuestro repositorio
Deberán crear un fichero.list
con el nombre de tu servidor en la ruta de configuración de apt:
touch /etc/apt/sources.list.d/tu-dominio.list
El contenido de este fichero debe de ser:# Repositorio tu-dominio deb http://repositorio.tu-dominio/ buster main contrib non-freeImportar tuclave pública
para confiar en la paquetería que suministras y tener instalado instalado 'apt-transport-https':
apt-get install -y apt-transport-https
Y descargarse e instalar tu clave, mediante el comando:
wget -qO - https://repositorio.tu-dominio/repositorio.key | sudo apt-key add -
Y luego simplemente actualizar la lista de paquetes disponibles de todos los repositorios que tengan configurados:
apt -y update
Gestión de los Paquetes en nuestro repositorio
Incluir paquete Debian en el Repositorio
reprepro -b /var/www/html/repositorio/ includedeb VersionSO fichero.deb
Se incluye en la Sección que tenga definida el paquete por defecto en su fichero DEBIAN/control
VersionSO: Indicar buster, bullseye, etc.
Si queremos forzar a que el paquete se deposite en otra sección usaremos el parámetro-S sección
:
reprepro -S main -b /var/www/html/repositorio/ includedeb VersionSO fichero.deb
Puedes usar las secciones que creaste en el ficherodistributions
en la líneaComponents: main contrib non-free
Eliminar un paquete del Repositorio
reprepro remove buster paquete
Para el borrado es necesario indicar elCodeName
o distribución -buster
- en la que está el paquete (sin .deb) a borrar.
Listar la paquetería de nuestro Repositorio
reprepro -b /var/www/html/repositorio/ list buster
Para listar también es necesario indicar elCodeName
o distribución:buster
.
NOTA: Si en algún momento tienes algun problema conreprepro
al realizar alguna operación, puede ser debido a la petición de la clave, simplemente incluye como parámetro--ask-passphrase
para forzar a que te pida la clave.
Esta guía es una adaptación y ampliación al documento de la wiki: https://wiki.debian.org/DebianRepository/SetupWithReprepro
Autor: Luis Gutiérrez López (luisgulo)
Puedes descargate esta guía en formato PDF