CUBE SUGAR CONTAINER

技術系のこと書きます。

macOS に LHa for UNIX をソースコードからインストールする

Unix で LZH 形式の圧縮ファイルを展開できるソフトウェアはいくつかある。 たとえば lhasa 1 や unar 2 が挙げられる。

一方で、Unix で LZH 形式の圧縮ファイルを作成できるソフトウェアは限られる。 その限られた選択肢のひとつである LHa for UNIX が先日 Homebrew の core から削除された。

理由は LHa for UNIX が独自のライセンスを採用していたため。 これにより Homebrew が定めるライセンス要件を満たさないと判断された。

github.com

上記に対応するプルリクエストは 2025-03-24 にマージされている。

github.com

今となっては LZH 形式のアーカイブを扱う人はさほど多くないとは思われる。 しかも、展開ではなく作成とくればなおさら。 とはいえ、選択肢が限られた状況で困る人もいるかもしれないのでここにメモしておく。

使った環境は次のとおり。

$ sw_vers
ProductName:        macOS
ProductVersion:     15.4
BuildVersion:       24E248
$ uname -srm    
Darwin 24.4.0 arm64

もくじ

事前準備

もし Xcode の Command Line Tools が入っていないときはインストールする。

$ xcode-select --install

同様に、Homebrew が入っていないときはインストールする。

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

ただし、Homebrew のインストールで叩くコマンドは稀に変わることがあるので公式サイトを確認した方が良い。

brew.sh

LHa for UNIX のビルドに必要なパッケージをインストールする。

$ brew install autoconf automake

LHa for UNIX のリポジトリをクローンする。

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

上記のリポジトリはもはやほとんど更新されることが無いため、基本的に HEAD を使って問題ないと思われる。

ビルドする

ビルドに必要な一連のコマンドを叩く。 ここらへんは README を読めば書いてある。

$ aclocal
$ autoheader
$ automake -a
$ autoconf
$ sh ./configure
$ make

これで src ディレクトリ以下に lha という名前のバイナリができる。

$ file src/lha
src/lha: Mach-O 64-bit executable arm64
$ ./src/lha --help | head -n 1
LHa for UNIX version 1.14i-ac20220213 (aarch64-apple-darwin24.3.0)

念の為にテストも実行してすべてパスすることを確認しておこう。

$ make check

インストールする

あとはバイナリをパスが通っている場所に置くだけ。 手動で mv などしても良いだろうけど古式ゆかしく make install もできる。

$ sudo make install

これでデフォルトなら /usr/local/bin に入るはず。

$ lha --help | head -n 1    
LHa for UNIX version 1.14i-ac20220213 (aarch64-apple-darwin24.3.0)

LZH の圧縮ファイルを作成する

動作を確認する。 まずは適当なテキストファイルを用意する。 念の為にハッシュも見ておく。

$ echo "Hello, World" > greet.txt
$ md5sum greet.txt 
9af2f8218b150c351ad802c6f3d66abe  greet.txt

上記を LZH ファイルに圧縮する。

$ lha a greet.lzh greet.txt 
greet.txt   - Frozen(100%)o

ちゃんとできた。

$ file greet.lzh 
greet.lzh:   LHarc 1.x/ARX archive data  [lh0], 'U' OS

LZH の圧縮ファイルを展開する

次に、元のテキストファイルを削除する。

$ rm greet.txt

そして圧縮ファイルの内容を展開する。 元のファイルを削除しておかないとファイルが重複してしまう。

$ lha e greet.lzh           
greet.txt   - Melted   :  o

展開されたファイルの内容が元のファイルと同一であることを確認する。

$ cat greet.txt            
Hello, World
$ md5sum greet.txt 
9af2f8218b150c351ad802c6f3d66abe  greet.txt

別のアーカイバでも展開する

念の為に別のアーカイバも使って展開しておく。 Homebrew で unar をインストールする。

$ brew install unar

先ほど展開したテキストファイルを削除しておく。

$ rm greet.txt

unar を使って LZH ファイルを展開する。

$ unar greet.lzh
greet.lzh: LZH
  greet.txt  (13 B)... OK.
Successfully extracted to "./greet.txt".

もう一度、展開されたファイルの内容が元のファイルと同一であることを確認する。

$ cat greet.txt
Hello, World
$ md5sum greet.txt 
9af2f8218b150c351ad802c6f3d66abe  greet.txt

以上、問題なく動作しちえることが確認できた。