UPXでネイティブ実行可能ファイルを圧縮
Ultimate Packer for eXecutables (UPX)は、実行ファイルのサイズを小さくする圧縮ツールです。Quarkusでは、生成されたネイティブ実行可能ファイルを圧縮して、そのサイズを小さくすることができます。このような圧縮は次のような場合に興味深いものです。
-
CLIツールをビルドする場合。ディスクのフットプリントを減らしたい場合。
-
小さなコンテナイメージをビルドする場合。
なお、UPX圧縮は以下に注意してください。
-
主に高圧縮レベルを使用した場合、ビルド時間が長くなります。
-
アプリケーションの起動時の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 compressionThe executable to compress is mounted in directory |
Compression can be explicitly en-/disabled by setting quarkus.native.compression.enabled
.
upxはクロスプラットフォームです。
|
UPX圧縮の設定
アプリケーションの設定で、必要な 圧縮レベル を設定して圧縮を有効にします。
quarkus.native.compression.level=5
圧縮レベルが設定されていない場合は、圧縮が無効になります。圧縮は、ネイティブ実行可能ファイルがビルドされた時点で行われ、実行ファイルを置き換えます。
追加パラメータ
quarkus.native.compression.additional-args
パラメータを使って --brute
や --ultra-brute
のような追加のパラメータを upx に渡すことができます。この値は、コンマで区切られた引数のリストです。
quarkus.native.compression.level=3
quarkus.native.compression.additional-args=--ultra-brute,-v
パラメーターの詳細なリストは、 UPXのドキュメントに記載されています。