viernes, 16 de mayo de 2014

Cómo configurar un repositorio local para Ubuntu

Como vimos en una entrega anterior, es posible configurar un repositorio local para CentOS y Fedora que incluya varios repos muy útiles. Esto con la finalidad de dejar el pesado tráfico de descarga de actualizaciones e instalación de nuevas aplicaciones al ámbito local en un entorno donde haya gran cantidad de computadoras corriendo una de estas distribuciones.

Pero, ¿qué de Ubuntu? También podemos tener uno para Ubuntu. Esto lo lograremos haciendo uso de apt-mirror y el servidor Web Apache. Con poca configuración tendremos un repositorio completo, ya que apt-mirror se encarga del trabajo y lo hace de forma transparente para nosotros. Literalmente solo hay de indicarle la ruta donde queremos que se descarguen los paquetes.

Como siempre, manos a la obra...

Lo primero es instalar Apache y apt-mirror.
fraterneo@ubunturepo:~$ sudo apt-get- install -y apache2 apt-mirror
Creamos un directorio donde se alojará la estructura del repositorio, metadatos y paquetes.
fraterneo@ubunturepo:~$ mkdir apt-mirror/
Ahora editamos el fichero mirror.list de APT y le agregamos al principio del mismo la siguiente línea que contiene la ruta al directorio que creamos hace un momento.
fraterneo@ubunturepo:~$ sudo nano /etc/apt/mirror.list
set base_path /home/fraterneo/apt-mirror
Iniciamos el proceso de creación invocando el comando apt-mirror.
fraterneo@ubunturepo:~$ sudo apt-mirror
[sudo] password for fraterneo: 
Downloading 162 index files using 20 threads...
Begin time: Thu May 15 22:11:52 2014
[20]... [19]... [18]... [17]... [16]... [15]... [14]... [13]... [12]... [11]... [10]... [9]... [8]... [7]... [6]... [5]... [4]... [3]... [2]... [1]... [0]... 
End time: Thu May 15 22:18:51 2014

Processing tranlation indexes: [TTT]

Downloading 185 translation files using 20 threads...
Begin time: Thu May 15 22:18:52 2014
[20]... [19]... [18]... [17]... [16]... [15]... [14]... [13]... [12]... [11]... [10]... [9]... [8]... [7]... [6]... [5]... [4]... [3]... [2]... [1]... [0]... 
End time: Thu May 15 22:35:18 2014

Processing indexes: [SSSPPP]

110.1 GiB will be downloaded into archive.
Downloading 111238 archive files using 20 threads...
Begin time: Thu May 15 22:35:27 2014
[20]... 
Luego de finalizada esta parte, es necesario crear un enlace simbólico del mirror en /var/www/html, para que esté disponible a través del servidor Web.
fraterneo@ubunturepo:~$ cd /var/www/html
fraterneo@ubunturepo:html$ ln -s /home/fraterneo/apt-mirror/mirror/us.archive.ubuntu.com/ubuntu ubuntu
Actualización automática del repositorio De ahora en adelante solo hay que mantener actualizado nuestro repositorio. Si lo queremos hacer manualmente, solo hay que ejecutar apt-mirror de nuevo y la actualización se hará. Pero también podemos crear una tarea programada para que se ejecute cierto día de la semana, por ejemplo.
fraterneo@ubunturepo:~$ sudo echo '0  0  *  *  3 root apt-mirror /usr/bin/apt-mirror > /var/spool/apt-mirror/var/cron.log' >> /etc/crontab
Configurar los clientes Esta es la parte más sencilla. Se agregan las URL de los repos igual que como se hacía en la vieja escuela, por allá cuando Ubuntu 8.10 más o menos, editando el fichero sources.list y borrando todo su contenido para dejarlo como se ve a continuación.
fraterneo@ubunturepo:~$ sudo nano /etc/apt/sources.list
deb http://192.168.24.200/ubuntu trusty universe
deb http://192.168.24.200/ubuntu trusty main restricted
deb http://192.168.24.200/ubuntu trusty-updates main restricted
Finalmente actualizamos el caché en cada cliente.
fraterneo@ubunturepo:~$ sudo apt-update


Artículos relacionados



Widget by Hoctro | Jack Book

10 comentarios:

  1. Se puede tener en un mismo servidor los repositorios completos para varias distribuciones? Por ejemplo Mint y ubuntu en el mismo servidor??

    ResponderEliminar
    Respuestas
    1. No Mario, para Linux Mint el procedimiento es diferente.

      Eliminar
    2. Bien, acabo de probar apt-mirror en Linux Mint y funciona de la misma manera, excepto que hay que tomar las URL de los repos desde el fichero /etc/apt/sources.list.d/official-package-repositories.list y proceder de la misma manera que en esta guía.

      Eliminar
  2. Hola buen día, gracias por la informacion, pero tengo un pequeño problema, el equipo donde descargué el repositorio es de 64bits y los clientes que tengo son de 32 bits. Como puedo descargar desde el servidor de 64 los paquetes para 32 ? Gracias

    ResponderEliminar
  3. Si hago un repo con ubuntu32 me valen los clientes de 64? y al revés? o debo crear 2 repos? saludos

    ResponderEliminar
  4. Genio!

    Funciona a la perfección con Kubuntu 14.04 LTS
    Dos pequeñas observaciones, que note con esta distribución:
    +el ln ubuntu es /home/usuario/apt-mirror/archive.ubuntu.com/ubuntu
    +para agregar al crontab hay que modificar el crontab del root con: sudo crontab -u root -e y solo agregar el path /usr/bin/apt-mirror (y no logro que me redirecione la salida al log indicado, trabajando en eso) pero se que se ejecuta verificado con proceso.
    Dos consultas:
    ? Por qué en el source.list del cliente agrego la dirección con http y no con ftp? con http funciona y con ftp no, pero me quedo esa duda.
    ? Cuál es la tasa de descarga del cliente con el repositorio local? En mi caso 2,2 MiB/s

    Gracias.-

    ResponderEliminar
    Respuestas
    1. Hola.

      Que bueno que funcionó.

      Usamos http porque se instaló apache para tales fines. En cuanto a la tasa de descarga, depende de la red local, pero sin dudas es súper rápido para los clientes.

      Gracias por comentar.

      Eliminar
    2. es posible crear repo de ubuntu y centos juntos?

      Eliminar
  5. Hola,, hice todo el procedimiento pero me da un error en los usuarios al hacer el update
    Fallo al obtener http://x.x.x.x/ubuntu/dists/trusty/universe/binary-i386/Packages 403 Forbidden

    ResponderEliminar