自由のなる木

RSS
公開日
2022-05-06

GNU Guix で GNOME Boxes を使う

TL;DR: Guix で GNOME Boxes を使いたい場合は、libvirt サービスと virtlog サービスを有効にする必要がある。

背景

現在、私が使用しているスマホは Google Pixel 3a だ。

先日、Pixel 3a の最後のアップデートが 2022 年 7 月までに提供されるというアナウンスがあった。

Google releasing one last Pixel 3a and 3a XL update in July - 9to5Google

いよいよサポートが終わってしまうようだ。

新しい端末を購入することも検討はしているが、デバイスに不具合はなく、大きな不満もない。

ただ単に、メーカーの都合でアップデートが提供されなくなるだけなので、別の OS に変更して延命措置を取ることを検討している。

別の OS に変更することは、かねてより考えてはいたので、良い機会だと思った。1

LineageOS、GrapheneOS、CalyxOS などが変更先候補になるが、GrapheneOS への変更を考えている。2

GrapheneOS のインストール方法は公式サイトに詳細な手順が掲載されている。

Install | GrapheneOS

しかし、Guix は GrapheneOS のインストール作業で使用する OS としてはサポートされていなかった。当然と言えば当然なのだが。

私はスマホの OS を変更作業をこれまでにやったことはない。

この作業はスマホを文鎮 (Brick) 化するリスクもあるデリケートな作業だ。

Guix でも頑張ればインストール作業ができるのかもしれないが、トラブルが発生した時に頼れる情報が少なくて、自分で問題を解決できない可能性があるので、やめておくのが無難だと思った。

Guix で GNOME Boxes を使うには

ここで本題に戻る。

上記の作業のために Guix で Ubuntu を使用することを検討している。

Guix で GNOME デスクトップを選択すると、GNOME Boxes が最初から入っているため、それを使ってみることにした。

ただ、実際に仮想マシンを作ってみようとしたところ、作成画面の途中で先に進めなくなってしまった。

GNOME Boxes は Guix でパッケージ単体としても提供されているため、パッケージの説明文を読んでみたところ、解決のヒントを得ることができた。

$ guix package --show=gnome-boxes | recsel -P description
GNOME Boxes is a simple application to view, access, and manage
remote and virtual systems.  Note that this application requires the `libvirt' and
`virtlog' daemons to run.  Use the command `info '(guix) Virtualization Services''
to learn how to configure these services on the Guix System.

GNU Guix で Docker を使う」の時と同様に、アプリケーションを使用するには、動作に必要なサービスを起動しなければならないようだ。

具体的には libvirtvirtlog サービスを起動する必要がある。

パッケージの説明文に記載のあるとおり、以下のドキュメンテーションを読めば設定内容は把握できた。

Virtualization Services (GNU Guix Reference Manual)

ただ、ドキュメントどおり設定してもうまくいかないところがあったため、"libvirt-service-type" という検索語で GitHub でソースコード検索して、実際の使用例の確認をする必要もあった。3

最終的には下記の変更で GNOME Boxes を使用できるようになった。

index e509a4a..b4d1bc2 100644
--- a/guix-config/system-config.scm
+++ b/guix-config/system-config.scm
@@ -6,7 +6,12 @@
              (nongnu packages linux)
              (nongnu system linux-initrd))

-(use-service-modules desktop networking ssh xorg docker)
+(use-service-modules desktop
+                     networking
+                     ssh
+                     xorg
+                     docker
+                     virtualization)

 (operating-system
   (kernel linux)
@@ -26,7 +31,7 @@
                  (group "users")
                  (home-directory "/home/taiju")
                  (supplementary-groups
-                  '("wheel" "netdev" "audio" "video" "docker")))
+                  '("wheel" "netdev" "audio" "video" "docker" "kvm" "libvirt")))
                 %base-user-accounts))
   (packages
    (append
@@ -47,6 +52,10 @@
                                       Option \"Tapping\" \"on\"
                               EndSection"))))
              (service docker-service-type)
+             (service libvirt-service-type
+                      (libvirt-configuration
+                       (unix-sock-group "libvirt")))
+             (service virtlog-service-type)
              (extra-special-file "/var/lib/gdm/.config/fontconfig/fonts.conf"
                                  (plain-file "gdm-fonts.conf"
                                              "<?xml version='1.0'?>

最新のコンフィグは Sourcehut で入手できる。

ドキュメントを読んでも、kvm グループにユーザーを追加する必要があることには気付けなかった。

ここが私にとっての一番の落し穴だった。

何はともあれ、上記の変更で Guix 上で Ubuntu が使用できるようになった。

USB のリダイレクションもできたので、GrapheneOS のインストール作業もできそうだ。4

GrapheneOS への変更が完了したら、このブログでもレポートしたいと思う。

追記 (2022-05-18)

GrapheneOS に変更したとしても、スマホの寿命を長くできるわけではなかった。

具体的にはカーネルやファームウェアに脆弱性が見つかった場合に、GrapheneOS に変更したところで、それを修正する手段がないからだ。

コミュニティの人たちも、第六世代の Pixel を使用することを強く推奨していたので、Pixel のサポートが切れたことを理由に GrapheneOS に変更するのは筋違いだということがわかった。

ちなみに手持ちの Pixel 3a は、すでに GrapheneOS に変更している。

GrapheneOS はサンドボックス化された Google Play Services が使用できるため、困ることが一切なさそうだった。

近々、新しい Pixel を購入することになると思うが、その際も GrapheneOS に変更しようと思っている。

宣伝

GNU Guix の日本語コミュニティができた」という記事で書いたとおり、Guix-jp という Slack スペースがある。Guix に興味のある方はぜひ遊びにきて欲しい。

以上。


  1. メインで使用しているアプリのほとんどは F-Droid で提供されているアプリなので、Android にこだわる必要はあまりないのだが、仕事の業務でもスマホを使用していることがネックとなっている。 

  2. Mastodon で様々なアドバイスをいただいたが、GrapheneOS を勧める声が多かった。実際に GrapheneOS を一番オススメする記事も多い。 

  3. Guix の設定で困った時は、対象のコンフィグ名などで GitHub でソースコード検索すると解決のヒントを得られることが多い。 

  4. ただ、GrapheneOS のページには仮想マシンからのインストールはオススメしないとあるため、この方法では危険かもしれない。