Cómo crear un mirror de Debian y Ubuntu con debmirror


Debmirror

A continuación explico cómo configurar un mirror de Debian y Ubuntu, en un servidor de Debian. Los pasos explicados a continuación se pueden conseguir en otro sitios, salvo la parte de importación de las llaves de los repositorios. Por ejemplo, en los tutoriales de Ubuntu explican cómo instalar las llaves suponiendo que el servidor donde se va a hacer el mirror corre Ubuntu, pero y si es un servidor con Debian?

Instalación de debmirror

Como mencioné, usé debmirror para hacer el mirror de ambas distribuciones. Existen otros, como por ejemplo apt-cacher, pero se escogió debmirror porque en esencia se necesita hacer mirror de todo los repositorios de Ubuntu y Debian. Entonces, para instalar debmiror basta con escribir lo siguiente como root:

aptitude install debmirror

Instalación de las llaves

Luego se deben instalar la llaves (keyrings) de los repositorios. Como se quiere hacer un mirror tanto de Debian como de Ubuntu, bajaremos los paquetes e importaremos las llaves para cada distro:

Debian

Para instalar las llaves de los repositorios de Debian se debe bajar el paquete debian-archive-keyrings mas reciente, por ejemplo de testing:

# wget http://ftp.us.debian.org/debian/pool/main/d/debian-archive-keyring/debian-archive-keyring_2012.4_all.deb

Luego se procede a extraer el contenido del paquete en el directorio home de root:

# dpkg-deb -x debian-archive-keyring_2012.4_all.deb ~

Ahora se debe importar las llaves:

# gpg --no-default-keyring --keyring /home/repo/keyrings/debian/trustedkeys.gpg --import /root/usr/share/keyrings/debian-archive-keyring.gpg
 gpg: keyring `/home/repo/keyrings/debian/trustedkeys.gpg' created
 gpg: key B98321F9: public key "Squeeze Stable Release Key " imported
 gpg: key 473041FA: public key "Debian Archive Automatic Signing Key (6.0/squeeze) " imported
 gpg: key 65FFB764: public key "Wheezy Stable Release Key " imported
 gpg: key 46925553: public key "Debian Archive Automatic Signing Key (7.0/wheezy) " imported
 gpg: Total number processed: 4
 gpg: imported: 4 (RSA: 4)
 gpg: no ultimately trusted keys found

Ubuntu

Para Ubuntu se debe hacer algo similar. Se debe bajar el paquete ubuntu-keyring mas reciente. Para la fecha tomé uno de los repositorios de quantal:

# wget http://pa.archive.ubuntu.com/ubuntu/pool/main/u/ubuntu-keyring/ubuntu-keyring_2012.05.19_all.deb

Luego se procede a extraer el contenido del paquete en el directorio home de root e importar las llaves:

# dpkg-deb -x ubuntu-keyring_2012.05.19_all.deb ~
# gpg --no-default-keyring --keyring /home/repo/keyrings/ubuntu/trustedkeys.gpg --import /root/usr/share/keyrings/ubuntu-archive-keyring.gpg
gpg: keyring `/home/repo/Ubuntu/mirrorkeyring/trustedkeys.gpg' created
 gpg: key 437D05B5: public key "Ubuntu Archive Automatic Signing Key " imported
 gpg: key FBB75451: public key "Ubuntu CD Image Automatic Signing Key " imported
 gpg: key C0B21F32: public key "Ubuntu Archive Automatic Signing Key (2012) " imported
 gpg: key EFE21092: public key "Ubuntu CD Image Automatic Signing Key (2012) " imported
 gpg: Total number processed: 4
 gpg: imported: 4 (RSA: 2)
 gpg: no ultimately trusted keys found

El script de debmirror

Para Ubuntu

El script como tal es una adaptación de la documentación que se consigue en Ubuntu, el cual se puede guardar en el archivo /home/repo/scripts/debian.sh con la siguiente información:

#!/bin/sh
# Don't touch the user's keyring, have our own instead
export GNUPGHOME=/home/repo/keyrings/ubuntu

# Architecture. For Ubuntu can be i386, powerpc or amd64.
arch=i386,amd64

# Minimum Ubuntu system requires main, restricted
# Section (One of the following - main/restricted/universe/multiverse).
section=main,multiverse,universe,restricted

# Release of the system (Quantal, Precise, etc)
release=quantal,quantal-security,quantal-updates,quantal-backports,precise,precise-security,precise-updates,precise-backports

# Server name, minus the protocol and the path at the end
server=us.archive.ubuntu.com

# Path from the main server, so http://my.web.server/$dir, Server dependant
inPath=/ubuntu

# Protocol to use for transfer (http, ftp, hftp, rsync)
proto=http

# Directory to store the mirror in
outPath=/home/repo/mirrors/ubuntu

# Start script

debmirror       -a $arch \
                --no-source \
                --md5sums \
                --progress \
                --passive \
                --verbose \
                -s $section \
                -h $server \
                -d $release \
                -r $inPath \
                -e $proto \

Para Debian

