Este documento esquematiza cómo crear un repositorio para tener un mirror local de Ubuntu e incluye otros repositorios no estandar.
Espacio: Dic/2008, solamente sincronizando i386
y ocupa unos 26G
Este paso no es necesario, pues debianmirror se encarga de crear la estructura de directorios, no obstante se deja aquí para saber qué quedará en el disco:
mkdir -p /mirror/ubuntu mkdir -p /mirror/medibuntu mkdir -p /mirror/canonical mkdir -p /mirror/google mkdir -p /mirror/virtualbox
No se utiliza el llavero (keyring) estandard ya que debmirror viene preparado para utilizar el keyring de Debian.
Bajar incorporar al llavero no estandar para cada repositorio que se quiera sincronizar:
gpg --no-default-keyring --keyring /root/keyring/trustedkeys.gpg --import /usr/share/keyrings/ubuntu-archive-keyring.gpg
wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O - | gpg --no-default-keyring --keyring /root/keyring/trustedkeys.gpg --import
gpg --keyserver subkeys.pgp.net --recv 437D05B5 --import --no-default-keyring --keyring /root/keyring/trustedkeys.gpg
wget -q https://dl-ssl.google.com/linux/linux_signing_key.pub -O - | gpg --no-default-keyring --keyring /root/keyring/trustedkeys.gpg --import
wget -q http://download.virtualbox.org/virtualbox/debian/sun_vbox.asc -O- | gpg --no-default-keyring --keyring /root/keyring/trustedkeys.gpg --import
Se puede verificar la insorporación de las llaves al llavero:
gpg --list-keys --no-default-keyring --keyring /root/keyring/trustedkeys.gpg
y tendrá la siguiente salida:
/root/keyring/trustedkeys.gpg ----------------------------- pub 1024D/437D05B5 2004-09-12 uid Ubuntu Archive Automatic Signing Key <ftpmaster@ubuntu.com> sub 2048g/79164387 2004-09-12 pub 1024D/FBB75451 2004-12-30 uid Ubuntu CD Image Automatic Signing Key <cdimage@ubuntu.com> pub 1024D/0C5A2783 2006-11-23 uid Medibuntu Packaging Team <admin@lists.medibuntu.org> uid The Medibuntu Team <medibuntu@sos-sts.com> sub 2048g/16C7105A 2006-11-23 pub 1024D/7FAC5991 2007-03-08 uid Google, Inc. Linux Package Signing Key <linux-packages-keymaster@google.com> sub 2048g/C07CB649 2007-03-08 pub 1024D/6DFBCBAE 2008-07-14 uid Sun Microsystems, Inc. (xVM VirtualBox archive signing key) <info@virtualbox.org> sub 2048g/78A86EAF 2008-07-14
El keyring utilizado debe estar referenciado en el script mediante la variable GNUPGHOME:
export GNUPGHOME=/root/keyring
Crear y mantener actualizado el respositorio:
Colocar variables con estos valores:
SILENT=0 REINTENTOS=1
para tener un control directo de lo que pasa al ejecutar el script y en caso de error sale al primer intento.
Correr el script (./ubumirror.sh
o el nombre que se le haya colocado). El script yo lo suelo colocar en /mirror
, pero puede estar en cualquier lugar.
(son más de 20G de archivos a descargar)
Una vez finalizado, vuelva a lanzar el script hasta estar seguro que está correctamente sincronizado (es decir, que ya no transfiera ningún archivo de paquetes .deb)
Para mantener actualizado el respositorio existen varias formas de hacerlo, aquí describo la que yo utilizo.
(se realiza con el parámetro –md5sums
)
Es un proceso más lento de revisión del contenido del repositorio antes de sincronizar, pero bastante más seguro de la integridad de los paquetes locales.
Colocar variables con estos valores de producción:
SILENT=1 REINTENTOS=5
Colocar el script para que se ejecute una vez al día en por el cron:
ln -s /mirror/ubumirror.sh /etc/cron.daily/ubumirror
Verificar periódicamente el archivo /var/log/syslog
para ver que el repositorio se está sincronizando correctamente:
Dec 21 15:34:13 host logger: Inicio actualizacion mirror us.archive.ubuntu.com Dec 21 15:49:46 host logger: Final actualizacion mirror us.archive.ubuntu.com Dec 21 15:49:46 host logger: Inicio actualizacion mirror archive.canonical.com Dec 21 15:49:52 host logger: Final actualizacion mirror archive.canonical.com Dec 21 15:49:52 host logger: Inicio actualizacion mirror packages.medibuntu.org Dec 21 15:50:26 host logger: Final actualizacion mirror packages.medibuntu.org Dec 21 15:50:26 host logger: Inicio actualizacion mirror dl.google.com Dec 21 15:50:29 host logger: Final actualizacion mirror dl.google.com
Instalar servidor web (apache, lighttpd o cherokee) y configurar un alias para cada uno de los directorios creados en el primer paso.
Existen muchas opciones para servir el repositorio creado a la red, aquí se sugiere una forma.
Archivo /etc/apache2/sites-enabled/000-default
:
Alias /ubuntu/ "/mirror/ubuntu/" Alias /canonical/ "/mirror/canonical/" Alias /medibuntu/ "/mirror/medibuntu/" Alias /google/ "/mirror/google/" Alias /virtualbox/ "/mirror/virtualbox/"
Archivo /etc/lighttpd/lighttpd.conf
:
alias.url = ( "/ubuntu/" => "/mirror/ubuntu/" ) alias.url += ( "/canonical/" => "/mirror/canonical/" ) alias.url += ( "/medibuntu/" => "/mirror/medibuntu/" ) alias.url += ( "/google/" => "/mirror/google/" ) alias.url += ( "/virtualbox/" => "/mirror/virtualbox/" )
Configuraciones que deben ser realizadas en cada cliente:
sudo wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O- | apt-key add - sudo wget -q https://dl-ssl.google.com/linux/linux_signing_key.pub -O- | apt-key add - sudo wget -q http://download.virtualbox.org/virtualbox/debian/sun_vbox.asc -O- | apt-key add -
Los clientes deben tener su archivo /etc/apt/sources.list
configurado en concordancia al repositorio que se ofrece.
# # Ubuntu principal deb http://192.168.2.250/ubuntu/ intrepid main restricted universe multiverse deb http://192.168.2.250/ubuntu/ intrepid-updates main restricted universe multiverse deb http://192.168.2.250/ubuntu/ intrepid-security main restricted universe multiverse # Canonical partners # adobe-flashplugin deb http://192.168.2.250/canonical/ intrepid partner deb http://192.168.2.250/canonical/ intrepid-updates partner deb http://192.168.2.250/canonical/ intrepid-security partner # Medibuntu # acroread googleearth hot-babe realplayer codecs skype etc deb http://192.168.2.250/medibuntu/ intrepid free non-free # Google # google-desktop picasa deb http://192.168.2.250/google/ stable main non-free # Virtualbox deb http://192.168.2.250/virtualbox/ intrepid non-free
#!/bin/bash # Mirror Ubuntu y amigos # # Version 2.0 - 08.dec.2008 # * Se adapta para ubuntu (root, keyring) # * Se agrega multi-protocolo # * Se utiliza keyring no-standard # Version 1.5 - 06.feb.2006 # * Eliminado repositorio non-US # * Control de sincronizacion y reintentos # Versión 1.0 - 17.ene.2005 # # 0 corre en modo consola con salida a stdout # 1 corre en modo batch con salida a /var/log/syslog SILENT=1 # Cantidad de reintentos en sincronizar antes de abortar REINTENTOS=5 DEBMIRROR=/usr/bin/debmirror export GNUPGHOME=/root/keyring function bajo_mirror { if [ $SILENT -eq 1 ]; then /usr/bin/logger "Inicio actualizacion mirror $HOST" PROGRESO="" else echo Distro: $DISTRO echo Section: $SECTION echo Server: $HOST echo Mirror en: $LOCATION PROGRESO="-p -v" fi BUCLES=1 run_debmirror if [ $SILENT -eq 1 ]; then /usr/bin/logger "Final actualizacion mirror $HOST" else echo "===============================================================================" fi } function run_debmirror { if [ $BUCLES -gt $REINTENTOS ]; then return; fi # TEST="--dry-run" $DEBMIRROR $TEST --method=$METHOD -a $ARCH -s $SECTION -h $HOST -r $ROOT -d $DISTRO $LOCATION $PROGRESO --nosource --md5sums if [ $? -ne 0 ]; then if [ $SILENT -eq 1 ]; then /usr/bin/logger "Error al sincronizar repositorio, intento $BUCLES" else echo "Error al sincronizar repositorio, intento $BUCLES" fi BUCLES=$(($BUCLES+1)) run_debmirror fi } # deb http://us.archive.ubuntu.com/ubuntu/ intrepid main restricted universe # METHOD="http" ROOT="ubuntu" # METHOD="rsync" ROOT=":ubuntu" METHOD='rsync' ROOT=":ubuntu" DISTRO='intrepid,intrepid-security,intrepid-updates' SECTION='main,restricted,universe,multiverse' ARCH='i386' LOCATION=/mirror/ubuntu HOST=us.archive.ubuntu.com bajo_mirror # deb http://archive.canonical.com/ intrepid main METHOD='http' ROOT="/" DISTRO='intrepid,intrepid-security,intrepid-updates' SECTION='partner' ARCH='i386' LOCATION=/mirror/canonical HOST=archive.canonical.com bajo_mirror # deb http://packages.medibuntu.org/ intrepid free non-free METHOD='http' ROOT="/" DISTRO='intrepid' SECTION='free,non-free' ARCH='i386' LOCATION=/mirror/medibuntu HOST=packages.medibuntu.org bajo_mirror # http://dl.google.com/linux/deb/dists/stable/Release.gpg METHOD='http' ROOT="linux/deb" DISTRO='stable' SECTION='main,non-free' ARCH='i386' LOCATION=/mirror/google HOST=dl.google.com bajo_mirror # deb http://download.virtualbox.org/virtualbox/debian intrepid non-free METHOD='http' ROOT="virtualbox/debian/" DISTRO='intrepid' SECTION='non-free' ARCH='i386' LOCATION=/mirror/virtualbox HOST=download.virtualbox.org bajo_mirror exit 0
Con todo esto, el repositorio debería estar funcionando normalmente, cualquier comentario que quieras hacer hazlo en mi blog. Gracias.