Configurando un Repositorio Local con Apt-Mirror


Para los que se inician en el sistema operativo Linux uno de los principales temas a estudiar es como instalar paquetes y por supuesto como disponer de los mismos en el momento que lo necesitemos. Los paquetes son los programas que requerimos para trabajar con Linux y los repositorios es la forma en que se organizan los mismos, suelen estar en algún sitio http o ftp de Internet. Los mismos se ajustan a la distribución de Linux que tengamos y a la tecnología si es de 32 ó 64 bit.

Los que no disponen todo el tiempo de acceso a Internet, una solución es contar con una copia de alguno de estos repositorios y así poder disfrutar a plenitud de su sistema operativo. Como es normal en Linux existen diversas vías para alcanzar este resultado. Una de las vías es empleando el servicio apt-mirror, no es uno de los más populares pero si una solución elegante para alcanzar este resultado. A continuación les explico cómo configurar este servicio en la versión de Linux Ubuntu Server 12.04.4 LTS.

Antes que nada

Antes de comenzar el proceso de configuración les aconsejo los siguientes requerimientos técnicos: 512 MB de memoria RAM y 150 GB de disco duro, con esto sería suficiente para crear una copia de un repositorio, en mi caso me sirvió para un repositorio de Ubuntu 12.04 para 32 y 64 bits. Luego debemos asegurarnos que contamos con una configuración ip fija, esto lo configuramos en el fichero /etc/network/interfaces y que contamos con acceso a algún repositorio del cual queremos realizar una copia, ya sea de una red local ó los repositorios oficiales de Ubuntu, esto lo configuramos en el fichero /etc/apt/sources.list.

Configurando…

Cumpliendo con estos prerrequisitos estaríamos listos para comenzar a configurar nuestro repositorio local, el paquete a instalar se llama apt-mirror, con el comando apt-get install apt-mirror lo tendríamos instalado.

El fichero de configuración se encuentra en /etc/apt/mirror.list y la estructura de directorios donde se copia el repositorio se encuentra en /var/spool/apt-mirror, contando con tres carpetas: /var/spool/apt-mirror/mirror donde se guardan los paquetes, la carpeta /var/spool/apt-mirror/skel donde se almacena el esqueleto ó estructura de paquetes y la carpeta /var/spool/apt-mirror/var donde se almacenan los ficheros de log y los scripts. Siempre es una buena práctica antes de comenzar a configurar cualquier servicio en Linux realizar una salva del fichero original de configuración, con el comando cp -v /etc/apt/mirror.list /etc/apt/mirror.list.original. En mi caso realicé una copia de un repositorio de una red local y el fichero de configuración quedó similar a este:

  ############# config ##################
  #
  # set base_path    /var/spool/apt-mirror
  #
  # set mirror_path  $base_path/mirror
  # set skel_path    $base_path/skel
  # set var_path     $base_path/var
  # set cleanscript  $var_path/clean.sh
  # set defaultarch  amd64 i386
  # set postmirror_script $var_path/postmirror.sh
  # set run_postmirror 0
  set nthreads     20
  set _tilde 0
  #
  ############# end config ##############

  ############# Repositorio Ubuntu 12.04 amd64 ##############

  deb-amd64 http://repo.lab.net precise main universe  multiverse restricted
  deb-amd64 http://repo.lab.net precise-updates main universe  multiverse restricted
  deb-amd64 http://repo.lab.net precise-security main universe  multiverse restricted
  deb-amd64 http://repo.lab.net precise-backports main universe  multiverse restricted
  deb-amd64 http://repo.lab.net precise-proposed main universe  multiverse restricted

  ############# Repositorio Ubuntu 12.04 i386  ##############

  deb-i386 http://repo.lab.net precise main universe  multiverse restricted
  deb-i386 http://repo.lab.net precise-updates main universe  multiverse restricted
  deb-i386 http://repo.lab.net precise-security main universe  multiverse restricted
  deb-i386 http://repo.lab.net precise-backports main universe  multiverse restricted
  deb-i386 http://repo.lab.net precise-proposed main universe  multiverse restricted

  ###########################################################

  clean http://repo.lab.net

Debemos respetar la estructura del fichero de configuración, prestar atención a la arquitectura de los paquetes que descargamos en el parámetro # set defaultarch y a los dos últimos bloques y a su sintaxis de inicio (deb-amd64, deb-i386). Para poner en marcha el script del servicio apt-mirror ejecutamos el comando apt-mirror -c apt-mirror, esto debemos hacerlo desde una cuenta con privilegios de administración. Este proceso de copia demora varias horas en dependencia del ancho de banda con que contamos o de la velocidad de nuestra red local. Si quisiéramos monitorear este proceso podemos instalar alguna herramienta como iptraf la cual monitorea todo el tráfico que se origina en la interfaz de red.

Aún no terminamos

Luego de terminar la copia para nuestro servidor debemos unir la carpeta /var/spool/apt-mirror/mirror y /var/spool/apt-mirror/skel, en mi caso lo copié dentro de la carpeta /var/spool/apt-mirror/mirror. Contando ya con el repositorio procedemos a publicarlo por si queremos que otros usuarios tengan acceso a nuestro repositorio, lo podemos hacer mediante un servidor web o un servidor ftp. Si decidiéramos hacerlo con un servidor web con pocas líneas de código lo tendríamos publicado.

Primero instalamos el servidor web apache con el comando apt-get install apache2 y creamos un enlace suave de la carpeta en donde se encuentra el repo hacia la capeta de nuestro servidor web donde queremos publicarlo, esto lo haríamos con el comando ln -s /var/spool/apt-mirror/mirror /var/www/ubuntu, ahora si accediéramos a la url http://repo.lab.net/ubuntu deberíamos ver la estructura de directorios de nuestro repositorio.

Como la mayoría de las tareas que se realizan en Linux se pueden automatizar editamos el fichero /etc/cron.d/apt-mirror, editando y descomentareando la última línea apt-mirror /usr/bin/apt-mirror > /var/spool/apt-mirror/var/cron.log, en mi caso 59 23 * * * apt-mirror /usr/bin/apt-mirror > /var/spool/apt-mirror/var/cron.log, con esto lograríamos mantener actualizado el repositorio.

Finalmente

Si se logran realizar satisfactoriamente todos estos pasos ya tendríamos listo un repositorio de Ubuntu y podremos explotar al máximo todas las funcionalidades de nuestro sistema operativo. Los invito a que prueben esta herramienta si quieren realizar alguna copia local de un repositorio. Espero les haya servido, lo tengan en cuenta o al menos haya logrado despertar la curiosidad de algunos.