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";