1.20.2011

Bash Script para sincronizar imágenes Debian mediante Jigdo

Jigdo es una herramienta para la descarga de las imágenes ISO oficiales de Debian. La gran ventaja de su uso radica en que cuando queramos descargar una nueva versión de la imagen, solo se descargarán los cambios de paquetes dentro de ella, reduciendo enormemente el tiempo y tamaño de la descarga. Por ejemplo yo lo uso para actualizar las imágenes weekly-build de testing, es decir que cada semana salen nuevas imágenes, y son 8 en total. Sería lógico descargar nuevamente los 8 DVDs cada vez? Claro que no! Por eso existe jigdo, el programa verifica la imagen y descarga solo los paquetes que han sido actualizados.




Su uso se muy sencillo, se requieren los archivos .jigdo y .template de la imagen que queremos descargar/actualizar y listo. ¿Y para qué este script entonces? Bueno primero cada vez que la imagen cambia, también lo hacen los archivos .jigdo y .template por lo que hay que mantenerlos actualizados, luego para actualizar una imagen esta tiene que estar montada, por último tenemos que tener cuidado de no confundir las imagenes ya que su nombre es el mismo.
Para no tener que hacer esos pasos cada vez que queremos actualizar la o las imágenes es que he echo este script :)

El código se explica por si mismo, es una primera versión que iré mejorando con el tiempo y añadiendo mejor funcionalidad, como la posiblidad de actualizar varias imágenes en paralelo.

Espero que los usuarios Debian lo puedan probar y comenten cualquier cosa al respecto, si les ha funcionado, que mejorarían en el código actual, etc.

El script es el siguiente:

#!/bin/bash
# 19/01/11
# Speedlight - CarlosE.
# web: http://lasaventurasdetux.blogspot.com
# email: carlos.e@softwarelibre-ec.org
#
############################################################################################
####                     JDIS (Jigdo Debian Image Syncronizer) version 0.1              ####
#### Script para descarga de las imágenes weekly-build de Debian Squeeze mediante jigdo ####
############################################################################################
# V0.1
# Changelog: 19/01/11 3am.
#     + Primer escrito del script.
#     + ADD: procedimiento inicial para obtención de una imgen por vez.
# Changelog: 19/01/11 10am.
#     + FIX: traslado de imagen nueva a directorio de isos.
# Changelog: 19/01/11 23:30pm
#     + ADD: comprobación de punto de montaje /mnt. 
#     + Limpieza y arreglos del código.
#
# Por hacer
# - limitar el ingreso de número de imagen [1-8]
# - reiniciar el proceso para continuar con las siguientes imágenes.
# - añadir bienvenida :D
# - posiblidad de descarga paralela de imágenes.
# - !!! modificar valores por defecto del archivo ~/.jigdo-lite !!!

# ---Datos útiles---
# jigdo url --> http://cdimage.debian.org/cdimage/weekly-builds/i386/jigdo-dvd/
# rsync --> $rsync -avPh --progress cdimage.debian.org::cdimage/weekly-builds/i386/jigdo-dvd/* .
# isos finales --> /media/datos/distros/squeeze-week/
# isos jigdo --> /media/datos/distros/squeeze-week/jigdo
# montaje iso --> $sudo mount -o loop /ubicacion/imagen.iso /mnt

clear
# --- Variables ---
ARCH=i386
DIRJIGDO=/media/datos/distros/squeeze-week/jigdo
DIRISOS=/media/datos/distros/squeeze-week
ISOMON=/mnt

# Sinc. de directorio jigdo-dvd weekly-builds desde cdimage.debian.org -------##
echo "Ubicación de sincronización: $DIRJIGDO"
rsync -avPh --progress cdimage.debian.org::cdimage/weekly-builds/$ARCH/jigdo-dvd/* $DIRJIGDO/
# ----------------------------------------------------------------------------##

# Montaje de imagen iso ------------------------------------------------------##
echo "Ingrese el número de imagen que desea sincronizar (1-8)"; read ISONUM
ISOFILE=debian-testing-$ARCH-DVD-$ISONUM.iso
! cat /proc/mounts | grep -q /mnt
if [ $? -ne 0 ]; then
    echo "Ubicación de montaje en uso, desmontando.."
    sudo umount /mnt
    echo "Ubicación liberada, continuando.."
fi
echo "Montando imagen correcta.."
sleep 3
sudo mount -o loop $DIRISOS/$ISOFILE /mnt;
# ----------------------------------------------------------------------------##

# Ejecución de jigdo-lite ----------------------------------------------------##
JIGDOFILE=debian-testing-$ARCH-DVD-$ISONUM.jigdo
echo "Iniciando sincronización jigdo..."
jigdo-lite --scan $ISOMON $DIRJIGDO/$JIGDOFILE
# Recordar: punto de montaje: /mnt
# -----------------------------------------------------------------------------##

# Renombrado de imagen antigua y traslado de imagen nueva ---------------------##
if [ $? -eq 0 ]; then
    echo "Eliminando imagen antigua.."
    rm $DIRISOS/$ISOFILE; sleep 3
    echo "Moviendo imagen a $DIRISOS..."
    mv $ISOFILE $DIRISOS/; sleep 3
fi
# -----------------------------------------------------------------------------##
exit 0

Si lo desean descargar directamente: http://www.4shared.com/file/oTUYvVCU/jdis.html

Eso es todo por esta vez. Saludos!!!