Mini Howto Bzip2
 David Fetter, [email protected];
 Version Fran�aise par Arnaud Launay, [email protected]
 v2.0, 22 ao�t 1999

 Ce document vous expliquera comment utiliser le nouveau programme de
 compression bzip2. Le document sgml original se trouve ici
 <http://fetter.org/Bzip2-HOWTO/>.
 ______________________________________________________________________

 Table des mati�res


 1. Introduction

    1.1 Historique des r�visions
       1.1.1 v2.00
       1.1.2 v1.92
       1.1.3 v1.91
       1.1.4 v1.9
       1.1.5 v1.8
       1.1.6 v1.7
       1.1.7 v1.6
       1.1.8 v1.5
       1.1.9 v1.4
       1.1.10 v1.3
       1.1.11 v1.2
       1.1.12 v1.1
       1.1.13 v1.0

 2. Obtenir bzip2

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

 3. Utiliser bzip2 lui-m�me

 4. Utiliser bzip2 avec tar

    4.1 Le plus facile � mettre en place
    4.2 Facile � mettre en oeuvre, relativement simple � utiliser, pas de n�cessit� d'avoir les privil�ges de super-utilisateur
    4.3 Aussi simple � utiliser, mais n�cessite les privil�ges 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



 ______________________________________________________________________

 11..  IInnttrroodduuccttiioonn

 Bzip2 est un nouvel algorithme d�lirant de compression de donn�es. Il
 produit g�n�ralement 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 auront des applications de
 libbzip2, la biblioth�que bzip2 en C que l'auteur de bzip2, Julian
 Seward <mailto:[email protected]>, a sympathiquement
 �crite. Le manuel de bzip2, qui dispose des informations de bas-
 niveau, se trouve ici
 <http://www.bzip2.org/bzip2/docs/manual_toc.html>.


 Les futures versions de ce document pourront �galement inclure un
 r�sum� de la discussion sur l'�ventualit� (et la m�thode)
 d'utilisation de bzip2 dans le noyau Linux.


 11..11..  HHiissttoorriiqquuee ddeess rr��vviissiioonnss

 11..11..11..  vv22..0000

 Changement de la section ``Utiliser bzip2 avec less'' pour que les
 fichiers .tar.bz2 puissent �tre lus. Merci � Nicola Fabiano
 <mailto:[email protected]> pour la correction.

 Mise � jour de l'utilitaire buzzit.

 Mise � jour des informations sur tar.


 11..11..22..  vv11..9922

 Mise � jour de la section ``Obtenir des binaires de bzip2'', incluant
 les binaires S.u.S.E.


 11..11..33..  vv11..9911

 Correction d'une type et clarification de quelques probl�mes li�s au
 shell dans la section ``section sur l'utilisation de bzip2 avec tar''.
 Merci � Alessandro Rubini.


 Mise � jour de l'utilitaire buzzit pour ne pas exploser l'archive
 bzip2 originale.


 Ajout de bgrep, un outil de type zgrep.


 11..11..44..  vv11..99

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


 Ajout de la mani�re �l�gante d'utilisation de tar par Leonard Jean-
 Marc.


 Ajout de la traduction en su�dois par Linus �kerlund.



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


 D�placement des traductions vers leur propre section.


 11..11..55..  vv11..88

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


 Suppression du projet xv pour le moment, d� au manque d'int�r�t
 populaire.


 Ajout d'un pense-b�te pour les versions futures du document.


 11..11..66..  vv11..77

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


 11..11..77..  vv11..66

 Ajout du truc de TenThumbs pour Netscape.


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


 11..11..88..  vv11..55

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


 11..11..99..  vv11..44

 Ajout de la traduction en japonais de Tetsu Isaji.


 11..11..1100..  vv11..33

 Ajout du .emacs d'Ulrik Dickow pour les 19.30 et plus r�cents.


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


 11..11..1111..  vv11..22

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


 11..11..1122..  vv11..11

 Ajout du patch pour emacs.



 11..11..1133..  vv11..00

 1�re version.


 22..  OObbtteenniirr bbzziipp22

 La page web de bzip2 se trouve sur le site britannique
 <http://www.bzip2.org/>. Le miroir am�ricain est ici
 <http://www.digistar.com/bzip2/index.html>.


 22..11..  LLee BBzziipp22--HHOOWWTTOO ddaannss vvoottrree llaanngguuee

 Les francophones peuvent se r�f�rer aux traductions d'Arnaud Launay.
 La version web se trouve ici
 <http://www.freenix.org/unix/linux/HOWTO/mini/Bzip2.html>, et vous
 pouvez utiliser le ftp ici
 <ftp://ftp.traduc.org/pub/HOWTO/FR/Bzip2.gz>. Arnaud peut �tre
 contact� par courrier �lectronique � cette adresse
 <mailto:[email protected]>.


 Les nippons peuvent se r�f�rer 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:[email protected]>.


 Les su�dois peuvent se r�f�rer aux traductions de Linus �kerlund ici
 <http://user.tninet.se/~uxm165t/linux_doc.html>. Linus peut �tre
 contact� par courrier �lectronique � cette adresse
 <mailto:[email protected]>.


 22..22..  OObbtteenniirr ddeess bbiinnaaiirreess pprr��ccoommppiill��ss ddee bbzziipp22

 Voir la page web.


 22..33..  OObbtteenniirr lleess ssoouurrcceess ddee bbzziipp22

 Elles se trouvent sur les sites officiels (voir ``Obtenir Bzip2'' pour
 les emplacements.


 22..44..  CCoommppiilleerr bbzziipp22 ppoouurr vvoottrree mmaacchhiinnee

 SSii vvoouuss aavveezz ggcccc 22..77..**, 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 g�n�reront le mauvais code, et tous les gcc 2.7 g�n�reront du code
 plus lent et plus gros. Pour les autres compileurs (lcc, egcs, gcc
 2.8.x) les CFLAGS par d�faut sont bons.

 Apr�s �a, lancez simplement make et installez-le d'apr�s le README.


 33..  UUttiilliisseerr bbzziipp22 lluuii--mm��mmee

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


 44..  UUttiilliisseerr bbzziipp22 aavveecc ttaarr

 Sont list�s ci-dessous trois m�thodes d'utilisation de bzip2 avec tar,
 soit:


 44..11..  LLee pplluuss ffaacciillee �� mmeettttrree eenn ppllaaccee

 Cette m�thode ne n�cessite pas de configurer quoi que ce soit. Pour
 d�compresser une archive foo.tar.bz2 en bzip2 dans le r�pertoire
 courant, tapez


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




 ou


      tar --use-compress-prog=bzip2 xf foo.tar.bz2





 Ceci fonctionne, mais peut �tre ennuyeux � taper souvent.


 44..22..  FFaacciillee �� mmeettttrree eenn ooeeuuvvrree,, rreellaattiivveemmeenntt ssiimmppllee �� uuttiilliisseerr,, ppaass
 ddee nn��cceessssiitt�� dd''aavvooiirr lleess pprriivviill��ggeess ddee ssuuppeerr--uuttiilliissaatteeuurr

 Merci � Leonard Jean-Marc <mailto:[email protected]> pour ce
 truc.

 Dans votre .bashrc, vous pouvez mettre une ligne comme celle-ci:


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





 Dans votre .tcshrc, ou .cshrc, la ligne ressemblera �:


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

 44..33..  AAuussssii ssiimmppllee �� uuttiilliisseerr,, mmaaiiss nn��cceessssiittee lleess pprriivviill��ggeess ddee ssuuppeerr--
 uuttiilliissaatteeuurr

 Mettez votre tar � jour avec la nouvelle version de GNU tar, qui est
 aujourd'hui la 1.13.10. On peut le trouver sur le site ftp de GNU
 <ftp://alpha.gnu.org/gnu/tar/> ou tout miroir.


 55..  UUttiilliisseerr bbzziipp22 aavveecc lleessss

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

 #!/bin/sh
 # Ceci est un pr�processeur 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-modifi�e de tar:
   *.tar.bz2) bzip2 -cd $1 $1 2>/dev/null | tar tvvf - ;;
 # Celui-ci fonctionne avec la version patch�e 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 compress�s
   *.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` ; # V�rifier 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




 66..  UUttiilliisseerr bbzziipp22 aavveecc eemmaaccss

 66..11..  CChhaannggeerr eemmaaccss ppoouurr ttoouuss

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

 AAvveerrttiisssseemmeenntt:: 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 r�pertoire des sources emacs-20.2/lisp (quel que soit
    l'endroit o� il se trouverait d�compact�)
 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. D�placez votre jka-compr.elc original vers un endroit s�r 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")




 66..22..  CChhaannggeerr eemmaaccss ppoouurr uunnee sseeuullee ppeerrssoonnnnee

 Merci � Ulrik Dickow, [email protected] <mailto:ukdATkampsax.dk>,
 ing�nieur syst�me � Kampsax Technology, pour celui-ci:

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


 ;; (D�)compression automatique pour le chargement/sauvegarde de fichiers
 ;; (gzip(1) et simililaires)
 ;; Nous le lan�ons 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))
 ;; Ajouter le support bzip2 et autoriser la compression.
 (add-to-list 'jka-compr-compression-info-list
              ["\\.bz2\\(~\\|\\.~[0-9]+~\\)?\\'"
               "zipping"        "bzip2"         ()
               "unzipping"      "bzip2"         ("-d")
               nil t])
 (toggle-auto-compression 1 t)




 77..  UUttiilliisseerr bbzziipp22 aavveecc wwuu--ffttppdd

 Merci � Arnaud Launay pour ce gain de bande passante. Ce qui suit doit
 aller dans /etc/ftpconversions pour faire de la compression et
 d�compression au vol avec bzip2. V�rifiez 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




 88..  UUttiilliisseerr bbzziipp22 aavveecc NNeettssccaappee ssoouuss XX

 [email protected] nous dit:


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

 J'utilise l'option -s car je pr�f�re perdre un peu de vitesse de
 d�compression et conserver de la m�moire. Vous pouvez supprimer cette
 option si vous le d�sirez.



 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




 99..  UUttiilliisseerr bbzziipp22 ppoouurr rreeccoommpprreesssseerr eenn rreemmppllaacceemmeenntt dd''aauuttrreess ffoorrmmaattss
 ddee ccoommpprreessssiioonn

 Ce programme perl prend les fichiers compress�s dans d'autres formats
 (.tar.gz, .tgz. .tar.Z, et .Z pour cette it�ration) et les recompresse
 pour un meilleur r�sultat. Le source perl dispose de tous les types de
 documentation n�cessaires sur ce qu'il fait et comment il fait ce
 qu'il fait. Cette derni�re version prend les fichiers sur la ligne de
 commande. Sans argument en ligne de commande, il tente de recomprimer
 tous les fichiers du r�pertoire courant.








































 #!/usr/bin/perl -w

 #######################################################
 #                                                     #
 # Ce programme prend les fichiers compress�s et       #
 # gzip-�s dans le r�pertoire 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;

 @raw = (defined @ARGV)?@ARGV:<*>;

 foreach(@raw) {
     next if /^bzip/;
     next unless /\.(tgz|gz|Z)$/;
     push @files, $_;
 }
 $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 is about $factor% of the size of $_. :",($factor<100)?')':'(',"\n";
         unlink $_;
     } else {
         print "Arrgghh! Quelque chose est arriv� � $_: $!\n";
     }
 }
 print "Vous avez "
     , ($saved_bytes>=0)?"sauv� ":"perdu "
     , abs($saved_bytes)
     , " octets d'espace 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 syst�me: $!";
 $machine_bzip2_total += $saved_bytes;
 print TOTAL $machine_bzip2_total;
 close TOTAL;

 print "Ceci nous donne un total de ",`cat $totals_file`," octets sauv�s sur
 tout le syst�me.\n";