NixOSでFlatpakを使う

NixOSでFlatpakを使う

Jamiを使うにあたって,Flathubに登録されているFlatpakも試してみた.結局,最終的にはFlatpakではなくNixで提供されているパッケージを使うことにしたのだが,その過程でNixOSにFlatpakの導入と削除をおこなったので,その経緯を記録として残しておく.

Tags: nixos flatpak
Takafumi Asano · 11 minute read

導入

NixOSでSIP Phoneを使うではJamiのQtクライアントを導入したのだが,FlatpakではGnomeクライアントが配布されているようなので,その導入を行った.

最終的には,Gnomeクライアントをあえて使う理由はなく,またQtクライアントであればhome-managerで構成管理もできるため,Flatpakごと削除してしまったのだが,導入手順だけはメモしていたので記事として残しておくことにした.

Flatpakとは

以前はxdg-appという名前で配布されていたLinux用のソフトウェアパッケージ管理システムである.

主にLinuxのデスクトップアプリのパッケージングと配布に利用され,実行環境がSandbox化されていることから安全性が高く,珍しいことにNixOS向けのQuick Setupページがある.

構成

前述のNixOS Quick Setupではconfiguration.nixにservice.flatpak.enable = true;を追加すれば良いと書かれているが,FlatpakはXDG Desktop Portalsを必要とする.これがNixOS上で有効でない場合,以下のようなエラーが出力される.

$ sudo nixos-rebuild switch
building Nix...
building the system configuration...
error:
       Failed assertions:
       - Setting xdg.portal.enable to true requires a portal implementation in xdg.portal.extraPortals such as xdg-desktop-portal-gtk or xdg-desktop-portal-kde.
(use '--show-trace' to show detailed location information)

XDG Desktop Portalsは,GnomeかKDEのバックエンド実装が必要となるため,xdg.portal.enable = true;だけではなく,xdg.portal.extraPortals属性にgtkかkdeのバックエンド実装を渡す必要があるようだ.

最終的に,Flatpakを動かすためにはconfiguration.nixに以下の式を含む必要がある.

{
  xdg.portal.enable = true;
  xdg.portal.extraPortals = [pkgs.xdg-desktop-portal-gtk];
  services.flatpak.enable = true;
}

gtkにしたのはただの好みである.

この設定を追加後,nixos-rebuild switchをすると,flatpakコマンドが実行可能となっているはずである.

早速,FlathubにあるJamiを入れてみよう.

$ flatpak install flathub net.jami.Jami

Note that the directories

'/var/lib/flatpak/exports/share'
'/home/claude/.local/share/flatpak/exports/share'

are not in the search path set by the XDG_DATA_DIRS environment variable, so
applications installed by Flatpak may not appear on your desktop until the
session is restarted.

Looking for matches…
error: No remote refs found for ‘flathub’

なるほど.

どうやら,Flatpakはデフォルトで何もリポジトリが設定されていないようなので,flathubを先に追加する.

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

Note that the directories

'/var/lib/flatpak/exports/share'
'/home/claude/.local/share/flatpak/exports/share'

are not in the search path set by the XDG_DATA_DIRS environment variable, so
applications installed by Flatpak may not appear on your desktop until the
session is restarted.

これでよいはずだ.再びJamiのインストールを試みる.

$ flatpak install flathub net.jami.Jami

Note that the directories

'/var/lib/flatpak/exports/share'
'/home/claude/.local/share/flatpak/exports/share'

are not in the search path set by the XDG_DATA_DIRS environment variable, so
applications installed by Flatpak may not appear on your desktop until the
session is restarted.

Looking for matches…
Required runtime for net.jami.Jami/x86_64/stable (runtime/org.kde.Platform/x86_64/6.3) found in remote flathub
Do you want to install it? [Y/n]: Y

net.jami.Jami permissions:
    ipc                    network                  fallback-x11       pulseaudio       wayland       x11       devices       per-app-dev-shm       file access [1]
    dbus access [2]        bus ownership [3]

    [1] xdg-config/kdeglobals:ro, xdg-download
    [2] com.canonical.AppMenu.Registrar, org.freedesktop.Notifications, org.freedesktop.ScreenSaver, org.kde.StatusNotifierWatcher
    [3] cx.ring.Ring, org.mpris.MediaPlayer2.chromium.instance2

        ID                                                       Branch             Op            Remote             Download
 1. [] net.jami.Jami.Locale                                     stable             i             flathub              5.3 kB / 55.3 MB
 2. [] org.freedesktop.Platform.GL.default                      21.08              i             flathub            129.6 MB / 129.8 MB
 3. [] org.freedesktop.Platform.GL.nvidia-520-56-06             1.4                i             flathub            407.5 MB / 407.0 MB
 4. [] org.freedesktop.Platform.openh264                        2.0                i             flathub              1.8 MB / 1.5 MB
 5. [] org.kde.KStyle.Adwaita                                   6.3                i             flathub              7.8 MB / 7.8 MB
 6. [] org.kde.Platform.Locale                                  6.3                i             flathub             17.7 kB / 325.8 MB
 7. [] org.kde.Platform                                         6.3                i             flathub            269.6 MB / 247.8 MB
 8. [] net.jami.Jami                                            stable             i             flathub            129.8 MB / 127.0 MB

Installation complete.

無事に入ったようだ.

Flatpakで導入したパッケージは,flatpak run <Application ID> で実行することができる.

$ flatpak run net.jami.Jami

削除

さて,インストールは無事完了し,Jamiが使えることを確認したのだが,結局Flatpak版のJamiを使うことは以下の理由からやめた.

  • NixOSでSIP Phoneを使うで導入したNixのパッケージと同様に,事前にjamidを起動しておかないとError : jamid is not available, make sure it is runningが出て落ちる
  • Flatpakで提供されるGnome実装に特段のメリットを感じないので,それならばhome-managerで構成管理できるNixのパッケージのほうが望ましい

というわけで,Flatpakごと削除することにした.

Flatpak自体の無効化はconfiguration.nixに追加した設定を抹消し,nixos-rebuild switchをすればよいだけだが,使用していないファイルが残るのが気になったので,追加で以下のような削除手順を実施した.

Flatpakの全パッケージの削除

flatpak uninstall --allですべて消すことが出来る.

$ flatpak uninstall --all

        ID                                                      Branch           Op
 1. [-] net.jami.Jami                                           stable           r
 2. [-] org.kde.Platform                                        6.3              r
 3. [-] org.kde.Platform.Locale                                 6.3              r
 4. [-] net.jami.Jami.Locale                                    stable           r
 5. [-] org.freedesktop.Platform.GL.default                     21.08            r
 6. [-] org.freedesktop.Platform.GL.nvidia-520-56-06            1.4              r
 7. [-] org.freedesktop.Platform.openh264                       2.0              r
 8. [-] org.kde.KStyle.Adwaita                                  6.3              r

Uninstall complete.

ファイルシステム上のオブジェクトの削除

それっぽい記事とplocateで発見したいくつかのディレクトリを再帰的に削除した.

$ sudo rm -rf /var/lib/flatpak
$ rm -rf ~/.cache/flatpak
$ rm -rf ~/.local/share/flatpak
$ rm -rf ~/.var/app

最後に

Flatpak自体は便利そうなのだが,NixOSとhome-managerを使っている一番大きな理由が構成を宣言的に管理できることなので,出来る限りNixの世界で完結できるようにしていきたい.