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 {{Win}} (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 [http://atterer.net/jigdo/debian-jigdo-mini-howto/x172.html#RUNJIGDO-LITE 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 <tt>~/.mkjigdorc</tt>. 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 <tt>.jigdo</tt> et <tt>.template</tt> sur le serveur ftp et c'est tout.

Category:Tutoriels?

de:Erstellen von herunterladbaren Jigsaw-Abbildern für DVD und CD? en: Creating Jigsaw Download Images for DVD and CD Sets?