0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

paruをスタティックリンク形式でビルドする

0
Last updated at Posted at 2025-12-23

rust製のArchLinux,ManjaroLinuxで使えるパッケージマネージャであるparuをmuslでビルドした際の記録です。

はじめに

ビルドにはpacman-staticパッケージ(libalpm.a)も必要です。
pacman-staticパッケージはltoが有効にされている場合、LTOFLAGSに-ffat-lto-objectsも指定されていないと、libalpm.aにsymbolsが埋め込まれません。aurやManjaroのpacman-staticパッケージは、そのままでは利用できない場合もあるかもしれません。
pacman-staticパッケージをltoをオフにしてビルドするか(PKGBUILDのoptionsに'!lto'指定を追加)、LTOFLAGSに-ffat-lto-objectsを追加して、ビルド&インストールしておきましょう。

クロスコンパイルの指定

targetをx86_64-unknown-linux-muslにしただけでは、openssl-sysのビルドでエラーとなりました。
クロスコンパイルを許可する必要があるようです。PKG_CONFIG_ALLOW_CROSS=1を指定することで、muslでビルドできるようになりました。

export PKG_CONFIG_ALLOW_CROSS=1

featuresへstatic指定

またfeaturesにstaticの指定が必要のようです。

cargo build --frozen --features "static" --release --target-dir target --target $TARGET

明示的なlinker指定

rustc-wrapper = "sccache"を利用している場合など、オプション指定によっては、moldまたはlldといったリンカの明示的な指定が必要になるかもしれません。

export RUSTFLAGS="$RUSTFLAGS -Clink-arg=-fuse-ld=mold"

or

export RUSTFLAGS="$RUSTFLAGS -Clink-arg=-fuse-ld=lld"

AUR (ja) - paru-static
AUR (en) - paru
GitHub - Morganamilo/paru: Feature packed AUR helper
Pacman Home Page

余談

  1. パッケージマネージャーがstatic linkであることの利点
    依存しているライブラリ(opensslなど)の更新に影響されないのが利点です。
    ライブラリの互換性がなくなって、パッケージマネージャーが動作しなくなると、システムの更新ができなくなります。pacmanパッケージとは別にpacman-staticというパッケージが用意されているのも、そういった状態に陥った場合のためとも言えると思います。
    セキュリティ問題で関連するライブラリが更新されたときに、パッケージマネージャーが依存するライブラリが明示的にわかっていたほうがいいのは確かですが、それでもパッケージマネージャーについてはstatic link形式のバイナリで配布することを標準にするべきではないかと思っています。

PS
pacman 7.1.0(libalpm16)に対応したparu-static 2.2.0パッケージを用意しました。手元の環境では問題なく動作しています。
pacman-staticパッケージが保有する静的ライブラリのみでは足りなかったライブラリを個別に用意して対応しています。
またcurl(libcurl)についても、gssapi,krb5(kerberos-auth)を無効にしたcurlの静的ライブラリを用意しました。もし、これらも有効になっているpacman-staticが保有するlibcurl.aを用いてparu-2.2.0をビルドする場合、libedit,readline,krb5など、いくつか追加でライブラリを個別に用意する必要があると思います。この対応は行わない予定です。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?