Para Debian cambiarían los valores, y en esencia en el archivo archivo /home/repo/scripts/debian.sh pondríamos algo como esto:

#!/bin/sh

# Don't touch the user's keyring, have our own instead
export GNUPGHOME=/home/repo/keyrings/debian

# Architecture (i386, powerpc, amd64, etc.)
arch=i386,amd64

# Section (main,contrib,non-free)
section=main,contrib,non-free

# Release of the system (squeeze,lenny,stable,testing,etc)
release=squeeze

# Server name, minus the protocol and the path at the end
server=ftp.us.debian.org

# Path from the main server, so http://my.web.server/$dir, Server dependant
inPath=/debian

# Protocol to use for transfer (http, ftp, hftp, rsync)
proto=http

# Directory to store the mirror in
outPath=/home/repo/mirrors/debian

# Start script

debmirror       -a $arch \
                --no-source \
		--md5sums \
		--progress \
		--passive \
		--verbose \
                -s $section \
                -h $server \
                -d $release \
                -r $inPath \
                -e $proto \
                $outPath

Nota: Para ambos casos se debe dar permisología de ejecución a los scripts, se debe probar la conexión a los servidores seleccionados, y que habrá suficiente espacio para alojar dichos repositorios.

Tarea programada (crontab)

Una vez que se tienen los scripts, se puede configurar una tarea programada para que la sincronización del mirror se haga a un tiempo determinado. Por ejemplo, para que se ejecute diariamente a las 12 de la media noche podemos colocar esto en el /etc/crontab:

0 0 * * *    root    /home/repo/scripts/debian.sh
0 0 * * *    root    /home/repo/scripts/ubuntu.sh

Publicación de los mirrror

Para publicar los mirror vía http se puede instalar un servidor web, como Apache:

aptitude install apache2

Por omisión en Debian, Apache  tiene el directorio /var/www/ como la raíz. Entonces para configurar los mirrors basta con crear los enlaces simbólicos apuntando a este directorio:

# ln -s /home/repo/mirrors/ubuntu /var/www/
# ln -s /home/repo/mirrors/debian /var/www/

Configuración de los clientes

Para configurar los clientes habría que editar el archivo de configuración /etc/apt/sources.list, según sea la versión de Linux que se esté usando en el cliente:

Para Ubuntu

Para Ubuntu precise (12.04) se debería tener algo como esto en el /etc/apt/sources.list:

deb http://192.168.1.1/ubuntu/ precise main restricted universe multiverse
deb http://192.168.1.1/ubuntu/ precise-updates main restricted universe multiverse
deb http://192.168.1.1/ubuntu/ precise-backports main restricted universe multiverse
deb http://192.168.1.1/ubuntu/ precise-security main restricted universe multiverse

En este caso la dirección IP 192.168.1.1 corresponde al servidor que aloja los repositorios, los cuales se publicaron vía http con Apache. Se debe cambiar por la IP del servidor que se esté configurando o una entrada de DNS válida que lo identifique.

Para Debian

Para Debian Squeeze se debe escribir lo siguiente en el /etc/apt/sources.list:

deb http://192.168.1.1/debian squeeze main contrib non-free
deb http://192.168.1.1/debian-security squeeze/updates main contrib non-free

Para ambos casos, luego se debe actualizar la lista de paquetes:

aptitude update

Una vez que se hayan actualizado el listado de paquetes ya se podrá instalar y actualizar aplicaciones desde estos repositorios.


