<!doctype linuxdoctr system>

<article>

<!-- Title information -->

<title>Bzip2 Howto
<author>David Fetter, <url url="mailto:dfetter@best.com" 
name="dfetter@best.com">
<date>v1.1, 5 February 1998
<trans>伊佐治  哲, <htmlurl url="mailto:isaji@mxu.meshnet.or.jp"
    name="isaji@mxu.meshnet.or.jp">
<tdate>Wed Feb 25 22:36:00 1998

<abstract>
<!--This document tells how to use the new bzip2 compression program.
-->
このドキュメントはbzip2圧縮プログラムの使い方について
解説しています。
</abstract>

<!-- Table of contents -->
<toc>

<!-- Begin the document -->
<sect>イントロダクション
<!-- Introduction -->
<p>
<!--
Bzip2 is a groovy new algorithm for compressing data.  It generally
makes files that are 60-70% of the size of their gzip'd counterparts.
-->
Bzip2はデータを圧縮する"いかす"新しいアルゴリズムです。
gzipで圧縮したサイズの60-70&percnt;にファイルを圧縮します。

<p>
<!--
This document will take you through a few common applications for bzip2.
-->
このドキュメントではbzip2と併用して使える2,3の共通したアプリケーションを通して
話しを進めていきます。


<sect>bzip2の入手<label id="get-bzip2">
<!-- Getting bzip2<label id="get-bzip2"> -->
<p>
<!--
Bzip2's home page is at <url url="http://www.muraroa.demon.co.uk/" name=
"The UK home site">.  The United States mirror site is <url url="http://www.digistar.com/bzip2/index.html" Name="here">.  You can also find it on Red
Hat's ftp site <url url="ftp://ftp.redhat.com/pub/contrib" name="here">.
-->
Bzip2のホームページは<htmlurl url="http://www.muraroa.demon.co.uk/" name=
"The UK home site">です。United Statesミラーサイトは<htmlurl 
url="http://www.digistar.com/bzip2/index.html" Name="ここ">です。
Red Hatの<htmlurl url="ftp://ftp.redhat.com/pub/contrib" name="ftpサイト">
でも見つかります。


<sect1>プレコンパイルされたbzip2バイナリを入手する
<!-- Getting bzip2 precompiled binaries -->
<p>
<!--
 See the home sites.  Red Hat's intel binary is <url
url="ftp://ftp.redhat.com/pub/contrib/i386/bzip2-0.1pl2-1.i386.rpm"
name="here">.  Debian, Slackware, etc. should have them soon in the
usual places.
-->
UK home siteを参照して下さい。Red Hatのインテルバイナリは
<htmlurl url="ftp://ftp.redhat.com/pub/contrib/i386/bzip2-0.1pl2-1.i386.rpm"
name="ここ">です。Debian, Slackwareなどはまもなく出てきます。


<sect1>bzip2ソースの入手
<!-- Getting bzip2 sources -->
<p>
<!--
 They come from the Official sites (see <ref id="get-bzip2" 
name="Getting Bzip2"> for where, or Red Hat has it 
<url url="ftp://ftp.redhat.com/pub/contrib/SRPMS/bzip2-0.1pl2-1.src.rpm" 
name="here">
-->
公式サイトから出ています(<ref id="get-bzip2" name="Bzip2の入手">の章を
参照して下さい)。Red Hatのものは<htmlurl 
url="ftp://ftp.redhat.com/pub/contrib/SRPMS/bzip2-0.1pl2-1.src.rpm" 
name="ここ">にあります。

<p>
(訳注：bzip2 ホームページ、<htmlurl url="http://www.muraroa.demon.co.uk/"
    name="http://www.muraroa.demon.co.uk/">)


<sect1>マシン用のbzip2をコンパイルする
<!-- Compiling bzip2 for your machine-->
<p>
<!--
 <bf>If you have gcc 2.7.2.3</bf>, change the line that reads
-->
<bf>gcc 2.7.2.3を持っているなら</bf>
<tscreen><verb>
CFLAGS = -O3 -fomit-frame-pointer -funroll-loops
</verb></tscreen>
この行で<tt/-O3/を外して
<tscreen><verb>
CFLAGS = -fomit-frame-pointer -funroll-loops
</verb></tscreen>
に変更しておいて下さい。
<p>
<!--
that is, take out the -O3 part.  After that, just <tt/make/ it
and install it per the README.
-->
このあと<tt/make/してREADMEで書かれているようにインストールします。


<sect>単独でbzip2を使う
<!-- Using bzip2 by itself -->
<p>
<!-- Read the Fine Manual Page :)-->
マニュアルページを読んで下さい :)。

<sect>bzip2をtarと使う<label id="tar">
<!-- Using bzip2 with tar-->
<p>
<!-- Basically, there are two ways to use this, namely-->
基本的に２つの方法があります：

<sect1>設定しなくてよい：
<!-- Easier to set up:-->
<p>
<!--
This method requires no setup at all.  To un-tar the bzip2'd tar archive,
foo.tar.bz in the current directory, do-->
この方法なら何も設定しなくてすみます。bzip2したtarアーカイブfoo.tar.bz2を
un-tarするにはカレントディレクトリで、
<tscreen><verb>
/path/to/bzip2 -cd foo.tar.bz2 | tar xf -
</verb></tscreen>
とします。
<!-- This works, but can be a PITA to type often.-->
<!-- PITA = Pain In The Ass 「悩みの種」 
          = Plain in the "acronym" 
-->
これで動作しますが、いちいち入力するのは面倒(PITA)です。


<sect1>使いやすい:
<!-- Easier to use: -->
<p>
<!--
 Apply the following patch to gnu tar 1.12, compile it, and install it,
and you're good to go.  Make sure that both tar and bzip2 are in your $PATH
by "which tar" and "which bzip2.  To use it, just do
-->
以下のパッチをGNU tar 1.12を当ててコンパイル/インストールして下さい。
これでよいです。tarとbzip2が("which tar"、"which bzip2"と実行して)
<tt>&dollar;PATH</tt>にあるかどうか確認しておきます。ファイルを展開するには
<tscreen><verb>
 tar xyf foo.tar.bz2
</verb></tscreen>
とします。
<!-- to decompress the file.-->
<p>
<!-- To make a new archive, it's similar:-->
新しいアーカイブを作る時も同じようにして
<tscreen><verb>
 tar cyf foo.tar.bz2 file1 file2 file3...directory1 directory2...
</verb></tscreen>
とします。
<p>
<!--And here's the patch :)-->
以下はパッチです :)
(訳注：<tt>patch -p1 < tar.c.diff</tt>としてあてて下さい)
<code>
*** tar.c.orig  Sat Feb 28 14:55:45 1998
--- tar.c       Sat Feb 28 15:01:54 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, &amp;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,455 ****
     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)
  {
***************
*** 806,811 ****
--- 811,820 ----
        exclude_option = 1;
        add_exclude_file (optarg);
        break;
+ 
+       case 'y':
+         set_use_compress_program_option ("bzip2");
+         break;
  
        case 'z':
        set_use_compress_program_option ("gzip");
</code>


 
<sect>lessでbzip2を使う<label id="less">
<!-- Using bzip2 with less-->
<p>
<!--
To uncompress bzip2'd files on the fly, i.e. to be able to use "less"
on them without first bunzip2'ing them, you can make a lesspipe.sh (man
less) like this:
-->
bzip2ファイルをすぐに展開するために、例えばはじめにbunzip2を使わず
&dquot;less&dquot;を使うために、&dquot;<tt/lesspipe.sh/&dquot;を
作ります(lessのmanページ参照)：
<!-- /usr/bin/lesspipe.sh -->
<!-- less man pageより引用：
<quote><verb>
lesspipe.sh:
    !# /bin/sh
    case "$1" in
    *.Z) uncompress -c $1  2>/dev/null
          ;;
    esac
     このスクリプトを使うために、パスの通った場所に置いて
    LESSOPEN="|lesspipe.sh %s"をセットします。入力パイプが
    使われている時は、LESSCLOSEポストプロセッサを使うことができますが
    普通は必要ありません。クリーンアップする置き換えファイルがないから
    です。この場合LESSCLOSEポストプロセッサに渡される置き換えファイル名
    は"-"です。
</verb></quote>
-->
<code>
#!/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 .tar and .tgz files
  *.tgz) tar tzvvf $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
</code>
<p>
(訳注：環境変数LESSOPENを設定しておきます)



<sect>emacsでbzip2を使う
<!-- Using bzip2 with emacs -->
<p>
<!--
 I've written the following patch to jka-compr.el which adds bzip2 to
auto-compression-mode.
-->
著者は<tt/jka-compr.el/に当てる以下のパッチを書きました。
 <tt/auto-compression-mode/にbzip2を追加するものです。
<p>
<!--
<bf>Disclaimer:</bf> I have only tested this with emacs-20.2, but have
no reason to believe that a similar approach won't work with other versions.
-->
<bf>免責事項：</bf>emacs-20.2でテストしただけですが、他のバージョンで動作
しないということはないと思います
<p>

<enum>
<item><!-- Go to the emacs-20.2/lisp source directory (wherever you 
untarred it) 
--><tt>emacs-20.2/lisp</tt>ソースディレクトリに移動します(untarした
場所がどこであれ)。
<item><!-- Put the patch below in a file called jka-compr.el.diff (it should 
be alone in that file ;).
-->
下記の<tt/jka-compr.el.diff/パッチファイルを置きます(それと同じ名前の
ファイルはありません ;)。
<item><!-- Do -->
<tscreen><verb>
 patch < jka-compr.el.diff
