Tener cada repositorio (o colección de repositorios) en su propio archivo simplifica su administración, tanto a mano como mediante programación:
- Permite que las nuevas instalaciones que necesitan sus propios repositorios no tengan que buscar un archivo plano para asegurarse de que no agregue entradas duplicadas.
- Permite que un administrador del sistema inhabilite fácilmente (cambiando el nombre) o elimine (eliminando) un conjunto de repositorios sin tener que editar un archivo monolítico.
- Permite que un mantenedor de paquetes dé un comando simple para actualizar las ubicaciones de los repositorios sin tener que preocuparse por cambiar inadvertidamente la configuración de los repositorios no relacionados.
En un nivel técnico, como alguien que ha tenido que manejar estos cambios en algunas herramientas de información del sistema grandes y populares, básicamente todo se reduce a esto:
Para fuentes.list.d/
# to add
if [[ ! -e /etc/apt/sources.list.d/some_repo.list ]];then
echo 'some repo line for apt' > /etc/apt/sources.list.d/some_repo.list
fi
# to delete
if [[ -e /etc/apt/sources.list.d/some_repo.list ]];then
rm -f /etc/apt/sources.list.d/some_repo.list
fi
Tenga en cuenta que, a menos que también estén haciendo la misma verificación que se muestra a continuación, si hubiera comentado una línea de repositorio, estas pruebas serían incorrectas. Si están haciendo la misma verificación que a continuación, entonces es exactamente la misma complejidad, excepto que se lleva a cabo en muchos archivos, no en uno. Además, a menos que estén revisando TODOS los archivos posibles, pueden, y a menudo lo hacen, agregar un elemento duplicado, lo que luego hace que se quejen, hasta que elimine uno de ellos.
Para fuentes.lista
# to add. Respect commented out lines. Bonus points for uncommenting
# line instead of adding a new line
if [[ -z $( grep -E '\s*[^#]\s*some repo line for apt' /etc/apt/sources.list ) ]];then
echo 'some repo line for apt' >> /etc/apt/sources.list
fi
# to delete. Delete whether commented out or not. Bonus for not
# deleting if commented out, thus respecting the user's wishes
sed -i '/.*some repo line for apt.*/d' /etc/apt/sources.list
Los desarrolladores de Google Chrome no verificaron la presencia de las fuentes de Google Chrome, confiando en el nombre de archivo exacto que su paquete de Chrome crearía para estar presente. En todos los demás casos, crearían un nuevo archivo en sources.list.d con el nombre exacto que querían.
Para ver qué fuentes tiene, por supuesto, no es tan bonito, ya que no puede ser más fácil de leer y mantener que:
cat /etc/sources.list
Así que esto se hizo básicamente con el propósito de actualizaciones automáticas y para proporcionar comandos sencillos que podría dar a los usuarios, por lo que sé. Para los usuarios, significa que tienen que leer muchos archivos en lugar de 1 archivo para ver si tienen un repositorio agregado, y para apt, significa que tiene que leer muchos archivos en lugar de un archivo también.
Ya que en el mundo real, si ibas a hacer esto bien, tienes que soportar verificaciones contra todos los archivos, sin importar cómo se llamen, y luego probar si la acción a realizar es requerida o no.
Sin embargo, si no fuera a hacerlo bien, simplemente ignoraría las comprobaciones para ver si el elemento está en algún lugar de las fuentes y simplemente verificaría el nombre del archivo. Creo que eso es lo que hace la mayoría de las cosas automatizadas, pero dado que al final, simplemente tenía que verificar todo para poder enumerarlo y actuar en función de si uno de esos archivos coincidía, el único resultado real fue hacerlo mucho más complicado.
Ediciones masivas
Dado que se ejecutan muchos servidores, me sentiría tentado a escribir un trabajo nocturno que recorra /etc/apt/sources.list.d/ y verifique primero para asegurarse de que el elemento no esté ya en sources.list, luego si lo está no, agregue ese elemento a source.list, elimine el archivo source.list.d y, si ya está en source.list, simplemente elimine el archivo source.list.d
Dado que NO hay nada negativo en usar solo source.list más allá de la simplicidad y la facilidad de mantenimiento, agregar algo así podría no ser una mala idea, particularmente dadas las acciones creativas aleatorias de los administradores de sistemas.
Como se señaló en el comentario anterior, inxi -r imprimirá ordenadamente por archivo los repositorios activos, pero, por supuesto, no los editará ni modificará, por lo que sería solo la mitad de la solución. Si se trata de muchas distribuciones, es un fastidio aprender cómo lo hace cada una, eso es seguro, y la aleatoriedad ciertamente es la regla y no la excepción, lamentablemente.
Si está administrando manualmente sus servidores, estaré de acuerdo en que hace las cosas más confusas. Sin embargo, beneficia la gestión programática (es decir, "configuración como código"). Cuando se utiliza software de administración de configuración como Puppet, Ansible, Chef, etc., es más fácil soltar o eliminar un archivo en un directorio y ejecutar apt update
, en lugar de analizar un archivo para agregar o eliminar ciertas líneas.
Especialmente porque eso evita tener que administrar el contenido de un solo recurso de 'archivo', por ejemplo:/etc/apt/sources.list
, de múltiples módulos independientes que han sido escritos por terceros.
Aprecio el amplio uso que hace Ubuntu de los directorios ".d" por este motivo en particular, es decir, sudoers.d, rsyslog.d, sysctl.d., cron.d, logrotate.d, etc.