Cómo mantener actualizadas varias máquinas al mismo tiempo

En situaciones en las que administrás varias máquinas, Apt puede ser de mucha ayuda ya que hace que el proceso de actualización y aplicación de los parches de seguridad para cada máquina sea muy simple. El problema es que, con el método tradicional, una vez que sale una actualización, tenés que bajar una copia de todos los nuevos paquetes para cada una de las máquinas, lo que implica un consumo fenomenal de nuestro ancho de banda y del ancho de banda del servidor oficial.Afortunadamente, existe un método que nos permite actualizar una de las máquinas y, desde allí, actualizar el resto de las máquinas que componen nuestra red. Este método, además de reducir los costos y optimizar el uso de nuestro ancho de banda, evita la duplicación de paquetes en las distintas máquinas: todas instalan los paquetes utilizando nuestro “servidor de caché”.


Cuando estás ejecutando la misma distribución en diferentes máquinas (ya sea en el trabajo, en laboratorios de computación, en “granjas” de servidores, en clusters o incluso en tu pequeña red doméstica) puede resultar útil crear un repositorio caché en tu red para que una vez descargado un paquete desde un repositorio oficial todas las demás máquinas lo descarguen desde ese repositorio caché que está almacenado en una máquina de tu red a la que llamaremos “servidor”. De esta manera, las actualizaciones descargadas desde una máquina pueden ser instaladas en las demás sin necesidad de volver a descargarlas desde los repositorios oficiales.

Primero veamos algunas soluciones “no tradicionales” que NO recomiendo, pero que seguramente te vendrán a la mente a la hora de resolver esta cuestión.

Compartir /etc/apt

Cuando instalás un paquete en una distro Debian (o sus derivadas), éste se almacena localmente en el directorio ‘/etc/apt’. Cuando un paquete es requerido, Apt primero busca en este directorio para ver si existe una copia local (o sea, un caché), evitando así su descarga innecesaria. Como resultado de ello, a varios de Uds. seguramente se les habrá ocurrido que una buena forma de resolver el problema en cuestión podría ser elegir una computadora, que designaríamos como una suerte de servidor, que se actualizaría utilizando los repositorios oficiales, y que compartiría su directorio ‘/etc/apt’ con el resto de las máquinas de la red. No obstante, este método podría derivar en problemas vinculados al bloqueo del archivo ‘sources.list’. En general, no es la solución más utilizada ni la más conveniente.

Mover los paquetes

En vez de compartir un directorio ‘/etc/apt’ común, otra alternativa podría ser que cada compu utilice su propio directorio local de caché pero generar un script que se ocupe de copiar los paquetes de una máquina a la otra de modo que queden todas actualizadas. Una herramienta para llevar adelante esta tarea puede ser ‘apt-move’, pero sinceramente no se las recomiendo porque no es lo suficientemente transparente para el usuario final. Además, puede significar una utilización completamente innecesaria de espacio en disco ya que deberán copiarse todos los paquetes en cada una de las máquinas.

Sistemas de caché dedicados

La mejor solución para este problema es la utilización de un sistema de caché dedicado. De lo que se trata, en definitiva, es de crear una copia de los servidores oficiales en una de las máquinas de tu red y luego configurar al resto de las máquinas para que, en vez de buscar las actualizaciones desde los servidores oficiales, lo hagan utilizando este caché (o copia) local.

Existe una variedad de sistemas diseñados para trabajar con Apt, incluyendo apt-cacher, apt-proxy, y apt-cached.

Aquí vamos a tratar con apt-cacher, que es el más sencillo de usar.

Apt-cacher

Apt-cacher es bien diferente de otros sistemas de caché de repositorios ya que no es un programa independiente (“stand-alone”) sino que corre como un script CGI bajo Apache. Esto tiene varias ventajas, como por ejemplo, convertirlo en una herramienta pequeña y simple pero al mismo tiempo muy poderosa y, por consiguiente, más robusta porque no precisa de un código propio para el manejo de protocolos, y es muy flexible porque podés usar el mecanismo de control de acceso de Apache en caso de que quieras limitar el número de máquinas que se encuentren habilitadas para acceder al caché.

Apt-cacher sólo necesita ser instalado en una máquina, aquella que decidas que debe funcionar como tu caché local de repositorios. Luego, el resto de las computadoras de tu red deberán ser configuradas para que realicen los pedidos de actualizaciones al caché y no a los servidores oficiales.

Configuración del servidor

Para instalar basta con

sudo apt-get install apt-cacher

Este paquete tiene dependencias con apache, perl y wget, por lo que los instalará si no lo tenés previamente instalados.

Una vez instalado, es recomendable reiniciar Apache:

/etc/init.d/apache restart

Finalmente, lo único que hay que hacer es ajustar los parámetros por defecto del script. Escribí en un terminal:

sudo gedit /etc/apt-cacher/apt-cacher.conf

En general, todos los valores por defecto están bien, pero es recomendable ajustar los tres siguientes:

admin_email=mimail@miservidor
generate_reports=1
expire_hours=24

El segundo elemento es una variable de tipo booleana que determina la generación de reportes (0 no genera reportes, 1 sí los genera). El primer elemento, en cambio, es la dirección de correo electrónico a la que se enviarán los reportes creados. El tercer y último elemento determina la cantidad de horas que debe esperar Apt para verificar si hay actualizaciones disponibles en los servidores oficiales.

Si utilizás un proxy, no te olvides de agregar los siguientes elementos:

http_proxy=proxy.example.com:8080
use_proxy=1

