Estructura de los archivos .sources en /etc/apt/sources.list.d en Debian y Ubuntu

Con la llegada de Debian 12 Bookworm y Ubuntu 22.04 Jammy Jellyfish, el sistema de gestión de paquetes APT introdujo un nuevo formato para definir repositorios: los archivos .sources. Estos ficheros reemplazan progresivamente a los tradicionales .list utilizados en /etc/apt/sources.list.d, ofreciendo una estructura más clara, segura y flexible.

¿Qué es un archivo .sources?

Un archivo .sources contiene la información de los repositorios APT en un formato basado en bloques con estilo INI. Cada bloque describe un repositorio y sus propiedades mediante campos con nombre explícito, eliminando ambigüedades y errores comunes del formato anterior.

Estos archivos se guardan en /etc/apt/sources.list.d/ y deben tener extensión .sources.

Estructura básica de un archivo .sources

Un ejemplo sencillo de fichero para añadir el repositorio de Puppet en Debian sería:

Types: deb
URIs: https://apt.puppet.com
Suites: bookworm
Components: puppet7
Architectures: amd64
Signed-By: /usr/share/keyrings/puppet-archive-keyring.gpg

Descripción de cada campo

  • Types: Indica el tipo de repositorio (deb para binarios, deb-src para código fuente).
  • URIs: Dirección o direcciones del repositorio. Pueden especificarse varias separadas por espacios.
  • Suites: Define la distribución o rama (por ejemplo: bookworm, bullseye, jammy, stable).
  • Components: Secciones del repositorio (main, contrib, non-free, etc.).
  • Architectures: (Opcional) Permite restringir la arquitectura (por ejemplo: amd64, arm64).
  • Signed-By: Indica la ruta del archivo de clave GPG que firma el repositorio. Sustituye al obsoleto comando apt-key.

Ejemplos prácticos

Repositorio oficial de Debian

Types: deb deb-src
URIs: http://deb.debian.org/debian
Suites: bookworm
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

Repositorio con múltiples URIs

Types: deb
URIs: https://mirror.eu.debian.org/debian https://deb.debian.org/debian
Suites: bookworm-updates
Components: main
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

Repositorio externo (Google Chrome)

Types: deb
URIs: http://dl.google.com/linux/chrome/deb/
Suites: stable
Components: main
Architectures: amd64
Signed-By: /usr/share/keyrings/google-linux-signing-key.gpg

Ventajas del nuevo formato .sources

  • Mayor legibilidad: Cada campo se define explícitamente, evitando errores de sintaxis.
  • Soporte nativo para Signed-By: Mejora la seguridad al usar claves almacenadas en /usr/share/keyrings.
  • Compatibilidad con múltiples URIs: Permite definir varios mirrors en un mismo bloque.
  • Mantenimiento simplificado: Más fácil de automatizar y convertir desde scripts.

Conversión de .list a .sources (opcional)

Si todavía usas ficheros .list, puedes convertirlos fácilmente al nuevo formato. A continuación, un ejemplo de script bash que transforma un archivo de sources.list clásico en un archivo .sources moderno:

#!/bin/bash
# convertir-list-a-sources.sh
# Convierte un archivo .list de APT en un archivo .sources compatible

LIST_FILE="/etc/apt/sources.list"
OUT_FILE="/etc/apt/sources.list.d/custom.sources"
KEYRING="/usr/share/keyrings/debian-archive-keyring.gpg"
ARCH="amd64"

echo "Types: deb" > "$OUT_FILE"
echo -n "URIs:" >> "$OUT_FILE"
grep -E "^deb " "$LIST_FILE" | awk '{print " " $2}' >> "$OUT_FILE"
echo "Suites: $(lsb_release -cs)" >> "$OUT_FILE"
echo "Components: main contrib non-free" >> "$OUT_FILE"
echo "Architectures: $ARCH" >> "$OUT_FILE"
echo "Signed-By: $KEYRING" >> "$OUT_FILE"

echo "Archivo convertido a formato .sources: $OUT_FILE"

Conclusión

El formato .sources es la evolución natural del sistema de repositorios de APT en Debian y Ubuntu. Ofrece mayor seguridad, legibilidad y flexibilidad, facilitando la gestión automatizada y el mantenimiento de sistemas. Si aún usas los antiguos ficheros .list, este es el momento ideal para migrar.