Crear un mirror local con apt-mirror para los nuevos Ubuntu-Linex enviados a los centros | Algo de Linux

viernes, 6 de mayo de 2016

Crear un mirror local con apt-mirror para los nuevos Ubuntu-Linex enviados a los centros

En los centros ya tenemos un mirror de Debian creado con una herramienta llamada debmirror. Como ya comenté en un post del año 2012, apt-mirror es otra excelente herramienta para crear mirrors de repositorios.

Aprovechando que no me convencía tener el nuevo servidor con un sistema de 32 bits, que disponer de un mirror facilita enormemente el trabajo de actualizar paquetes en los clientes y reduce el consumo de ancho de banda, ya puestos en faena, decidí crear un mirror de Ubuntu para los nuevos Ubuntu-Linex enviados a los centros partiendo de que ya tenía escrito el post del año 2012, en el que hablaba de apt-mirror.

apt-mirror maneja los siguientes ficheros de configuración y directorios:
  • /etc/apt/mirror.list: Es el principal fichero de configuración.
  • /etc/cron.d/apt-mirror: Es una plantilla de configuración de cron para lanzar apt-mirror de forma programada
  • /var/spool/apt-mirror/mirror: Es el directorio donde se guardará el mirror.
  • /var/spool/apt-mirror/skel: Es un directorio para almacenar temporalmente los índices descargados.
  • /var/spool/apt-mirror/var: Es un directorio donde se guardan los logs, urls y hashes md5.
Primero instalamos apache2 (si no lo tenemos instalado ya) para servir los paquetes del mirror:
# apt-get install apache2
A continuación instalamos el paquete apt-mirror:
# apt-get install apt-mirror
Una vez instalados los paquetes, hacemos una copia del fichero de configuración principal, para recurrir a él, si fuera necesario:
# cp /etc/apt/mirror.list /etc/apt/mirror.list.orig
Y editamos el fichero:
# nano /etc/apt/mirror.list
############# 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  
# set postmirror_script $var_path/postmirror.sh
# set run_postmirror
set nthreads     20
set _tilde 0
set limit_rate 1000k
#
############# end config ##############

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

# mirror additional architectures
#deb-alpha http://ftp.us.debian.org/debian unstable main contrib non-free
#deb-amd64 http://ftp.us.debian.org/debian unstable main contrib non-free
#deb-armel http://ftp.us.debian.org/debian unstable main contrib non-free
#deb-hppa http://ftp.us.debian.org/debian unstable main contrib non-free
#deb-i386 http://ftp.us.debian.org/debian unstable main contrib non-free
#deb-ia64 http://ftp.us.debian.org/debian unstable main contrib non-free
#deb-m68k http://ftp.us.debian.org/debian unstable main contrib non-free
#deb-mips http://ftp.us.debian.org/debian unstable main contrib non-free
#deb-mipsel http://ftp.us.debian.org/debian unstable main contrib non-free
#deb-powerpc http://ftp.us.debian.org/debian unstable main contrib non-free
#deb-s390 http://ftp.us.debian.org/debian unstable main contrib non-free
#deb-sparc http://ftp.us.debian.org/debian unstable main contrib non-free

#clean http://ftp.us.debian.org/debian

#deb cdrom:[Ubuntu 14.04.3 LTS _Trusty Tahr_ - Beta i386 (20150805)]/ trusty main restricted

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb-i386 http://es.archive.ubuntu.com/ubuntu/ trusty main restricted
deb-amd64 http://es.archive.ubuntu.com/ubuntu/ trusty main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb-i386 http://es.archive.ubuntu.com/ubuntu/ trusty-updates main restricted
deb-amd64 http://es.archive.ubuntu.com/ubuntu/ trusty-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb-i386 http://es.archive.ubuntu.com/ubuntu/ trusty universe
deb-amd64 http://es.archive.ubuntu.com/ubuntu/ trusty universe
deb-i386 http://es.archive.ubuntu.com/ubuntu/ trusty-updates universe
deb-amd64 http://es.archive.ubuntu.com/ubuntu/ trusty-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb-i386 http://es.archive.ubuntu.com/ubuntu/ trusty multiverse
deb-amd64 http://es.archive.ubuntu.com/ubuntu/ trusty multiverse
deb-i386 http://es.archive.ubuntu.com/ubuntu/ trusty-updates multiverse
deb-amd64 http://es.archive.ubuntu.com/ubuntu/ trusty-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb-i386 http://es.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-amd64 http://es.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse

deb-i386 http://security.ubuntu.com/ubuntu trusty-security main restricted
deb-amd64 http://security.ubuntu.com/ubuntu trusty-security main restricted
deb-i386 http://security.ubuntu.com/ubuntu trusty-security universe
deb-amd64 http://security.ubuntu.com/ubuntu trusty-security universe
deb-i386 http://security.ubuntu.com/ubuntu trusty-security multiverse
deb-amd64 http://security.ubuntu.com/ubuntu trusty-security multiverse

## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu trusty partner

## This software is not part of Ubuntu, but is offered by third-party
## developers who want to ship their latest software.
deb-i386 http://extras.ubuntu.com/ubuntu trusty main
deb-amd64 http://extras.ubuntu.com/ubuntu trusty main

clean http://es.archive.ubuntu.com/ubuntu/
clean http://security.ubuntu.com/ubuntu/
clean http://extras.ubuntu.com/ubuntu/

Como podéis ver, en la sección de configuración, todos los parámetros de ubicación de ficheros están comentados. No los he "descomentado" porque quiero que se almacenen en la ubicación por defecto.

Tampoco he tocado la opción set defaultarch que nos permite indicar la arquitectura de paquetes por defecto. Por ejemplo:

# set defaultarch amd64

También he dejado por defecto set nthreads 20 para indicar que se usen 20 hilos.

set nthreads 20

Y he añadido set limit_rate 1000k para establecer un límite de consumo de ancho de banda de descarga de 1000k por hilo. Apt-mirror usa wget para descargar los paquetes y mediante este parámetro limitamos la tasa de descarga.

set limit_rate 1000k

Como se puede apreciar en el fichero de configuración, estoy creando específicamente el repositorio con:
  • paquetes de 64 bits: deb-amd64  
  • y paquetes de 32 bits: deb-i386
Por último, en el fichero de configuración veréis las siguientes línea:

clean http://es.archive.ubuntu.com/ubuntu/
clean http://security.ubuntu.com/ubuntu/
clean http://extras.ubuntu.com/ubuntu/

Estas líneas le dicen a apt-mirror en qué directorios del disco duro local debería chequear para ver si se puede liberar espacio.

Con ésto, como se puede ver en el archivo de configuración, voy a crear los siguientes mirrors:

/var/spool/apt-mirror/mirror/
├── es.archive.ubuntu.com
│   └── ubuntu
│       ├── dists
│       │   ├── trusty
│       │   ├── trusty-backports
│       │   └── trusty-updates
│       └── pool
│           ├── main
│           ├── multiverse
│           ├── restricted
│           └── universe
├── extras.ubuntu.com
│   └── ubuntu
│       └── dists
│           └── trusty
└── security.ubuntu.com
    └── ubuntu
        ├── dists
        │   └── trusty-security
        └── pool
            ├── main
            ├── multiverse
            ├── restricted
            └── universe

Bien, pues una vez que ya tenemos los repositorios en /var/spool/apt-mirror/mirror, vamos a crear enlaces en /var/www para que los paquetes del repositorio sean servidos por apache:
# cd /var/www
# ln -s /var/spool/apt-mirror/mirror/es.archive.ubuntu.com/ubuntu/ es.archive.ubuntu.com
# ln -s /var/spool/apt-mirror/mirror/extras.ubuntu.com/ubuntu/ extras.ubuntu.com
# ln -s /var/spool/apt-mirror/mirror/security.ubuntu.com/ubuntu/ security.ubuntu.com
Una vez que tengamos el enlace creado, el siguiente paso será editar el fichero /etc/cron.d/apt-mirror y modificar la hora de puesta en marcha de la creación del mirror:
# /etc/cron.d/apt-mirror
# Regular cron jobs for the apt-mirror package
#
00 22    * * *    apt-mirror    /usr/bin/apt-mirror > /var/spool/apt-mirror/var/cron.log
Por otra parte, crearemos un fichero cron para matar la tarea anterior a cierta hora:
# Kill the apt-mirror
#
45 7    * * *    apt-mirror    killall -9 apt-mirror
46 7    * * *    root          /var/spool/apt-mirror/var/clean.sh
Y eso es todo. Cuando lleguen las 22:00 comenzará la creación del mirror y terminará a las 7:45 de la mañana del día siguiente.

