Cómo crear nuestros propios repositorios en Debian

Publicado el 29 noviembre 2016 por Drassill
Los repositorios tienen un valor incalculable en cualquier sistema Linux; especialmente en aquellos servidores en los que queremos tener las últimas actualizaciones de seguridad. Lo más normal es que no haya impedimento alguno para usar éstos, pero que sea lo más normal no implica que tenga que ocurrir siempre, ya sea debido a políticas de seguridad , a que el repositorio está caído o a que simplemente el equipo no tiene acceso a Internet... La ausencia de este recurso puede resultar fatal en muchos casos, con lo que es bueno contar siempre con un recurso que nos ayude a evadir ese escollo; un recurso que si bien a nivel doméstico no es muy práctico, es perfectamente aplicable en entornos empresariales o en entornos en los que hayan servidores.  Se trataría de tener estos repositorios almacenados en un equipo nuestro al cual sí que sería fácil acceder por el resto de equipos que estén dentro de la misma red; es decir, de tener estos repositorios en local. En este caso veríamos un caso aplicado a Debian, pero para sistemas parecidos tales como Ubuntu no deberíais experimentar problema alguno.

Esta operación la única "pega" que puede llegar a tener es el hecho de que es necesario tener abundante espacio libre en el disco duro, pero quitando ese detalle, puede sernos una solución realmente útil, con lo que vamos a ello.
Para crear este repositorio, necesitaremos tener dos herramientas instaladas; una de ellas, muy conocida por muchos, sería apache2, mientras que la otra que es bastante menos conocida, sería apt-mirror, con lo que lo primero que haremos será instalarlos desde los repositorios oficiales del sistema (que todavía no serían locales) tal y como hacemos habitualmente.
apt-get install apache2 apt-mirror
La instalación es automática, si bien está instalación no hace que tengamos automáticamente los repositorios en local... Lo primero que necesitamos hacer es bajarnos toda la información, paquetes y otros datos de los repositorios que nosotros queramos en local, si bien para ello lo primero que habría que hacer sería configurar el archivo de configuración de apt-mirror, que se encontraría en /etc/apt/mirror.list. El fichero estaría compuesta por tres secciones: Configuración, repositorios a obtener, repositorios a limpiar. La parte más importante sería la de configuración, ya que es la que determina donde guardar los repositorios, la arquitectura en la que queremos que se descarguen los repositorios, etc... Un fichero de configuración real basado en un Debian 8 con arquitectura amd64 sería el siguiente:
  1. ############# config ##################
  2. #
  3.  set base_path    /var/spool/apt-mirror
  4. #
  5.  set mirror_path  $base_path/mirror
  6.  set skel_path    $base_path/skel
  7.  set var_path     $base_path/var
  8. # set cleanscript $var_path/clean.sh
  9. set defaultarch amd64
  10. # set postmirror_script $var_path/postmirror.sh
  11. # set run_postmirror 0
  12. set nthreads     20
  13. set _tilde 0
  14. #
  15. ############# end config ##############
  16. deb http://ftp.es.debian.org/debian/ jessie main contrib non-free
  17. deb-src http://ftp.es.debian.org/debian/ jessie main contrib non-free
  18. deb http://ftp.es.debian.org/debian/ jessie-updates main contrib non-free
  19. deb-src http://ftp.es.debian.org/debian/ jessie-updates main contrib non-free
  20. clean http://ftp.es.debian.org/debian

Gracias a esta configuración podríamos descargarnos los repositorios "estándar" de Debian 8 (Jessie) dentro del directorio /var/spool/apt-mirror, dentro del cual habrían tres carpetas: La carpeta mirror, la carpeta skel y la carpeta var.
Con los cambios guardados, únicamente habría que ejecutar el comando:
apt-mirror
Este comando hará que se creen las carpetas mirror, skel y var dentro del directorio /var/spool/apt-mirror y que se descargue toda la información de los repositorios en éstos; y al decir toda sería TODA. Es decir que nos estaríamos descargando la información necesaria para que nuestro equipo se pueda convertir en un repositorio.
El tamaño de la información descargada variaría dependiendo de la cantidad de repositorios que nos queramos descargar, pero por ejemplo, en mi caso en particular la descarga sería de 47 GB; una descarga que tomará MUCHO tiempo. También podríamos escoger menos repositorios con el fin de que sea de menor tamaño, pero a nivel conceptual este sería el proceso. Imaginemos que tenemos descargado todo el contenido... Éste estaría descargado, pero eso no significaría que fuese accesible por el resto de equipos; de ahí la necesidad de tener apache2 instalado. Ahora mismo el directorio /var/spool/apt-mirror/mirror tendría que tener la siguiente estructura en su interior:

Queremos ser capaces de acceder vía web a los repositorios, tal y como haríamos con un repositorio real, pero en una red local... Con lo que tendríamos que hacer que dicho contenido pueda ser accedido desde la carpeta /var/www; mover el contenido a dicha carpeta sería engorroso y además cualquier futura actualización se bajaría de nuevo dentro del directorio /var/spool/apt-mirror, con lo que lo más limpio y práctico sería realizar un enlace simbólico desde /var/www a los directorios deseados; que en este caso sería únicamente el directorio Debian con lo que el enlace simbólico que haríamos sería el siguiente:
ln-s/var/spool/apt-mirror/mirror/ftp.es.debian.org/debian//var/www/debian
Ahora, para acceder a los repositorios de esta máquina, supongamos que ésta tiene la ip 192.168.1.10, para acceder a los repositorios de aquí en la red local, pondríamos estas líneas dentro del fichero /etc/apt/sources.list


  1. deb http://192.168.1.10/debian/ jessie main contrib non-free
  2. deb-src http://192.168.1.10/debian/ jessie main contrib non-free
  3. deb http://192.168.1.10/debian/ jessie-updates main contrib non-free
  4. deb-src http://192.168.1.10/debian/ jessie-updates main contrib non-free

Con esto podríamos acceder a unos repositorios que se hallen en la red local sin necesidad de acceder a Intenet.
Espero que os haya resultado útil.
Saludos.