Menu

Un Espejo Debian Simple

9 abril, 2018 - Publicaciones
Un Espejo Debian Simple

Cuando se busca tener actualizaciones, implementaciones e instalaciones rápidas conviene tener un espejo de paquetes localmente, para sistemas operativos Debian GNU/Linux eso se puede hacer fácilmente con el paquete debmiror y apache2 (u otro servidor web para publicar el repositorio).

Primero disponer de una carpeta para llenar de paquetes deb.

mkdir -p espejos/debian

Y otro directorio para guardar registros de lo que hizo el scripts

mkdir espejos/log

Luego entrar a la carpeta espejos y crear los guiones que nos faciliten la actualización del repositorio, un guion puede ser este:

#!/bin/bash
NOMBRE=debian-mirror.$(date +%Y-%m-%d-%H-%M-%S).log
DIRECTORIOLOG="$(pwd)/log"
DIRECTORIOWEB="$(pwd)/debian/"
REGISTRO="$DIRECTORIOLOG/$NOMBRE"
ESPEJO="debian.ues.edu.sv"
exec > "$REGISTRO" 2>&1
debmirror --debug \
--i18n \
--progress \
--verbose \
--diff=none \
--nosource \
--method=http \
--host=$ESPEJO \
--root=debian \
--section=main,contrib,non-free \
--dist=stretch,stretch-backports,stretch-updates,stretch-proposed-updates \
--arch=amd64,i386 \
--getcontents \
--ignore-missing-release \
--ignore-release-gpg \
--exclude='-dbg_.*' \
--exclude-deb-section=:'^debug$' \
--rsync-extra=none \
"$DIRECTORIOWEB"
cat "$REGISTRO" | bzip2 -c > "$REGISTRO.bz2"
rm "$REGISTRO

Se explicará algunas líneas, para que pueda modificarlo a su antojo:

#!/bin/bash

Así inician muchos scripts

NOMBRE=debian-mirror.$(date +%Y-%m-%d-%H-%M-%S).log

Se define una variable para un archivo de registro de eventos, de manera que pueda ejecutar el guion como un servicio y revisar los resultados en otro momento, acá se define el nombre del archivo de manera que sea diferente cada vez que se ejecute sacando un código a partir de la fecha en que se ejecuta %Y Año, %m mes en números, %d día, %H hora, %M minutos, y %S segundos.

DIRECTORIOLOG="$(pwd)/log"

El comando pwd determina el directorio local donde se ejecuta y de esta manera saber donde encuentra la subcarpeta log, dejando en una variable la ruta del directorio.

DIRECTORIOWEB="$(pwd)/debian/"

En este caso se define donde será la carpeta donde se guardará el repositorio de paquetes deb.

REGISTRO="$DIRECTORIOLOG/$NOMBRE"

Se crea la ruta completa del archivo de registro y se almacena en una variable.

ESPEJO="debian.ues.edu.sv"

La variable guarda la url de donde se hará la copia del espejo, o sea de otro espejo público.

exec > "$REGISTRO" 2>&1

Con esta línea se define que lo que se ejecute y muestre una salida en la pantalla lo guardará en el archivo de registro.

debmirror --debug \

El comando debmirror para crear el repositorio y el parámetro debug para mostrar las salidas de texto importantes de lo que realizará el comando, estas salidas de texto son las que guarda el registro.

--i18n \

Se le dice que por favor tambien consiga las traducciones para otros idiomas del espejo

--progress \

En las descargas de cada cosa se mostrará un progreso con porcentaje de la misma

--verbose \

Que todo lo que muestre en pantalla sea bastante informativo, solo que quedará guardado en el registro

--diff=none \

En los repositorios existenarchivos de diferencias de paquetes, los cuales pueden ser muchos, por lo que se le indica que no baje ninguno

--nosource \

Los paquetes respetan la filosofía de Software Libre por lo cual incluyen los códigos fuentes de los mismos, pero no todos los usan y se necesita espacio, acá se le indica que no descargue las fuentes

--method=http \

Las descargas de los paquetes se pueden hacer por varios métodos, vía protocolo web (http), transferencia de archivos (ftp) o por sincronización (rsync), en este caso se hace por medio de protocolo web

--host=$ESPEJO \

La variable $ESPEJO guarda la url de donde descargará los paquetes, es en esta línea donde se le dice de que dirección debe descargar los paquetes, podría ser una IP.

--root=debian \

En algunos casos la carpeta raíz es una subcarpeta, en el caso del sirio que se le hace réplica se encuentran en una subcarpeta, en el caso de que no hubiera una subcarpeta se coloca /, pero en este caso existe una subcarpeta llamada debian, o sea la ruta del espejo real es http://debian.ues.edu.sv/debian/

