  Howto Bzip2
  David Fetter, dfetter@best.com;
  Version Franaise par Arnaud Launay, zoro@multimania.com
  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>.
  ______________________________________________________________________

  Table des matires


  1. Introduction

     1.1 Historique des rvisions
        1.1.1 v1.9
        1.1.2 v1.8
        1.1.3 v1.7
        1.1.4 v1.6
        1.1.5 v1.5
        1.1.6 v1.4
        1.1.7 v1.3
        1.1.8 v1.2
        1.1.9 v1.1
        1.1.10 v1.0

  2. Obtenir bzip2

     2.1 Le Bzip2-HOWTO dans votre langue
     2.2 Obtenir des binaires prcompils de bzip2
     2.3 Obtenir les sources de bzip2
     2.4 Compiler bzip2 pour votre machine

  3. Utiliser bzip2 lui-mme

  4. Utiliser bzip2 avec tar

     4.1 Le plus facile  mettre en place
     4.2 Facile  mettre en oeuvre, relativement simple  utiliser, pas de ncessit d'avoir les privilges de super-utilisateur
     4.3 Aussi simple  utiliser, mais ncessite les privilges de super-utilisateur

  5. Utiliser bzip2 avec less

  6. Utiliser bzip2 avec emacs

     6.1 Changer emacs pour tous
     6.2 Changer emacs pour une seule personne

  7. Utiliser bzip2 avec wu-ftpd

  8. Utiliser bzip2 avec Netscape sous X

  9. Utiliser bzip2 pour recompresser en remplacement d'autres formats de compression



  ______________________________________________________________________

  11..  IInnttrroodduuccttiioonn

  Bzip2 est un nouvel algorithme dlirant de compression de donnes. Il
  produit gnralement 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
   venir, que l'auteur de bzip2, Julian Seward
  <mailto:Julian_Seward@muraroa.demon.co.uk>, dcrit comme suit:


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




  Les futures versions de ce document pourront galement inclure un
  rsum de la discussion sur l'ventualit et la mthode d'utilisation
  de bzip2 dans le noyau Linux.


  11..11..  HHiissttoorriiqquuee ddeess rrvviissiioonnss

  11..11..11..  vv11..99

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


  Ajout de la manire lgante d'utilisation de tar par Leonard Jean-
  Marc.


  Ajout de la traduction en sudois par Linus kerlund.


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


  Dplacement des traductions vers leur propre section.


  11..11..22..  vv11..88

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


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


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


  11..11..33..  vv11..77

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


  11..11..44..  vv11..66

  Ajout du truc de TenThumbs pour Netscape.


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


  11..11..55..  vv11..55

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


  11..11..66..  vv11..44

  Ajout de la traduction en japonais de Tetsu Isaji.


  11..11..77..  vv11..33

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


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


  11..11..88..  vv11..22

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


  11..11..99..  vv11..11

  Ajout du patch pour emacs.


  11..11..1100..  vv11..00

  1re version.


  22..  OObbtteenniirr bbzziipp22

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


  22..11..  LLee BBzziipp22--HHOOWWTTOO ddaannss vvoottrree llaanngguuee

  Les francophones peuvent se rfrer aux traductions d'Arnaud Launay.
  La version web se trouve ici
  <http://www.freenix.org/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 tre contact par courrier lectronique  cette adresse
  <mailto:zoro@multimania.com>.


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



  Les sudois peuvent se rfrer aux traductions de Linus kerlund ici
  <http://user.tninet.se/~uxm165t/linux_doc.html>. Linus peut tre
  contact par courrier lectronique  cette adresse
  <mailto:uxm165t@tninet.se>.


  22..22..  OObbtteenniirr ddeess bbiinnaaiirreess pprrccoommppiillss ddee bbzziipp22

  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2..33..  OObbtteenniirr lleess ssoouurrcceess ddee bbzziipp22

  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2..44..  CCoommppiilleerr bbzziipp22 ppoouurr vvoottrree mmaacchhiinnee

  SSii vvoouuss aavveezz ggcccc 22..77..**, changez la ligne indiquant


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




  pour avoir


       CFLAGS = -O2 -fomit-frame-pointer




  C'est--dire, remplacez le -O3 par un -O2 et supprimez le -funroll-
  loops.  Vous pouvez galement 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 gnreront le mauvais code, et tous les gcc 2.7 gnreront du code
  plus lent et plus gros. Pour les autres compileurs (lcc, egcs, gcc
  2.8.x) les CFLAGS par dfaut sont bons.

  Aprs a, lancez simplement make et installez-le d'aprs le README.


  33..  UUttiilliisseerr bbzziipp22 lluuii--mmmmee

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


  44..  UUttiilliisseerr bbzziipp22 aavveecc ttaarr

  Sont lists ci-dessous trois mthodes d'utilisation de bzip2 avec tar,
  soit:


  44..11..  LLee pplluuss ffaacciillee  mmeettttrree eenn ppllaaccee

  Cette mthode ne ncessite pas de configurer quoi que ce soit. Pour
  dcompresser une archive foo.tar.bz2 en bzip2 dans le rpertoire
  courant, tapez


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




  Ceci fonctionne, mais peut tre ennuyeux  taper souvent.


  44..22..  FFaacciillee  mmeettttrree eenn ooeeuuvvrree,, rreellaattiivveemmeenntt ssiimmppllee  uuttiilliisseerr,, ppaass
  ddee nncceessssiitt dd''aavvooiirr lleess pprriivviillggeess ddee ssuuppeerr--uuttiilliissaatteeuurr

  Merci  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4..33..  AAuussssii ssiimmppllee  uuttiilliisseerr,, mmaaiiss nncceessssiittee lleess pprriivviillggeess ddee ssuuppeerr--
  uuttiilliissaatteeuurr

  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. Vrifiez que
  tar et bzip2 soient tous 2 dans votre $PATH en excutant "which tar"
  et "which bzip2". Pour utiliser le nouveau tar, fates juste


        tar xyf foo.tar.bz2




  pour dcompresser le fichier.

  Pour crer une nouvelle archive, le fonctionnement est similaire:


        tar cyf foo.tar.bz2 fichier1 fichier2 fichier3...rpertoire1 rpertoire2...




  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5..  UUttiilliisseerr bbzziipp22 aavveecc lleessss

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




  #!/bin/sh
  # Ceci est un prprocesseur pour 'less'. Il est utilis 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-modifie de tar:
    *.tar.bz2) bzip2 -cd $1 $1 2>/dev/null | tar tzvvf - ;;
  # Celui-ci fonctionne avec la version patche 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 compresss
    *.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` ; # Vrifier 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6..  UUttiilliisseerr bbzziipp22 aavveecc eemmaaccss

  66..11..  CChhaannggeerr eemmaaccss ppoouurr ttoouuss

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

  AAvveerrttiisssseemmeenntt:: Je l'ai uniquement test 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 rpertoire des sources emacs-20.2/lisp (quel que soit
     l'endroit o il se trouverait dcompact)

  2. Enregistrez le patch ci-dessous dans un fichier nomm jka-
     compr.el.diff (il doit tre 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. Dplacez votre jka-compr.elc original vers un endroit sr 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6..22..  CChhaannggeerr eemmaaccss ppoouurr uunnee sseeuullee ppeerrssoonnnnee

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

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






  ;; (D)compression automatique pour le chargement/sauvegarde de fichiers
  ;; (gzip(1) et simililaires)
  ;; Nous le lanons en tat stopp, ainsi le support pour bzip2(1) peut tre
  ;; ajout.
  ;; Cod par Ulrik Dickow pour ~/.emacs avec Emacs 19.34.
  ;; Doit fonctionner avec beaucoup d'anciens et de nouveaux emacs galement.
  ;; 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7..  UUttiilliisseerr bbzziipp22 aavveecc wwuu--ffttppdd

  Merci  Arnaud Launay pour ce gain de bande passante. Ce qui suit doit
  aller dans /etc/ftpconversions pour faire de la compression et
  dcompression au vol avec bzip2. Vrifiez 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 -c -y -f -
  %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+BZIP2




  88..  UUttiilliisseerr bbzziipp22 aavveecc NNeettssccaappee ssoouuss XX

  tenthumbs@cybernex.net nous dit:


       J'ai galement trouv un moyen pour obtenir l'utilisation de bzip2 par
       Netscape/Linux pour le Content-Encoding de la mme manire qu'il
       utilise gzip. Ajoutez ceci  $HOME/.Xdefaults ou $HOME/.Xresources.

       J'utilise l'option -s car je prfre perdre un peu de vitesse de
       dcompression et conserver de la mmoire. Vous pouvez supprimer cette
       option si vous le dsirez.







  Netscape*encodingFilters:      \
          x-compress :  : .Z     : uncompress -c  \n\
          compress   :  : .Z     : uncompress -c  \n\
          x-gzip     :  : .z,.gz : gzip -cdq      \n\
          gzip       :  : .z,.gz : gzip -cdq      \n\
          x-bzip2    :  : .bz2   : bzip2 -ds \n




  99..  UUttiilliisseerr bbzziipp22 ppoouurr rreeccoommpprreesssseerr eenn rreemmppllaacceemmeenntt dd''aauuttrreess ffoorrmmaattss
  ddee ccoommpprreessssiioonn

  Ce programme perl prend les fichiers compresss dans d'autres formats
  (.tar.gz, .tgz. .tar.Z, et .Z pour cette itration) et les recompresse
  pour un meilleur rsultat. Le source perl dispose de tous les types de
  documentation ncessaires sur ce qu'il fait et comment il fait ce
  qu'il fait.
















































  #!/usr/bin/perl -w

  #######################################################
  #                                                     #
  # Ce programme prend les fichiers compresss et       #
  # gzip-s dans le rpertoire courant et les tranforme #
  # en fichiers bzip2. Il supporte proprement           #
  # l'extension .tgz, produisant un fichier .tar.bz2.   #
  #                                                     #
  #######################################################
  $counter = 0;
  $saved_bytes = 0;
  $totals_file = '/tmp/machine_bzip2_total';
  $machine_bzip2_total = 0;

  @files = <*[Zz]>;
  $total = scalar(@files);

  foreach (@files) {
      if (/tgz$/) {
          ($new=$_) =~ s/tgz$/tar.bz2/;
      } else {
          ($new=$_) =~ s/\.g?z$/.bz2/i;
      }
      $orig_size = (stat $_)[7];
      ++$counter;
      print "Recompacte $_ ($counter/$total)...\n";
      if ((system "gzip -cd $_ |bzip2 >$new") == 0) {
          $new_size = (stat $new)[7];
          $factor = int(100*$new_size/$orig_size+.5);
          $saved_bytes += $orig_size-$new_size;
          print "$new fait environ $factor% de la taille de $_. :",($factor<100)?')':'(',"\n";
          unlink $_;
      } else {
          print "Arrgghh!  Quelque chose est arriv  $_: $!\n";
      }
  }
  print "Vous avez ",
        ($saved_bytes>=0)?"sauv":"perdu",
        " $saved_bytes octets de place disque :",
         ($saved_bytes>=0)?")":"(", "\n";

  unless (-e '/tmp/machine_bzip2_total') {
      system ('echo "0" >/tmp/machine_bzip2_total');
      system ('chmod', '0666', '/tmp/machine_bzip2_total');
  }


  chomp($machine_bzip2_total = `cat $totals_file`);
  open TOTAL, ">$totals_file"
       or die "Ne peut ouvrir le total sur tout le systme: $!";
  $machine_bzip2_total += $saved_bytes;
  print TOTAL $machine_bzip2_total;
  close TOTAL;

  print "Ceci nous donne un total de ",`cat $totals_file`," octets sauvs sur tout le systme.\n";










