Bzip2 COMO

David Fetter, dfetter@best.com

Traducido por: Joaquín Cuenca Abela, jcuenca@patan.eleinf.uv.es v1.6 Tue Mar 10 17:48:42 PST 1998 Este documento explica cómo utilizar el nuevo compresor bzip2.

Índice General

1 Introducción 1

1.1 Memoria de cambios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 Obtención de bzip2 2

2.1 Obtención de versiones precompiladas de bzip2 . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2.2 Obtención del código fuente de bzip2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2.3 Compilación de bzip2 en su ordenador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

3 Utilización de bzip2 3 4 Utilización conjunta con tar 3

4.1 Forma fácil que configurar: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 4.2 Forma fácil de usar: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

5 Utilización de bzip2 con less 5 6 Utilización de bzip2 con emacs 6

6.1 Cambio de emacs para todos: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 6.2 Cambiar emacs para uno mismo: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

7 Utilización de bzip2 con wu-ftpd 7 8 Utilización de bzip2 con Netscape en XWindows 7 9 Utilización de bzip2 con xv 8 10 Anexo: El INSFLUG 8

1 Introducción

El texto original (en sgml) se encuentra

http://www.best.com/~dfetter/Bzip2-HOWTO/Bzip2-HOWTO.sgml.

Bzip2 está creado con un magnífico nuevo algoritmo sobre compresión de datos. Generalmente consigue que los ficheros queden en un 60-70% del tamaño que tienen los ficheros comprimidos con gzip. Este documento le llevará a través de unas cuantas aplicaciones para bzip2.

Los franco-hablantes tienen el documento traducido por Arnaud Launay. La versión web está en

http://www.freenix.fr/linux/HOWTO/mini/Bzip2.html, y para recoger por ftp
ftp://ftp.lip6.fr/pub/linux/french/docs/HOWTO/mini/Bzip2.gz. Puede contactar con Arnaud por

correo electrónico zoro@mygale.org.

Aquellos que hablen Japonés pueden utilizar la versión Japonesa, de la mano de Tetsu Isaji,

http://jf.gee.kyoto-u.ac.jp/JF/JF.html. La página de Isaji está en
http://www2s.biglobe.ne.jp/~kaien/, y su dirección de correo electrónico es
isaji@mxu.meshnet.or.jp.

1.1 Memoria de cambios

• v1.6 Añadido el activador para Netscape de TenThumbs También se cambió lesspipe.sh por sugerencia suya. Ahora debería funcionar mejor.

• v1.5 Añadida la traducción al francés de Arnaud Launay, y su fichero wu-ftpd.

• v1.4 Añadida la traducción al japones de Tetsu Isaji.

• v1.3 Añadido el fichero .emacs para las versiones 19.30 y superiores por Ulrik Dickow. (También se ha corregido el parche de jka-compr.el por sugerencia suya. ¡Eepa! Bzip2 todavía(¿?) no tiene parámetro “append”.)

• v1.2 Se ha cambiado el parche para que emacs reconozca automágicamente ficheros .bz2.

• v1.1 Añadido parche para emacs.

• v1.0 Primer round.

2 Obtención de bzip2

La página principal de bzip2 está http://www.muraroa.demon.co.uk/. El servidor réplica en los Estados Unidos es http://www.digistar.com/bzip2/index.html. También se puede encontrar en la dirección ftp

de Red Hat, ftp://ftp.redhat.com/pub/contrib.

2.1 Obtención de versiones precompiladas de bzip2

Busque en las direcciones de las principales distribuciones. El fichero compilado para intel de Red Hat es

ftp://ftp.redhat.com/pub/contrib/i386/bzip2-0.1pl2-1.i386.rpm. El de Debian está
ftp://ftp.debian.org/debian/hamm/hamm/binary-i386/utils/bzip2 0.1pl2-4.deb, y la de Slackware
está en http://www.cdrom.com/pub/linux/slackware-3.4/slakware/a9/bzip2.tgz.

También puede obtener los ficheros directorios análogos de cualquier servidor réplica.

2.2 Obtención del código fuente de bzip2

El código está en los lugares oficiales (ver la sección 2 para obtener una lista de las direcciones). Red Hat

tiene el código en ftp://ftp.redhat.com/pub/contrib/SRPMS/bzip2-0.1pl2-1.src.rpm.

2.3 Compilación de bzip2 en su ordenador

Si tiene gcc 2.7.2.3, cambie la línea que pone

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

a

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

osea, quite el -O3. Después de haber hecho ésto, sólo tiene que hacer un make e instalarlo siguiendo las instrucciones del fichero README.

3 Utilización de bzip2

Lea la bonita página man :)

4 Utilización conjunta con tar

Básicamente, hay dos formas de combinar bzip2 con tar:

4.1 Forma fácil que configurar:

Este método no necesita configurar nada. Para desempaquetar un fichero .tar.gz, digamos algo.tar.bz, en el directorio actual, debemos hacer

     /directorio/de/bzip2 -cd algo.tar.bz2 | tar xf -

Este método funciona, pero puede ser un poco pesado teclearlo todo cada vez que se necesite descomprimir algo.

4.2 Forma fácil de usar:

Aplique el siguiente parche a gnu tar 1.12, compílelo, instálelo, y se acabó. Asegúrese de que tanto tar como bzip2 están en su $PATH con

     which tar
     which bzip2

Para utilizarlo, sólo tiene que hacer

     tar xyf algo.tar.bz2

para descomprimir el fichero. Para hacer un nuevo fichero comprimido hay que hacer algo parecido:

      tar cyf algo.tar.bz2 fichero1 fichero2 fichero3...directorio1 directorio2...

4. Utilización conjunta con tar 4

