Linuxその他 - AppImage

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動

概要

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