UPXでネイティブ実行可能ファイルを圧縮
Ultimate Packer for eXecutables (UPX)は、実行ファイルのサイズを小さくする圧縮ツールです。Quarkusでは、生成されたネイティブ実行可能ファイルを圧縮して、そのサイズを小さくすることができます。このような圧縮は次のような場合に興味深いものです。
-
CLIツールをビルドする場合。ディスクのフットプリントを減らしたい場合。
-
小さなコンテナイメージをビルドする場合。
なお、UPX圧縮は以下に注意してください。
-
主に高圧縮レベルを使用した場合、ビルド時間が長くなります。
-
アプリケーションの起動時のRSS使用量が増加します。
システムvsコンテナ
UPX圧縮には、以下のような条件があります。
-
upxコマンドがシステムPATHで利用できること -
明示的に定義された
quarkus.native.compression.container-image; -
または、コンテナ内ビルドでネイティブ実行可能ファイルをビルドすること。
quarkus.native.compression.container-image が明示的に設定されていない場合、暗黙的に quarkus.native.builder-image がデフォルトとなります。
パス上に upx コマンドがある場合、Quarkus はそれを使用します。そうでない場合、コンテナー内ビルド ( quarkus.native.container-build=true を使用) でネイティブイメージをビルドし、圧縮イメージが upx コマンドを提供している場合は、Quarkus はコンテナー内から実行可能ファイルを圧縮します。
コンテナー内で圧縮を強制的に実行したい場合は、 quarkus.native.compression.container-build を true に設定できます (コンテナー内で圧縮を実行しないことを明示的に示す場合は false )。
これらのケースに該当しない場合、圧縮は失敗します。
quarkus.native.compression.container-image を設定すると、圧縮がコンテナー内で実行されます。変数を設定しつつコンテナー内で圧縮を実行したくない場合は、 quarkus.native.compression.container-build を明示的に false に設定してください。
|
圧縮に使用されるイメージの
WORKDIR圧縮する実行可能ファイルは、 |
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のドキュメントに記載されています。