Facebookfacebook Twitter Emailmail Imprimirprint
Jueves 12 de diciembre de 2024
Santoral:
Nuestra Señora de Guadalupe
Otros:
Semana:
50
Día año:
347/366 (95%)
U.F.:
Sin información
IPC:
Sin información
Dolar:
Sin información
Euro:
Sin información
Bitcoin:
U$ {bitcoin}
mindicador.cl

Cree su propio Mirror de Centos

Puede mejorar los tiempos de actualización si maneja multiples servidores Centos en su oficina

Introducción

Si nos encontramos en la situación que contamos con un gran número de equipos y/o servidores con CentOS, en cualquiera de sus versiones, y nos guste mantenerlos actualizados, nos será de gran utilidad manejar un mirror dentro de nuestras instalaciones. A su vez, puede ser utilizado para instalaciones "NetInstall", en que agregamos nuestro repositorio "Update", evitando la instalación de paquetes obsoletos.

Se pueden aplicar criterios y procedimientos similares si se desea implementar un Mirror público, teniendo el cuidado en el dimensionamiento del equipo y considerando el uso de ancho de banda de subida a utilizar.

Ventajas

Desventajas

Servidor exclusivo o Compartido

Podemos utilizar algún servidor ya en servicio, el que podría verse afectado si existe concurrencia en la actualización de los equipos, lo que puede utilizarse en una primera etapa mientras se evalúa si se requiere de un server exclusivo, en dicho caso debemos considerar los siguientes requerimientos:

  1. Servidor, considerando uso local podría bastar con un equipo pequeño:
    • CPU: Celeron/Duron 1.5 Ghz o superior
    • HDD: 250GB (Dejamos espacio para Sistema Operativo, logs y posible crecimiento
    • Red: 100 Mbps o superior
  2. Servidor HTTP: Apache o lighttpd
  3. Comando "rsync"

Asignación de espacio de disco

Debemos asignar un espacio en disco para el repositorio, la forma más simple es crear un directorio bajo el DOCUMENT_ROOT, pero por su volumen, puede ser mejor opción asignar espacio de un volumen independiente, para este caso consideraremos que tenemos un volumen opt y utilizaremos el directorio /opt/mirror/centos para el repositorio y /opt/mirror/scripts para alojar el script de automatización y /opt/mirror/log para logs de ejecución los creamos como usuario root:

mkdir -p /opt/mirror/centos mkdir -p /opt/mirror/scripts mkdir -p /opt/mirror/log

Luego deberemos configurar Apache para direccionar dicho directorio, por defecto en un equipo CentOS, dicha configuración se encuentra en /etc/httpd/conf.d, donde crearemos el archivo centosmirror.conf

Alias /CentOS "/opt/mirror/centos"
Alias /centos "/opt/mirror/centos"

<Directory /opt/mirror/centos>
    Options +Indexes +FollowSymLinks
    HeaderName HEADER.html
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

Script

Nuestro siguiente paso es escojer de alguno de los mirror oficiales en algunos de los que ofrescan protocolo "rsync", preferentemente alguno cercano a su servidor, lamentablemente no he visto alguno en Chile. A mode de ejemplo seleccionaré

Ahora generamos el shell script bajo el directorio /opt/mirror/script con el nombre centosmirror.sh

#!/bin/bash

FECHA=`date +%Y%m%d_%H%M`
BASEDIR=/opt/mirror
LOCAL=$BASEDIR/centos/
REPO=rsync://mirrors.kernel.org/centos/
# Ancho de Banda máximo a utiliza en KBytes, multiplique por 8 para estimar en kbps
BWLIMIT=1000 

BASENAME=$BASEDIR/log/rsyncCentOS-$FECHA
LOG=$BASENAME.log

if [ -d $LOCAL ]; then
  rsync  -rpvhltH --delete --bwlimit=$BWLIMIT --stats $REPO $LOCAL > $LOG 2>$BASENAME.err
else
  echo "Target directory $LOCAL not present."
fi

Recuerde darle permiso de ejecución al script:

chmod +x centosmirror.sh

El script no registra lo realizado en el directorio log, no muestra nada en pantalla ya que su idea es ejecutarlo via cron. Al ejecutar, se crea un nuevo archivo con la fecha y hora de la ejecución.

Para asegurarnos de no saturar el enlace, se tiene una limitación del ancho de banda a utilizar definido en la variable BWLIMIT, la que se representa en KBytes/seg, en éste ejemplo definido en 1000, lo que se traduce en 8 mbps. Éste valor puede ser ajustado según nuestro ancho de banda disponible, sobre todo en las primeras ejecuciones considerando que se descargarán del órden de 100 GB, lo que puede demorar varios días, por lo que se recomienda en comienzo ejecutar a mano en forma controlada hasta contar con el mirror completo. Puede interrumpir (<Ctrl-C>) y varias veces, gracias a rsync, solo se descargarán los archivos modificados, incompletos y faltantes.

Nunca ejecute el script en paralelo, ya que sobrecarga al servidor de origen y su propio equipo, y podrá causar inconsistencias.

Una vez que la ejecución del script no nos traiga nuevos archivos y su ejecución sea rápida, procedemos a cambiar los permisos sobre los archivos, para efectos del ejemplo los dejaré bajo usuario apache:

chown -R apache:apache /opt/mirror

Podemos probar el acceso a nuestro mirror, suponiendo que el nombre de nuestro servidor es mirror.miempresa.local, deberemos revisar la url http://mirror.miempresa.local/centos, lo que nos mostrará una lista de archivos, accesando el archivo timestamp.txt al final de la lista, podemos confirmar que tan actualizado se encuentra nuestro mirror.

Nuestro siguiente paso es actualizar automáticamente por medio de cron, aunque recomiendan cada 6 horas para los sitios públicos, probablemente para uso local recomiendo hacerlo cada 24 horas, la cantidad de actualizaciones no son muchas en general. creamos un archivo de cron /etc/cron.d/mirror, por ejemplo a las 05:23 AM

# Actualiza Mirror Local Centos
23 05 * * * apache /opt/mirror/script/centosmirror.sh

Configurar repositorio local en equipos CentOS cliente

Nuestro repositorio local ya se encuentra listo, ahora lo que resta es decirle a nuestos equipos CentOS que lo utilicen, por lo que debemos agregarlo como repositorio en cada uno de ellos, para las versiones 5, 6 y 7 se cumplen los mismos pasos. Primero agregamos en el directorio /etc/yum.repos.d el archivo Centos-Local.repo reemplazando el nombre "mirror.miempresa.local" por el de nuestro servidor, para CentOS 6 se tiene:


# CentOS-Local.repo
#
# Nuestro Repositorio local

[base]
name=CentOS-$releasever - Base
baseurl=http://mirror.miempresa.local/centos/$releasever/os/$basearch/
gpgcheck=0

#released updates
[updates]
name=CentOS-$releasever - Updates
baseurl=http://mirror.miempresa.local/centos/$releasever/updates/$basearch/
gpgcheck=0

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
baseurl=http://mirror.miempresa.local/centos/$releasever/extras/$basearch/
gpgcheck=0

Y desabilitamos el repositorio base, desde el directorio /etc/yum.repos.d ejecutamos como root:

mv CentOS-Base.repo CentOS-Base.disabled

Verificamos el funcionamiento en cada equipos modificado con el comando yum -v repolist

yum clean all
Complementos cargados:fastestmirror, langpacks
Limpiando repositorios: base extras updates
Cleaning up everything
Cleaning up list of fastest mirrors
yum -v repolist
Cargando el complemento "fastestmirror"
Cargando el complemento "langpacks"
Adding es_CL to language list
Config time: 0.935
Yum version: 3.4.3
Loading mirror speeds from cached hostfile
Configurando sacos de paquetes
pkgsack time: 0.200
Repo-id      : base/7/x86_64
Repo-name    : CentOS-7 - Base
Repo-revision: 1404489580
Repo-updated : Fri Jul  4 12:01:07 2014
Repo-pkgs    : 8.465
Repo-size    : 5.8 G
Repo-baseurl : http://mirror.miempresa.local/centos/7/os/x86_64/
Repo-expire  : 21.600 segundo(s) (último: Sun Aug 31 16:32:51 2014)
Nombre de archivo del repositorio: ///etc/yum.repos.d/CentOS-Local.repo

Repo-id      : extras/7/x86_64
Repo-name    : CentOS-7 - Extras
Repo-revision: 1404913681
Repo-updated : Wed Jul  9 09:48:03 2014
Repo-pkgs    : 30
Repo-size    : 35 M
Repo-baseurl : http://mirror.miempresa.local/centos/7/extras/x86_64/
Repo-expire  : 21.600 segundo(s) (último: Sun Aug 31 16:32:51 2014)
Nombre de archivo del repositorio: ///etc/yum.repos.d/CentOS-Local.repo

Repo-id      : updates/7/x86_64
Repo-name    : CentOS-7 - Updates
Repo-revision: 1409345686
Repo-updated : Fri Aug 29 16:55:34 2014
Repo-pkgs    : 736
Repo-size    : 1.6 G
Repo-baseurl : http://mirror.miempresa.local/centos/7/updates/x86_64/
Repo-expire  : 21.600 segundo(s) (último: Sun Aug 31 16:32:52 2014)
Nombre de archivo del repositorio: ///etc/yum.repos.d/CentOS-Local.repo

repolist: 9.231

    

Instalación en red (NetInstall) desde nuestro repositorio

Otra ventaja de nuestro repositorio local, es que podemos realizar instalaciones por la red, dejandolas "Up to date", con el CD NetInstall o configurando el booteo "PXE" por la red

Comezamos la instalación, y al consultar Método de Instalación, le indicamos URL

Unos paso más adelante llegamos a Configuración de URL, donde ingresamos la URL de nuestro mirror para el repositorio os (Sistema Operativo base), para el caso de la versión 6 en x86_64, será: http://192.168.1.4/centos/6/os/x86_64/recuerda acomodar el nombre del servidor al que asignaste, o el IP local

Configuracion URL Centos NetInstall

Seguimos avanzando con la instalación hasta llegar a la selección del tipo de instalación:

Seleccionar repositorio adicional en Centos NetInstall

Presionamos el botón Agregar repositorios de software adicionales donde incluimos la url para updates:

Agregar repositorio local en Centos NetInstall

Al concluir la instalación, ésta ya se encontrará actualizada.

Escrito por: Luis Hernán de la Barra, 01/09/2014
Si tiene interés por alguno de éstos servicios u otro similar, por favor llene el formulario de contacto

Generado por Sistema y almacenado en cache

Wyzer
Luis Hernán de la Barra
Teléfono:   +56995451689
WhatsApp:   +56995451689
E-Mail:info@wyzer.cl
Web:www.wyzer.cl