About Taringa!

Popular channels

Mi repositorio local de openSuSE 11.4 y 12.1



Para hacer una reducción crítica en el consumo de ancho de banda (alrededor de 30 hosts haciendo solicitudes a repositorios de openSUSE) decidí crear un repositorio local de 11.4 y 12.1 para instalaciones y actualizaciones de paquetes en estaciones de trabajo desktop y servers.

Lo primero que pensé es que sería sumamente complejo o con una configuración apta para un gurú pero leyendo la documentación oficial me dí cuenta que estaba a mi alcance y que prácticamente es un servidor web con ciertas configuraciones para permitir que el cliente, en este caso el gestor de paquetes zypper, pudiese encontrar el contenido de los directorios entre otras cosas.

Para hacer una copia exacta de otro repositorio es útil hacer uso de rsync y es recomendable usar un repositorio que geográficamente se encuentre cerca (eso se puede consultar acá). En latinoamérica hay 2 repositorios oficiales en Argentina, 2 en Brasil, 1 en Costa Rica y 1 que estuvo activo acá en mi paisito pero sigue siendo reconocido por mirror brain.

Los requerimientos para el servidor destinado a almacenar los paquetes del repo y servir las descargas son:
-Apache: Requerimos instalar el paquete apache2-prefork o el apache2-worker. Si, los paquetes se descagan/ofrecen por HTTP, lo que hace zypper, independientemente de que instalemos desde yast es hacer peticiones http y revisar el contenido del repositorio que se define en un archivo xml que contiene la metadata (repomd.xml) . Lo ideal sería tenerlo también con openSuSE pero no es un requerimiento fundamental. Básicamente necesitamos que el host pueda servir los paquetes a través del protocolo HTTP y espacio suficiente en disco para almacenar los repos.
-rsync: Como mencioné antes, esta herramienta es bastante útil para hacer copiar de sistemas de archivos remotos en especial por sus opciones para omitir archivos que aparezcan después de haber iniciado la sincronización y así tener integridad en la versión del repositorio.
En este caso necesitamos usarlo como cliente rsync para copiar el contenido del servidor repositorio que ofrezca acceso público via protocolo rsync que usaremos como fuente.
-Espacio en disco: El espacio que necesitamos está en dependencia de las versiones que vamos a actualizar o a las cuales les ofreceremos descarga de paquetes. En mi caso albergo lo siguiente:
12.1 distribution = 29GB
11.4 update = 27GB
12.1 update = 23GB


-Conexión a Internet

Configuracion de apache

<VirtualHost *:80>
   ServerAdmin [email protected]
   ServerName mirror.example.com

   DocumentRoot "/srv/www/repoSUSE"

   <Directory "/srv/www/repoSUSE">
       Options FollowSymLinks Indexes
       IndexOptions FancyIndexing VersionSort NameWidth=* Charset=UTF-8 TrackModified FoldersFirst XHTML
       AllowOverride None
       Order allow,deny
       Allow from all
   </Directory>

   Alias /robots.txt /srv/www/repoSUSE/robots.txt
   Alias /repo "/srv/www/repoSUSE/"
   <Directory "/srv/www/repoSUSE">
       Options None
       Order allow,deny
       Allow from all
   </Directory>

   Include /etc/apache2/conf.d/apachestats.conf

</VirtualHost>

Listo, ya tenemos configurado apache, ahora necesitamos copiar los paquetes a nuestro server
Sincronizar nuestro repo con un servidor mirror de openSUSE

Para realizar pruebas de acceso a un mirror podemos hacerlo con rsync -l, por ejemplo:
[color=#000000]rsync -l rsync.opensuse.org::[/color]
De esta manera se nos listan todos lo modulos que ofrece este servidor.
Ahora si queremos ver el update:
rsync -l rsync.opensuse.org::opensuse-updates
El stdout debe ser el siguiente:
This is rsync.opensuse.org, public rsync server of openSUSE.org,
limited to 50 connections.

If you run a public mirror, please get in contact so we can give you 
access to the stage rsync server.
You'll find conditions for access and further information at
http://en.opensuse.org/Mirror_Infrastructure

Thanks!
[email protected]

drwxr-xr-x        4096 2012/06/28 06:14:44 .
lrwxrwxrwx           4 2011/11/16 10:03:40 openSUSE-current -> 12.1
lrwxrwxrwx           4 2011/11/16 10:03:42 openSUSE-stable -> 12.1
drwxr-xr-x          50 2008/06/16 09:42:13 11.0
drwxr-xr-x          50 2008/11/25 06:51:56 11.1
drwxr-xr-x          31 2009/05/06 03:10:06 11.2
drwxr-xr-x          31 2010/05/21 12:30:06 11.3
drwxr-xr-x          73 2012/08/14 12:16:11 11.4-test
drwxr-xr-x          63 2012/08/13 01:44:26 11.4
drwxr-xr-x         144 2012/08/14 12:17:23 12.1-test
drwxr-xr-x         134 2012/08/13 01:31:23 12.1
drwxr-xr-x         107 2012/07/11 10:59:20 12.2-non-oss
drwxr-xr-x         133 2012/08/14 12:14:00 12.2-test
drwxr-xr-x         123 2012/08/14 02:39:50 12.2
drwxr-xr-x          95 2012/06/28 06:14:44 NonFree

Ahora ya para copiar el update de 12.1

rsync --times --perms --recursive --links  
         --verbose --progress 
           rsync.opensuse.org::opensuse-updates/12.1 /srv/www/repoSUSE/update 
         --delete-after --human-readable --itemize-changes --stats


Al terminar de sincronizarse podemos verificar el estado desde algun navegador






Agregando nuestro repositorio local a la lista de repos del sistema

Vía Zypper

zypper ar http://192.168.1.55/repo/update/11.4  update-local
zypper ar http://192.168.1.55/repo/distribution/12.1/repo/oss/ oss-local
zypper ar http://192.168.1.55/repo/distribution/12.1/repo/non-oss/ non-oss-local

Vía YaST
Podemos hacerlo en modo grafico o bien invocamos con
yast repositories

Para revisar los repositorios configurados incluyendo la url
zypper lr -u
Luego podemos deshabilitar los repositorios publicos que tenemos localmente para evitar que este repetidos
zypper mr -d 4
Donde 4 es el indice del repo repetido.
Para finalizar refrescamos nuestra cache del contenido de los repos
zypper ref

Si vemos los logs de apache en nuestro servidor podemos ver el UserAgent "zypp"
192.168.1.11 - - [13/Aug/2012:16:48:30 -0600] "GET /repo/update/12.1/repodata/repomd.xml HTTP/1.1" 200 3353 "-" "ZYpp 10.4.5 (curl 7.22.0) openSUSE-12.1-i586"

Listo, si tienes bastantes equipos con este SO se hace bastante prático tener un repositorio local ya que descargás los paquetes a una velocidad que sólo tiene como límite la ofrecida por el medio de transmisión. En mi caso es sumamente util porque solo actualizo una vez hacia internet y luego actualizo la LAN
6Comments