Saltar al contenido

¿Cuál es el beneficio de /etc/apt/sources.list.d sobre /etc/apt/sources.list?

Solución:

Tener cada repositorio (o colección de repositorios) en su propio archivo hace que sea más fácil de administrar, tanto de forma manual como programática:

  • Permite que las nuevas instalaciones que necesitan sus propios repositorios no tengan que buscar un archivo plano para asegurarse de que no está agregando entradas duplicadas.
  • Permite que un administrador del sistema deshabilite fácilmente (cambiando el nombre) o elimine (eliminando) un conjunto de repositorios sin tener que editar un archivo monolítico.
  • Permite al encargado del paquete dar un comando simple para actualizar las ubicaciones de los repositorios sin tener que preocuparse por cambiar inadvertidamente la configuración de repositorios no relacionados.

A 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 se reduce a esto:

Para sources.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 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 verificando TODOS los archivos posibles, pueden, y a menudo lo hacen, agregar un elemento duplicado, lo que luego hace que apt se queje, hasta que elimine uno de ellos.

Para sources.list

# 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 comprobaron la presencia de fuentes de Google Chrome, confiando en el nombre de archivo exacto que crearía su paquete de Chrome 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.

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 y únicos que podría dar a los usuarios, hasta donde yo 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 uno también.

Ya que en el mundo real, si lo iba a hacer bien, debe admitir comprobaciones contra todos los archivos, independientemente de su nombre, y luego probar si la acción a realizar es necesaria o no.

Sin embargo, si no lo hiciera bien, simplemente ignoraría las comprobaciones para ver si el elemento está en alguna parte de las fuentes, y simplemente comprobaría el nombre del archivo. Creo que eso es lo que hace la mayoría de las cosas automatizadas, pero como al final, simplemente tuve 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 programar 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 sources.list, elimine el archivo sources.list.d, y si ya está en sources.list, simplemente elimine el archivo sources.list.d

Dado que NO hay nada negativo en usar solo sources.list más allá de la simplicidad y la facilidad de mantenimiento, agregar algo como eso podría no ser una mala idea, particularmente dadas las acciones creativas aleatorias de los administradores del sistema.

Como se señaló en el comentario anterior, inxi -r imprimirá ordenadamente por archivo los repositorios activos, pero por supuesto no los editará ni alterará, por lo que esa sería solo la mitad de la solución. Si se trata de muchas distribuciones, es una molestia aprender cómo lo hace cada una, eso es seguro, y la aleatoriedad ciertamente es la regla más que 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”). Al usar software de administración de configuración como Puppet, Ansible, Chef, etc., es más fácil simplemente 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, a partir de múltiples módulos independientes que han sido escritos por terceros.

Aprecio el amplio uso que hace Ubuntu de los directorios “.d” por esta razón en particular, es decir, sudoers.d, rsyslog.d, sysctl.d., Cron.d, logrotate.d, etc.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *