Utiliser Jigdo
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.
Sommaire
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.