Por último, tan sólo me queda mencionar cómo usar los repositorios en el fichero /etc/apt/sources.list de los clientes.

Al haber creado el mirror y los enlaces como he explicado, es muy sencillo modificar cada una de las entradas del sources.list.
Veamos un ejemplo:
Si utilizamos el mirror de Ubuntu:
deb http://es.archive.ubuntu.com/ubuntu/ trusty-updates main restricted
No tenemos más que cambiarlo por:
deb http://servidor/es.archive.ubuntu.com/ubuntu/ trusty-updates main restricted
Y así con todos los repositorios.

De este modo es como quedaría el /etc/apt/sources.list de un cliente:
#deb cdrom:[Ubuntu 14.04.3 LTS _Trusty Tahr_ - Beta i386 (20150805)]/ trusty main restricted

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
#deb http://es.archive.ubuntu.com/ubuntu/ trusty main restricted
#deb-src http://es.archive.ubuntu.com/ubuntu/ trusty main restricted
deb http://servidor/es.archive.ubuntu.com/ubuntu/ trusty main restricted

## Major bug fix updates produced after the final release of the
## distribution.
#deb http://es.archive.ubuntu.com/ubuntu/ trusty-updates main restricted
#deb-src http://es.archive.ubuntu.com/ubuntu/ trusty-updates main restricted
deb http://servidor/es.archive.ubuntu.com/ubuntu/ trusty-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
#deb http://es.archive.ubuntu.com/ubuntu/ trusty universe
#deb-src http://es.archive.ubuntu.com/ubuntu/ trusty universe
#deb http://es.archive.ubuntu.com/ubuntu/ trusty-updates universe
#deb-src http://es.archive.ubuntu.com/ubuntu/ trusty-updates universe
deb http://servidor/es.archive.ubuntu.com/ubuntu/ trusty universe
deb http://servidor/es.archive.ubuntu.com/ubuntu/ trusty-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
#deb http://es.archive.ubuntu.com/ubuntu/ trusty multiverse
#deb-src http://es.archive.ubuntu.com/ubuntu/ trusty multiverse
#deb http://es.archive.ubuntu.com/ubuntu/ trusty-updates multiverse
#deb-src http://es.archive.ubuntu.com/ubuntu/ trusty-updates multiverse
deb http://servidor/es.archive.ubuntu.com/ubuntu/ trusty multiverse
deb http://servidor/es.archive.ubuntu.com/ubuntu/ trusty-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
#deb http://es.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
#deb-src http://es.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
deb http://servidor/es.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse

#deb http://security.ubuntu.com/ubuntu trusty-security main restricted
#deb-src http://security.ubuntu.com/ubuntu trusty-security main restricted
#deb http://security.ubuntu.com/ubuntu trusty-security universe
#deb-src http://security.ubuntu.com/ubuntu trusty-security universe
#deb http://security.ubuntu.com/ubuntu trusty-security multiverse
#deb-src http://security.ubuntu.com/ubuntu trusty-security multiverse
deb http://servidor/security.ubuntu.com/ubuntu trusty-security main restricted
deb http://servidor/security.ubuntu.com/ubuntu trusty-security universe
deb http://servidor/security.ubuntu.com/ubuntu trusty-security multiverse

## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu trusty partner
# deb-src http://archive.canonical.com/ubuntu trusty partner

## This software is not part of Ubuntu, but is offered by third-party
## developers who want to ship their latest software.
#deb http://extras.ubuntu.com/ubuntu trusty main
#deb-src http://extras.ubuntu.com/ubuntu trusty main
deb http://servidor/extras.ubuntu.com/ubuntu trusty main
En mi opinión, es interesante crear una entrada DNS en el servidor ldap a la que llamemos mirror que apunte al servidor  en que tenemos almacenado el mirror. De este modo, si en algún momento necesitamos cambiar el mirror que vamos a usar, no tendremos más que cambiar esa entrada en el servidor ldap para que apunte a otro mirror.
Publicado por primera vez en http://enavas.blogspot.com.es