17 de junio de 2013

Repositorio Local y MirrorList con CentOS 6.4

Walter Cervini wcervini at gmail.com


Introducción

Mucha veces me preguntan del porque de un repositorio local para actualizar equipos o instalar nuevos paquetes. Pues por varios motivos:
  • Ahorro de Ancho de banda.
  • Actualizaciones e instalación de paquetes mucho mas rapidas.
  • Deployments de Instalaciones locales sin uso de Cd’s ó DVD’s.
  • y algunas otras mas que se me escapan en este momento
Aviso Bajo ningun motivo este deployment inhabilita SELinux, se hara la explicacion de como implementar el servicios y aplicar los contextos necesarios de SELinux para que este funcione de forma optima
Sugerencia La implementacion de este deployment es para cualquier de las versiones de CentOS soportadas hasta el momento

Puesta en Marcha

Paquetes Necesarios
* createrepo
* rsync
* policycoreutils
* script para la actualizacion de los repositorios.
Nota El paquete policycoreutils servira para configurar las politicas de SELinux
El script para la actualizacion de los repositorios esta disponible al final de este articulo
Instalación de los paquetes
sudo yum install -y rsync createrepo policycoreutils
Creacion del Repositorio Local
En este punto creamos las carpetas donde residiran los repositorios locales y configuraremos apache y SELinux.
Creamos la carpeta home y la llamaremos repo
mkdir /home/repo
Cambiamos el permiso de la carpeta para que todos pueda acceder y leer los archivos y carpetas
chmod 755 /home/repos
Habilitamos SELinux para que permita la funciolidad del servicio configurando el directorio con la etiqueta httpd_sys_content_t con el comando chcon y lo aplicamos de forma recursiva al directorio /home/repo/
   chcon fcontext -a -t httpd_sys_content_t /home/repo/ -R
Ahora crearemos el script en BASH que mantenga actualizado nuestro repositorio
    #/bin/bash
    rsync='/usr/bin/rsync -avzH --delete'
    local='/home/repo'
    mirror='us-msync.centos.org::CentOS'
    verlist='6.4 5.9' # Aqui las versiones a Descargar
    archlist='x86_64 i386' # Aqui colocamos las arquitecturas a Descargar
    baselist='updates extras centosplus contrib fasttrack cr os' #Aqui definimos los repositorios a Descargar
    for ver in $verlist
    do
        for arch in $archlist
        do
            for base in $baselist
            do
                echo "*******************************"
                echo ``
                echo "Sincronizando $ver/$base/$arch"
                echo ``
                echo "*******************************"
                remote=$mirror/$ver/$base/$arch/
                $rsync $remote $local/$ver/$base/$arch/
            done
        done
    done
Nota Llamaremos a este script up_repos.sh y lo colocaremos en /root/bin
El directorio bin no existe dentro de la carpeta root, sera necesario crearlo con el comando sudo mkdir /root/bin
Tambien debemos dar atributos de ejecucion al script que creamos, para esto efectuamos sudo chmod 755 /root/bin/up_repos.sh
Con respecto al script antes creado, debo mencionar algunos puntos la variable definida con $verlist contendra las versiones de CentOS, $archlist las arquitecturas y $baselist los repositorios, es decir en el script descargaremos los paquetes de los repositorios os, updates, extras, centosplus, contrib fasttrack y cr para las arquitecturas x86_64 y i386 para las versiones de CentOS 6.4 y 5.9
Aviso Ajuste el lector la version, arquitetura y repositorios que desea descargar, cada opcion en cualquiera de las tres variables debera esta separada con un espacio en blanco.

Automatizando el repositorio de forma automatica.

Para que nuestro repositorio local este siempre al dia, podemos colocar en el servicio cron esta actividad, en mi caso acostubro a actualizar siempre en las noches a partir de las 11, donde no esta el personal de la oficina laborando. Para esto usamos en comando sudo crontab -e y añadimos lo siguiente
00 23 * * * /root/bin/up_repos.sh
presionamos <ESC> y :wq
En este punto, nuestro repositorio estara actualizandose todos los dias a las 11 de la noche, si existen alguna actualizacion.
Hasta el momento hemos configurado nuestro repositorio y sus actualizaciones, peso esta vacio, no contiene ningun paquete. Para comenzar la actualizacion debemos ejecutar el comando de forma manual, esto lleva un buen tiempo si no hemos modificado el script up_repo_sh.
Solo debemos ejecutar
sudo /root/bin/up.repo.sh
Instalacion del Mirrorlist Local
Ahora crearemos el mirrorlist local, para que cuando nuestras maquinas intenten actualizarse o instalar algun paquete lo hagan en los repos locales.
Añadir en **/etc/hosts/** la ip donde esta ubicado nuestro repositorio,
esto debera añadirlo en cada una de las maquinas que desee que lea el
repositorio local
Si nuestro repo tiene la direccion 192.168.0.1 colocaremos lo siguiente
192.168.0.1 mirrorlist.centos.org
Configuracion de Apache
Para que apache pueda resolver el nombre mirrorlist.centos.org debemos añadir la siguiente configuracion a Apache, creando el archivo repo.conf en la carpeta /etc/httpd.conf.d/.
repo.conf
        alias /Centos /home/repo/Centos

        <Directory /home/repo/Centos>
           Options Indexes FollowSymlinks
           AllowOverride none
           order allow,deny
           allow from all
        </Directory>
En la raiz del Servidor Apache creamos el archivo index.php
index.php
<?php
#Nombre o Direccion Ip del Repsotiorio de Paquetes
$IPorHostName='repolocal.localhost';
#Parametros requeridos para la asignacion del mirror
$release=$_REQUEST['release'];
$arch=$_REQUEST['arch'];
$repo=$_REQUEST['repo'];

#Mirrorlist Oficial extraido de CentOS
$MirrorsCentOS="
ftp://ftp.inf.utfsm.cl/pub/Linux/CentOS/$release/$repo/$arch
http://mirror.netglobalis.net/pub/centos/$release/$repo/$arch
http://mirror.gtdinternet.com/$release/$repo/$arch/
http://centos.teletalk.net.br/$release/$repo/$arch/
http://centos.ufms.br/$release/$repo/$arch/
http://mirror.globo.com/centos/$release/$repo/$arch/
http://centos.secrel.com.br/$release/$repo/$arch/
http://centos.ufes.br/$release/$repo/$arch/
http://centos.mirror.mendoza-conicet.gob.ar/$release/$repo/$arch/
http://mirrors.ucr.ac.cr/centos/$release/$repo/$arch/";
echo 'http://'.$IPorHostName.'/Centos/'.$release.'/'.$repo.'/'.$arch;
echo $MirrorsCentOS;
?>
Nota El valor de la Variable $IPosHostName puede contener el nombre que deseen dar a su Servidor
Configuracion de los servicios para que inicien de forma automatica y sean visibles en la red
chkconfig httpd on
Configuracion del firewall
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
service iptables save

Pruebas

En alguna de las maquinas que haya configurado intente buscar o instalar
sudo yum search ipa
Verifique el log de httpd acecess.log en /var/log/httpd.log
192.x.x.x - - [16/Jun/2013:05:22:09 -0430] "GET /?release=6&arch=x86_64&repo=os HTTP/1.1" 200 493 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [16/Jun/2013:05:22:09 -0430] "GET /Centos/6/os/x86_64/repodata/repomd.xml HTTP/1.1" 200 3751 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [16/Jun/2013:05:22:12 -0430] "GET /?release=6&arch=x86_64&repo=centosplus HTTP/1.1" 200 581 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [16/Jun/2013:05:22:12 -0430] "GET /Centos/6/centosplus/x86_64/repodata/repomd.xml HTTP/1.1" 200 3457 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [16/Jun/2013:05:22:13 -0430] "GET /?release=6&arch=x86_64&repo=contrib HTTP/1.1" 200 548 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [16/Jun/2013:05:22:13 -0430] "GET /Centos/6/contrib/x86_64/repodata/repomd.xml HTTP/1.1" 200 2970 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [16/Jun/2013:05:22:13 -0430] "GET /ep/?repo=6&arch=x86_64 HTTP/1.1" 200 212 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [16/Jun/2013:05:22:13 -0430] "GET /epel/6/x86_64/repodata/repomd.xml HTTP/1.1" 200 4302 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [16/Jun/2013:05:22:13 -0430] "GET /?release=6&arch=x86_64&repo=extras HTTP/1.1" 200 537 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [16/Jun/2013:05:22:13 -0430] "GET /Centos/6/extras/x86_64/repodata/repomd.xml HTTP/1.1" 200 3550 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [16/Jun/2013:05:22:13 -0430] "GET /?release=6&arch=x86_64&repo=updates HTTP/1.1" 200 548 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [16/Jun/2013:05:22:13 -0430] "GET /Centos/6/updates/x86_64/repodata/repomd.xml HTTP/1.1" 200 3469 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [16/Jun/2013:05:22:13 -0430] "GET /walter/6/x86_64/repodata/repomd.xml HTTP/1.1" 200 3000 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [17/Jun/2013:03:16:17 -0430] "GET /Centos/6/os/x86_64/repodata/repomd.xml HTTP/1.1" 200 3751 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [17/Jun/2013:03:16:18 -0430] "GET /Centos/6/centosplus/x86_64/repodata/repomd.xml HTTP/1.1" 200 3457 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [17/Jun/2013:03:16:18 -0430] "GET /Centos/6/contrib/x86_64/repodata/repomd.xml HTTP/1.1" 200 2970 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [17/Jun/2013:03:16:18 -0430] "GET /epel/6/x86_64/repodata/repomd.xml HTTP/1.1" 200 4302 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [17/Jun/2013:03:16:19 -0430] "GET /Centos/6/extras/x86_64/repodata/repomd.xml HTTP/1.1" 200 3550 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [17/Jun/2013:03:16:19 -0430] "GET /Centos/6/updates/x86_64/repodata/repomd.xml HTTP/1.1" 200 3469 "-" "urlgrabber/3.9.1 yum/3.2.29"
192.x.x.x - - [17/Jun/2013:03:16:19 -0430] "GET /walter/6/x86_64/repodata/repomd.xml HTTP/1.1" 200 3000 "-" "urlgrabber/3.9.1 yum/3.2.29"

Comentarios Finales

Espero que este articulo haya sido de su agrado y de su utilidad

Derechos de Autoria

Usted es libre de:

        Copiar, distribuir y comunicar públicamente la obra
        Remezclar — transformar la obra

Reconocimiento: Debe reconocer los créditos de la obra de la manera especificada por el autor o el licenciador
(pero no de una manera que sugiera que tiene su apoyo o apoyan el uso que hace de su obra).

Comercial: No puede utilizar esta obra para fines comerciales.
cc
Este articulo está bajo una licencia de Creative Commons Reconocimiento-NoComercial 3.0 Unported
Copyright 2013 Walter Cervini wcervini at gmail.com, All Rights Reserved

No hay comentarios:

Share Up To 110 % - 10% Affiliate Program