</verb></tscreen>
と実行します。
<item><!-- Start emacs, and do  
-->emacsを立ち上げて
<tscreen><verb>
 M-x byte-compile-file jka-compr.el
</verb></tscreen>
とします。
<item><!-- Leave emacs. 
-->emascを終了します。
<item><!-- Move your original jka-compr.elc to a safe place in case of bugs. 
-->バグがあったときのためにオリジナルの<tt/jka-compr.elc/を安全な場所に
移動しておきます。
<item><!-- Replace it with the new jka-compr.elc. 
-->新しい<tt/jka-compr.elc/と置き換えます。
<item><!-- Have fun! 
-->Have fun! 
</enum>

<code>
--- 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 nil]
     ["\\.tgz\\'"
      "zipping"        "gzip"         ("-c" "-q")
      "unzipping"      "gzip"         ("-c" "-q" "-d")

</code>


<sect>xvでbzip2を使う
<!-- Using bzip2 with xv -->
<p>
<!--
 I'm working on a patch which should let xv auto-decompress bzip2'd
files the way it can do compress'd and gzip'd ones. Anybody want to
help out?
<verb>
</verb>
-->
xvでbzip2ファイルの自動展開(auto-decompress)をするパッチを使って
動作させています。compressやgzipで行える方法についてだれか助けてくれませんか？

<hrule>
<sect>(訳者追加：)fd,lsでbzip2を使う
<p>
<sect1>fd
<p>
fdですでに設定されているgzip'd tarアーカイブと同じです。ソースを変更する場合は
<code>
--- orig/archive.c      Thu Feb 26 06:33:27 1998
+++ archive.c   Thu Feb 26 04:19:35 1998
@@ -117,6 +117,7 @@
        {" ^.*\\.tar$",         "tar tvf",              PM_TAR},
        {" ^.*\\.tar\\.Z$",     "zcat %C | tar tvf -",  PM_TAR},
        {" ^.*\\.tar\\.gz$",    "gzip -cd %C | tar tvf -",      PM_TAR},
+       {" ^.*\\.tar\\.bz2$",   "bzip2 -cd %C | tar tvf -",     PM_TAR},
        {NULL,                  NULL,           255, 0, "", "", "", "", 1}
 };
 archivetable archivelist[MAXARCHIVETABLE] = {
@@ -130,8 +131,6 @@
                                                "zcat %C | tar xf - %TA"},
        {" ^.*\\.tar\\.gz$",    "tar cf %X %T; gzip %X",
                                                "gzip -cd %C | tar xf - %TA"},
-       {" ^.*\\.tar\\.bz2$",   "tar cf %X %T; bzip2 %X",
-                                               "bzip2 -cd %C | tar xf - %TA"},
        {NULL,                  NULL,                   NULL}
 };
</code>
をfdソース展開ディレクトリで<tt/patch -p1 &lt; archive.diff/とあてて
(あるいは手で直接変更して)、<tt/make/します。
<p>
また<tt>&tilde;/.fdrc</tt>で設定する場合は、<tt/# launcher definition/で
<code>
launch ".tar.bz2"\
                "tar tvfy"      0,0:1,2-'/',2'/',3,4-'-',4'-'-'-',4[9],5,6
</code>
と追加するだけです(<tt># examples for GNU tar >=1.12</tt>)。
同様に<tt/# archiver definition/に
<code>
arch ".tar.bz2" "tar cf %X %T; bzip2 %X"        "bzip2 -cd %C|tar xf - %TA"
</code>
も追加しておきます。gzipと同じなのでgzip時の設定が、名前を変えるだけで
そのまま使えます。簡単ですね。
<p>
<ref id="less" name="lessと使う">章lesspipe.sh ファイルに
<code>
  *.tar.bz2) tar tyvvf $1 2>/dev/null ;;
</code>
も追加します。tarでgzip用のzオプションがあるのと同じようにbzip2用
オプションyをtarに追加しておいて下さい
(<ref id="tar" name="bzip2をtarと使う">章)。

<sect1>ls
<p>
xterm(kterm)でのアーカイブファイル色に追加することについては
JFから和訳も出ている「Colour-ls」"3.  ls のカラー設定法"を参考にして下さい。
<p>
例えば、<tt>/etc/DIR_COLORS</tt>ファイルを以下のように変更します
(一部引用)。
<code>

 .Z   01;31
 .gz  01;31
 .bz2 01;31       <--- ここ
 .jpg 01;35 # image formats
 .gif 01;35
 .bmp 01;35

</code>
<!--
 fdのラウンチ機能を使って(複数ファイルを圧縮した)bzip2'd tarファイルを
閲覧、そしてそのままlessで中身をみるとcore dumpします。
-->


</article>
