Crear un mirror local con apt-mirror | Algo de Linux

viernes, 9 de noviembre de 2012

Crear un mirror local con apt-mirror

En los centros ya tenemos un mirror de debian squeeze creado con una herramienta llamada debmirror. 

apt-mirror es otra excelente herramienta para crear mirrors de repositorios.

Aprovechando que acabo de crear un mirror de ubuntu para los ciclos de informática, vamos a ver cómo hacerlo usando 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 0
set nthreads     20
set _tilde 0
################### end config ######################


############## Repositorios amd64 #####################

###### Ubuntu Main Repos
deb-amd64 http://es.archive.ubuntu.com/ubuntu/ quantal main restricted universe multiverse

###### Ubuntu Update Repos
deb-amd64 http://es.archive.ubuntu.com/ubuntu/ quantal-security main restricted universe multiverse
deb-amd64 http://es.archive.ubuntu.com/ubuntu/ quantal-updates main restricted universe multiverse

###### Ubuntu Proposed Repos
deb-amd64 http://es.archive.ubuntu.com/ubuntu/ quantal-proposed main restricted universe multiverse

###### Ubuntu Backports Repos
deb-amd64 http://es.archive.ubuntu.com/ubuntu/ quantal-backports main restricted universe multiverse

############### Repositorios i386 ##################### 


###### Ubuntu Main Repos
deb-i386 http://es.archive.ubuntu.com/ubuntu/ quantal main restricted universe multiverse

###### Ubuntu Update Repos
deb-i386 http://es.archive.ubuntu.com/ubuntu/ quantal-security main restricted universe multiverse
deb-i386 http://es.archive.ubuntu.com/ubuntu/ quantal-updates main restricted universe multiverse

###### Ubuntu Proposed Repos
deb-i386 http://es.archive.ubuntu.com/ubuntu/ quantal-proposed main restricted universe multiverse

###### Ubuntu Backports Repos
deb-i386 http://es.archive.ubuntu.com/ubuntu/ quantal-backports main restricted universe multiverse



clean http://es.archive.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

En cambio, 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 la siguiente línea:

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

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

Con ésto, como se puede ver en el archivo de configuración, voy a crear los siguientes mirrors:
  • quantal
  • quantal-backports
  • quantal-proposed
  • quantal-security
  • quantal-updates
 Y aquí es donde quedarán almacenados los archivos:

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

Bien, pues una vez que ya tenemos los repositorios en /var/spool/apt-mirror/mirror, vamos a crear un enlace 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/  ubuntu

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
#
30 21    * * *    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:

# /etc/cron.d/apt-mirror-die
# Kill the apt-mirror
#
45 7    * * *    apt-mirror    killall -9 apt-mirror


Y eso es todo. Cuando lleguen las 21:20 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:

deb http://mirror-ubuntu/ubuntu quantal main restricted universe multiverse
deb http://mirror-ubuntu/ubuntu quantal-backports main restricted universe multiverse
deb http://mirror-ubuntu/ubuntu quantal-proposed main restricted universe multiverse
deb http://mirror-ubuntu/ubuntu quantal-security main restricted universe multiverse
deb http://mirror-ubuntu/ubuntu quantal-updates main restricted universe multiverse

3 comentarios:

Janga dijo...

wenas mira e creado todo el repositorio pero aora tengo un problema es que el packages.gz meda un error 404 no found nose si sabes como solucionarlos

Juan Carlos Benitez dijo...

Hola segui los pasos tal cual, apache esta funcionando, el enlace a el repo se creo bien, pero cuando quiero ingresar,
http://num_ip/ubuntu
me da un error, como si fuera que el enlase simbolico no esta:

Not Fount
The requested URL /ubuntu was not found on this server.

que puede estar pasando?

Alex Caralps dijo...

aqui encontre http://blog.programster.org/set-up-a-local-ubuntu-mirror-with-apt-mirror/ esta solucion para su problema

Configure Apache:

copiar en consola:

sudo echo '
ServerAdmin webmaster@hostname.com

DocumentRoot /var/www

Options Indexes FollowSymLinks
AllowOverride All
Require all granted


ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined
' | sudo tee /etc/apache2/sites-enabled/000-default.conf


i luego propietarios i tal...


sudo chown www-data:www-data /var/www/ubuntu
sudo rm -rf /var/www/html
sudo service apache2 restart