Edited at

パッケージの圧縮を高速化


yaourtやめてtrizenにした話

(2019/03/26追記)

yaourtは開発がストップしていて移行を考えていたところ、ちょっと試してみた結果、trizenが割と使い勝手が一緒そうなので移行しました。ただこれ系のAURヘルパー、大体仕組みは同じっぽくて、以下で話したことはtrizenでも通用するので、特に書き換えずに残しておきます。


yaourtが開発終了した話

Requesting official statement from developers · Issue #382 · archlinuxfr/yaourt


AURヘルパー一覧

AUR ヘルパー - ArchWiki


モチベ

ArchLinuxのyaourtはAURと呼ばれる、ユーザが登録するリポジトリからアプリを簡単にインスコできるツール。AURあたまおかしいほど何でもあるので(factorioというアルファ版ゲームのデモが直接インスコできたり)、ArchLinuxを使うモチベの1つになっていたりする。

ただyaourtは「パッケージの圧縮」という、良く分からないステージでやたら時間を食うパッケージが結構あり、気になってTwitterで文句言ったら早くする方法を教えてもらった話。


yaourtの仕組み

このyaourt、そもそも独自のパッケージを手元の環境で作り、それをpacmanに食わせるのを自動で行うだけのツール、らしい。この独自パッケージを作るのにmakepkgというツールを使う。このmakepkgというツールがデフォルトでxzで圧縮しようとするのが問題のようだ。

makepkgはもともと配布するためのパッケージを作るツールなので、xzという高圧縮(かつCPUを馬鹿食いする)形式を使うのは大変正しいのだが、yaourtではぶっちゃけ自分で食わせるだけなのでこんなの時間の無駄でしかない。


makepkgの設定をいじる

そこでmakepkgの設定を変更する。/etc/makepkg.conf で圧縮形式と圧縮に使うコマンドの変更ができる。

ここで圧縮しないことも可能だが、yaourtはデフォルトで/tmpを作業ディレクトリとして使い、ArchLinuxでは/tmpはメモリに展開されることが多いので、ここでは殆どCPUを使わないgz形式を、マルチコアで高速に圧縮可能なpigzを使って圧縮する設定にしてみる。

COMPRESSGZ=(pigz -c -f -n)

PKGEXT='.pkg.tar.gz'

の2行を変更すれば良い。体感値では1分とか掛かってた処理が数秒で終わるようになった。なお、もちろんpigzのインスコが必要なので忘れないように。勿論pigzのインスコが面倒とかならCOMPRESSGZを書き換えなければ良い。お好みにあわせてどうぞ。

ちなみに更に低スペックなマシンならlzo形式とかを検討してもいいかもしれない。なんか設定ファイルみたらCOMPRESSLZOとかCOMPRESSLRZとかあったのでできそう。