====== Repositorio Ubuntu ====== Este documento esquematiza cómo crear un repositorio para tener un mirror local de Ubuntu e incluye otros repositorios no estandar. ===== Preparando disco ===== **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 ===== Preparando llavero ===== 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: ==== Ubuntu estandar ==== gpg --no-default-keyring --keyring /root/keyring/trustedkeys.gpg --import /usr/share/keyrings/ubuntu-archive-keyring.gpg ==== Medibuntu ==== wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O - | gpg --no-default-keyring --keyring /root/keyring/trustedkeys.gpg --import ==== Canonical ==== gpg --keyserver subkeys.pgp.net --recv 437D05B5 --import --no-default-keyring --keyring /root/keyring/trustedkeys.gpg ==== Google ==== wget -q https://dl-ssl.google.com/linux/linux_signing_key.pub -O - | gpg --no-default-keyring --keyring /root/keyring/trustedkeys.gpg --import ==== VirtualBox ==== wget -q http://download.virtualbox.org/virtualbox/debian/sun_vbox.asc -O- | gpg --no-default-keyring --keyring /root/keyring/trustedkeys.gpg --import ==== Verificación del llavero ==== 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 sub 2048g/79164387 2004-09-12 pub 1024D/FBB75451 2004-12-30 uid Ubuntu CD Image Automatic Signing Key pub 1024D/0C5A2783 2006-11-23 uid Medibuntu Packaging Team uid The Medibuntu Team sub 2048g/16C7105A 2006-11-23 pub 1024D/7FAC5991 2007-03-08 uid Google, Inc. Linux Package Signing Key sub 2048g/C07CB649 2007-03-08 pub 1024D/6DFBCBAE 2008-07-14 uid Sun Microsystems, Inc. (xVM VirtualBox archive signing key) sub 2048g/78A86EAF 2008-07-14 ==== Script ==== El keyring utilizado debe estar referenciado en el [[#script|script]] mediante la variable GNUPGHOME: export GNUPGHOME=/root/keyring ===== Sincronizando ===== Crear y mantener actualizado el respositorio: ==== Crear repositorio ==== 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|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. Demora muuucho en sincronizar todo el repositorio (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**) ==== Mantener repositorio ==== Para mantener actualizado el respositorio existen varias formas de hacerlo, aquí describo la que yo utilizo. **El chequeo de md5sum demora** (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 sincronización ==== 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 ===== Sirviendo a la red local ===== Instalar servidor web (apache, lighttpd o cherokee) y configurar un alias para cada uno de los directorios creados en el [[#preparando_disco|primer paso]]. Existen muchas opciones para servir el repositorio creado a la red, aquí se sugiere una forma. ==== Apache ==== 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/" ==== lighttpd ==== 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/" ) ===== Configurando los clientes ===== Configuraciones que deben ser realizadas en cada cliente: ==== Agregando certificados ==== 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 - ==== /etc/apt/sources.list ==== 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 ===== Script ===== #!/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 ===== Fin ===== Con todo esto, el repositorio debería estar funcionando normalmente, cualquier comentario que quieras hacer hazlo en mi blog. Gracias.