  Bzip2 Howto
  David Fetter, dfetter@best.com <mailto:dfetter@best.com>.
  versttning: Linus kerlund, uxm165t@tninet.se
  <mailto:uxm165t@tninet.se>.
  v1.8 Tue Jun 23 07:44:14 PDT 1998. versttning: 29 juni
  1998

  Detta dokument gr igenom hur du kan anvnda det nya komprimeringspro
  grammet bzip2. Den ursprungliga SGML-versionen finns hr
  <http://www.best.com/~dfetter/Bzip2-HOWTO/Bzip2-HOWTO.sgml>.
  ______________________________________________________________________

  Innehllsfrteckning


  1. Inledning

     1.1 ndringar
        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. Skaffa bzip2

     2.1 Bzip2-HOWTOn p ditt eget sprk
     2.2 Skaffa frkompilerade binrfiler av bzip2
     2.3 Skaffa kllkoden till bzip2
     2.4 Kompilera bzip2 fr din maskin

  3. Anvnda bzip2 sjlvt

  4. Anvnda bzip2 med tar

     4.1 Enklast att konfigurera:
     4.2 Enkelt att konfigurera, ganska enkelt att anvnda, du behver inte vara root:
     4.3 Ocks enkelt att anvnda, men krver root-rttigheter:

  5. Anvnda bzip2 med less

  6. Anvnda bzip2 med emacs

     6.1 ndra emacs fr alla:
     6.2 ndra emacs fr en anvndare:

  7. Anvnda bzip2 med wu-ftpd

  8. Anvnda bzip2 med Netscape under X

  9. Anvnda bzip2 fr att packa om andra packningsformat



  ______________________________________________________________________

  1.  Inledning

  Bzip2 r en hftig ny algoritm fr att komprimera data. Vanligtvis gr
  det filer till 60-70% av storleken av sina gzippade motsvarigheter.

  Detta dokument kommer leda dig igenom ett par vanliga
  anvndningsomrden fr bzip2.


  Framtida versioner av det hr dokumentet kommer diskutera det kommande
  bzip2-biblioteket, vilket programmeraren bakom bzip2, (Julian Seward
  beskriver p fljande stt:


  Jag arbetar p nsta version av bzip2, vilket kommer anvnda samma
  filformat (.bz2); det viktigaste tillgget r ett zlib-liknande
  bibliotek fr att lsa och skriva data i detta filformat inifrn
  program.




  Framtida versioner av detta dokument kan ocks komma att innehlla en
  summering av diskussionen om huruvida (och hur) bzip2 br anvndas i
  Linux-krnan.


  1.1.  ndringar

  1.1.1.  v1.9

  Redde upp gcc 2.7.*-problemet. Tack till Ulrik Dickow fr att han
  ppekade detta.


  la till Leonard Jean-Marc's eleganta stta att arbeta med tar.


  La till Linus kerlunds svenska versttning.


  Fixade avsnittet om wu-ftpd enligt Arnaud Launays frslag.


  Flytta versttningarna till en egen avdelning.


  1.1.2.  v1.8

  La buzzit och tar.diff dr de hr hemma i SGMLen. Fixade kommatering
  och formattering. Tack till Arnaud Launay fr hans hjlp med att rtta
  till mitt exemplar. :-)


  La ner xv-projektet fr tillfllet, eftersom det inte verkar
  intressera folk i tillrckligt hg grad.


  La till ngra aptitretare om framtida versioner av dokumentet.


  1.1.3.  v1.7

  La till buzzit-verktyget. Fixade patchen mot gnu tar.


  1.1.4.  v1.6

  La till TenThumbs Netscape-tillgg.


  ndrade ven lesspipe.sh enligt hans frslag. Det br fungera bttre
  nu.


  1.1.5.  v1.5

  La till Arnaud Launays franska versttning och hans wu-ftpd-fil.


  1.1.6.  v1.4

  la till Tetsu Isajis japanska versttning.


  1.1.7.  v1.3

  La till Ulrik Dickows .emacs fr 19.30 och hgre.


  (Rttade ocks till jka-compr.el-patchen fr emacs enligt hans
  frslag. Hoppsan! Bzip2 har nnu(?) inte en "append"-flagga.)


  1.1.8.  v1.2

  ndrade patchen fr emacs s att det automatiskt knner igen
  .bz2-filer.


  1.1.9.  v1.1

  La till patchen fr emacs.


  1.1.10.  v1.0

  Frsta omgngen.


  2.  Skaffa bzip2

  Bzip2s hemsida finns hr <http://www.muraroa.demon.co.uk/>. En spegel
  i USA finns hr <http://www.digistar.com/bzip2/index.html>. Du kan
  ocks hitta det p Red Hats ftp-sajt
  <ftp://ftp.redhat.com/pub/contrib>.


  2.1.  Bzip2-HOWTOn p ditt eget sprk

  Fransktalande kan ta en titt p Arnaud Launays franska versttning.
  Webb-versionen finns hr
  <http://www.freenix.fr/linux/HOWTO/mini/Bzip2.html>, och du kan ftp-a
  den frn denna sajt
  <ftp://ftp.lip6.fr/pub/linux/french/docs/HOWTO/mini/Bzip2.gz> Arnaud
  kan kontaktas via e-post p denna adress.


  De som talar japanska kan ta en titt p Tetsu Isajis japanska
  versttning hr <http://jf.gee.kyoto-u.ac.jp/JF/JF.html>. Isaji nr
  du via hans hemsida <http://www2s.biglobe.ne.jp/~kaien/>, eller via e-
  post, p den hr adressen.


  Svensktalande kan hitta Linus kerlunds svenska dokument hr
  <http://user.tninet.se/~uxm165t/linux_doc.html>. Linus kan ns med e-
  post via denna adress <mailto:uxm165t@tninet.se>. (Jo, hum, jag valde
  att verstta ven detta.vers.anm :-)


  2.2.  Skaffa frkompilerade binrfiler av bzip2

  Se hemsidan. Red Hats binrpaket fr Intel finns  hr
  <ftp://ftp.redhat.com/pub/contrib/i386/bzip2-0.1pl2-1.i386.rpm>.
  Debians finns hr <ftp://ftp.debian.org/debian/hamm/hamm/binary-
  i386/utils/bzip2_0.1pl2-4.deb>, och Slackwares finns hr
  <http://www.cdrom.com/pub/linux/slackware-3.4/slakware/a9/bzip2.tgz>.
  Du kan ocks hitta dem p motsvarande stllen p diverse spegel-
  sajter.


  2.3.  Skaffa kllkoden till bzip2

  De finns p den officiella sajten (se ``Skaffa Bzip2'', eller hmta
  den frn Red Hat
  <ftp://ftp.redhat.com/pub/contrib/SRPMS/bzip2-0.1pl2-1.src.rpm>).


  2.4.  Kompilera bzip2 fr din maskin

  Om du har gcc 2.7.*, ndra raden


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




  till


       CFLAGS = -O2 -fomit-frame-pointer




  Byt allts ut -O3 mot -O2 och ta bort -funroll-loops. Du kan ven
  lgga till -m*-flaggan (t.ex. -m486) som du brukar anvnda d du
  kompilerar krnor.

  Att undvika -funroll-loops r det viktigaste, eftersom det kan f
  mnga gcc 2.7-or att generera felaktig kod och fr alla gcc 2.7-or att
  generera lngsammare och strre kod. Fr andra kompilatorer (lcc,
  egcs, gcc 2.8.x) gr det bra med de vanliga CFLAGS.

  Sedan r det bara att kra ztt/make/ och installera enligt README-
  filen.


  3.  Anvnda bzip2 sjlvt

  Ls den fina man-sidan :)


  4.  Anvnda bzip2 med tar

  Hr kommer tre stt att anvnda bzip2 med tar:

  4.1.  Enklast att konfigurera:

  Denna metod krver ingen konfigurering alls. Fr att packa upp det
  bzip2-ade tar-arkivet foo.tar.bz i den aktuella katalogen, skriv

  /path/to/bzip2 -cd foo.tar.bz2 | tar xf -




  Detta fungerar, men det kan vara jobbigt att behva gra det ofta.


  4.2.  inte vara root: Enkelt att konfigurera, ganska enkelt att
  anvnda, du behver

  Tack till Leonard Jean-Marc <mailto:leonard@sct1.is.belgacom.be> fr
  tipset.

  Lgg in en rad som denna i din .bashrc (eller .tcshrc eller .cshrc):


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




  Also easy to use, but needs root access.


  4.3.  Ocks enkelt att anvnda, men krver root-rttigheter:

  Lgg till patchen nedan till gnu tar 1.12 enligt fljande metod:


       cd tar-1.12/src; patch < /skvg/till/tar.diff




  Kompilera och installera det och sedan r det bara att kra. Se efter
  s att bde tar och bzip2 finns i din $PATH genom "which tar" och
  "which bzip2". Fr att anvnda det nya tar, skriv bara


        tar xyf foo.tar.bz2




  fr att packa upp filen.

  Att skapa ett nytt arkiv gr till p ett liknande stt:


        tar cyf foo.tar.bz2 fil1 fil2 fil3...katalog1 katalog2...




  Hr r patchen:










  *** 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, _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.  Anvnda bzip2 med less

  Fr att automatiskt packa upp bzip2-komprimerade filer, det vill sga
  fr att lsa dem med "less" utan att frsta bunzip2-a dem, s kan du
  gra en lesspipe.sh (man less) s hr:




  #!/bin/sh
  # Detta r en preprocessor fr 'less'. Den anvnds nr denna milj-
  # variabel r angiven:   LESSOPEN="|lesspipe.sh %s"

    case "$1" in
    *.tar) tar tvvf $1 2>/dev/null ;; # Se innehll i diverse tar-filer
    *.tgz) tar tzvvf $1 2>/dev/null ;;
  # Fr den icke modifierade versionen av tar:
    *.tar.bz2) bzip2 -cd $1 $1 2>/dev/null | tar tzvvf - ;;
  # Fr den patchade versionen av 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 ;; # Ls komprimerade filer korrekt
    *.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` ; # Binr? anvnd i s fall '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.  Anvnda bzip2 med emacs

  6.1.  ndra emacs fr alla:

  Jag har skrivit fljande patch till jka-compr.el, vilket lgger till
  bzip2 till auto-compression-mode.

  Tillknnagivande: Jag har endast testat detta med emacs-20.2, men har
  ingen anledning att tro att en liknande metod inte skulle fungera med
  andra versioner.

  Fr att anvnda den,

  1. G till katalogen med emacs-20.2/lisp-kllkod (var du nu packade
     upp det).

  2. Placera den nedanstende patchen i en fil som heter jka-
     compr.el.diff (den ska vara ensam i den filen ;).

  3. Gr


        patch < jka-compr.el.diff




  4. Kr igng emacs och tryck in

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




  5. Lmna emacs.

  6. Flytta din ursprungliga jka-compr.elc till ett skert stlle fr
     skerhets skull.

  7. Erstt den med den nya jka-compr.elc.

  8. Ha skoj!


     --- 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.  ndra emacs fr en anvndare:

  Tack fr det hr gr till Ulrik Dickow (htmlurl
  url="mailto:ukd@kampsax.dk" name="ukd@kampsax.dk">,
  systemprogrammerare p Kampsax Technology:

  Fr att f till det s att du automatiskt kan anvnda bzip2 nr du
  inte r systemadministratr, lgg bara in fljande i din .emacs-fil.






  ;; Automatisk (de)komprimering p laddade/sparade filer (gzip(1) eller
  ;; liknande). Vi startar det i av-lge, s att bzip2(1)-std kan
  ;; lggas till. Koden kastades ihop av Ulrik Dickow fr ~./emacs med
  ;; Emacs 19.34. Borde funka med mnga ldre och nyare Emacsar ocks.
  ;; Ingen garanti dock.
  ;;
  (if (fboundp 'auto-compression-mode) ; Emacs 19.30+
      (auto-compression-mode 0)
    (require 'jka-compr)
    (toggle-auto-compression 0))
  ;; Lgg nu till bzip2-std och sl p auto-komprimering igen.
  (add-to-list 'jka-compr-compression-info-list
               ["\\.bz2\\(~\\|\\.~[0-9]+~\\)?\\'"
                "zipping"        "bzip2"         ()
                "unzipping"      "bzip2"         ("-d")
                nil t])
  (toggle-auto-compression 1 t)




  7.  Anvnda bzip2 med wu-ftpd

  Tack till Arnaud Launay fr denna bandbreddssparare. Det fljande ska
  lggas in i /etc/ftpconversions fr att direkt packning och uppackning
  med bzip2 ska kunna gras. Se till att skvgarna (som /bin/compress)
  r korrekta.


   :.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.  Anvnda bzip2 med Netscape under X

  tenthumbs@cybernex.net sger:


       Jag kom ocks p ett stt att f Linux Netscape att anvnda bzip2 fr
       Content-Encoding (innehllsavkodning), precis som det anvnder gzip.
       Lgg till detta till $HOME/.Xdefaults eller $HOME/.Xresources.

       Jag anvnder argumentet -s eftersom jag hellre byter bort en del
       uppackningshastighet mot RAM-anvndning. Du kan lta bli att anvnda
       den om du vill.



  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.  Anvnda bzip2 fr att packa om andra packningsformat

  Fljande perl-program tar filer som komprimerats i andra format
  (.tar.gz, .tgz, .tar.Z och .Z fr denna gng) och packar om dem med
  bttre komprimering. Perl-koden har alla typer av trevlig
  dokumentation om vad den gr och hur den gr det den gr.


  #!/usr/bin/perl -w

  #######################################################
  #                                                     #
  # Detta program tar packade och gzippade program i    #
  # i den aktuella katalogen och gr om dem till bzip2- #
  # format. Det klarar av .tgz-ndelsen p ett hyffsat  #
  # stt och skapar en .tar.bz2-fil.                    #
  #                                                     #
  #######################################################
  $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 "Packar om $_ ($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 r ungefr $factor% av storleken p $_. :",($factor<100)?')':'(',"\n";
          unlink $_;
      } else {
          print "Arrgghh!  Ngot hnde med $_: $!\n";
      }
  }
  print "Du har ",
        ($saved_bytes>=0)?"sparat":"frlorat",
        " $saved_bytes byte lagringsutrymme :",
         ($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 "Kan inte ppna systemvid totalitet: $!";
  $machine_bzip2_total += $saved_bytes;
  print TOTAL $machine_bzip2_total;
  close TOTAL;

  print "Maskinvid totalitet av ",`cat $totals_file`," byte sparade.\n";




































