--section=main,contrib,non-free \

El proyecto debian maneja en cada versión ramas especiales, la main es la principal donde se encuentra todo el Software Libre que según sus lineamientos son libres por completo, la sección contrib donde en su traducción literal son contribuciones a software creado por otros autores, y la sección non-free es la de Software no libre pero lo suficientemente libre (debido a sus licencias especiales) que permiten ser usado o adquirido con pocas limitaciones, en este caso se incluyen todas las ramas, existen repositorios que no tienen todas las ramas o las llaman de diferente manera

--dist=stretch,stretch-backports,stretch-updates,stretch-proposed-updates \

Acá se determina que versiones de Debian se copiarán, por razones técnicas muy efectivas en vez de usar un número de versión se usa un nombre código para la versión y en esta linea se le indica que use la versión stretch, esta versión tiene secciones de la misma versión especiales que nos permite obtener versiones de paquetes mas nuevos o que son actualizaciones de seguridad, acá se le indican varias de esas versiones útiles que pose una distribución estable (stretch es la versión estable cuando se creó este artículo)

--arch=amd64,i386 \

Debian es el sistema operativo universal, por lo que se puede instalar en diferentes tipos de arquitecturas, con este parámetro le indicamos que replicará un espejo para versiones de procesadores de 32 bits (i386) y de 64 bits (amd64)

--getcontents \

Se le pide en este parametro que obtenga los contenidos del espejo, los contenidos son archivos que traen listados y descripciones de paquetes

--ignore-missing-release \

Para cuando se copia de un repositorio no oficial a veces se carece de firmas digitales para considerarlos oficiales, pero también pasa cuando hay actualizaciones de firmas y por ello es bueno que ignore las firmas, lo cual no es totalmente correcto, pero útil para cuando ya sabemos que hacemos la copia de un lugar seguro

--ignore-release-gpg \

Similar al caso anterior, pero por si el servidor no tiene el archivo de firma gpg que por favor continúe sin ella

--exclude='-dbg_.*' \

Existen los paquetes con que son de software, no todos son de software, se poseen de recursos como imágenes y documentos, cuando son de software existen casos en particulares, para fines de depuración, que el software tiene una versión que ejecuta el programa sin nada mas y la versión que ejecuta el programa mostrando mensajes de lo que realiza para estudiar su comportamiento, o sea que al hacer un espejo se pueden tener dos programas que sean el mismo y ocupen espacio, en este caso se le dice que no descargue ese tipo de paquetes que son fácil de identificar por contener en el nombre del archivo la cadena de texto “-dbg_”

--exclude-deb-section=:'^debug$' \

Lo mismo que antes, paquetes para estudiar su comportamiento pero que también están en una sección especial y específica llamada debug, y en casos como el propuesto no es necesario hacer espejo si queremos sólo usar programas en nuestro contexto y no modificarlos o estudiarlos

--rsync-extra=none \

Por si existieran otras subcarpetas en el lugar de donde se copian se le indica que no copie nada mas que lo indicado

“$DIRECTORIOWEB”

Y finalmente le damos la ruta de donde se creará el espejo

cat "$REGISTRO" | bzip2 -c > "$REGISTRO.bz2"

Se comprime el registro para conservar espacio en nuestro disco

rm "$REGISTRO"

Se borra el archivo grande

Cada línea que termina con “\” significa que el comando continúa en la linea siguiente, o sea que es un comando que si se escribiera es extra largo, por ello se hace en varias lineas por elegancia.

Si desea cambiar algo en el guion hágalo, le recomendamos leer el manual de debmirror (man debmirror) y puede quitar o poner lo que se ajuste a sus necesidades.

Una vez definido en este caso se guarda en un archivo, por ejemplo debian-mirror-actualizar.sh y si este se colocara en una carpeta /var/espejo/ puede crearse una tarea programada en cron para que lo haga una o dos veces al día o puede ejecutarlo manualmente.

Cuando la carpeta se publique en el servidor web solo basta apuntar a los clientes hacia el espejo, suponiendo que la url es http://espejo.ejemplo y la subcarpeta publicada es el directorio debian, las entradas para un sources.list en /etc/apt/ o un archivo espejo.list dentro de /etc/apt/sources.list.d/ quedaría así:

# Espejo con debmirror
deb http://espejo.ejemplo/debian stretch main contrib non-free
deb http://espejo.ejemplo/debian stretch-backports main contrib non-free
deb http://espejo.ejemplo/debian stretch-updates main contrib non-free
deb http://espejo.ejemplo/debian stretch-proposed-updates main contrib non-free

La dirección http://espejo.ejemplo puede ser sustituida por una ip, por ejemplo http://10.0.0.10/ eso dependerá de cada caso.

Etiquetas: ,

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *