Utiliser Jigdo

Aller à : navigation, rechercher

Cette page décrit comment Jigdo (Jigsaw Download) fonctionne. Jigdo a été créé à l'origine pour Debian, mais peut être utilisé par tout le monde. La mise en place du serveur doit être faite par l'administrateur et n'est donnée ici que pour information. Jigdo est utilisé pour récupérer différentes images de CD ou DVD pour le même jeux de fichiers sans avoir à stocker tous les fichiers images sur le serveur.

Ce que fait Jigdo

Une distribution Linux est essentiellement un jeu de fichiers rassemblés sur un CD ou un DVD. Pour différentes raisons, plusieurs sortes de CD/DVD doivent être proposés qui ont essentiellement le même contenu avec quelques différences. Par exemple un CD avec uniquement les paquetages Open Source et un CD avec aussi les paquetages propriétaires.

Mettre chaque image en téléchargement demande beaucoup de place sur le serveur. Debian était la plus concernée car elle voulait être disponible sur absolument tous types de matériels. SUSE Linux veut être disponible sur les principaux systèmes et c'est déjà beaucoup.

Dans la distribution, beaucoup de paquetages sont indépendants du matériel ("noarch") comme les documentations, les sources ou les scripts.

Quelle que soit l'image de CD/DVD images que vous ayez, une distribution doit aussi avoir un répertoire "inst-source" avec les paquetages individuels. Jigdo utilisera cette arborescence pour construire les images de CD/DVD.

Jigdo peut télécharger un par un tous les fichiers nécessaires pour construire un équivalent exact des CD ou DVD. Le téléchargement se faisant par fichiers individuels peut être stoppé et redémarré à volonté. Jigdo utilise simplement wget pour le téléchargement et wget est renommé pour être un très bon client de téléchargement.

Comment Jigdo fonctionne

Jigdo a besoin de deux fichiers spéciaux.

  • un fichier ".jigdo" pour savoir où sont les fichiers nécessaires pour construire les images. C'est un fichier assez petit (le fichier jigdo de SUSE Linux 10.0 fait 170ko) ;
  • un fichier ".template". Ce fichier est à peu près une carte du fichier ISO et les md5sum des fichiers. La taille du fichier template peut être assez grande, mais de toute façon bien inférieure à celle de l'ISO.

Étant donnés ces deux fichiers, Jigdo commence par construire un fichier vide de la taille exacte de l'ISO finale.

Ensuite il lance plusieurs sessions wget, chacune avec un fichier différent et les récupère. Aussitôt que le fichier est récupéré, son md5sum est vérifié et le fichier écrit dans le fichier image. Il n'y a aucune nécessité d'écrire les fichiers dans un ordre défini,car Jigdo sait où le fichier doit être placé.

De cette façon, il y a très peu de place occupée sur le disque en plus de l'image. Il y a le fichier CD/DVD (gros, pour le DVD), le fichier .jigdo et le .template files et le plus gros des fichiers inclus, d'ordinaire moins de 100Mo dans la SUSE.

Jigdo est présent dans la distribution SUSE distribution et sur le net. Il y a même un Jigdo pour Windows® (non documenté ici).

Avec le fichier .jigdo de la 10.0, Jigdo utilise différents serveurs pour chaque session wget, ce qui donne un téléchargement très rapide.

Utiliser Jigdo

Il vous faut d'abord Jigsaw Download obtenu par Yast ou depuis http://atterer.net/jigdo/ (Versions Linux et Windows disponibles) ou les paquetages spéciaux pour SUSE LINUX 9.2, 9.3, ou 10.0 depuis http://pi3.informatik.uni-mannheim.de/~schiele/suse/.

Pour trouver le serveur de fichiers jigdo, allez à la page Téléchargement, ftp, version stable, et remontez dans l'arborescence du serveur pour trouver "SL-10.0-OSS/jigdo/". Les fichiers sont là. Conservez cette URL, vous allez en avoir besoin immédiatement.

En résumé, avec les binaires trouvés sur la SUSE 10.0 :

Installez Jigdo avec yast. Ne téléchargez rien, Jigdo s'en chargera.

Dans le répertoire où vous voulez l'image finale, tapez, type :

jigdo-lite <server><path to the .jidgo folder><.jigdofile>

Pour le DVD, cela pourrait être :

jigdo-lite http://ft(...)i.cz/
pub/linux/opensuse/distribution/SL-10.0-OSS/jigdo/
SUSE-10.0-DVD-OSS-i386-GM.iso.jigdo

tout sur la même ligne.

Faites Entrée. Faites Entrée une deuxième fois pour répondre "oui" à la question de Jigdo-lite. Attendez. C'est tout. Avec une bonne connexion, deux heures après vous avez l'image.

Instructions complètes sur le site Jigdo ici.

Quelle est l'économie?

Pour SUSE Linux 10.1 alpha1 avec les CD proposés.

Les CD originaux

601M    SUSE-10.1-CD-OSS-i386-Alpha1-CD1.iso
649M    SUSE-10.1-CD-OSS-i386-Alpha1-CD2.iso
685M    SUSE-10.1-CD-OSS-i386-Alpha1-CD3.iso
665M    SUSE-10.1-CD-OSS-i386-Alpha1-CD4.iso
525M    SUSE-10.1-CD-OSS-i386-Alpha1-CD5.iso
3.1G    total
662M    SUSE-10.1-CD-OSS-ppc-Alpha1-CD1.iso
688M    SUSE-10.1-CD-OSS-ppc-Alpha1-CD2.iso
694M    SUSE-10.1-CD-OSS-ppc-Alpha1-CD3.iso
679M    SUSE-10.1-CD-OSS-ppc-Alpha1-CD4.iso
536M    SUSE-10.1-CD-OSS-ppc-Alpha1-CD5.iso
3.2G    total
643M    SUSE-10.1-CD-OSS-x86_64-Alpha1-CD1.iso
686M    SUSE-10.1-CD-OSS-x86_64-Alpha1-CD2.iso
687M    SUSE-10.1-CD-OSS-x86_64-Alpha1-CD3.iso
662M    SUSE-10.1-CD-OSS-x86_64-Alpha1-CD4.iso
536M    SUSE-10.1-CD-OSS-x86_64-Alpha1-CD5.iso
3.2G    total

Les Images Jigsaw

i386

188K    SL-10.1-OSS-alpha1.jigdo
8.6M    SUSE-10.1-CD-OSS-i386-Alpha1-CD1.template
132K    SUSE-10.1-CD-OSS-i386-Alpha1-CD2.template
14M     SUSE-10.1-CD-OSS-i386-Alpha1-CD3.template
156K    SUSE-10.1-CD-OSS-i386-Alpha1-CD4.template
116K    SUSE-10.1-CD-OSS-i386-Alpha1-CD5.template
23M     total

0.72% de la taille originale !

ppc

188K    SL-10.1-OSS-alpha1.jigdo
124M    SUSE-10.1-CD-OSS-ppc-Alpha1-CD1.template
200M    SUSE-10.1-CD-OSS-ppc-Alpha1-CD2.template
134M    SUSE-10.1-CD-OSS-ppc-Alpha1-CD3.template
76M     SUSE-10.1-CD-OSS-ppc-Alpha1-CD4.template
195M    SUSE-10.1-CD-OSS-ppc-Alpha1-CD5.template
728M    total

22% de la taille originale. Ce n'est pas aussi bon que pour le i386. C'est dû à une mauvaise utilisation des paquetages noarch.

x86_64

188K    SL-10.1-OSS-alpha1.jigdo
118M    SUSE-10.1-CD-OSS-x86_64-Alpha1-CD1.template
200M    SUSE-10.1-CD-OSS-x86_64-Alpha1-CD2.template
134M    SUSE-10.1-CD-OSS-x86_64-Alpha1-CD3.template
77M     SUSE-10.1-CD-OSS-x86_64-Alpha1-CD4.template
177M    SUSE-10.1-CD-OSS-x86_64-Alpha1-CD5.template
704M    total

22% de la taille originale pour les mêmes raisons que pour ppc.

Creation des images

Après l'installation des paquetages Jigdo, vous pouvez utiliser le script suivant :

#!/bin/bash
#
# mkjigdo - make jigdo files for all ISO images in one directory
# Copyright (C) 2005  Robert Schiele <rschiele@uni-mannheim.de>
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2 of the License, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc., 51
# Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#

set -eu

usage()
{
    cat << EOT

Usage: $0 [OPTIONS]
Options:
  -b WORD  Basename of the jigdo file (=BASENAME)
  -c FILE  Configuration file to load
  -i PATH  Path for image files (=ISODIR)
  -j PATH  Path for jigdo files (=JIGDODIR)
  -m WORD  List of mirror servers separated by \`,' (=MIRRORS)
  -r PATH  Relative path on all mirrors (=RELDIR)
  -s PATH  Path for file storage (=SRCDIR)
  -t PATH  Path for temporary files and cache (=TMPDIR)
  -h       Output this help
  -v       Output version info
EOT
}

# set some plain stupid defaults
BASENAME=a
RELDIR=.
ISODIR=.
JIGDODIR=.
TMPDIR=.
SRCDIR=.
MIRRORS="ftp://localhost/pub"

# read standard config file
test -f ~/.$(basename "$0")rc && . ~/.$(basename "$0")rc

# parse command line
while [ "$*" ]; do
    case "$1" in
        -b) BASENAME="$2"; shift;;
        -c) . "$2"; shift;;
        -h) usage; exit;;
        -i) ISODIR="$2"; shift;;
        -j) JIGDODIR="$2"; shift;;
        -m) MIRRORS="${2//,/ }"; shift;;
        -r) RELDIR="$2"; shift;;
        -s) SRCDIR="$2"; shift;;
        -t) TMPDIR="$2"; shift;;
        -v) echo mkj version 0.0; exit 0;;
        *)  usage >&2; exit 1;;
    esac
    shift
done

# run jigdo on all ISO files
JIGDOLIST=
for ISO in "$ISODIR"/*.iso; do
    BASEFILE="${ISO/*\/}"
    BASEFILE="${BASEFILE/.iso}"
    case "$BASEFILE" in
        *.delta) ;;
        *) jigdo-file mt --bzip2 -i "$ISO" -j "$TMPDIR/$BASEFILE.jigdo.tmp" \
            -t "$JIGDODIR/$BASEFILE.template" -c "$TMPDIR/$BASENAME.cache" \
            "$SRCDIR"
            JIGDOLIST="$JIGDOLIST $TMPDIR/$BASEFILE.jigdo.tmp";;
    esac
done

# merge all temporary jigdo files into one file
{
    awk '/^[[]/{if(a==1)a=2}/^\[Image\]/{a=1}{if(a<2)print}' $JIGDOLIST
    echo '[Servers]'
    for i in $MIRRORS; do
        echo A="$i/$RELDIR/"
    done
    echo
    echo '[Parts]'
    awk '/^[[#]/{a=0}/^\[Parts\]/{a=1}/^[^[]/{if(a==1)print}' $JIGDOLIST | \
        sort -t= -k2 -u
} | gzip -c9 > "$JIGDODIR/$BASENAME.jigdo"

Vous pouvez placer les spécifications sur la ligne de commande ou les mettre dans le fichier de configuration ~/.mkjigdorc. Voici un exemple pour la SUSE Linux 10.1 alpha1 :

BASENAME=SL-10.1-OSS-alpha1
RELDIR=distribution/SL-OSS-factory
BASEDIR=/pub/opensuse/$RELDIR/
ISODIR=/pub/opensuse/distribution/$BASENAME/iso
JIGDODIR=res
TMPDIR=tmp
SRCDIR=$BASEDIR/inst-source
MIRRORS="ftp://ftp.opensuse.org/pub/opensuse
         ftp://ftp.gwdg.de/pub/opensuse"

Il n'y a plus qu'à placer les fichiers .jigdo et .template sur le serveur ftp et c'est tout.