Cree su propio Mirror de Centos
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
- Ahorro de ancho de banda Internet: dado que los paquetes se descargan una sola vez para todos los equipos
- Velocidad de descarga: Los paquetes a instalar o actualizar ya se encuentran locales
Desventajas
- Requiere un servidor HTTP: Para alojar los archivos, se debe disponer de un equipo con un web server plano, no requiere base de datos ni PHP
- Espacio en disco: Necesita del órden de 150GB
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:
- 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
- Servidor HTTP: Apache o lighttpd
- 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:
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:
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.
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:
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:
Verificamos el funcionamiento en cada equipos modificado con el comando yum -v repolist
Complementos cargados:fastestmirror, langpacks Limpiando repositorios: base extras updates Cleaning up everything Cleaning up list of fastest mirrorsyum -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
Seguimos avanzando con la instalación hasta llegar a la selección del tipo de instalación:
Presionamos el botón Agregar repositorios de software adicionales donde incluimos la url para updates:
Al concluir la instalación, ésta ya se encontrará actualizada.
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 |