, ,

  1. #1 by Luis Gallardo on 20/09/2015 - 7:12

    @Oskr siguiendo estos pasos deberían ser suficiente. Así lo tenemos en la oficina y funcionan sin problemas. Saludos!

  2. #2 by Oskr on 18/09/2015 - 11:22

    estoy intentando montar y/o hacer un mirror, para tenerlo o utilizarlo en mi red local; lo necesito de debian 7 y 8… soy muy novato, la verdad no quiero morir en el intento… saludos y de verdad gracias de antemano por interesarse en querer presentarme o darme ayuda en este proyecto que en realidad es necesario, por consumo de conexion cada vez que se instala el S.O.

    saludos…

  3. #3 by Luis Gallardo on 08/06/2014 - 4:01

    @Jorge depende de lo que quieras incluir en el mirror. En mi caso tengo en un repositorio con Debian Lenny, Squeeze y Wheezy con main, contrib y non-free y ocupa 210 GB.

    Ahora si el tema del espacio es limitante, te recomiendo que uses apt-cacher que te permite hacer un mirror a partir de lo que se vaya descargando y así usar solo lo que relamete necesitas.

    Saludos!

  4. #4 by Jorge on 08/06/2014 - 2:50

    Solo queremos bajar la minima cantidad de repocitorios para instalar cualquier programa ….solo es para pruebas ya que no tengo espacio en disco ¿cuanto espacio ocupa esta instalacion de debian?

  5. #5 by Luis Gallardo on 14/10/2013 - 10:43

    @Eduardo si no existe es porque no se sincronizó bien. En mis repos tengo las versiones .gz y .bz2 para presice. Saludos!

  6. #6 by Eduardo Visbal on 14/10/2013 - 8:36

    Compañero Luis
    verificando en la ruta que me indicas, veo que no me muestra ningún archivo .gz y bz2 (en ningún formato) mas extraño eso, lo unico que cambie en el script fue en vez de descargar por el protocolo http lo coloque en rsync.

    Sera que no me realizo ninguna descarga de paquetes… volveré a ejecutar el scritp cambiando el protocolo a http.

    saludos

    Luis Gallardo :
    @Eduardo No lo consigue porque están en formato .gz y .bz2. Si usas una navegador puedes ver el contenido de esta ruta http://172.16.0.51/ubuntu/dists/precise/main/binary-amd64/ para que lo confirmes. Saludos!

    Luis Gallardo :
    @Eduardo No lo consigue porque están en formato .gz y .bz2. Si usas una navegador puedes ver el contenido de esta ruta http://172.16.0.51/ubuntu/dists/precise/main/binary-amd64/ para que lo confirmes. Saludos!

  7. #7 by Luis Gallardo on 10/10/2013 - 7:09

    @Eduardo No lo consigue porque están en formato .gz y .bz2. Si usas una navegador puedes ver el contenido de esta ruta http://172.16.0.51/ubuntu/dists/precise/main/binary-amd64/ para que lo confirmes. Saludos!

  8. #8 by Eduardo on 10/10/2013 - 10:47

    Saludo Compañero Luis
    Lo principal, felicitarte por tu aporte a la comunidad de gnu/linux.
    Ahora te comento a ver si puedes ayudarme; yo tengo creado un mirro local de de Debian (debian 5, 6 y 7) y bueno queria crear uno para ubuntu y segui los pasos que explicas en el post; todo me funciona perfectamente; el detalle esta cuando agrego en el sources.list de las maquinas clientes de Ubuntu me manda el siguiente error:

    Err http://172.16.0.51 precise/main amd64 Packages
    404 Not Found
    Err http://172.16.0.51 precise/restricted amd64 Packages
    404 Not Found

    W: Imposible obtener http://172.16.0.51/ubuntu/dists/precise/main/binary-amd64/Packages 404 Not Found
    E: Some index files failed to download. They have been ignored, or old ones used instead.

    Desde las maquinas clientes ubuntu realizo un ping al mirror local y me responde; me parece extraño esto, ya que con los maquinas clientes de Debian si funciona.
    Bueno compañero, si puedes aporta alguna idea de que pueda estar sucediendo, te lo agradeceria.

    Gracias

  9. #9 by Luis Gallardo on 05/03/2013 - 11:55

    @julio Un error 503 está relacionado a que el servicio no está disponible. Más info aquí. Revisa el qué repositorios estás tratando de acceder. En el artículo coloqué http://ftp.us.debian.org para Debian y us.archive.ubuntu.com para Ubuntu, y en ambos casos esos están disponibles. Saludos!

  10. #10 by julio montaño on 05/03/2013 - 11:18

    saludos. estoy creando un repositorio de debian, pero cuando trato de acceder desde otra maquina me da un error 503. Me conecto a traves de un proxy y le he dado tanto la permisologia como las excepciones a nivel de navegador para que pueda actualizar. al llegar a cierta parte lanza ese error, especificamente en el Packages.gz tanto del backporst, multimedia, entre otros.

  11. #11 by Luis Gallardo on 14/12/2012 - 5:57

    @Gerald haz un archivo separado, con una carpeta nueva en los repositorios. Así no se mezclan los paquetes de los repositorios y tienes todo más ordenado. Saludos!

  12. #12 by Gerald on 14/12/2012 - 1:11

    Hola.

    Tengo un mirror parcial de debian squeeze, pero quiero también hacerlo para security con debmirror.

    ¿Tengo que hacerlo en archivos separados y como?

    Saludos.

  13. #13 by Luis Gallardo on 12/12/2012 - 9:58

    @novalettres la carpeta /home/repo/keyrings/debian es donde se copian las llaves de los repositorios Debian, en particular en el archivo /home/repo/keyrings/debian/trustedkeys.gpg. Debes crear la carpeta y exportar allí las llaves como se explica en el artículo, o usar otra ruta según sea tu caso.

    Gracias por leer el blog, y por tus comentarios. Saludos!

  14. #14 by novalettres on 11/12/2012 - 11:14

    una preguntita nada mas, en el script de debian donde dice
    export GNUPGHOME=/home/repo/keyrings/debian
    nos falta la carpeta keyrings y su contenido, o no tiene nada que ver?

  15. #15 by novalettres on 11/12/2012 - 10:55

    gracias luis, siempre es muy interesante ver tu pagina, gracias por el post, ahora mismo estoy montando una maquinita con debian para esos menesteres

  16. #16 by Luis Gallardo on 09/12/2012 - 9:20

    @Eduardo gracias, espero que sea de utilidad para ti y para muchos otros. Saludos!

  17. #17 by Eduardo on 08/12/2012 - 10:18

    Muy interesante, sobre todo los aportes para hacer el mirror en debian.

(No será publicado)