【msys2】「lha」コマンドを使う(.lzh書庫の解凍・圧縮)

スポンサーリンク

以前はLHA書庫がよく使われたが、最近はあまり見かけなくなった。それでも.lzhファイルを扱う必要があったので、msys2に「lha」コマンドをインストールして使えるようにしたので備忘録を残す。

残念ながらpacmanパッケージには登録されてないようで、ソースコードを取得しビルドしてインストールする。尚、gccなどのコンパイルコマンドが必要で、下記記事の手順で準備しておく。

msys2でWindows上でのビルド環境をつくる(msys2のインストール)
GNU makeやコンパイラが動かせる環境を、Windows上にmsys2をインストールしてつくる。 Unixのbashライクなコマンドラインが使えるようになるソフトだが、このようなソフトは、他にはCygwinやMinGWなどがある。msy...

LHAソースのダウンロード

GitHubの下記URLでソースコードが公開されているので取得する。

GitHub - jca02266/lha: LHa for UNIX - Note: This software is licensed under the ORIGINAL LICENSE. It is written in man/lha.n in Japanese(Translated: )
LHa for UNIX - Note: This software is licensed under the ORIGINAL LICENSE. It is written in man/lha.n in Japanese(Transl...

任意のフォルダで、ターミナルから下記コマンドを実行。

$ wget https://github.com/jca02266/lha/archive/master.zip
$ 7z x master.zip
$ cd lha-master/

尚、7zコマンドがない場合は、下記記事の要領でインストールしておく。

7-zip圧縮操作「7z」コマンドを使う
7zip圧縮ファイルを操作する「7z」コマンドを使えるようにしたので、備忘録を残す。 1.macOS Homebrewで下記コマンドでインストール $ brew install p7zip 2.msys2(Windows) pacman -...

又、以下のgitコマンドでクローン取得しても大丈夫。

$ git clone https://github.com/jca02266/lha.git
$ cd lha/

ビルド

同梱の説明ドキュメント、README.jp.md, INSTALL ファイルなどの説明を参照し下記手順でビルドする。

configureを生成

$ autoreconf -is

configureを実行

$ ./configure --with-tmp-file=no --disable-largefile --disable-multibyte-filename --disable-iconv
  • --with-tmp-file=no --disable-largefile オプションを指定しておかないと、lha実行時の /tmp/ に確保された一時ファイルへのアクセスができずエラーとなった。
  • 私は、漢字ファイル名は扱わないので --disable-multibyte-filename --disable-iconv オプションを指定した。

コンパイル

$ make && make check

インストール

$ make install

起動確認

コマンド実行してみる。

$ lha
LHarc    for UNIX  V 1.02  Copyright(C) 1989  Y.Tagawa
LHx      for MSDOS V C2.01 Copyright(C) 1990  H.Yoshizaki
LHx(arc) for OSK   V 2.01  Modified     1990  Momozou
LHa      for UNIX  V 1.00  Copyright(C) 1992  Masaru Oki
LHa      for UNIX  V 1.14  Modified     1995  Nobutaka Watazaki
LHa      for UNIX  V 1.14i Modified     2000  Tsugio Okamoto
LHA-PMA  for UNIX  V 2     PMA added    2000  Maarten ter Huurne
                   Autoconfiscated 2001-2008  Koji Arai
usage: lha [-]<commands>[<options>] [-<options> ...] archive_file [file...]
  commands:  [axelvudmcpt]
  options:   [q[012]vnfto[567]dizg012e[w=<dir>|x=<pattern>]]
  long options: --system-kanji-code={euc,sjis,utf8,cap}
                --archive-kanji-code={euc,sjis,utf8,cap}
                --extract-broken-archive
                --convert-filename-case
                --ignore-mac-files
                --timestamp-archive
                --traditional
                --help
                --version
commands:                           options:
 a   Add(or replace) to archive      q{num} quiet (num:quiet mode)
 x,e EXtract from archive            v  verbose
 l,v List / Verbose List             n  not execute
 u   Update newer files to archive   f  force (over write at extract)
 d   Delete from archive             t  FILES are TEXT file
 m   Move to archive (means 'ad')    o[567] compression method (a/u/c)
 c   re-Construct new archive        d  delete FILES after (a/u/c)
 p   Print to STDOUT from archive    i  ignore directory path (x/e)
 t   Test file CRC in archive        z  files not compress (a/u/c)
                                     g  Generic format (for compatibility)
                                     0/1/2 header level (a/u/c)
                                     e  TEXT code convert from/to EUC
                                     w=<dir> specify extract directory (x/e)
                                     x=<pattern>  eXclude files (a/u/c)

無事に実行できた。

使用例

解凍

$ lha x <lzhfile>

圧縮

$ lha a <lzhfile> <file1> <file2> ...

リスト表示

$ lha l <lzhfile>

必要なDLLの確認

lddコマンドで、実行に必要なDLLを確認。

$ cd src/
$ ldd lha.exe
        ntdll.dll => /c/WINDOWS/SYSTEM32/ntdll.dll (0x7ffaa33b0000)
        KERNEL32.DLL => /c/WINDOWS/System32/KERNEL32.DLL (0x7ffaa1410000)
        KERNELBASE.dll => /c/WINDOWS/System32/KERNELBASE.dll (0x7ffaa0c00000)
        msvcrt.dll => /c/WINDOWS/System32/msvcrt.dll (0x7ffaa1e80000)

msys2に依存するDLLは使われてないので、Windows上でも lha.exe をコピーするだけで利用可能。

補足

autoreconfコマンドが見つからないエラーが出る場合は、下記コマンドで関連パッケージをインストールする。

$ pacman -S msys/libtool
$ pacman -S msys/autoconf
$ pacman -S msys/automake-wrapper

参考

  1. LHAコマンドインストール
  2. lha :lzh形式ファイルの圧縮・解凍
  3. 【msys2】実行に必要なDLLを確認する

コメント

タイトルとURLをコピーしました