Linuxその他 - AppImage
概要
AppImageは、比較的新しいパッケージングフォーマットであり、Linuxでソフトウェアを実行するためのClick to Runの方法を提供している。
従来のDEB / RPMパッケージとは異なり、AppImageはどのディストリビューションでも使用できるため、Linuxユーザにとって非常に魅力的なものとなっている。
従来のパッケージは、それぞれのディストリビューションにソフトウェアをインストールする便利な方法を提供するが、ソフトウェア開発者にとってはあまり便利な方法ではない。
ソフトウェア開発者は、複数のディストリビューション用に複数のパッケージを作成しなければならない。
AppImageはユニバーサルソフトウェアパッケージフォーマットであり、AppImageでソフトウェアをパッケージ化することにより、開発者は「すべてを支配する」1つのファイルだけを提供することができる。
エンドユーザー、つまり、最新のLinuxディストリビューションのほとんど(全てではないにしても)で使用することができる。
AppImageの特徴
- ディストリビューションに依存しない:さまざまなLinuxディストリビューションで実行可能である。
- ソフトウェアのインストールやコンパイルが不要クリックして再生するだけである。
- root権限不要:システムファイルに触れることはない。
- 移植性が良いため、ライブディスクを含め、どこでも実行可能である。
- ソフトウェア本体は読み取り専用モード
- AppImageファイルを削除するだけでソフトウェアが削除される。
- AppImageでパッケージされたソフトウェアは、デフォルトではサンドボックス化されていない。
AppImageの注意点
AppImageについては、さらに知っておくべきことがいくつかある。
- パッケージングが不十分なAppImageは、実行権限があっても実行されない。
- AppImageのコンセプトは、全ての依存関係をパッケージ自体の中に持つことである。
- しかし、開発者が依存関係を全てパッケージ化したつもりでも、実際にはそうなっていない場合がある。
- そのような場合、AppImageを実行してもソフトウェアは起動しない。
- AppImageにパッケージング上の問題がある場合、開発者に連絡して、その旨を伝える必要がある。
- AppImage Launcherを使用しないデスクトップ統合
- AppImageを実行すると、ソフトウェアによっては「デスクトップファイルをインストールする」よう求めるメッセージが表示されることがある。
- 「はい」を選択すると、AppImageは通常インストールされるアプリケーションのようにLinuxシステムに統合される。
- AppImage Launcherを使用しないデスクトップ統合では、削除後に手動でのクリーンアップが必要になる場合がある。
- デスクトップ統合を選択した場合、システムにいくつかのファイルが作成される。
- AppImage Launcherとは異なり、AppImageファイルを削除しても、これらのデスクトップファイルはシステムに残る。
- そのため、そのままにする、または、手動で削除する必要がある。
- アップデートは必ずしもオプションではない。
- ソフトウェアによっては、自動的にアップデートをチェックして、新しいバージョンが入手可能になったことを通知してくれるものもあるかもしれない。
- しかし、ほとんどの場合、そうはならない。
- これは、開発者がこのオプションを提供しているかどうかによる。
AppImageファイルの展開
まず、AppImageファイルが最新バージョンの内部フォーマットを使用しているかどうかを確認する。
./<AppImageファイル> --appimage-help
出力に次のような行がある場合、埋め込まれたファイルシステムのイメージからコンテンツを取り出すことができる。
./<AppImageファイル> --appimage-extract
上記のコマンドが失敗する場合は、ヘルパーツールを使用することができる。
AppImageToolをダウンロードする。
AppImageToolを実行する。
./<AppImageToolファイル> --list <展開するディレクトリ>
AppImageファイルの作成 : .NETアプリケーション
.NETアプリケーションのパブリッシュ
.NETアプリケーションをビルドする。
dotnet publish -c:Release \ -r:linux-x64 \ -p:PublishReadyToRun=false \ -p:PublishSingleFile=true \ --self-contained true
AppImageKitのダウンロード
まず、AppImageKitのGithubにアクセスして、AppImageKitをダウンロードする。
または、wget
コマンド等を使用して、AppImageKitをダウンロードする。
wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage
AppImageKitに実行権限を付加する。
chmod u+x appimagetool-x86_64.AppImage
AppDirの構成
次に、AppDirを構成する。
mkdir <AppImageのルートディレクトリ> mkdir -p /<AppImageのルートディレクトリ>/{usr/bin,usr/share/applications,usr/share/icon,usr/share/metainfo}
.NETアプリケーションをusr/binディレクトリにコピーする。
cp <.NETアプリケーションのパス> /<AppImageのルートディレクトリ>/usr/bin
.NETアプリケーションのアイコンをAppImageのルートディレクトリに配置する。
cp <アイコンファイルのパス> <AppImageのルートディレクトリ>
デスクトップエントリファイルを作成する。
vi /<AppImageのルートディレクトリ>/<デスクトップエントリファイル名>.desktop
# /<AppImageのルートディレクトリ>/<デスクトップエントリファイル名>.desktopファイル
[Desktop Entry]
Type=Application
Name=<任意のアプリケーション名>
GenericName=<汎用的な任意のアプリケーション名>
Comment=<アプリケーションの説明>
Comment[ja_JP]=<アプリケーションの説明>
Exec=<実行ファイル名>
Icon=<アイコンファイル名>
Categories=<任意のカテゴリ 例: Utility>;
Terminal=false # (オプション) GUIアプリケーションの場合はfalseを指定する
.NETアプリケーションのAppImageを作成する場合は、エントリーポイントの設定が必要なため、AppRunファイルを作成する。
vi /<AppImageのルートディレクトリ>/AppRun
# /<AppImageのルートディレクトリ>/AppRunファイル
#!/usr/bin/env sh
appname="<アプリケーションファイル名>"
# use -f to make the readlink path absolute
dirname="$(dirname -- "$(readlink -f -- "${0}")" )"
if [ "$dirname" = "." ]; then
dirname="$PWD/$dirname"
fi
export DOTNET_ROOT="$dirname/usr/bin"
# Run Application binary
exec "$dirname/usr/bin/$appname" "$@"
AppRunファイルに実行権限を付加する。
chmod u+x /<AppImageのルートディレクトリ>/AppRun
AppImageファイルの生成
AppImageファイルを生成する。
./appimagetool-x86_64.AppImage <任意のディレクトリ名> <任意のAppImageファイル名>.AppImage