Para verificar que funcione, podés acceder a tu caché local a través de la url http://nombre_servidor/apt-cacher/ y aparecerá una página donde se muestra la configuración de apt-cacher. Recordá que ‘nombre_servidor’ debe ser reemplazado por el IP de la máquina que hayas designado como ‘servidor’, o sea, como depositaria del caché local de paquetes.

Configuración clientes

Ahora lo único que hay que hacer es modificar los sources.list de los clientes para que pasen a través del servidor. Si el IP del servidor es 123.123.123.123, hay que añadirlo a cada línea del sources.list, y además tener cuidado y que todos hagan referencia al mismo servidor, sino el cache no tendrá efecto.

sudo gedit /etc/apt/sources.list
Nota: ¡Ojo! En Debian y sus derivados el ‘sources.list’ se almacena en ‘/etc/apt’. Sin embargo, en otras distribuciones puede ser que se almacene en otra ruta. En caso de que no encuentres el archivo siempre podés encontrarlo ingresando ‘locate sources.list’ en un terminal.

Una vez abierto el archivo, siendo el IP de nuestro servidor 123.123.123.123, habría que modificar todas las líneas usando el siguiente criterio:

# Originales
#deb http://ftp.us.debian.org/debian/ sid main contrib non-free
#deb-src http://ftp.us.debian.org/debian/ sid main contrib non-free

# Modificados
deb http://123.123.123.123/apt-cacher/ftp.us.debian.org/debian/ sid main contrib non-free
deb-src http://123.123.123.123/apt-cacher/ftp.us.debian.org/debian/ sid main contrib non-free

Como ves, hay que agregar al comienzo de la dirección URL el IP del servidor + ‘/apt-cacher/’. Luego va el resto de la línea original.

Estadísticas de tráfico

Si agregaste el elemento ‘generate_reports=1’ en el archivo ‘apt-cacher.conf’, apt-cacher generará estadísticas de accesos, a las que podés acceder con el url ‘/apt-cacher/report’.

Si, por algún motivo, necesitás generar las estadísticas antes de las cantidad de horas establecidas en ‘apt-cacher.conf’, ejecutá el el siguiente comando:

/usr/share/apt-cacher/apt-cacher-report.pl

Comparte para difundir

Si te ha gustado nuestro contenido ahora puedes ayudar a difundirlo en las redes sociales de manera sencilla usando los siguientes botones:

Envía
Pinea
Print

12 comentarios

  1.   eduardo dijo

    Saludos, excelente aporte, mi pregunta es si conocen alguna aplicación que permita tener un repositorio centralizado para aplicar parches pero a distintas distribuciones, es decir mantener actualizadas varias máquinas al mismo tiempo pero que tienen diferentes distribuciones

  2.   Usemos Linux dijo

    Hola Eduardo! La verdad que lo veo muy difícil. Si descubrís alguna forma no dejes de avisarme.
    Un gran abrazo! Saludos! Pablo.

  3.   Chiche dijo

    Yo uso puppet para administrar remotamente los servidores que administro.

  4.   Usemos Linux dijo

    Sí. Muchas gracias x el dato. Ya lo corregí.
    Abrazo! Pablo.

  5.   Geniutrixone dijo

    Hola,

    está super bueno el tutorial… tengo un alcance.. en Debian Lenny el source.lst esta en la ruta /etc/apt/

    saludos

  6.   Sepulvedamarcos dijo

    pregunta….

    si tengo un par de maquinas con la misma distro… pero no con los mismos programas…. como sabe que bajar desde los repos oficiales…. los baja todo???…

  7.   Usemos Linux dijo

    Tu pregunta es excelente. Yo calculo que el sistema debe funcionar igual que en un Apt común: si no lo encuentra en el caché, lo baja de los repositorios oficiales. En este caso, una de las máquinas “cliente” informa al “servidor” que precisa una actualización según el listado de actualizaciones que consta en el “servidor” de tu red. Para instalar esa actualización yo calculo que primero buscará el paquete en el caché del servidor. Si no lo encuentra, lo baja desde los repositorios oficiales, lo guarda en el servidor y, desde allí, se instala en la máquina que lo requería. Ese paquete quedará disponible en el caché del “servidor” para que otras máquinas de tu red puedan instalarlo desde allí también.

    Por favor no dudes en escribir si no fui lo suficientemente claro.

    Un Abrazo! Pablo.

  8.   Mishudark dijo

    Creo q hay un ERROR… los paquetes no se almacenan en /etc/apt…. realmente se quedan en /var/cache/apt/archives

  9.   Usemos Linux dijo

    La verdad que no sé.
    Seguro hay una forma de hacerlo. 🙁
    Si la averiguás, avisame y lo agrego.
    Saludos! Pablo.

  10.   Alvaro dijo

    Con las ip’s dinamicas nada, verdad?

  11.   Marce dijo

    Por lo visto en distros más actuales hay que añadir el puerto (3142 por defecto) a la URL de la red local. Quedaría así: http://mi_servidor:3142/apt-cacher

  12.   Alfredo Torrealba dijo

    tengo lubuntu 16.04 quien lo ha hecho bajo este sistema y si le ha funcionado?? y lo que queria preguntar es lo siguiente si instalo este servidor y mis otras maquinas no tienen los mismos programas al hacer una peticion en mis maquinas clientes la instalacion de un programa que tengo en el servidor crees que lo instale directamente desde el servidor local o hace la peticion al servidor oficial de los repositorios¿?¿

Deja un comentario

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

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.