Y aquí está el parche :)

*** tar.c.orig  Sat Apr 26 05:09:49 1997
--- tar.c       Feb  2 00:50:47 1998
***************
*** 16,21 ****
--- 16,24 ----
     with this program; if not, write to the Free Software Foundation, Inc.,
     59 Place - Suite 330, Boston, MA 02111-1307, USA.  */
+ /* Feb 2 98: patched by David Fetter to use bzip2 as a
+              filter (option -y) */
+
  #include "system.h"
  #include <getopt.h>
***************
*** 196,201 ****
--- 199,206 ----
    {"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 ****
--- 377,383 ----
                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)
--- 454,460 ----
     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 ****
--- 811,820 ----

5. Utilización de bzip2 con less 5

        case 'X':
        exclude_option = 1;
        add_exclude_file (optarg);
+       break;
+
+       case 'y':
+       set_use_compress_program_option ("bzip2");
        break;
        case 'z':

5 Utilización de bzip2 con less

Para descomprimir los ficheros bzip2 al vuelo, esto es, para ser capaces de utilizar less en estos ficheros sin tener primero que descomprimirlos, podemos crear un lesspipe.sh (página man de less) como éste:

#!/bin/sh
# This is a preprocessor for 'less'.  It is used when this environment
# variable is set:   LESSOPEN="|lesspipe.sh %s"
  case "$1" in
  *.tar) tar tvvf $1 2>/dev/null ;; # View contents of various tar'd files
  *.tgz) tar tzvvf $1 2>/dev/null ;;
# This one work for the unmodified version of tar:
  *.tar.bz2) bzip2 -cd $1 $1 2>/dev/null | tar tzvvf - ;;
#This one works with the patched version of 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 ;; # View compressed files correctly
  *.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` ; # Check to see if binary, if so -- view with '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. Utilización de bzip2 con emacs 6

6 Utilización de bzip2 con emacs

6.1 Cambio de emacs para todos:

He escrito el siguiente parche para jka-compr.el que añade bzip2 al auto-compression-mode.

Renuncia: Sólo lo he comprobado con emacs-20.2, pero no tengo ninguna razón para creer que un parche parecido no pueda funcionar con otras versiones.

Para utilizarlo,

1. Vaya al directorio emacs-20.2/lisp (o donde lo haya desempaquetado)

2. Ponga el parche en un fichero llamado jka-compr.el.diff (en este fichero sólo debe estar el parche ;)

3. Haga

      patch < jka-compr.el.diff

4. Ejecute emacs, y haga

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

5. Salga de emacs.

6. Cambie su fichero jka-compr.elc original a un lugar seguro para evitar fallos.

7. Cámbielo con el nuevo jka-compr.elc.

8. ¡Diviértase!

--- 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"         ("")

7. Utilización de bzip2 con wu-ftpd 7

+     "bunzip2ing"      "bzip2"         ("-d")
+     nil t]
     ["\\.tgz\\'"
      "zipping"        "gzip"         ("-c" "-q")
      "unzipping"      "gzip"         ("-c" "-q" "-d")

6.2 Cambiar emacs para uno mismo:

Este truco se lo tengo que agradecer a Ulrick Dickow, ukd@kampsax.dk, programador de sistemas en Kampsax Technology:

Para hacer que se pueda utilizar bzip2 automáticamente cuando no es el administrador del sistema, sólo tiene que añadir lo siguiente al fichero .emacs:

;; Automatic (un)compression on loading/saving files (gzip(1) and similar)
;; We start it in the off state, so that bzip2(1) support can be added.
;; Code thrown together by Ulrik Dickow for ~/.emacs with Emacs 19.34.
;; Should work with many older and newer Emacsen too.  No warranty though.
;;
(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 Utilización de bzip2 con wu-ftpd

Gracias a Arnaud Launay por su truco para ahorrar ancho de banda. Lo siguiente debería ir en /etc/ftpconversions para compresiones y descompresiones al vuelo con bzip2. Asegúrese de que las direcciones (como /bin/compress) son correctas.

 :.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 -I -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+BZIP2

8 Utilización de bzip2 con Netscape en XWindows

tenthumbs@cybernex.net dijo:

He encontrado una forma de hacer que Netscape (en Linux) utilice bzip2 en Content-Encoding como si

estuviese utilizando gzip. Añada ésto a $HOME/.Xdefaults o $HOME/.Xresources

Yo utilizo la opción -s porque prefiero cambiar algo de velocidad en la descompresión por memoria RAM. Puede quitar la opción si lo prefiere.

     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 Utilización de bzip2 con xv

Estoy trabajando en un parche que debe hacer que xv auto-descomprima los ficheros .bzip2 tal y como lo hace con los ficheros comprimidos mediante gzip o compress. ¿Quiere ayudarme alguien?

10 Anexo: El INSFLUG

El INSFLUG forma parte del grupo internacional Linux Documentation Project, encargándose de las traducciones al castellano de los Howtos (Comos), así como la producción de documentos originales en aquellos casos en los que no existe análogo en inglés.

En el INSFLUG se orienta preferentemente a la traducción de documentos breves, como los COMOs y PUFs (Preguntas de Uso Frecuente, las FAQs. :) ), etc.

Diríjase a la sede del INSFLUG para más información al respecto.

En la sede del INSFLUG encontrará siempre las últimas versiones de las traducciones: www.insflug.org. Asegúrese de comprobar cuál es la última versión disponible en el Insflug antes de bajar un documento de un servidor réplica.

Se proporciona también una lista de los servidores réplica (mirror) del Insflug más cercanos a Vd., e información relativa a otros recursos en castellano.

Francisco José Montilla, pacopepe@insflug.org.