「Flatpak」の版間の差分
(→ランタイムとアプリケーションの管理: ランタイムまたはアプリケーションをダウングレードするを翻訳して追加) |
(序文の翻訳を修正) |
||
(3人の利用者による、間の20版が非表示) | |||
1行目: | 1行目: | ||
[[Category:開発]] |
[[Category:開発]] |
||
+ | [[de:Flatpak]] |
||
[[en:Flatpak]] |
[[en:Flatpak]] |
||
[[es:Flatpak]] |
[[es:Flatpak]] |
||
+ | [[pt:Flatpak]] |
||
+ | [[zh-hans:Flatpak]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|Snapd}} |
{{Related|Snapd}} |
||
11行目: | 14行目: | ||
{{man|1|flatpak}} より: |
{{man|1|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| |
+ | {{Warning| |
− | * |
+ | * [https://flathub.org/home Flathub] で入手できる Flatpak アプリケーションの多くは、デフォルトで効果的にサンドボックス化されていません [https://hanako.codeberg.page/]。提供されるプロセス隔離機能に頼りっきりにならずに、関連する flatpak パーミッションマニフェストに一般的なサンドボックス回避の問題がないか確認してください。 |
− | * 信頼できないコードを実行することは |
+ | * サンドボックス化されていても、信頼できないコードを実行することは安全ではありません。 |
+ | }} |
||
== インストール == |
== インストール == |
||
− | {{pkg|flatpak}} パッケージを[[インストール]]してください。 |
+ | {{pkg|flatpak}} パッケージを[[インストール]]してください。flatpak をビルドしたい場合は、{{pkg|flatpak-builder}} もインストールして下さい。 |
+ | |||
+ | === デスクトップとの統合 === |
||
+ | |||
+ | 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}}}} |
||
− | {{Note|{{ic|flatpak-builder}} で flatpak をビルドしたい場合、{{pkg|elfutils}} と {{pkg|patch}} もインストールする必要があります。}} |
||
+ | * {{App|Flatseal|Flatpak アプリケーションのパーミッションを確認したり変更したりするためのグラフィカルユーティリティ。|https://github.com/tchx84/Flatseal|{{AUR|flatseal}}}} |
||
+ | * {{App|malcontent (ペアレンタルコントロール)|非管理者アカウントからアクセス可能なコンテンツのタイプを制限するサポートを実装しています。{{Grp|gnome}} の一部です。|https://gitlab.freedesktop.org/pwithnall/malcontent|{{Pkg|malcontent}}}} |
||
== リポジトリの管理 == |
== リポジトリの管理 == |
||
36行目: | 53行目: | ||
''name'' は新しいリモートリポジトリの名前、''location'' はリポジトリのパスあるいは URL に置き換えてください。 |
''name'' は新しいリモートリポジトリの名前、''location'' はリポジトリのパスあるいは URL に置き換えてください。 |
||
− | + | デフォルトでは、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> |
=== リポジトリの削除 === |
=== リポジトリの削除 === |
||
50行目: | 67行目: | ||
=== リポジトリの一覧表示 === |
=== リポジトリの一覧表示 === |
||
− | 追加されたすべてのリポジトリの一覧を表示するには、次のようにします |
+ | 追加されたすべてのリポジトリの一覧を表示するには、次のようにします: |
$ flatpak remotes |
$ flatpak remotes |
||
65行目: | 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| |
||
74行目: | 91行目: | ||
=== 利用可能なランタイムとアプリケーションの確認 === |
=== 利用可能なランタイムとアプリケーションの確認 === |
||
− | ''remote'' という名前のリモートリポジトリに存在するランタイムとアプリケーションを確認するには |
+ | ''remote'' という名前のリモートリポジトリに存在するランタイムとアプリケーションを確認するには: |
$ flatpak remote-ls ''remote'' |
$ flatpak remote-ls ''remote'' |
||
80行目: | 97行目: | ||
=== ランタイムやアプリケーションのインストール === |
=== ランタイムやアプリケーションのインストール === |
||
− | ランタイムやアプリケーションをインストールするには |
+ | ランタイムやアプリケーションをインストールするには: |
$ flatpak install ''remote'' ''name'' |
$ flatpak install ''remote'' ''name'' |
||
86行目: | 103行目: | ||
''remote'' はリモートリポジトリの名前に、''name'' はインストールしたいアプリケーションやランタイムの名前に置き換えてください。 |
''remote'' はリモートリポジトリの名前に、''name'' はインストールしたいアプリケーションやランタイムの名前に置き換えてください。 |
||
− | {{Tip|識別子の一部のみを指定することもできます |
+ | {{Tip|識別子の一部のみ {{ic|flatpak install ''partial-name''}} を指定することもできます (例えば、{{ic|flatpak install libreoffice}})。}} |
− | === インストールされたランタイム |
+ | === インストールされたランタイムとアプリケーションの確認 === |
− | インストールされたランタイム |
+ | インストールされたランタイムとアプリケーションを確認するには: |
$ flatpak list |
$ flatpak list |
||
96行目: | 113行目: | ||
=== アプリケーションの実行 === |
=== アプリケーションの実行 === |
||
+ | バイナリは {{ic|/var/lib/flatpak/exports/bin}} にあります。このパスは {{ic|/etc/profile.d/flatpak-bindir.sh}} によって自動的に $PATH に追加されます。パスの変更を適用するには再ログインする必要がある場合があります。 |
||
− | Flatpak アプリケーションはコマンドラインから起動することもできます: |
||
+ | |||
+ | Flatpak アプリケーションはコマンドラインから実行することもできます: |
||
$ flatpak run ''name'' |
$ flatpak run ''name'' |
||
102行目: | 121行目: | ||
=== ランタイムやアプリケーションのアップデート === |
=== ランタイムやアプリケーションのアップデート === |
||
− | ''name'' という名前のランタイムあるいはアプリケーションをアップデートするには |
+ | ''name'' という名前のランタイムあるいはアプリケーションをアップデートするには: |
$ flatpak update ''name'' |
$ flatpak update ''name'' |
||
108行目: | 127行目: | ||
==== systemd による自動アップデート ==== |
==== systemd による自動アップデート ==== |
||
+ | {{Warning|一般に、systemd を通して自動的にアップデートを実行することは良いアイデアではありません。ユーザに知られずにアプリケーションに新しいパーミッションが追加される可能性があるからです。}} |
||
− | システムのランタイムやアプリケーションを自動的に更新するには、以下のファイルを作成します。 |
||
+ | システムのランタイムとアプリケーションを自動的にアップデートするには、以下のファイルを作成してください: |
||
− | {{hc|/etc/systemd/system/flatpak-update.service|2= |
||
+ | |||
+ | {{hc|/etc/systemd/user/flatpak-update.service|2= |
||
[Unit] |
[Unit] |
||
Description=Update Flatpak |
Description=Update Flatpak |
||
119行目: | 140行目: | ||
Type=oneshot |
Type=oneshot |
||
ExecStart=/usr/bin/flatpak update --noninteractive --assumeyes |
ExecStart=/usr/bin/flatpak update --noninteractive --assumeyes |
||
− | |||
− | AmbientCapabilities= |
||
− | CapabilityBoundingSet=CAP_SYS_ADMIN CAP_NET_ADMIN |
||
− | DevicePolicy=closed |
||
− | InaccessibleDirectories=/home |
||
− | LockPersonality=true |
||
− | MemoryDenyWriteExecute=true |
||
− | NoNewPrivileges=true |
||
− | PrivateDevices=true |
||
− | PrivateIPC=true |
||
− | PrivateTmp=true |
||
− | PrivateUsers=true |
||
− | ProcSubset=all |
||
− | ProtectClock=true |
||
− | ProtectControlGroups=true |
||
− | ProtectHostname=true |
||
− | ProtectKernelLogs=true |
||
− | ProtectKernelModules=true |
||
− | ProtectKernelTunables=true |
||
− | ProtectProc=invisible |
||
− | ProtectSystem=strict |
||
− | ReadOnlyDirectories=/ |
||
− | ReadWriteDirectories=/var/lib/flatpak/ |
||
− | ReadWriteDirectories=/root/.local/share/flatpak/ |
||
− | RemoveIPC=true |
||
− | RestrictAddressFamilies=AF_INET AF_INET6 AF_NETLINK AF_UNIX |
||
− | RestrictRealtime=true |
||
− | RestrictSUIDSGID=true |
||
− | SystemCallArchitectures=native |
||
− | SystemCallFilter=~@clock |
||
− | SystemCallFilter=~@debug |
||
− | SystemCallFilter=~@module |
||
− | SystemCallFilter=~@raw-io |
||
− | SystemCallFilter=~@reboot |
||
− | SystemCallFilter=~@swap |
||
− | SystemCallFilter=~@cpu-emulation |
||
− | SystemCallFilter=~@obsolete |
||
− | UMask=0077 |
||
[Install] |
[Install] |
||
162行目: | 145行目: | ||
}} |
}} |
||
− | {{hc|/etc/systemd/ |
+ | {{hc|/etc/systemd/user/flatpak-update.timer|2= |
[Unit] |
[Unit] |
||
Description=Update Flatpak |
Description=Update Flatpak |
||
178行目: | 161行目: | ||
}} |
}} |
||
+ | その後、[[daemon-reload]] を実行するか、{{ic|flatpak-update.timer}} [[ユーザーユニット]]を[[起動/有効化]]してください。 |
||
− | systemdのタイマーを有効にするために、実行します。 |
||
+ | {{Note| |
||
− | $ systemctl enable --now flatpak-update.timer |
||
+ | * このガイドは、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}} とパーミッションストアのアプリデータを削除するには: |
||
− | {{Tip|{{ic|flatpak uninstall --unused}} とすると、どのアプリケーションやランタイムでも使用されていない "refs" をアンインストールできます。}} |
||
+ | $ flatpak uninstall --delete-data ''name'' |
||
− | === ランタイムまたはアプリケーションをダウングレードする === |
||
+ | {{Tip|{{ic|flatpak uninstall --unused}} とすると、未使用の flatpak "refs" (どのアプリケーション/ランタイムからも参照されていない孤児) をアンインストールできます。}} |
||
− | ランタイムやアプリケーションをダウングレードするには、まず、関連するコミット ID を探します。 |
||
+ | |||
+ | === ランタイムやアプリケーションをダウングレードする === |
||
+ | |||
+ | ランタイムやアプリケーションをダウングレードするには、まず、関連するコミット ID を探します: |
||
$ flatpak remote-info --log ''remote'' ''name'' |
$ flatpak remote-info --log ''remote'' ''name'' |
||
− | ここで、''remote'' はリポジトリ (flathub など)、''name'' はアプリケーションまたはランタイムの名前です。そして、コミットをデプロイします |
+ | ここで、''remote'' はリポジトリ (flathub など)、''name'' はアプリケーションまたはランタイムの名前です。そして、コミットをデプロイします: |
$ flatpak update --commit=''commit'' ''name'' |
$ flatpak update --commit=''commit'' ''name'' |
||
+ | |||
− | |||
− | ここで、''commit'' は希望するバージョンのコミット、 |
+ | ここで、''commit'' は希望するバージョンのコミット、''name'' は前と同じです。 |
この手順は、パッケージを最新版でない希望のバージョンに選択的にアップグレードするのにも使えます。 |
この手順は、パッケージを最新版でない希望のバージョンに選択的にアップグレードするのにも使えます。 |
||
− | このパッケージのアップデートを {{ic|flatpak update}} から除外するには、[[ |
+ | このパッケージのアップデートを {{ic|flatpak update}} から除外するには、[[#ランタイムやアプリケーションの更新を防止する]] を参照してください。 |
+ | |||
+ | === ランタイムやアプリケーションの更新を防止する === |
||
+ | |||
+ | ランタイムまたはアプリケーションへの自動および手動更新を防止するには、{{ic|flatpak mask}} コマンドを使用します: |
||
+ | |||
+ | $ flatpak mask ''name'' |
||
+ | |||
+ | これにより、選択的なアップグレードとダウングレードも防止されます。 |
||
+ | |||
+ | マスクを元に戻し、更新を再度有効にするには、{{ic|flatpak mask --remove}} を使用します: |
||
+ | |||
+ | $ flatpak mask --remove ''name'' |
||
=== Flatpak の .desktop ファイルをメニューに追加 === |
=== Flatpak の .desktop ファイルをメニューに追加 === |
||
− | Flatpak |
+ | 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]] において必須であることが知られています。 |
|
+ | |||
+ | {{Note|このスクリプトは、デフォルトのシェルが [[Fish]] に設定されている場合、機能しません。この問題は、[https://github.com/fish-shell/fish-shell/issues/7485#issuecomment-728984689 fish-shell の issue 7485 にあるコメント]で言及されている回避策を使用することにより、修正できます。}} |
||
=== アプリケーションのサンドボックス権限を表示する === |
=== アプリケーションのサンドボックス権限を表示する === |
||
Flatpak のアプリケーションには、あらかじめサンドボックスのルールが設定されており、アプリケーションがアクセスできるリソースやファイルシステムのパスが定義されています。 |
Flatpak のアプリケーションには、あらかじめサンドボックスのルールが設定されており、アプリケーションがアクセスできるリソースやファイルシステムのパスが定義されています。 |
||
− | 特定のアプリケーションのアクセス権を表示するには、次のようにします |
+ | 特定のアプリケーションのアクセス権を表示するには、次のようにします: |
+ | |||
$ flatpak info --show-permissions ''name'' |
$ flatpak info --show-permissions ''name'' |
||
+ | |||
− | サンドボックスのパーミッション名のリファレンスは、[https://docs.flatpak.org/en/latest/sandbox-permissions-reference.html オフィシャル flatpak ドキュメント] にあります。 |
||
+ | サンドボックスのパーミッション名のリファレンスは、[https://docs.flatpak.org/en/latest/sandbox-permissions-reference.html 公式の flatpak ドキュメント]にあります。 |
||
=== サンドボックスでのアプリケーションの権限を上書き === |
=== サンドボックスでのアプリケーションの権限を上書き === |
||
+ | |||
− | 既定のアプリケーションの権限が寛容すぎたり厳しすぎる場合は、{{ic|flatpak override}} コマンドを利用して権限を書き換えられます。 |
||
+ | アプリケーションの事前定義されているパーミッションが寛容すぎたり厳しすぎたりする場合、{{ic|flatpak override}} コマンドを使って変更することができます。 |
||
− | 例: |
||
+ | 例えば: |
||
+ | |||
flatpak override --nofilesystem=home ''name'' |
flatpak override --nofilesystem=home ''name'' |
||
− | これにより、アプリケーションがホームディレクトリへアクセスできなくなります。 |
||
+ | これにより、アプリケーションがホームディレクトリにアクセスできなくなります。 |
||
− | デバイス、ファイルシステム、ソケットといった権限の種別ごとに、コマンドラインオプションで特定の権限を許可や拒否することができます。例えば、{{ic|1=--device=''device_name''}} とすると特定のデバイスへのアクセスを許可し、一方 {{ic|1=--nodevice=''device_name''}} とすると特定のデバイスへのアクセス権限を拒否します。 |
||
+ | デバイスやファイルシステム、ソケットといった全ての種類のパーミッションには、特定のパーミッションを許可するコマンドラインオプションと、パーミッションを拒否する別のオプションがあります。例えば、デバイスアクセスの場合は {{ic|1=--device=''device_name''}} でアクセスを許可し、{{ic|1=--nodevice=''device_name''}} でデバイスへのアクセスパーミッションを拒否します。 |
||
− | すべての設定については、マニュアルページを参照してください: {{man|1|flatpak-override}} |
||
+ | |||
+ | パーミッションの全ての種類は、マニュアルページを参照してください: {{man|1|flatpak-override}} |
||
+ | |||
+ | パーミッションの上書きは以下のコマンドでデフォルトにリセットできます: |
||
− | 次のコマンドを実行すると、上書きした設定をリセットし既定の権限に戻せます: |
||
$ flatpak override --reset ''name'' |
$ flatpak override --reset ''name'' |
||
+ | |||
+ | ''Flatseal'' は GUI のパーミッションマネージャです。マウスで簡単にパーミッションの操作を行うことができます。KDE Plasma では、''Flatpak Permissions Management KCM'' が KDE システム設定アプリケーションに似たような GUI を提供します: ''KDE システム設定 > アプリケーション > Flatpak Permission Settings''。 |
||
== カスタムベースランタイムの作成 == |
== カスタムベースランタイムの作成 == |
||
− | {{Warning|あなたのソフトウェアを Flatpak として公開したい場合、Arch ベースのランタイムを使うことは相応しくありません。そのような場合は |
+ | {{Warning|あなたのソフトウェアを Flatpak として公開したい場合、Arch ベースのランタイムを使うことは相応しくありません。そのような場合は[https://docs.flatpak.org 公式ドキュメント]に従って[https://flatpak.org/runtimes.html 共通ランタイム]を使用して Flatpak エコシステムに適合させると良いでしょう。}} |
{{Note| |
{{Note| |
||
− | * アプリやランタイムを作成するときはソフトウェアはサンドボックス化されないため、信 |
+ | * アプリやランタイムを作成するときはソフトウェアはサンドボックス化されないため、信頼されていないソフトウェアをバンドルする際は、信頼されていない非特権ユーザアカウントを使用すると良いかもしれません。 |
− | * バンドルを配布する場合、バンドルしたソフトウェアのソースコードを要求に応じて提供する法的な義務を負います。[[ABS]] を使ってソースからパッケージをビルドする |
+ | * バンドルを配布する場合、バンドルしたソフトウェアのソースコードを要求に応じて提供する法的な義務を負います。[[ABS]] を使ってソースからパッケージをビルドすると良いかもしれません。 |
+ | }} |
||
− | + | 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}} も必要です。 |
||
252行目: | 267行目: | ||
$ cd ''myflatpakbuilddir'' |
$ cd ''myflatpakbuilddir'' |
||
− | 次にランタイムベースプラットフォームをビルドするためのディレクトリを用意します。 |
+ | 次に、ランタイムベースプラットフォームをビルドするためのディレクトリを用意します。サブディレクトリには、後にサンドボックス内の {{ic|/usr}} ディレクトリとなるものが含まれます。なので、Arch のデフォルトの {{ic|/usr/share}} などが通常のパスでアクセスできるようにするために、シンボリックリンクを作成する必要があります。 |
$ mkdir -p ''myruntime''/files/var/lib/pacman |
$ mkdir -p ''myruntime''/files/var/lib/pacman |
||
260行目: | 275行目: | ||
$ ln -s /usr/usr/local ''myruntime''/files/local |
$ ln -s /usr/usr/local ''myruntime''/files/local |
||
− | Arch ランタイムから |
+ | ホスト OS のフォントが Arch ランタイムから利用できるようにしてください: |
$ mkdir -p ''myruntime''/files/usr/share/fonts |
$ mkdir -p ''myruntime''/files/usr/share/fonts |
||
268行目: | 283行目: | ||
* {{ic|CheckSpace}} オプションを削除して pacman によってルートファイルシステムに関するエラーが表示されないようにしてください。 |
* {{ic|CheckSpace}} オプションを削除して pacman によってルートファイルシステムに関するエラーが表示されないようにしてください。 |
||
− | * |
+ | * 望ましくないカスタムリポジトリと、ホストシステムのみにおいて必要な {{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 |
||
284行目: | 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= |
||
307行目: | 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) |
||
315行目: | 330行目: | ||
=== pacman でアプリを作成 === |
=== pacman でアプリを作成 === |
||
− | [ |
+ | [https://flatpak.org/developer.html 通常の方法]でアプリケーションをビルドする代わりに、pacman を使って通常の Arch パッケージのコンテナ化バージョンを作成することができます。アプリを作成する際、{{ic|/usr}} は読み込み専用であるため、アプリをビルドするときに Arch のパッケージを使うことはできません。Pacman で実際のアプリを作成するには: |
* pacman を使って依存パッケージを全て含んだランタイムを作成する。 |
* pacman を使って依存パッケージを全て含んだランタイムを作成する。 |
||
− | * [ |
+ | * そして、[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 |
||
330行目: | 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 |
+ | $ flatpak build geditruntime fakeroot pacman-key --populate |
− | + | これで、パッケージがインストールされました。ホストのネットワーク接続が 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 鍵のパーミッションが干渉する可能性があるため先に削除する必要があります。 |
$ flatpak build geditruntime rm -r /etc/pacman.d/gnupg |
$ flatpak build geditruntime rm -r /etc/pacman.d/gnupg |
||
347行目: | 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://gitlab.gnome.org/GNOME/gnome-apps-nightly/tree/master GNOME のマニフェストファイル] |
+ | ビルドを完了するときに指定するオプションで、サンドボックス化されたときのアプリのアクセス権限を調整することができます。利用可能なオプションは [[#参照|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 |
||
362行目: | 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 このディスカッション] を参照してください。 |
||
== 参照 == |
== 参照 == |
||
− | * [ |
+ | * [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 のチェックアウトと同じです。
目次
- 1 インストール
- 2 リポジトリの管理
- 3 ランタイムとアプリケーションの管理
- 3.1 リモートのランタイムやアプリケーションの検索
- 3.2 利用可能なランタイムとアプリケーションの確認
- 3.3 ランタイムやアプリケーションのインストール
- 3.4 インストールされたランタイムとアプリケーションの確認
- 3.5 アプリケーションの実行
- 3.6 ランタイムやアプリケーションのアップデート
- 3.7 ランタイムやアプリケーションのアンインストール
- 3.8 ランタイムやアプリケーションをダウングレードする
- 3.9 ランタイムやアプリケーションの更新を防止する
- 3.10 Flatpak の .desktop ファイルをメニューに追加
- 3.11 アプリケーションのサンドボックス権限を表示する
- 3.12 サンドボックスでのアプリケーションの権限を上書き
- 4 カスタムベースランタイムの作成
- 5 トラブルシューティング
- 6 参照
インストール
flatpak パッケージをインストールしてください。flatpak をビルドしたい場合は、flatpak-builder もインストールして下さい。
デスクトップとの統合
flatpak アプリケーションがデスクトップと対話する (つまり、アプリケーションが URL を開いたり、画面を共有したりする) ためには、xdg-desktop-portal を必ずセットアップしてください。デスクトップの実装によっては、アプリケーションがいくつかのポータルにアクセスする前に確認ダイアログが表示されます。
アプリケーション管理
- Discover — KDE の Flatpak フロントエンド。アプリケーション、ゲーム、そしてツールの検索とインストールを助けます。plasma の一部です。
- GNOME Software — GNOME の Flatpak フロントエンド。アプリケーションとシステム拡張機能のインストールとアップデートができます。gnome の一部です。
パーミッション管理
- Flatpak Permissions Management KCM — インストールされた Flatpak アプリケーションに与えられたパーミッションを変更することができる KDE Configuration Module (設定モジュール)。plasma の一部です。
- Flatseal — Flatpak アプリケーションのパーミッションを確認したり変更したりするためのグラフィカルユーティリティ。
- malcontent (ペアレンタルコントロール) — 非管理者アカウントからアクセス可能なコンテンツのタイプを制限するサポートを実装しています。gnome の一部です。
リポジトリの管理
リポジトリの追加
リモートの 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 list
アプリケーションの実行
バイナリは /var/lib/flatpak/exports/bin
にあります。このパスは /etc/profile.d/flatpak-bindir.sh
によって自動的に $PATH に追加されます。パスの変更を適用するには再ログインする必要がある場合があります。
Flatpak アプリケーションはコマンドラインから実行することもできます:
$ flatpak run name
ランタイムやアプリケーションのアップデート
name という名前のランタイムあるいはアプリケーションをアップデートするには:
$ flatpak update name
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
ユーザーユニットを起動/有効化してください。
ランタイムやアプリケーションのアンインストール
name という名前のランタイムやアプリケーションをアンインストールするには:
$ flatpak uninstall name
アンインストール時に ~/.var/app
とパーミッションストアのアプリデータを削除するには:
$ flatpak uninstall --delete-data name
ランタイムやアプリケーションをダウングレードする
ランタイムやアプリケーションをダウングレードするには、まず、関連するコミット 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 において必須であることが知られています。
アプリケーションのサンドボックス権限を表示する
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。
カスタムベースランタイムの作成
Pacman を使って、カスタムの Arch ベースのベースランタイムとベース SDK を作成することができます。そして、それを使ってアプリケーションをビルドしてパッケージングすることができます。これは個人的な使用でデフォルトの org.freedesktop.BasePlatform
と org.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 によってルートファイルシステムに関するエラーが表示されないようにしてください。- 望ましくないカスタムリポジトリと、ホストシステムのみにおいて必要な
IgnorePkg
、IgnoreGroup
、NoUpgrade
、そして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_clone
が 0
に設定されており、特権ユーザのみが新しいユーザ名前空間を作成できます。
これを修正する一つの方法は、bubblewrap-suid をインストールすることです.このパッケージは bwrap(1) の setuid
ビットを有効にして、bubblewrap が自分自身を昇格させて新しい名前空間を作成できるようにしたバージョンを提供します。
また、sysctl(8) を使って kernel.unprivileged_userns_clone
を 1
に設定して、非特権ユーザーが新しいユーザーネームスペースを作成できるようにすることも可能です:
# 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
詳細については、このディスカッション を参照してください。