The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.
このページを編集

UPXでネイティブ実行可能ファイルを圧縮

Ultimate Packer for eXecutables (UPX)は、実行ファイルのサイズを小さくする圧縮ツールです。Quarkusでは、生成されたネイティブ実行可能ファイルを圧縮して、そのサイズを小さくすることができます。このような圧縮は次のような場合に興味深いものです。

  • CLIツールをビルドする場合。ディスクのフットプリントを減らしたい場合。

  • 小さなコンテナイメージをビルドする場合。

なお、UPX圧縮は以下に注意してください。

  1. 主に高圧縮レベルを使用した場合、ビルド時間が長くなります。

  2. アプリケーションの起動時のRSS使用量が増加します。

システムvsコンテナ

UPX圧縮には、以下のような条件があります。

  • upx コマンドがシステム PATH で利用できること

  • an explicitly defined quarkus.native.compression.container-image;

  • または、コンテナ内ビルドでネイティブ実行可能ファイルをビルドすること。

If quarkus.native.compression.container-image is not set explicitly, it will implicitly default to quarkus.native.builder-image.

If you have the upx command available on your path, Quarkus uses it. Otherwise, if you built the native image using an in-container build (using quarkus.native.container-build=true) and if the compression image provides the upx command, Quarkus compresses the executable from inside the container.

If you want to force compression to take place in a container, you can set quarkus.native.compression.container-build to true (or false to explicitly not run compression in a container).

これらのケースに該当しない場合、圧縮は失敗します。

Setting quarkus.native.compression.container-image results in the compression to run in a container. If you want to set the variable, but not run the compression in a container, set quakrus.native.compression.container-build explicitly to false.

WORKDIR for the image used for compression

The executable to compress is mounted in directory /project. Since the container runs upx in the current working directory, the WORKDIR of the image used for compression must be /project.

Compression can be explicitly en-/disabled by setting quarkus.native.compression.enabled.

upxはクロスプラットフォームです。

upx は、ホストマシンとは異なるアーキテクチャやOSを使用している実行可能ファイルを圧縮することができます。例えば、MacOSマシン上の upx は、Linux 64bits の実行可能ファイルを圧縮することができます。

UPX圧縮の設定

アプリケーションの設定で、必要な 圧縮レベル を設定して圧縮を有効にします。

quarkus.native.compression.level=5

圧縮レベルが設定されていない場合は、圧縮が無効になります。圧縮は、ネイティブ実行可能ファイルがビルドされた時点で行われ、実行ファイルを置き換えます。

圧縮レベル

圧縮レベルは1から10まであります。

  • 1: より速い圧縮

  • 9: より高い圧縮率

  • 10: 最高の圧縮率(大きなファイルでは遅い場合があります。)

追加パラメータ

quarkus.native.compression.additional-args パラメータを使って --brute--ultra-brute のような追加のパラメータを upx に渡すことができます。この値は、コンマで区切られた引数のリストです。

quarkus.native.compression.level=3
quarkus.native.compression.additional-args=--ultra-brute,-v

パラメーターの詳細なリストは、 UPXのドキュメントに記載されています。

関連コンテンツ