
  Howto Bzip2
  David Fetter, dfetter@best.com;
  Version Francaise par Arnaud Launay, zoro@lsol.tm.fr
  v1.9, 29 Juin 1998

  Ce  document  vous expliquera comment utiliser le nouveau programme de
  compression  bzip2.  Le  document  sgml   original   se   trouve   ici
  <http://www.best.com/~dfetter/Bzip2-HOWTO/Bzip2-HOWTO.sgml>.

  1.  Introduction

  Bzip2  est un nouvel algorithme delirant de compression de donnees. Il
  produit generalement des fichiers qui ne font que  60  ou  70%  de  la
  taille obtenue par compression par gzip.

  Ce  document vous montrera quelques applications courantes pour bzip2.

  Les futures versions de ce document discuteront de la librairie  bzip2
  a     venir,     que     l'auteur     de    bzip2,    Julian    Seward
  <mailto:Julian_Seward@muraroa.demon.co.uk>, decrit comme suit:

  Je travaille actuellement sur la prochaine version de bzip2, qui utilisera
  le meme format de fichier .bz2; le principal ajout sera une librairie du
  style zlib pour lire et ecrire des donnees dans ce format a partir d'autres
  programmes.

  Les futures versions de ce  document  pourront  egalement  inclure  un
  resume  de la discussion sur l'eventualite et la methode d'utilisation
  de bzip2 dans le noyau Linux.

  1.1.  Historique des revisions

  1.1.1.  v1.9

  Clarification du probleme avec gcc 2.7.*.  Merci  a  Ulrik  Dickow  de
  l'avoir fait remarquer.

  Ajout  de  la  maniere elegante d'utilisation de tar par Leonard Jean-
  Marc.

  Ajout de la traduction en suedois par Linus kerlund.

  Correction de la section wu-ftpd sur la suggestion d'Arnaud Launay.

  Deplacement des traductions vers leur propre section.

  1.1.2.  v1.8

  Ajout de buzzit et tar.diff dans le sgml ou ils  doivent  se  trouver.
  Correction  de  la  ponctuation  et de la presentation. Merci a Arnaud
  Launay pour m'aider a corriger ma copie. :-)

  Suppression du projet xv  pour  le  moment,  du  au  manque  d'interet
  populaire.

  Ajout d'un pense-bete pour les versions futures du document.

  1.1.3.  v1.7

  Ajout de l'utilitaire buzzit. Correction du patch pour gnu tar.

  1.1.4.  v1.6

  Ajout du truc de TenThumbs pour Netscape.

  Egalement,  changement  de  lesspipe.sh d'apres sa suggestion. Il doit
  mieux fonctionner maintenant.

  1.1.5.  v1.5

  Ajout de la traduction en francais  d'Arnaud  Launay,  ainsi  que  son
  fichier pour wu-ftpd.

  1.1.6.  v1.4

  Ajout de la traduction en japonais de Tetsu Isaji.

  1.1.7.  v1.3

  Ajout du .emacs d'Ulrik Dickow pour les 19.30 et plus recents.

  (Egalement  corrige  le  patch  jka-compr.el  pour  emacs  d'apres  sa
  suggestion. Oops! Bzip2 ne possede pas encore(?) de drapeau "append").

  1.1.8.  v1.2

  Correction  du patch pour emacs afin qu'il reconnaisse automagiquement
  les fichiers .bz2.

  1.1.9.  v1.1

  Ajout du patch pour emacs.

  1.1.10.  v1.0

  1ere version.

  2.  Obtenir bzip2

  La  page  web  de  bzip2   se   trouve   sur   le   site   britannique
  <http://www.muraroa.demon.co.uk/>.   Le   miroir   americain  est  ici
  <http://www.digistar.com/bzip2/index.html>. Vous pouvez  egalement  le
  trouver sur le ftp de Red Hat, ici <ftp://ftp.redhat.com/pub/contrib>.

  2.1.  Le Bzip2-HOWTO dans votre langue

  Les francophones peuvent se referer aux traductions  d'Arnaud  Launay.
  La          version          web         se         trouve         ici
  <http://www.freenix.fr/linux/HOWTO/mini/Bzip2.html>,  et  vous  pouvez
  utiliser                  le                  ftp                  ici
  <ftp://ftp.lip6.fr/pub/linux/french/docs/HOWTO/mini/Bzip2.gz>.  Arnaud
  peut   etre   contacte  par  courrier  electronique  a  cette  adresse
  <mailto:zoro@lsol.tm.fr>.

  Les nippons peuvent se referer aux traductions  de  Tetsu  Isaji,  ici
  <http://jf.gee.kyoto-u.ac.jp/JF/JF.html>. Isaji peut etre joint sur sa
  page principale <http://www2s.biglobe.ne.jp/~kaien/>, ou par  courrier
  electronique a cette adresse <mailto:isaji@mxu.meshnet.or.jp>.

  Les  suedois  peuvent  se referer aux traductions de Linus kerlund ici
  <http://user.tninet.se/~uxm165t/linux_doc.html>.   Linus   peut   etre
  contacte     par     courrier    electronique    a    cette    adresse
  <mailto:uxm165t@tninet.se>.

  2.2.  Obtenir des binaires precompiles de bzip2

  Voyez les sites principaux. Le binaire Intel  pour  Red  Hat  est  ici
  <ftp://ftp.redhat.com/pub/contrib/i386/bzip2-0.1pl2-1.i386.rpm>.    Le
  Debian    est    ici    <ftp://ftp.debian.org/debian/hamm/hamm/binary-
  i386/utils/bzip2_0.1pl2-4.deb>,    et    le    slackware    est    ici
  <http://www.cdrom.com/pub/linux/slackware-3.4/slakware/a9/bzip2.tgz>.
  Vous  pouvez  aussi  les  obtenir  d'endroits analogues sur les divers
  sites miroirs.

  2.3.  Obtenir les sources de bzip2

  Elles se trouvent sur les sites officiels (voir ``Obtenir Bzip2'' pour
  les     emplacements,     ou     Red     Hat     en     dispose    ici
  <ftp://ftp.redhat.com/pub/contrib/SRPMS/bzip2-0.1pl2-1.src.rpm>).

  2.4.  Compiler bzip2 pour votre machine

  Si vous avez gcc 2.7.*, changez la ligne indiquant

       CFLAGS = -O3 -fomit-frame-pointer -funroll-loops

  pour avoir

       CFLAGS = -O2 -fomit-frame-pointer

  C'est-a-dire, remplacez le -O3 par un -O2 et  supprimez  le  -funroll-
  loops.   Vous  pouvez  egalement ajouter une option quelconque du type
  -m* (comme -m486, par exemple) que vous utilisez lorsque vous compilez
  un noyau.

  Eviter le -funroll-loops est le plus important, car la plupart des gcc
  2.7 genereront le mauvais code, et tous les gcc 2.7 genereront du code
  plus  lent  et  plus  gros. Pour les autres compileurs (lcc, egcs, gcc
  2.8.x) les CFLAGS par defaut sont bons.

  Apres ca, lancez simplement make et installez-le d'apres le README.

  3.  Utiliser bzip2 lui-meme

  RTFM (Read the Fine Manual Page). En clair: lisez le manuel.

  4.  Utiliser bzip2 avec tar

  Sont listes ci-dessous trois methodes d'utilisation de bzip2 avec tar,
  soit:

  4.1.  Le plus facile a mettre en place

  Cette  methode  ne  necessite pas de configurer quoi que ce soit. Pour
  decompresser une archive  foo.tar.bz2  en  bzip2  dans  le  repertoire
  courant, tapez

       /chemin/vers/bzip2 -cd foo.tar.bz2 | tar xf -

  Ceci fonctionne, mais peut etre ennuyeux a taper souvent.

  4.2.   Facile  a mettre en oeuvre, relativement simple a utiliser, pas
  de necessite d'avoir les privileges de super-utilisateur

  Merci a Leonard Jean-Marc <mailto:leonard@sct1.is.belgacom.be> pour ce
  truc.

  Dans  votre  .bashrc  (ou  .tcshrc,  ou .cshrc) vous pouvez mettre une
  ligne comme celle-ci:

       alias btar='tar --use-compress-program /usr/local/bin/bzip2 '

  4.3.  Aussi simple a utiliser, mais necessite les privileges de super-
  utilisateur

  Appliquez la correction suivande au gnu tar 1.12 comme suit:

       cd tar-1.12/src; patch < /chemin/vers/tar.diff

  compilez le, et installez le, et tout sera  impeccable.  Verifiez  que
  tar  et  bzip2 soient tous 2 dans votre $PATH en executant "which tar"
  et "which bzip2". Pour utiliser le nouveau tar, faites juste

   tar xyf foo.tar.bz2

  pour decompresser le fichier.

  Pour creer une nouvelle archive, le fonctionnement est similaire:

        tar cyf foo.tar.bz2 fichier1 fichier2 fichier3...repertoire1 repertoire2...

  Voici la correction:

  *** tar.c       Thu Jun 11 00:09:23 1998
  --- tar.c.new   Thu Jun 11 00:14:24 1998
  ***************
  *** 196,201 ****
  --- 196,203 ----
      {"block-number", no_argument, NULL, 'R'},
      {"block-size", required_argument, NULL, OBSOLETE_BLOCKING_FACTOR},
      {"blocking-factor", required_argument, NULL, 'b'},
  +   {"bzip2", required_argument, NULL, 'y'},
  +   {"bunzip2", required_argument, NULL, 'y'},
      {"catenate", no_argument, NULL, 'A'},
      {"checkpoint", no_argument, &checkpoint_option, 1},
      {"compare", no_argument, NULL, 'd'},
  ***************
  *** 372,377 ****
  --- 374,380 ----
                  PATTERN                at list/extract time, a globbing PATTERN\n\
      -o, --old-archive, --portability   write a V7 format archive\n\
          --posix                        write a POSIX conformant archive\n\
  +   -y, --bzip2, --bunzip2             filter the archive through bzip2\n\
      -z, --gzip, --ungzip               filter the archive through gzip\n\
      -Z, --compress, --uncompress       filter the archive through compress\n\
          --use-compress-program=PROG    filter through PROG (must accept -d)\n"),
  ***************
  *** 448,454 ****
       Y  per-block gzip compression */

    #define OPTION_STRING \
  !   "-01234567ABC:F:GK:L:MN:OPRST:UV:WX:Zb:cdf:g:hiklmoprstuvwxz"

    static void
    set_subcommand_option (enum subcommand subcommand)
  --- 451,457 ----
       Y  per-block gzip compression */

    #define OPTION_STRING \
  !   "-01234567ABC:F:GK:L:MN:OPRST:UV:WX:Zb:cdf:g:hiklmoprstuvwxyz"

    static void
    set_subcommand_option (enum subcommand subcommand)
  ***************
  *** 805,810 ****
  --- 808,817 ----
          case 'X':
          exclude_option = 1;
          add_exclude_file (optarg);
  +       break;
  +
  +       case 'y':
  +       set_use_compress_program_option ("bzip2");
          break;

          case 'z':

  5.  Utiliser bzip2 avec less

  Pour decompresser les fichiers de bzip2 au  vol,  c-a-d  pour  pouvoir
  utiliser "less" sur eux sans commencer par les bunzip2-er, vous pouvez
  creer un lesspipe.sh (man less) comme celui-ci:

  #!/bin/sh
  # Ceci est un preprocesseur pour 'less'. Il est utilise lorsque cette
  # variable d'environnement existe:  LESSOPEN="|lesspipe.sh %s"

    case "$1" in
    *.tar) tar tvvf $1 2>/dev/null ;; # Voir le contenu de fichiers .tar et .tgz
    *.tgz) tar tzvvf $1 2>/dev/null ;;
  # Celui-ci fonctionne pour la version non-modifiee de tar:
    *.tar.bz2) bzip2 -cd $1 $1 2>/dev/null | tar tzvvf - ;;
  # Celui-ci fonctionne avec la version patchee de tar:
  # *.tar.bz2) tyvvf $1 2>/dev/null ;;
    *.tar.gz) tar tzvvf $1 2>/dev/null ;;
    *.tar.Z) tar tzvvf $1 2>/dev/null ;;
    *.tar.z) tar tzvvf $1 2>/dev/null ;;
    *.bz2) bzip2 -dc $1  2>/dev/null ;; # Voir correctement les fichiers compresses
    *.Z) gzip -dc $1  2>/dev/null ;;
    *.z) gzip -dc $1  2>/dev/null ;;
    *.gz) gzip -dc $1  2>/dev/null ;;
    *.zip) unzip -l $1 2>/dev/null ;;
    *.1|*.2|*.3|*.4|*.5|*.6|*.7|*.8|*.9|*.n|*.man) FILE=`file -L $1` ; # groff src
      FILE=`echo $FILE | cut -d ' ' -f 2`
      if [ "$FILE" = "troff" ]; then
        groff -s -p -t -e -Tascii -mandoc $1
      fi ;;
    *) cat $1 2>/dev/null ;;
  #  *) FILE=`file -L $1` ; # Verifier si c'est un binaire, alors -> voir avec 'strings'
  #    FILE1=`echo $FILE | cut -d ' ' -f 2`
  #    FILE2=`echo $FILE | cut -d ' ' -f 3`
  #    if [ "$FILE1" = "Linux/i386" -o "$FILE2" = "Linux/i386" \
  #         -o "$FILE1" = "ELF" -o "$FILE2" = "ELF" ]; then
  #      strings $1
  #    fi ;;
    esac

  6.  Utiliser bzip2 avec emacs

  6.1.  Changer emacs pour tous

  J'ai ecrit le patch suivant pour jka-compr.el qui ajoute bzip2 au mode
  d'auto-compression.

  Avertissement:  Je l'ai uniquement teste avec emacs-20.2, mais je n'ai
  pas de raisons de croire qu'une approche similaire  ne  fonctionnerait
  pas avec d'autres versions.

  Pour l'utiliser,

  1. Allez dans le repertoire des sources emacs-20.2/lisp (quel que soit
     l'endroit ou il se trouverait decompacte)

  2. Enregistrez  le  patch  ci-dessous  dans  un  fichier  nomme   jka-
     compr.el.diff (il doit etre seul dans ce fichier ;).

  3. Faites

        patch < jka-compr.el.diff

  4. Lancez emacs, et utilisez

   M-x byte-compile-file jka-compr.el

  5. Quittez emacs.

  6. Deplacez  votre  jka-compr.elc  original vers un endroit sur en cas
     d'erreurs.

  7. Remplacez le par le nouveau jka-compr.elc.

  8. Amusez-vous !

     --- jka-compr.el        Sat Jul 26 17:02:39 1997
     +++ jka-compr.el.new    Thu Feb  5 17:44:35 1998
     @@ -44,7 +44,7 @@
      ;; The variable, jka-compr-compression-info-list can be used to
      ;; customize jka-compr to work with other compression programs.
      ;; The default value of this variable allows jka-compr to work with
     -;; Unix compress and gzip.
     +;; Unix compress and gzip.  David Fetter added bzip2 support :)
      ;;
      ;; If you are concerned about the stderr output of gzip and other
      ;; compression/decompression programs showing up in your buffers, you
     @@ -121,7 +121,9 @@

      ;;; I have this defined so that .Z files are assumed to be in unix
     -;;; compress format; and .gz files, in gzip format.
     +;;; compress format; and .gz files, in gzip format, and .bz2 files,
     +;;; in the snappy new bzip2 format from http://www.muraroa.demon.co.uk.
     +;;; Keep up the good work, people!
      (defcustom jka-compr-compression-info-list
        ;;[regexp
        ;; compr-message  compr-prog  compr-args
     @@ -131,6 +133,10 @@
           "compressing"    "compress"     ("-c")
           "uncompressing"  "uncompress"   ("-c")
           nil t]
     +    ["\\.bz2\\'"
     +     "bzip2ing"        "bzip2"         ("")
     +     "bunzip2ing"      "bzip2"         ("-d")
     +     nil t]
          ["\\.tgz\\'"
           "zipping"        "gzip"         ("-c" "-q")
           "unzipping"      "gzip"         ("-c" "-q" "-d")

  6.2.  Changer emacs pour une seule personne

  Merci  a  Ulrik   Dickow,   ukd@kampsax.dk   <mailto:ukdATkampsax.dk>,
  ingenieur systeme a Kampsax Technology, pour celui-ci:

  Pour  faire en sorte de pouvoir utiliser bzip2 automatiquement lorsque
  vous n'etes pas administrateur systeme, ajoutez simplement ce qui suit
  a votre fichier .emacs.

  ;; (De)compression automatique pour le chargement/sauvegarde de fichiers
  ;; (gzip(1) et simililaires)
  ;; Nous le lancons en etat stoppe, ainsi le support pour bzip2(1) peut etre
  ;; ajoute.
  ;; Code par Ulrik Dickow pour ~/.emacs avec Emacs 19.34.
  ;; Doit fonctionner avec beaucoup d'anciens et de nouveaux emacs egalement.
  ;; Pas de garantie, cependant.
  ;;
  (if (fboundp 'auto-compression-mode) ; Emacs 19.30+
      (auto-compression-mode 0)
    (require 'jka-compr)
    (toggle-auto-compression 0))
  ;; Now add bzip2 support and turn auto compression back on.
  (add-to-list 'jka-compr-compression-info-list
               ["\\.bz2\\(~\\|\\.~[0-9]+~\\)?\\'"
                "zipping"        "bzip2"         ()
                "unzipping"      "bzip2"         ("-d")
                nil t])
  (toggle-auto-compression 1 t)

  7.  Utiliser bzip2 avec wu-ftpd

  Merci a Arnaud Launay pour ce gain de bande passante. Ce qui suit doit
  aller  dans  /etc/ftpconversions  pour  faire  de  la  compression  et
  decompression  au  vol  avec  bzip2.  Verifiez  que les chemins (comme
  /bin/compress) sont bons.

   :.Z:  :  :/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS
   :   : :.Z:/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS
   :.gz: :  :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP
   :   : :.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP
   :.bz2: :  :/bin/bzip2 -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:BUNZIP2
   :   : :.bz2:/bin/bzip2 -9 -c %s:T_REG:O_COMPRESS:BZIP2
   :   : :.tar:/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR
   :   : :.tar.Z:/bin/tar -c -Z -f -
  %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS
   :   : :.tar.gz:/bin/tar -c -z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP
   :   : :.tar.bz2:/bin/tar -
