17
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2015-11-17

標準がzstdになってた

(2022/9/27追記)
圧縮アルゴリズムがzstdに変わり、デフォルト設定でpigzより早いらしく、この記事は意味をなさなくなった。デフォルト設定はこんな感じ。

COMPRESSZST=(zstd -c -z -q -)

PKGEXT='.pkg.tar.zst'

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とかあったのでできそう。

17
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?