「Flatpak」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(同期)
(序文の翻訳を修正)
 
(5人の利用者による、間の29版が非表示)
1行目: 1行目:
 
[[Category:開発]]
 
[[Category:開発]]
  +
[[de:Flatpak]]
 
[[en:Flatpak]]
 
[[en:Flatpak]]
  +
[[es:Flatpak]]
  +
[[pt:Flatpak]]
  +
[[zh-hans:Flatpak]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|Snapd}}
 
{{Related|Snapd}}
10行目: 14行目:
 
{{man|1|flatpak}} より:
 
{{man|1|flatpak}} より:
   
:flatpak はアプリケーションランタイムを管理するためのツールです。flatpak モデルでは、アプリケーションホスト環境とは独立してビルド・配布することができます。アプリケーションは実行時にホスト環境から隔離 (サンドボックス化) されます。
+
:Flatpak はアプリケーションランタイムを管理するためのツールです。Flatpak モデルでは、アプリケーションホスト環境とは独立してビルド・配布することができます。アプリケーションは実行時にホスト環境から隔離 (サンドボックス化) されます。
:flatpak は [https://ostree.readthedocs.io/en/latest/ OSTree] を使用してデータを配布・デプロイします。Flatpak のリポジトリは OSTree のリポジトリであり、ostree ユーティリティによって操作することが可能です。ランタイムやアプリケーションのインストールは OSTree のチェックアウトと同じです。
+
:Flatpak は [https://ostree.readthedocs.io/en/latest/ OSTree] を使用してデータを配布・デプロイします。Flatpak のリポジトリは OSTree のリポジトリであり、ostree ユーティリティによって操作することが可能です。ランタイムやアプリケーションのインストールは OSTree のチェックアウトと同じです。
  +
  +
{{Warning|
  +
* [https://flathub.org/home Flathub] で入手できる Flatpak アプリケーションの多くは、デフォルトで効果的にサンドボックス化されていません [https://hanako.codeberg.page/]。提供されるプロセス隔離機能に頼りっきりにならずに、関連する flatpak パーミッションマニフェストに一般的なサンドボックス回避の問題がないか確認してください。
  +
* サンドボックス化されていても、信頼できないコードを実行することは安全ではありません。
  +
}}
   
 
== インストール ==
 
== インストール ==
   
{{pkg|flatpak}} パッケージを[[インストール]]してください。
+
{{pkg|flatpak}} パッケージを[[インストール]]してください。flatpak をビルドしたい場合は、{{pkg|flatpak-builder}} もインストールして下さい。
   
  +
=== デスクトップとの統合 ===
{{Note|{{ic|flatpak-builder}} で flatpak をビルドしたい場合、{{pkg|elfutils}} と {{pkg|patch}} もインストールする必要があります。}}
 
  +
  +
flatpak アプリケーションがデスクトップと対話する (つまり、アプリケーションが URL を開いたり、画面を共有したりする) ためには、[[xdg-desktop-portal]] を必ずセットアップしてください。デスクトップの実装によっては、アプリケーションがいくつかのポータルにアクセスする前に確認ダイアログが表示されます。
  +
  +
=== アプリケーション管理 ===
  +
  +
* {{App|Discover|KDE の Flatpak フロントエンド。アプリケーション、ゲーム、そしてツールの検索とインストールを助けます。{{Grp|plasma}} の一部です。|https://apps.kde.org/discover/|{{Pkg|discover}}}}
  +
* {{App|GNOME Software|GNOME の Flatpak フロントエンド。アプリケーションとシステム拡張機能のインストールとアップデートができます。{{Grp|gnome}} の一部です。|https://wiki.gnome.org/Apps/Software|{{Pkg|gnome-software}}}}
  +
  +
=== パーミッション管理 ===
  +
  +
* {{App|Flatpak Permissions Management KCM|インストールされた Flatpak アプリケーションに与えられたパーミッションを変更することができる KDE Configuration Module (設定モジュール)。{{Grp|plasma}} の一部です。|https://invent.kde.org/plasma/flatpak-kcm|{{Pkg|flatpak-kcm}}}}
  +
* {{App|Flatseal|Flatpak アプリケーションのパーミッションを確認したり変更したりするためのグラフィカルユーティリティ。|https://github.com/tchx84/Flatseal|{{AUR|flatseal}}}}
  +
* {{App|malcontent (ペアレンタルコントロール)|非管理者アカウントからアクセス可能なコンテンツのタイプを制限するサポートを実装しています。{{Grp|gnome}} の一部です。|https://gitlab.freedesktop.org/pwithnall/malcontent|{{Pkg|malcontent}}}}
   
 
== リポジトリの管理 ==
 
== リポジトリの管理 ==
  +
  +
{{Note|デフォルトでは、すべての flatpak コマンドはシステム全体で機能します。つまり、パッケージはコンピュータ内のすべてのユーザーにインストールされ、flatpak はユーザーに root のパスワードの入力を要求します。パッケージをインストールし、 (スーパーユーザー権限を必要とせずに) 単一のユーザーでリポジトリを操作するには、オプション {{ic|--user}} を各コマンドに追加します。たとえば、自分だけに表示されるリポジトリを追加したい場合は、{{ic|$ flatpak remote-add --user ''name'' ''location''}} を実行する必要があります。自分だけが表示できるパッケージをインストールするには、{{ic|$ flatpak install --user ''package-name''}} を実行します。}}
   
 
=== リポジトリの追加 ===
 
=== リポジトリの追加 ===
29行目: 53行目:
 
''name'' は新しいリモートリポジトリの名前、''location'' はリポジトリのパスあるいは URL に置き換えてください。
 
''name'' は新しいリモートリポジトリの名前、''location'' はリポジトリのパスあるいは URL に置き換えてください。
   
例えば公式の [https://flathub.org/ Flathub リポジトリ] を追加するには:
+
デフォルトでは、flatpak インストール時に [https://flathub.org/ Flathub リポジトリ]がシステム全体に追加されます。ユーザ毎の設定で公式のリポジトリを追加するには:
   
$ flatpak remote-add --if-not-exists flathub <nowiki>https://dl.flathub.org/repo/flathub.flatpakrepo</nowiki>
+
$ flatpak remote-add --if-not-exists --user flathub <nowiki>https://dl.flathub.org/repo/flathub.flatpakrepo</nowiki>
   
 
=== リポジトリの削除 ===
 
=== リポジトリの削除 ===
40行目: 64行目:
   
 
''name'' は削除したいリモートリポジトリの名前に置き換えてください。
 
''name'' は削除したいリモートリポジトリの名前に置き換えてください。
  +
  +
=== リポジトリの一覧表示 ===
  +
  +
追加されたすべてのリポジトリの一覧を表示するには、次のようにします:
  +
  +
$ flatpak remotes
   
 
== ランタイムとアプリケーションの管理 ==
 
== ランタイムとアプリケーションの管理 ==
52行目: 82行目:
 
}}
 
}}
   
取得したら {{ic|flatpak search ''packagename''}} でパッケージを検索できます。例えば {{ic|flathub}} リポジトリの {{ic|libreoffice}} パッケージを探すには:
+
取得したら {{ic|flatpak search ''packagename''}} でパッケージを検索できます。例えば {{ic|flathub}} リモートリポジトリの {{ic|libreoffice}} パッケージを探すには:
   
 
{{hc|$ flatpak search libreoffice|
 
{{hc|$ flatpak search libreoffice|
61行目: 91行目:
 
=== 利用可能なランタイムとアプリケーションの確認 ===
 
=== 利用可能なランタイムとアプリケーションの確認 ===
   
''remote'' という名前のリモートリポジトリに存在するランタイムとアプリケーションを確認するには次を実行:
+
''remote'' という名前のリモートリポジトリに存在するランタイムとアプリケーションを確認するには:
   
 
$ flatpak remote-ls ''remote''
 
$ flatpak remote-ls ''remote''
67行目: 97行目:
 
=== ランタイムやアプリケーションのインストール ===
 
=== ランタイムやアプリケーションのインストール ===
   
ランタイムやアプリケーションをインストールするには次を実行:
+
ランタイムやアプリケーションをインストールするには:
   
 
$ flatpak install ''remote'' ''name''
 
$ flatpak install ''remote'' ''name''
73行目: 103行目:
 
''remote'' はリモートリポジトリの名前に、''name'' はインストールしたいアプリケーションやランタイムの名前に置き換えてください。
 
''remote'' はリモートリポジトリの名前に、''name'' はインストールしたいアプリケーションやランタイムの名前に置き換えてください。
   
  +
{{Tip|識別子の一部のみ {{ic|flatpak install ''partial-name''}} を指定することもできます (例えば、{{ic|flatpak install libreoffice}})。}}
=== インストールされたランタイムやアプリケーションの確認 ===
 
   
インストールされたランタイムアプリケーション確認するには次を実行:
+
=== インストールされたランタイムアプリケーション確認 ===
  +
  +
インストールされたランタイムとアプリケーションを確認するには:
   
 
$ flatpak list
 
$ flatpak list
81行目: 113行目:
 
=== アプリケーションの実行 ===
 
=== アプリケーションの実行 ===
   
  +
バイナリは {{ic|/var/lib/flatpak/exports/bin}} にあります。このパスは {{ic|/etc/profile.d/flatpak-bindir.sh}} によって自動的に $PATH に追加されます。パスの変更を適用するには再ログインする必要がある場合があります。
Flatpak アプリケーションはコマンドラインから起動することもできます:
 
  +
  +
Flatpak アプリケーションはコマンドラインから実行することもできます:
   
 
$ flatpak run ''name''
 
$ flatpak run ''name''
87行目: 121行目:
 
=== ランタイムやアプリケーションのアップデート ===
 
=== ランタイムやアプリケーションのアップデート ===
   
''name'' という名前のランタイムあるいはアプリケーションをアップデートするには次を実行:
+
''name'' という名前のランタイムあるいはアプリケーションをアップデートするには:
   
 
$ flatpak update ''name''
 
$ flatpak update ''name''
  +
  +
==== systemd による自動アップデート ====
  +
  +
{{Warning|一般に、systemd を通して自動的にアップデートを実行することは良いアイデアではありません。ユーザに知られずにアプリケーションに新しいパーミッションが追加される可能性があるからです。}}
  +
  +
システムのランタイムとアプリケーションを自動的にアップデートするには、以下のファイルを作成してください:
  +
  +
{{hc|/etc/systemd/user/flatpak-update.service|2=
  +
[Unit]
  +
Description=Update Flatpak
  +
After=network-online.target
  +
Wants=network-online.target
  +
  +
[Service]
  +
Type=oneshot
  +
ExecStart=/usr/bin/flatpak update --noninteractive --assumeyes
  +
  +
[Install]
  +
WantedBy=multi-user.target
  +
}}
  +
  +
{{hc|/etc/systemd/user/flatpak-update.timer|2=
  +
[Unit]
  +
Description=Update Flatpak
  +
  +
[Timer]
  +
OnBootSec=2m
  +
OnActiveSec=2m
  +
OnUnitInactiveSec=24h
  +
OnUnitActiveSec=24h
  +
AccuracySec=1h
  +
RandomizedDelaySec=10m
  +
  +
[Install]
  +
WantedBy=timers.target
  +
}}
  +
  +
その後、[[daemon-reload]] を実行するか、{{ic|flatpak-update.timer}} [[ユーザーユニット]]を[[起動/有効化]]してください。
  +
  +
{{Note|
  +
* このガイドは、flatpak のデフォルトである、flatpak のシステムインストール用です。flatpak のユーザインストールの場合は:
  +
** {{ic|/etc/systemd/system/}} ディレクトリ内に上記のファイルを作成してください。
  +
** {{ic|flatpak-update.service}} 内の {{ic|ExecStart}} 行に {{ic|--user}} フラグを追加してください
  +
** {{ic|systemctl}} コマンドは {{ic|--user}} 無しで実行してください。
  +
}}
   
 
=== ランタイムやアプリケーションのアンインストール ===
 
=== ランタイムやアプリケーションのアンインストール ===
   
''name'' という名前のランタイムあるいはアプリケーションをアンインストールするには次を実行:
+
''name'' という名前のランタイムアプリケーションをアンインストールするには:
   
 
$ flatpak uninstall ''name''
 
$ flatpak uninstall ''name''
  +
  +
アンインストール時に {{ic|~/.var/app}} とパーミッションストアのアプリデータを削除するには:
  +
  +
$ flatpak uninstall --delete-data ''name''
  +
  +
{{Tip|{{ic|flatpak uninstall --unused}} とすると、未使用の flatpak "refs" (どのアプリケーション/ランタイムからも参照されていない孤児) をアンインストールできます。}}
  +
  +
=== ランタイムやアプリケーションをダウングレードする ===
  +
  +
ランタイムやアプリケーションをダウングレードするには、まず、関連するコミット ID を探します:
  +
  +
$ flatpak remote-info --log ''remote'' ''name''
  +
  +
ここで、''remote'' はリポジトリ (flathub など)、''name'' はアプリケーションまたはランタイムの名前です。そして、コミットをデプロイします:
  +
  +
$ flatpak update --commit=''commit'' ''name''
  +
  +
ここで、''commit'' は希望するバージョンのコミット、''name'' は前と同じです。
  +
  +
この手順は、パッケージを最新版でない希望のバージョンに選択的にアップグレードするのにも使えます。
  +
  +
このパッケージのアップデートを {{ic|flatpak update}} から除外するには、[[#ランタイムやアプリケーションの更新を防止する]] を参照してください。
  +
  +
=== ランタイムやアプリケーションの更新を防止する ===
  +
  +
ランタイムまたはアプリケーションへの自動および手動更新を防止するには、{{ic|flatpak mask}} コマンドを使用します:
  +
  +
$ flatpak mask ''name''
  +
  +
これにより、選択的なアップグレードとダウングレードも防止されます。
  +
  +
マスクを元に戻し、更新を再度有効にするには、{{ic|flatpak mask --remove}} を使用します:
  +
  +
$ flatpak mask --remove ''name''
   
 
=== Flatpak の .desktop ファイルをメニューに追加 ===
 
=== Flatpak の .desktop ファイルをメニューに追加 ===
  +
Flatpak ではウィンドウマネージャが XDG_DATA_DIRS 環境変数を参照してアプリケーションを見つけるようになっています。セッションを再起動する必要があったり、ランチャーによっては環境変数がサポートされていない場合があります。スキャンされるディレクトリのリストを編集出来る場合、以下を追加してください:
 
  +
Flatpak は、ウィンドウマネージャが、アプリケーションを見つけるための [[XDG Base Directory#システムディレクトリ|XDG_DATA_DIRS]] [[環境変数]]を尊重することを期待します。この変数は {{ic|/etc/profile.d/flatpak.sh}} によって設定されます。この環境変数を更新するには、セッションの再起動が必要になる場合があります。ランチャーが {{ic|XDG_DATA_DIRS}} をサポートしていない場合、スキャンされるディレクトリのリストを編集し、そのリストに以下のディレクトリを追加することができます:
   
 
~/.local/share/flatpak/exports/share/applications
 
~/.local/share/flatpak/exports/share/applications
 
/var/lib/flatpak/exports/share/applications
 
/var/lib/flatpak/exports/share/applications
   
上記の設定で Awesome から Flatpak アプリが起動ようになります。
+
これは、[[Awesome]] において必須ことが知られています。
  +
  +
{{Note|このスクリプトは、デフォルトのシェルが [[Fish]] に設定されている場合、機能しません。この問題は、[https://github.com/fish-shell/fish-shell/issues/7485#issuecomment-728984689 fish-shell の issue 7485 にあるコメント]で言及されている回避策を使用することにより、修正できます。}}
  +
  +
=== アプリケーションのサンドボックス権限を表示する ===
  +
  +
Flatpak のアプリケーションには、あらかじめサンドボックスのルールが設定されており、アプリケーションがアクセスできるリソースやファイルシステムのパスが定義されています。
  +
特定のアプリケーションのアクセス権を表示するには、次のようにします:
  +
  +
$ flatpak info --show-permissions ''name''
  +
  +
サンドボックスのパーミッション名のリファレンスは、[https://docs.flatpak.org/en/latest/sandbox-permissions-reference.html 公式の flatpak ドキュメント]にあります。
  +
  +
=== サンドボックスでのアプリケーションの権限を上書き ===
  +
  +
アプリケーションの事前定義されているパーミッションが寛容すぎたり厳しすぎたりする場合、{{ic|flatpak override}} コマンドを使って変更することができます。
  +
例えば:
  +
  +
flatpak override --nofilesystem=home ''name''
  +
  +
これにより、アプリケーションがホームディレクトリにアクセスできなくなります。
  +
  +
デバイスやファイルシステム、ソケットといった全ての種類のパーミッションには、特定のパーミッションを許可するコマンドラインオプションと、パーミッションを拒否する別のオプションがあります。例えば、デバイスアクセスの場合は {{ic|1=--device=''device_name''}} でアクセスを許可し、{{ic|1=--nodevice=''device_name''}} でデバイスへのアクセスパーミッションを拒否します。
  +
  +
パーミッションの全ての種類は、マニュアルページを参照してください: {{man|1|flatpak-override}}
  +
  +
パーミッションの上書きは以下のコマンドでデフォルトにリセットできます:
  +
  +
$ flatpak override --reset ''name''
  +
  +
''Flatseal'' は GUI のパーミッションマネージャです。マウスで簡単にパーミッションの操作を行うことができます。KDE Plasma では、''Flatpak Permissions Management KCM'' が KDE システム設定アプリケーションに似たような GUI を提供します: ''KDE システム設定 > アプリケーション > Flatpak Permission Settings''。
   
 
== カスタムベースランタイムの作成 ==
 
== カスタムベースランタイムの作成 ==
   
{{Warning|あなたのソフトウェアを Flatpak として公開したい場合、Arch ベースのランタイムを使うことは相応しくありません。そのような場合は [http://docs.flatpak.org 公式ドキュメント] に従って [http://flatpak.org/runtimes.html 共通ランタイム] を使用して Flatpak エコシステムに適合させると良いでしょう。}}
+
{{Warning|あなたのソフトウェアを Flatpak として公開したい場合、Arch ベースのランタイムを使うことは相応しくありません。そのような場合は[https://docs.flatpak.org 公式ドキュメント]に従って[https://flatpak.org/runtimes.html 共通ランタイム]を使用して Flatpak エコシステムに適合させると良いでしょう。}}
   
 
{{Note|
 
{{Note|
* アプリやランタイムを作成するときはソフトウェアはサンドボックス化されないため、信用できないソフトウェアをビルドするとき普段使ユーザアカウント使わないこを推奨しま
+
* アプリやランタイムを作成するときはソフトウェアはサンドボックス化されないため、信頼されていないソフトウェアをバンする、信頼されてない非特権ユーザアカウント使用する良いかもせん
* バンドルを配布する場合、バンドルしたソフトウェアのソースコードを要求に応じて提供する法的な義務を負います。[[ABS]] を使ってソースからパッケージをビルドするともでき}}
+
* バンドルを配布する場合、バンドルしたソフトウェアのソースコードを要求に応じて提供する法的な義務を負います。[[ABS]] を使ってソースからパッケージをビルドすると良いかしれせん
  +
}}
   
pacman を使うことで Flatpak 用に Arch ベースのタムランタイムベース SDK を作成することができます。カスタムランタイムを使用してアプリケーションをビルドしたりパッケージすることが可能です。デフォルトの {{ic|org.freedesktop.BasePlatform}} {{ic|org.freedesktop.BaseSdk}} ランタイムを使用する代わりとなります。
+
Pacman を使って、カスタムの Arch ベースのベースランタイムベース SDK を作成することができます。そして、それを使てアプリケーションをビルドしパッケージングすることができます。これは個人的な使用でデフォルトの {{ic|org.freedesktop.BasePlatform}} {{ic|org.freedesktop.BaseSdk}} ランタイム代わりとなります。
   
 
{{Pkg|flatpak}} だけでなく、{{Pkg|fakeroot}} のインストールが必要です。また、pacman フックを使うには {{Pkg|fakechroot}} も必要です。
 
{{Pkg|flatpak}} だけでなく、{{Pkg|fakeroot}} のインストールが必要です。また、pacman フックを使うには {{Pkg|fakechroot}} も必要です。
122行目: 267行目:
 
$ cd ''myflatpakbuilddir''
 
$ cd ''myflatpakbuilddir''
   
次にランタイムベースプラットフォームをビルドするためのディレクトリを用意します。ンボックリンクを作成して Arch からデフォルトの {{ic|/usr/share}} などアクセスできるようにしてください:
+
次にランタイムベースプラットフォームをビルドするためのディレクトリを用意します。サブディレクトリには、後にサボックス内の {{ic|/usr}} ディレクトリとなるものが含まれます。なので、Arch デフォルトの {{ic|/usr/share}} などが通常のパスでアクセスできるようにするために、シンボリックリンクを作成する必要があります。
   
 
$ mkdir -p ''myruntime''/files/var/lib/pacman
 
$ mkdir -p ''myruntime''/files/var/lib/pacman
130行目: 275行目:
 
$ ln -s /usr/usr/local ''myruntime''/files/local
 
$ ln -s /usr/usr/local ''myruntime''/files/local
   
Arch ランタイムから OS のフォントを利用できるようにするには:
+
ホスト OS のフォントが Arch ランタイムから利用できるようにしてください:
   
 
$ mkdir -p ''myruntime''/files/usr/share/fonts
 
$ mkdir -p ''myruntime''/files/usr/share/fonts
138行目: 283行目:
   
 
* {{ic|CheckSpace}} オプションを削除して pacman によってルートファイルシステムに関するエラーが表示されないようにしてください。
 
* {{ic|CheckSpace}} オプションを削除して pacman によってルートファイルシステムに関するエラーが表示されないようにしてください。
* 不必要なカスタムリポジトリを削除してくださ必要なのは {{ic|IgnorePkg}}, {{ic|IgnoreGroup}}, {{ic|NoUpgrade}}, {{ic|NoExtract}} の設定だけです
+
* 望ましくカスタムリポジトリと、ホストシステムのみにお必要な {{ic|IgnorePkg}}{{ic|IgnoreGroup}}{{ic|NoUpgrade}}、そして {{ic|NoExtract}} の設定を削除してくさい
   
れからランタイムにパッケージをインストールします:
+
して、ランタイムにパッケージをインストールしてください。
   
 
$ fakechroot fakeroot pacman -Syu --root ''myruntime''/files --dbpath ''myruntime''/files/var/lib/pacman --config pacman.conf base
 
$ fakechroot fakeroot pacman -Syu --root ''myruntime''/files --dbpath ''myruntime''/files/var/lib/pacman --config pacman.conf base
 
$ mv pacman.conf ''myruntime''/files/etc/pacman.conf
 
$ mv pacman.conf ''myruntime''/files/etc/pacman.conf
   
{{ic|''myruntime''/files/etc/locale.gen}} を編集して使用する[[ロケール]]を設定してください。その後ランタイムのロケールを再生成:
+
{{ic|''myruntime''/files/etc/locale.gen}} を編集して使用する[[ロケール]]を設定してください。その後ランタイムのロケールを再生成してください:
   
 
$ fakechroot chroot ''myruntime''/files locale-gen
 
$ fakechroot chroot ''myruntime''/files locale-gen
154行目: 299行目:
 
$ fakechroot fakeroot pacman -S --root mysdk/files --dbpath mysdk/files/var/lib/pacman --config mysdk/files/etc/pacman.conf base-devel fakeroot fakechroot --needed
 
$ fakechroot fakeroot pacman -S --root mysdk/files --dbpath mysdk/files/var/lib/pacman --config mysdk/files/etc/pacman.conf base-devel fakeroot fakechroot --needed
   
ランタイムと SDK についてのメタデータを追加:
+
ランタイムと SDK についてのメタデータを追加してください:
   
 
{{hc|''myruntime''/metadata|2=
 
{{hc|''myruntime''/metadata|2=
177行目: 322行目:
 
$ ostree summary -u
 
$ ostree summary -u
   
ランタイムと SDK をインストール:
+
ランタイムと SDK をインストールしてください:
   
 
$ flatpak remote-add --user --no-gpg-verify myarchos file://$(pwd)
 
$ flatpak remote-add --user --no-gpg-verify myarchos file://$(pwd)
185行目: 330行目:
 
=== pacman でアプリを作成 ===
 
=== pacman でアプリを作成 ===
   
[http://flatpak.org/developer.html 通常の方法] でアプリケーションをビルドする代わりに、pacman を使って通常の Arch パッケージのコンテナを作成することができます。アプリを作成するとき {{ic|/usr}} は読み込み専用であるため、アプリをビルドするときに Arch のパッケージを使うことはできません。pacman でアプリを作成する場合:
+
[https://flatpak.org/developer.html 通常の方法]でアプリケーションをビルドする代わりに、pacman を使って通常の Arch パッケージのコンテナ化バージョンを作成することができます。アプリを作成する際、{{ic|/usr}} は読み込み専用であるため、アプリをビルドするときに Arch のパッケージを使うことはできません。Pacman実際のアプリを作成するには:
   
 
* pacman を使って依存パッケージを全て含んだランタイムを作成する。
 
* pacman を使って依存パッケージを全て含んだランタイムを作成する。
* [http://flatpak.org/developer.html 通常の方法] でアプリをコンパイルするか、{{ic|configure}} スクリプトで {{ic|1=--prefix=/app}} を使用するように Flatpak 向けにカスタマイズした [[PKGBUILD]] を使う。
+
* そして、[https://flatpak.org/developer.html 通常の方法]でアプリをコンパイルするか、{{ic|configure}} スクリプトで {{ic|1=--prefix=/app}} を使用するように Flatpak 向けにカスタマイズした [[PKGBUILD]] を使う。
   
 
あるいは:
 
あるいは:
  +
 
* pacman を使って pacman でインストールしたアプリを含むランタイムを作成する
 
* pacman を使って pacman でインストールしたアプリを含むランタイムを作成する
 
* アプリを起動するためのダミーアプリを作成する。
 
* アプリを起動するためのダミーアプリを作成する。
   
後者の場合、まずは以下のように pacman を使ってランタイムを作成します (例として {{Pkg|gedit}} をコンテナ化)。ランタイムは pacman を使って初期化準備します。
+
後者の場合、まずは以下のように pacman を使ってランタイムを作成します (例として {{Pkg|gedit}} をコンテナ化します)。ランタイムは pacman を使って初期化準備します。
   
 
$ flatpak build-init -w geditruntime org.mydomain.geditruntime org.mydomain.BaseSdk org.mydomain.BasePlatform 2016-06-26
 
$ flatpak build-init -w geditruntime org.mydomain.geditruntime org.mydomain.BaseSdk org.mydomain.BasePlatform 2016-06-26
200行目: 346行目:
 
$ flatpak build geditruntime ln -s /usr/var/lib /var/lib
 
$ flatpak build geditruntime ln -s /usr/var/lib /var/lib
 
$ flatpak build geditruntime fakeroot pacman-key --init
 
$ flatpak build geditruntime fakeroot pacman-key --init
$ flatpak build geditruntime fakeroot pacman-key --populate archlinux
+
$ flatpak build geditruntime fakeroot pacman-key --populate
   
pacman からホストのネットワーク接続が使えるようにする必要がありま:
+
これで、パッケージがインストールされました。ホストのネットワーク接続が pacman から利用できるようにしなければなりません:
   
 
$ flatpak build --share=network geditruntime fakechroot fakeroot pacman --root /usr -S gedit
 
$ flatpak build --share=network geditruntime fakechroot fakeroot pacman --root /usr -S gedit
   
ランタイムを完成させる前にインストールをテストすることができます:
+
ランタイムを完成させる前にインストールをテストすることができます (適切なサンドボックス化をせずに):
   
 
$ flatpak build --socket=x11 geditruntime gedit
 
$ flatpak build --socket=x11 geditruntime gedit
   
ランタイムをビルドを完了して新しいローカルリポジトリにエクスポートしてください。pacman の GnuPG 鍵のパーミッションが干渉する可能性があるため先に削除する必要があります。
+
ランタイムをビルドを完了して新しいローカルリポジトリにエクスポートしてください。Pacman の GnuPG 鍵のパーミッションが干渉する可能性があるため先に削除する必要があります。
   
 
$ flatpak build geditruntime rm -r /etc/pacman.d/gnupg
 
$ flatpak build geditruntime rm -r /etc/pacman.d/gnupg
217行目: 363行目:
 
$ flatpak build-export -r geditrepo geditruntime
 
$ flatpak build-export -r geditrepo geditruntime
   
れからダミーアプリを作成:
+
して、ダミーアプリを作成してください:
   
 
$ flatpak build-init geditapp org.gnome.gedit org.mydomain.BaseSdk org.mydomain.geditruntime
 
$ flatpak build-init geditapp org.gnome.gedit org.mydomain.BaseSdk org.mydomain.geditruntime
   
ビルドを完了するときに指定するオプションで、サンドボックス化されたときのアプリのアクセス権限を調整することができます。利用可能なオプションは [[#参照|Flatpak のドキュメント]]や [https://git.gnome.org/browse/gnome-apps-nightly/tree GNOME のマニフェストファイル] を見てください。また、ビルドが完了した後、エクスポートする前に必要に応じて {{ic|geditapp/metadata}} を編集する方法もあります。メタデータファイルが完成したら、リポジトリにアプリをエクスポートしてください。
+
ビルドを完了するときに指定するオプションで、サンドボックス化されたときのアプリのアクセス権限を調整することができます。利用可能なオプションは [[#参照|Flatpak のドキュメント]]や [https://gitlab.gnome.org/GNOME/gnome-apps-nightly/tree/master GNOME のマニフェストファイル]を見てください。また、ビルドが完了した後、エクスポートする前に必要に応じて {{ic|geditapp/metadata}} を編集する方法もあります。メタデータファイルが完成したら、リポジトリにアプリをエクスポートしてください。
   
 
$ flatpak build-finish geditapp --socket=x11 ''[possibly other options]'' --command=gedit
 
$ flatpak build-finish geditapp --socket=x11 ''[possibly other options]'' --command=gedit
 
$ flatpak build-export geditrepo geditapp
 
$ flatpak build-export geditrepo geditapp
   
ランタイムを使ってアプリをインストール:
+
ランタイムを使ってアプリをインストールしてください:
   
 
$ flatpak --user remote-add --no-gpg-verify geditrepo geditrepo
 
$ flatpak --user remote-add --no-gpg-verify geditrepo geditrepo
232行目: 378行目:
 
$ flatpak install --user geditrepo org.gnome.gedit
 
$ flatpak install --user geditrepo org.gnome.gedit
 
$ flatpak run org.gnome.gedit
 
$ flatpak run org.gnome.gedit
  +
  +
== トラブルシューティング ==
  +
  +
=== Flatpak は linux-hardened カーネルでは実行できません ===
  +
  +
{{Pkg|linux-hardened}} カーネルでは {{ic|kernel.unprivileged_userns_clone}} が {{ic|0}} に設定されており、特権ユーザのみが新しいユーザ名前空間を作成できます。
  +
  +
これを修正する一つの方法は、{{pkg|bubblewrap-suid}} を[[インストール]]することです.このパッケージは {{man|1|bwrap}} の {{ic|setuid}} ビットを有効にして、bubblewrap が自分自身を昇格させて新しい名前空間を作成できるようにしたバージョンを提供します。
  +
  +
また、{{man|8|sysctl}} を使って {{ic|kernel.unprivileged_userns_clone}} を {{ic|1}} に設定して、非特権ユーザーが新しいユーザーネームスペースを作成できるようにすることも可能です:
  +
  +
# sysctl kernel.unprivileged_userns_clone=1
  +
  +
{{Warning|このカーネルパラメータ値を使用すると、セキュリティ上マイナスの影響があります。詳しくは [[セキュリティ#アプリケーションのサンドボックス化]] をご覧ください。}}
  +
  +
この変更を再起動後も維持するには、設定ファイルを {{man|5|sysctl.d}} に追加します。
  +
  +
{{hc|/etc/sysctl.d/flatpak.conf|2=
  +
kernel.unprivileged_userns_clone=1
  +
}}
  +
  +
詳細については、[[Bubblewrap#インストール]] の注記を参照してください。
  +
  +
=== xdg-desktop-portal が起動しない ===
  +
  +
[[xinit#xinitrc|手動で設定された実行コマンド]]で X を起動する場合、`xinitrc` リファレンスのすべての重要な構成要素を含んでいることを確認してください。そのうちの1つは、D-Bus セッションサービスに使用される環境のアップデートを実行するスクリプトをソースとしています。
  +
  +
systemctl --user import-environment DISPLAY XAUTHORITY
  +
if command -v dbus-update-activation-environment >/dev/null 2>&1; then
  +
dbus-update-activation-environment DISPLAY XAUTHORITY
  +
fi
  +
  +
=== Flatpak アプリケーションがデフォルトのシステムテーマを選択しない ===
  +
  +
Flatpak のドキュメントに記載されているように、flatpak アプリにシステムテーマを適用する理想的な方法はありません。[https://docs.flatpak.org/en/latest/desktop-integration.html?highlight=theme#applying-themes] [https://docs.flatpak.org/en/latest/desktop-integration.html?highlight=theme#theming] しかし、flatpak アプリにテーマを適用させるための[https://web.archive.org/web/20230106121332/https://itsfoss.com/flatpak-app-apply-theme/ 回避策があります]。
  +
  +
=== Firefox でローカル HTML ページを開くと "ファイルが見つかりません" というエラーが表示される ===
  +
  +
Flatpak 版 Firefox のデフォルトでは、ローカルの HTML を開くと "File not found" エラーページが表示されます。これは、そのファイルを含むフォルダにアクセスするための[[#サンドボックスでのアプリケーションの権限を上書き|パーミッションをアプリに付与しなければならない]]からです。
  +
  +
ただし、ホームフォルダ全体へのアクセス許可を与えると、Firefox は {{ic|~/.mozilla}} に既存のプロファイルをチェックし、サンドボックス化されたフォルダ {{ic|~/.var/app/org.mozilla.firefox/cache/mozilla/}} から以前に使用したプロファイルの代わりにロードすることに注意ください。(Flatseal などで) パーミッションを変更した後に前のセッションのタブや閲覧履歴がなくなった場合は、{{ic|~/.mozilla}} へのアクセスを除外するようにパーミッションを変更するか、{{ic|~/.var/app/org.mozilla.firefox/cache/mozilla/}} から {{ic|~/.mozilla}} へのプロファイルコピーを検討して下さい。
  +
  +
=== wlroots ベースのコンポジターでリンクを開くことができない ===
  +
  +
Flatpak アプリケーションは、URI を開こうとした際に [[xdg-desktop-portal]] によって公開されている {{ic|org.freedesktop.portal.OpenURI.OpenURI}} [[D-Bus]] インターフェイスを使用します。[https://github.com/emersion/xdg-desktop-portal-wlr/issues/42 xdg-desktop-portal-wlr バックエンド] はこの呼び出しをサポートしていないため、この問題を解決するには {{pkg|xdg-desktop-portal-gtk}} などの追加のバックエンドが必要になります。
  +
  +
=== アプリケーションが正しいカーソルテーマを使用しない ===
  +
  +
カーソルを適切に設定するための唯一の標準はありません。カーソルディレクトリへの読み取りアクセスだけが必要なプログラムもあれば、他のメカニズムに依存するプログラムもあります。しかし、以下のオーバーライドは、ほとんどの一般的なデスクトップアプリケーションで機能するはずです。
  +
  +
$ flatpak -u override --filesystem=/usr/share/icons/:ro
  +
$ flatpak -u override --filesystem=/home/$USER/.icons/:ro
  +
$ flatpak -u override --filesystem=xdg-config/gtk-3.0:ro
  +
$ flatpak -u override --env=XCURSOR_PATH=~/.icons
  +
  +
場合によっては、環境変数 {{ic|XCURSOR_THEME}} および {{ic|XCURSOR_SIZE}} をオーバーライドする必要があるかもしれません:
  +
  +
$ flatpak -u override --env=XCURSOR_THEME=Adwaita
  +
$ flatpak -u override --env=XCURSOR_SIZE=24
  +
  +
詳細については、[https://github.com/flatpak/flatpak/issues/709 このディスカッション] を参照してください。
   
 
== 参照 ==
 
== 参照 ==
   
* [http://flatpak.org 公式ウェブサイト]
+
* [https://flatpak.org 公式ウェブサイト]
  +
* [https://docs.flatpak.org/en/latest/index.html ドキュメント]
 
* [https://github.com/flatpak/flatpak/wiki 公式 Github wiki]
 
* [https://github.com/flatpak/flatpak/wiki 公式 Github wiki]
* [[Wikipedia:Flatpak]]
+
* [[Wikipedia:ja:Flatpak]]
 
* [https://wiki.gnome.org/Projects/SandboxedApps Gnome SandboxedApps]
 
* [https://wiki.gnome.org/Projects/SandboxedApps Gnome SandboxedApps]
 
* [https://community.kde.org/Guidelines_and_HOWTOs/Flatpak KDE Testing Runtime and Applications]
 
* [https://community.kde.org/Guidelines_and_HOWTOs/Flatpak KDE Testing Runtime and Applications]
  +
  +
{{TranslationStatus|Flatpak|2023-07-22|780745}}

2023年12月16日 (土) 09:07時点における最新版

関連記事

プロジェクトの README より:

Flatpak は Linux 上でサンドボックス化したデスクトップアプリケーションをビルド・配布・実行するためのシステムです。

flatpak(1) より:

Flatpak はアプリケーションとランタイムを管理するためのツールです。Flatpak モデルでは、アプリケーションをホスト環境とは独立してビルド・配布することができます。アプリケーションは実行時にホスト環境から隔離 (サンドボックス化) されます。
Flatpak は OSTree を使用してデータを配布・デプロイします。Flatpak のリポジトリは OSTree のリポジトリであり、ostree ユーティリティによって操作することが可能です。ランタイムやアプリケーションのインストールは OSTree のチェックアウトと同じです。
警告:
  • Flathub で入手できる Flatpak アプリケーションの多くは、デフォルトで効果的にサンドボックス化されていません [1]。提供されるプロセス隔離機能に頼りっきりにならずに、関連する flatpak パーミッションマニフェストに一般的なサンドボックス回避の問題がないか確認してください。
  • サンドボックス化されていても、信頼できないコードを実行することは安全ではありません。

目次

インストール

flatpak パッケージをインストールしてください。flatpak をビルドしたい場合は、flatpak-builder もインストールして下さい。

デスクトップとの統合

flatpak アプリケーションがデスクトップと対話する (つまり、アプリケーションが URL を開いたり、画面を共有したりする) ためには、xdg-desktop-portal を必ずセットアップしてください。デスクトップの実装によっては、アプリケーションがいくつかのポータルにアクセスする前に確認ダイアログが表示されます。

アプリケーション管理

  • Discover — KDE の Flatpak フロントエンド。アプリケーション、ゲーム、そしてツールの検索とインストールを助けます。plasma の一部です。
https://apps.kde.org/discover/ || discover
  • GNOME Software — GNOME の Flatpak フロントエンド。アプリケーションとシステム拡張機能のインストールとアップデートができます。gnome の一部です。
https://wiki.gnome.org/Apps/Software || gnome-software

パーミッション管理

  • Flatpak Permissions Management KCM — インストールされた Flatpak アプリケーションに与えられたパーミッションを変更することができる KDE Configuration Module (設定モジュール)。plasma の一部です。
https://invent.kde.org/plasma/flatpak-kcm || flatpak-kcm
  • Flatseal — Flatpak アプリケーションのパーミッションを確認したり変更したりするためのグラフィカルユーティリティ。
https://github.com/tchx84/Flatseal || flatsealAUR
  • malcontent (ペアレンタルコントロール) — 非管理者アカウントからアクセス可能なコンテンツのタイプを制限するサポートを実装しています。gnome の一部です。
https://gitlab.freedesktop.org/pwithnall/malcontent || malcontent

リポジトリの管理

ノート: デフォルトでは、すべての flatpak コマンドはシステム全体で機能します。つまり、パッケージはコンピュータ内のすべてのユーザーにインストールされ、flatpak はユーザーに root のパスワードの入力を要求します。パッケージをインストールし、 (スーパーユーザー権限を必要とせずに) 単一のユーザーでリポジトリを操作するには、オプション --user を各コマンドに追加します。たとえば、自分だけに表示されるリポジトリを追加したい場合は、$ flatpak remote-add --user name location を実行する必要があります。自分だけが表示できるパッケージをインストールするには、$ flatpak install --user package-name を実行します。

リポジトリの追加

リモートの flatpak リポジトリを追加するには次のコマンドを実行:

$ flatpak remote-add name location

name は新しいリモートリポジトリの名前、location はリポジトリのパスあるいは URL に置き換えてください。

デフォルトでは、flatpak のインストール時に Flathub リポジトリがシステム全体に追加されます。ユーザ毎の設定で公式のリポジトリを追加するには:

$ flatpak remote-add --if-not-exists --user flathub https://dl.flathub.org/repo/flathub.flatpakrepo

リポジトリの削除

リモートの flatpak リポジトリを削除するには次のコマンドを実行:

$ flatpak remote-delete name

name は削除したいリモートリポジトリの名前に置き換えてください。

リポジトリの一覧表示

追加されたすべてのリポジトリの一覧を表示するには、次のようにします:

$ flatpak remotes

ランタイムとアプリケーションの管理

リモートのランタイムやアプリケーションの検索

新しく追加したリモートリポジトリのランタイムやアプリケーションを検索するには、リポジトリの appstream データを取得する必要があります:

$ flatpak update
Looking for updates...
Updating appstream data for remote name

取得したら flatpak search packagename でパッケージを検索できます。例えば flathub リモートリポジトリの libreoffice パッケージを探すには:

$ flatpak search libreoffice
Application ID              Version Branch Remotes Description                       
org.libreoffice.LibreOffice         stable flathub The LibreOffice productivity suite

利用可能なランタイムとアプリケーションの確認

remote という名前のリモートリポジトリに存在するランタイムとアプリケーションを確認するには:

$ flatpak remote-ls remote

ランタイムやアプリケーションのインストール

ランタイムやアプリケーションをインストールするには:

$ flatpak install remote name

remote はリモートリポジトリの名前に、name はインストールしたいアプリケーションやランタイムの名前に置き換えてください。

ヒント: 識別子の一部のみ flatpak install partial-name を指定することもできます (例えば、flatpak install libreoffice)。

インストールされたランタイムとアプリケーションの確認

インストールされたランタイムとアプリケーションを確認するには:

$ flatpak list

アプリケーションの実行

バイナリは /var/lib/flatpak/exports/bin にあります。このパスは /etc/profile.d/flatpak-bindir.sh によって自動的に $PATH に追加されます。パスの変更を適用するには再ログインする必要がある場合があります。

Flatpak アプリケーションはコマンドラインから実行することもできます:

$ flatpak run name

ランタイムやアプリケーションのアップデート

name という名前のランタイムあるいはアプリケーションをアップデートするには:

$ flatpak update name

systemd による自動アップデート

警告: 一般に、systemd を通して自動的にアップデートを実行することは良いアイデアではありません。ユーザに知られずにアプリケーションに新しいパーミッションが追加される可能性があるからです。

システムのランタイムとアプリケーションを自動的にアップデートするには、以下のファイルを作成してください:

/etc/systemd/user/flatpak-update.service
[Unit]
Description=Update Flatpak
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/bin/flatpak update --noninteractive --assumeyes

[Install]
WantedBy=multi-user.target
/etc/systemd/user/flatpak-update.timer
[Unit]
Description=Update Flatpak

[Timer]
OnBootSec=2m
OnActiveSec=2m
OnUnitInactiveSec=24h
OnUnitActiveSec=24h
AccuracySec=1h
RandomizedDelaySec=10m

[Install]
WantedBy=timers.target

その後、daemon-reload を実行するか、flatpak-update.timer ユーザーユニット起動/有効化してください。

ノート:
  • このガイドは、flatpak のデフォルトである、flatpak のシステムインストール用です。flatpak のユーザインストールの場合は:
    • /etc/systemd/system/ ディレクトリ内に上記のファイルを作成してください。
    • flatpak-update.service 内の ExecStart 行に --user フラグを追加してください
    • systemctl コマンドは --user 無しで実行してください。

ランタイムやアプリケーションのアンインストール

name という名前のランタイムやアプリケーションをアンインストールするには:

$ flatpak uninstall name

アンインストール時に ~/.var/app とパーミッションストアのアプリデータを削除するには:

$ flatpak uninstall --delete-data name
ヒント: flatpak uninstall --unused とすると、未使用の flatpak "refs" (どのアプリケーション/ランタイムからも参照されていない孤児) をアンインストールできます。

ランタイムやアプリケーションをダウングレードする

ランタイムやアプリケーションをダウングレードするには、まず、関連するコミット ID を探します:

$ flatpak remote-info --log remote name

ここで、remote はリポジトリ (flathub など)、name はアプリケーションまたはランタイムの名前です。そして、コミットをデプロイします:

$ flatpak update --commit=commit name

ここで、commit は希望するバージョンのコミット、name は前と同じです。

この手順は、パッケージを最新版でない希望のバージョンに選択的にアップグレードするのにも使えます。

このパッケージのアップデートを flatpak update から除外するには、#ランタイムやアプリケーションの更新を防止する を参照してください。

ランタイムやアプリケーションの更新を防止する

ランタイムまたはアプリケーションへの自動および手動更新を防止するには、flatpak mask コマンドを使用します:

$ flatpak mask name

これにより、選択的なアップグレードとダウングレードも防止されます。

マスクを元に戻し、更新を再度有効にするには、flatpak mask --remove を使用します:

$ flatpak mask --remove name

Flatpak の .desktop ファイルをメニューに追加

Flatpak は、ウィンドウマネージャが、アプリケーションを見つけるための XDG_DATA_DIRS 環境変数を尊重することを期待します。この変数は /etc/profile.d/flatpak.sh によって設定されます。この環境変数を更新するには、セッションの再起動が必要になる場合があります。ランチャーが XDG_DATA_DIRS をサポートしていない場合、スキャンされるディレクトリのリストを編集し、そのリストに以下のディレクトリを追加することができます:

~/.local/share/flatpak/exports/share/applications
/var/lib/flatpak/exports/share/applications

これは、Awesome において必須であることが知られています。

ノート: このスクリプトは、デフォルトのシェルが Fish に設定されている場合、機能しません。この問題は、fish-shell の issue 7485 にあるコメントで言及されている回避策を使用することにより、修正できます。

アプリケーションのサンドボックス権限を表示する

Flatpak のアプリケーションには、あらかじめサンドボックスのルールが設定されており、アプリケーションがアクセスできるリソースやファイルシステムのパスが定義されています。 特定のアプリケーションのアクセス権を表示するには、次のようにします:

$ flatpak info --show-permissions name

サンドボックスのパーミッション名のリファレンスは、公式の flatpak ドキュメントにあります。

サンドボックスでのアプリケーションの権限を上書き

アプリケーションの事前定義されているパーミッションが寛容すぎたり厳しすぎたりする場合、flatpak override コマンドを使って変更することができます。 例えば:

flatpak override --nofilesystem=home name

これにより、アプリケーションがホームディレクトリにアクセスできなくなります。

デバイスやファイルシステム、ソケットといった全ての種類のパーミッションには、特定のパーミッションを許可するコマンドラインオプションと、パーミッションを拒否する別のオプションがあります。例えば、デバイスアクセスの場合は --device=device_name でアクセスを許可し、--nodevice=device_name でデバイスへのアクセスパーミッションを拒否します。

パーミッションの全ての種類は、マニュアルページを参照してください: flatpak-override(1)

パーミッションの上書きは以下のコマンドでデフォルトにリセットできます:

$ flatpak override --reset name

Flatseal は GUI のパーミッションマネージャです。マウスで簡単にパーミッションの操作を行うことができます。KDE Plasma では、Flatpak Permissions Management KCM が KDE システム設定アプリケーションに似たような GUI を提供します: KDE システム設定 > アプリケーション > Flatpak Permission Settings

カスタムベースランタイムの作成

警告: あなたのソフトウェアを Flatpak として公開したい場合、Arch ベースのランタイムを使うことは相応しくありません。そのような場合は公式ドキュメントに従って共通ランタイムを使用して Flatpak エコシステムに適合させると良いでしょう。
ノート:
  • アプリやランタイムを作成するときはソフトウェアはサンドボックス化されないため、信頼されていないソフトウェアをバンドルする際は、信頼されていない非特権ユーザアカウントを使用すると良いかもしれません。
  • バンドルを配布する場合、バンドルしたソフトウェアのソースコードを要求に応じて提供する法的な義務を負います。ABS を使ってソースからパッケージをビルドすると良いかもしれません。

Pacman を使って、カスタムの Arch ベースのベースランタイムとベース SDK を作成することができます。そして、それを使ってアプリケーションをビルドしてパッケージングすることができます。これは個人的な使用でデフォルトの org.freedesktop.BasePlatformorg.freedesktop.BaseSdk ランタイムの代わりとなります。

flatpak だけでなく、fakeroot のインストールが必要です。また、pacman フックを使うには fakechroot も必要です。

まずは、ランタイムやアプリケーションをビルドするためのディレクトリを作成してください:

$ mkdir myflatpakbuilddir
$ cd myflatpakbuilddir

次に、ランタイムベースプラットフォームをビルドするためのディレクトリを用意します。サブディレクトリには、後にサンドボックス内の /usr ディレクトリとなるものが含まれます。なので、Arch のデフォルトの /usr/share などが通常のパスでアクセスできるようにするために、シンボリックリンクを作成する必要があります。

$ mkdir -p myruntime/files/var/lib/pacman
$ touch myruntime/files/.ref
$ ln -s /usr/usr/share myruntime/files/share
$ ln -s /usr/usr/include myruntime/files/include
$ ln -s /usr/usr/local myruntime/files/local

ホスト OS のフォントが Arch ランタイムから利用できるようにしてください:

$ mkdir -p myruntime/files/usr/share/fonts
$ ln -s /run/host/fonts myruntime/files/usr/share/fonts/flatpakhostfonts

ランタイムにパッケージをインストールする前に pacman.conf を編集する必要があります。/etc/pacman.conf をビルドディレクトリにコピーして以下の変更を行ってください:

  • CheckSpace オプションを削除して pacman によってルートファイルシステムに関するエラーが表示されないようにしてください。
  • 望ましくないカスタムリポジトリと、ホストシステムのみにおいて必要な IgnorePkgIgnoreGroupNoUpgrade、そして NoExtract の設定を削除してください。

そして、ランタイムにパッケージをインストールしてください。

$ fakechroot fakeroot pacman -Syu --root myruntime/files --dbpath myruntime/files/var/lib/pacman --config pacman.conf base
$ mv pacman.conf myruntime/files/etc/pacman.conf

myruntime/files/etc/locale.gen を編集して、使用するロケールを設定してください。その後ランタイムのロケールを再生成してください:

$ fakechroot chroot myruntime/files locale-gen

パッケージをビルドしたり pacman を実行するのに必要なアプリケーションを追加することでベースランタイムからベース SDK を作成できます:

$ cp -r myruntime mysdk
$ fakechroot fakeroot pacman -S --root mysdk/files --dbpath mysdk/files/var/lib/pacman --config mysdk/files/etc/pacman.conf base-devel fakeroot fakechroot --needed

ランタイムと SDK についてのメタデータを追加してください:

myruntime/metadata
[Runtime]
name=org.mydomain.BasePlatform
runtime=org.mydomain.BasePlatform/x86_64/2016-06-26
sdk=org.mydomain.BaseSdk/x86_64/2016-06-26
mysdk/metadata
[Runtime]
name=org.mydomain.BaseSdk
runtime=org.mydomain.BasePlatform/x86_64/2016-06-26
sdk=org.mydomain.BaseSdk/x86_64/2016-06-26

カレントディレクトリのローカルリポジトリにベースランタイムと SDK を追加してください。“My Arch base runtime” や “My Arch base SDK” などの適当なコミットメッセージを使用すると良いでしょう。

$ ostree init --mode archive-z2 --repo=.
$ EDITOR="nano -w" ostree commit -b runtime/org.mydomain.BasePlatform/x86_64/2016-06-26 --tree=dir=myruntime
$ EDITOR="nano -w" ostree commit -b runtime/org.mydomain.BaseSdk/x86_64/2016-06-26 --tree=dir=mysdk
$ ostree summary -u

ランタイムと SDK をインストールしてください:

$ flatpak remote-add --user --no-gpg-verify myarchos file://$(pwd)
$ flatpak install --user myarchos org.mydomain.BasePlatform 2016-06-26
$ flatpak install --user myarchos org.mydomain.BaseSdk 2016-06-26

pacman でアプリを作成

通常の方法でアプリケーションをビルドする代わりに、pacman を使って通常の Arch パッケージのコンテナ化バージョンを作成することができます。アプリを作成する際、/usr は読み込み専用であるため、アプリをビルドするときに Arch のパッケージを使うことはできません。Pacman で実際のアプリを作成するには:

  • pacman を使って依存パッケージを全て含んだランタイムを作成する。
  • そして、通常の方法でアプリをコンパイルするか、configure スクリプトで --prefix=/app を使用するように Flatpak 向けにカスタマイズした PKGBUILD を使う。

あるいは:

  • pacman を使って pacman でインストールしたアプリを含むランタイムを作成する
  • アプリを起動するためのダミーアプリを作成する。

後者の場合、まずは以下のように pacman を使ってランタイムを作成します (例として gedit をコンテナ化します)。ランタイムは pacman を使って初期化し準備します。

$ flatpak build-init -w geditruntime org.mydomain.geditruntime org.mydomain.BaseSdk org.mydomain.BasePlatform 2016-06-26
$ flatpak build geditruntime sed -i "s/^#Server/Server/g" /etc/pacman.d/mirrorlist
$ flatpak build geditruntime ln -s /usr/var/lib /var/lib
$ flatpak build geditruntime fakeroot pacman-key --init
$ flatpak build geditruntime fakeroot pacman-key --populate

これで、パッケージがインストールされました。ホストのネットワーク接続が pacman から利用できるようにしなければなりません:

$ flatpak build --share=network geditruntime fakechroot fakeroot pacman --root /usr -S gedit

ランタイムを完成させる前にインストールをテストすることができます (適切なサンドボックス化をせずに):

$ flatpak build --socket=x11 geditruntime gedit

ランタイムをビルドを完了して新しいローカルリポジトリにエクスポートしてください。Pacman の GnuPG 鍵のパーミッションが干渉する可能性があるため先に削除する必要があります。

$ flatpak build geditruntime rm -r /etc/pacman.d/gnupg
$ flatpak build-finish geditruntime
$ sed -i "s/\[Application\]/\[Runtime\]/;s/runtime=org.mydomain.BasePlatform/runtime=org.mydomain.geditruntime/" geditruntime/metadata
$ flatpak build-export -r geditrepo geditruntime

そして、ダミーアプリを作成してください:

$ flatpak build-init geditapp org.gnome.gedit org.mydomain.BaseSdk org.mydomain.geditruntime

ビルドを完了するときに指定するオプションで、サンドボックス化されたときのアプリのアクセス権限を調整することができます。利用可能なオプションは Flatpak のドキュメントGNOME のマニフェストファイルを見てください。また、ビルドが完了した後、エクスポートする前に必要に応じて geditapp/metadata を編集する方法もあります。メタデータファイルが完成したら、リポジトリにアプリをエクスポートしてください。

$ flatpak build-finish geditapp --socket=x11 [possibly other options] --command=gedit
$ flatpak build-export geditrepo geditapp

ランタイムを使ってアプリをインストールしてください:

$ flatpak --user remote-add --no-gpg-verify geditrepo geditrepo
$ flatpak install --user geditrepo org.mydomain.geditruntime
$ flatpak install --user geditrepo org.gnome.gedit
$ flatpak run org.gnome.gedit

トラブルシューティング

Flatpak は linux-hardened カーネルでは実行できません

linux-hardened カーネルでは kernel.unprivileged_userns_clone0 に設定されており、特権ユーザのみが新しいユーザ名前空間を作成できます。

これを修正する一つの方法は、bubblewrap-suidインストールすることです.このパッケージは bwrap(1)setuid ビットを有効にして、bubblewrap が自分自身を昇格させて新しい名前空間を作成できるようにしたバージョンを提供します。

また、sysctl(8) を使って kernel.unprivileged_userns_clone1 に設定して、非特権ユーザーが新しいユーザーネームスペースを作成できるようにすることも可能です:

# sysctl kernel.unprivileged_userns_clone=1
警告: このカーネルパラメータ値を使用すると、セキュリティ上マイナスの影響があります。詳しくは セキュリティ#アプリケーションのサンドボックス化 をご覧ください。

この変更を再起動後も維持するには、設定ファイルを sysctl.d(5) に追加します。

/etc/sysctl.d/flatpak.conf
kernel.unprivileged_userns_clone=1

詳細については、Bubblewrap#インストール の注記を参照してください。

xdg-desktop-portal が起動しない

手動で設定された実行コマンドで X を起動する場合、`xinitrc` リファレンスのすべての重要な構成要素を含んでいることを確認してください。そのうちの1つは、D-Bus セッションサービスに使用される環境のアップデートを実行するスクリプトをソースとしています。

systemctl --user import-environment DISPLAY XAUTHORITY
if command -v dbus-update-activation-environment >/dev/null 2>&1; then
   dbus-update-activation-environment DISPLAY XAUTHORITY
fi

Flatpak アプリケーションがデフォルトのシステムテーマを選択しない

Flatpak のドキュメントに記載されているように、flatpak アプリにシステムテーマを適用する理想的な方法はありません。[2] [3] しかし、flatpak アプリにテーマを適用させるための回避策があります

Firefox でローカル HTML ページを開くと "ファイルが見つかりません" というエラーが表示される

Flatpak 版 Firefox のデフォルトでは、ローカルの HTML を開くと "File not found" エラーページが表示されます。これは、そのファイルを含むフォルダにアクセスするためのパーミッションをアプリに付与しなければならないからです。

ただし、ホームフォルダ全体へのアクセス許可を与えると、Firefox は ~/.mozilla に既存のプロファイルをチェックし、サンドボックス化されたフォルダ ~/.var/app/org.mozilla.firefox/cache/mozilla/ から以前に使用したプロファイルの代わりにロードすることに注意ください。(Flatseal などで) パーミッションを変更した後に前のセッションのタブや閲覧履歴がなくなった場合は、~/.mozilla へのアクセスを除外するようにパーミッションを変更するか、~/.var/app/org.mozilla.firefox/cache/mozilla/ から ~/.mozilla へのプロファイルコピーを検討して下さい。

wlroots ベースのコンポジターでリンクを開くことができない

Flatpak アプリケーションは、URI を開こうとした際に xdg-desktop-portal によって公開されている org.freedesktop.portal.OpenURI.OpenURI D-Bus インターフェイスを使用します。xdg-desktop-portal-wlr バックエンド はこの呼び出しをサポートしていないため、この問題を解決するには xdg-desktop-portal-gtk などの追加のバックエンドが必要になります。

アプリケーションが正しいカーソルテーマを使用しない

カーソルを適切に設定するための唯一の標準はありません。カーソルディレクトリへの読み取りアクセスだけが必要なプログラムもあれば、他のメカニズムに依存するプログラムもあります。しかし、以下のオーバーライドは、ほとんどの一般的なデスクトップアプリケーションで機能するはずです。

$ flatpak -u override --filesystem=/usr/share/icons/:ro
$ flatpak -u override --filesystem=/home/$USER/.icons/:ro 
$ flatpak -u override --filesystem=xdg-config/gtk-3.0:ro
$ flatpak -u override --env=XCURSOR_PATH=~/.icons

場合によっては、環境変数 XCURSOR_THEME および XCURSOR_SIZE をオーバーライドする必要があるかもしれません:

$ flatpak -u override --env=XCURSOR_THEME=Adwaita
$ flatpak -u override --env=XCURSOR_SIZE=24

詳細については、このディスカッション を参照してください。

参照

翻訳ステータス: このページは en:Flatpak の翻訳バージョンです。最後の翻訳日は 2023-07-22 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。