====== 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.