本文書では、 Linuxbrew 向け Tap リポジトリ z80oolong/appimage によって拡張される brew
コマンド一覧を示します。各コマンドの詳細等については brew <command> --help
の出力も併せて参照して下さい。
既にインストール済の Formula 名を一つだけ引数に取り、引数として与えられた Formula によって導入されたアプリケーションを起動するための AppImage ファイルを生成する為のコマンドです。
以下に、 brew appimage-build
コマンドが取る主なオプションを示します。
-o, --output
… 生成する AppImage ファイルの出力先のパスを指定します。-g, --global-exclude
… AppImage ファイルの実行によって起動される実行ファイルが依存する動的ライブラリのうち、 AppImage ファイルへの同梱の除外対象となる動的ライブラリを厳密に除外します。
このオプションを指定しないと、brew appimage-build
コマンドは、 AppImage ファイルへの同梱の除外対象となる動的ライブラリであっても、 Linuxbrew に導入されており、かつ実行ファイルが依存する動的ライブラリであれば、その動的ライブラリを同梱の対象とします。
ここで、brew appimage-build
コマンドにおいて、 AppImage ファイルへの同梱の除外対象となる動的ライブラリのファイル名は以下の通りです。ここで、動的ライブラリのファイル名の判別については、動的ライブラリのディレクトリパスを除いたファイル名の完全一致に依ることに留意する必要があります。libanl.so.1, libBrokenLocale.so.1, libcidn.so.1, libc.so.6, libdl.so.2, libm.so.6, libmvec.so.1, libnss_compat.so.2, libnss_dns.so.2, libnss_files.so.2, libnss_hesiod.so.2, libnss_nisplus.so.2, libnss_nis.so.2, libpthread.so.0, libresolv.so.2, librt.so.1, libthread_db.so.1, libutil.so.1, libstdc++.so.6, libGL.so.1, libEGL.so.1, libGLdispatch.so.0, libGLX.so.0, libOpenGL.so.0, libdrm.so.2, libglapi.so.0, libgbm.so.1, libxcb.so.1, libX11.so.6, libgio-2.0.so.0, libasound.so.2, libfontconfig.so.1, libthai.so.0, libfreetype.so.6, libharfbuzz.so.0, libcom_err.so.2, libexpat.so.1, libgcc_s.so.1, libglib-2.0.so.0, libICE.so.6, libp11-kit.so.0, libSM.so.6, libusb-1.0.so.0, libuuid.so.1, libz.so.1, libgobject-2.0.so.0, libpangoft2-1.0.so.0, libpangocairo-1.0.so.0, libpango-1.0.so.0, libgpg-error.so.0, libjack.so.0, libxcb-dri3.so.0, libxcb-dri2.so.0, libfribidi.so.0, libgmp.so.10
-c, --core-include
… AppImage ファイルへの同梱の除外対象となる動的ライブラリであるかどうかに関わらず、 AppImage ファイルの実行によって起動される実行ファイルが依存する動的ライブラリを全て AppImage ファイルに同梱します。-r, --load-file
… 同梱ファイルのMethodList.md
で詳述する通り、引数で指定したFormula
クラスから AppImage ファイルを生成するために必要な設定及び処理に関するクラスであるAppImage::Builder
クラスの派生クラスが記述された Ruby スクリプトファイルを読み込みファイルとして指定します。-v, --verbose
… AppImage ファイルの生成過程の詳細を表示します。
例えば、 AppImage ファイルの生成過程の詳細を表示しながら、 z80oolong/tmux/tmux@2.6
によって導入された tmux を、 tmux が依存する動的ライブラリを全て AppImage ファイルに同梱するようにして、生成された AppImage ファイルをファイル名 tmux-eaw-2.6-glibc-2.34-x86_64.[AppImage][APPI]
に出力するには以下のようにして、 brew appimage-build
コマンドを実行します。
$ brew appimage-build -v -c -o tmux-eaw-2.6-glibc-2.34-x86_64.AppImage z80oolong/tmux/tmux@2.6
なお、ここで brew appimage-build
コマンドが実行する AppImage ファイルの生成に関する処理は、デフォルトの設定では最低限以下に述べる処理に留まることに留意して下さい。
- 引数で指定された Formula によって導入された実行ファイル (具体的には、ディレクトリ
$HOMEBREW_PREFIX/opt/<formula_name>/bin
以下の実行ファイル) を作業用のディレクトリに配置し、当該実行ファイルが依存する動的ライブラリの rpath を書き換える。 - 上記の実行ファイルが依存する動的ライブラリのうち、 AppImage への同梱の除外対象とならないものを作業用のディレクトリに配置する。
- AppImage ファイルの実行時に最初に起動されるスクリプトファイル
AppRun
について、デフォルトのAppRun
を作業用のディレクトリに配置する。 - AppImage ファイルのアイコンファイル及び実行ファイルに対応した
*.desktop
ファイルについて、デフォルトのファイルを作業用のディレクトリに配置する。 - 以上によって配置した作業用のディレクトリに対して、 AppImage ファイルを生成するアプリケーション
appimagetool
を実行し、AppImage ファイルを生成する。
従って、アプリケーションが適切に動作する AppImage ファイルの生成の為に必要となる以下の処理等に関しては、 -r, --load-file
オプションで指定する Ruby スクリプトファイルに、以下に述べる設定及び処理を定義するためのクラスである AppImage::Builder
クラスの派生クラスを記述するか、特段の必要があれば、別途以下に述べるソースコード等の修正等を施すための Formula クラスを定義するための Formula ファイルを用意する等の手法により、ユーザ自身によって行う必要があります。
- ディレクトリ
$HOMEBREW_PREFIX/opt/<formula_name>/share
以下等に置かれているような、 AppImage ファイルの実行時に起動される各種アプリケーションに必要となる設定ファイル等の作業用のディレクトリへの配置。 - AppImage ファイルの実行時に起動されるスクリプトファイル
AppRun
について、 AppImage ファイルの実行時に起動される各種アプリケーションに応じた修正。 - AppImage ファイルで使用するアイコンファイル及び実行ファイルに対応した
*.desktop
ファイルについて、各種アプリケーションに応じた修正。 - 設定ファイル等の各種ファイルパス名が、絶対パスとして実行ファイルのソースコード等にハードコードされている場合、相対パス若しくは環境変数
$APPDIR
を参照するようにソースコード等の修正。
なお、ユーザ自身によって行う設定及び処理を定義するためのクラスである AppImage::Builder
クラスの派生クラスについての詳細は、 AppImage::Builder
クラスのインスタンスメソッドについて詳述した同梱ファイル MethodList.md
を参照して下さい。
AppImage ファイルのパス若しくは AppImage が置かれている URL を一つだけ引数に取り、引数によって指定された AppImage ファイルを Linuxbrew にインストールする為のコマンドです。
以下に、 brew appimage-install
コマンドが取るオプションについて示します。
-e, --extract
… 引数で指定された AppImage ファイルのインストール時に、 AppImage ファイルに--appimage-extract
オプションを付与して、 Linuxbrew に AppImage ファイルの展開を行います。-n, --dry-run
…brew appimage-install
コマンドの実行の際、実際に Linuxbrew への [AppImage] ファイルの導入は行われず、導入先の Cellar 名及びバージョン番号等を画面に表示してbrew appimage-install
コマンドを終了します。このオプションは、brew appimage-install
コマンドの Cellar 名及びバージョン番号の解析結果の確認の為に使用されます。-N, --name
… 引数で指定された AppImage ファイルのインストール先とする為の Linuxbrew の Cellar の名前を明示的に指定します。-V, --version
… 引数で指定された AppImage ファイルのインストール先とする為の Linuxbrew の Cellar のバージョン番号を明示的に指定します。-c, --command
… AppImage ファイルを実行するために用いるコマンド名を明示的に指定します。-O, --output
… AppImage ファイルのインストールを行わず、標準出力に AppImage ファイルをインストールする為の Formula ファイルを出力します。-v, --verbose
… AppImage ファイルのインストールの過程の詳細を表示します。
なお、 brew appimage-install
コマンドによる AppImage ファイルのインストールのインストール先となる Cellar の名前及びバージョン番号は、 ```--name, --version`` によって明示的に指定されなければ、引数によって指定された AppImage ファイル名より自動的に抽出されたものが用いられます。
ここに、 brew appimage-install
コマンドによる AppImage ファイルのインストールのインストール先となる Cellar のバージョン番号を決定する順序について示します。
brew appimage-install
コマンドで--version
オプションにより明示的に指定した文字列。--version
オプションによりバージョン番号が指定されなければ、 AppImage ファイルのファイル名中において、数字及びピリオドが連続する文字列。
なお、 brew appimage-install
コマンドで AppImage ファイルをインストールした場合、 AppImage ファイルのインストール先となる Cellar の名前は以下のようにして決められます。
brew appimage-install
コマンドで--name
により明示的に指定した文字列。--name
オプションが指定されない場合は、brew appimage-install
コマンドにより自動的に抽出される AppImage ファイル名の先頭の英数字及びハイフン等より構成される文字列に (もし存在しなければ) "appimage-" を付加した文字列。例えば、foo-bar-0.0.1.AppImage
の場合は、appimage-foo-bar
となる。
ここで、 --version
オプションが明示的に指定されず、 AppImage ファイルのファイル名等よりバージョン番号及び Cellar 名の解析に失敗した場合は、 brew appimage-install
はエラーを返します。この場合は、 brew appimage-install
に --name
及び --version
オプションを明示的に指定するようにして下さい。
なお、 brew appimage-install
コマンドによってインストールされた AppImage ファイルは、 Linuxbrew からは、 Keg only としてインストールされることに留意して下さい。実際に foo
コマンドを使用する際は、 brew link --force
コマンドを実行する必要があります。
以下に、 https://example.com/download/foo-1.0.2-x86_64.AppImage
に存在する AppImage ファイルを Cellar 名 foo@1.0
に導入する場合の brew appimage-install
の実行方法について示します。
$ brew appimage-install -N foo@1.0 -c foo https://example.com/download/foo-1.0.2-x86_64.AppImage
$ brew link --force foo@1.0 # (foo コマンドを使用する場合に必要。)
なお、 brew appimage-install
コマンドによってインストールされた AppImage ファイルは、以下のように brew remove
コマンドを用いてアンインストールを行うことが可能です。
$ brew remove foo@1.0