2020-11-03

Fedora Silverblue と Toolbox

Fedora Silverblue はデスクトップ用途の immutable な(変更できない)OS で、rpm-ostree で生成された OS イメージを使用しています。一方、GUI を伴うデスクトップアプリケーションの管理には Flatpak が採用されています。rpm-ostree、flatpak どちらも OSTree の技術を利用しています。

rpm-ostree は rpm パッケージをユーザーが追加できるので、再起動が必要になるものの辛うじて OS をカスタマイズできます。しかし rpm パッケージそのものを開発するのに困ります。また、Flatpak アプリを開発したければ Flatpak で利用可能な SDK を利用できますが、アプリを一から開発するにはとても不便です。

徹底的に予期しない改変を防ぐために OS を(ほぼ)読み込み専用にしてしまうことは究極の対策になります。その反面、このようにアプリ開発に不便を強いることにもなります。この不便を解消できるのが Toolbox というプライベートなコンテナ環境だと言えるでしょう。Toolbox を活用すれば、rpm パッケージも Flatpak パッケージも開発できるのです。

以前のブログ記事 [1] で簡単な紹介をしましたが、あらためて Toolbox の使い方をまとめました。

使用した OS は以下の通りです。

Fedora Silverblue 33 x86_64

Toolbox 〜 使い捨てのプライベートコンテナ 〜

勝手に「使い捨てのプライベートコンテナ」と呼びましたが、Toolbox はコンテナに関連する領域を、アカウント内の $HOME/.local/share/containers/ に確保します。Toolbox には、開発環境を準備するための最低限のコマンドしかないので、Docker や Podman を使ったことがあれば、すぐに Toolbox を利用することができるでしょう。

toolbox create でコンテナを作成すると、デフォルトで、ホストと同じバージョンの Fedora の dnf コマンドが利用できる通常イメージのコンテナがダウンロードされますので、必要に応じて dnf コマンドで必要なパッケージを追加してお好みの開発環境を準備することができます。GUI アプリもコンテナ内から起動できます。

アカウント領域はコンテナ内で丸ごと共有されていますので、コンテナから出ても開発したファイルにそのままアクセスできます。そのため、開発したアプリを Flatpak 化することも容易です。

開発が終わって開発領域が不要になれば、コンテナを簡単に削除できます。

Toolbox コンテナの作成

既に述べたように、端末エミュレータ上で toolbox create コマンドを実行すると、デフォルトで、ホストと同じバージョンの Fedora の dnf コマンドが利用できるイメージがダウンロードされて、利用可能なコンテナがひとつ作成されます。

[bitwalk@localhost ~]$ toolbox create
Image required to create toolbox container.
Download registry.fedoraproject.org/f33/fedora-toolbox:33 (500MB)? [y/N]: y
Created container: fedora-toolbox-33
Enter with: toolbox enter
[bitwalk@localhost ~]$

toolbox list コマンドを実行すると、ダウンロードされたイメージと利用可能なコンテナの一覧を確認できます。

[bitwalk@localhost ~]$ toolbox list
IMAGE ID      IMAGE NAME                                        CREATED
92d6fdd7ebda  registry.fedoraproject.org/f33/fedora-toolbox:33  3 days ago

CONTAINER ID  CONTAINER NAME     CREATED         STATUS      IMAGE NAME
8b48b031af21  fedora-toolbox-33  26 seconds ago  configured  registry.fedoraproject.org/f33/fedora-toolbox:33
[bitwalk@localhost ~]$ 

toolbox enter コマンドでコンテナ内に入ります。

[bitwalk@localhost ~]$ toolbox enter

Welcome to the Toolbox; a container where you can install and run
all your tools.

 - Use DNF in the usual manner to install command line tools.
 - To create a new tools container, run 'toolbox create'.

For more information, see the documentation.

[bitwalk@toolbox ~]$ ls
ダウンロード  テンプレート  デスクトップ  ドキュメント  ビデオ  公開  画像  音楽
[bitwalk@toolbox ~]$

dnf コマンドで最新の状態にアップデートできます。sudo コマンドはパスワードがありません。

[bitwalk@toolbox ~]$ sudo dnf update

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

Fedora 33 openh264 (From Cisco) - x86_64                        1.3 kB/s | 2.5 kB     00:02    
Fedora Modular 33 - x86_64                                      2.2 MB/s | 3.3 MB     00:01    
Fedora Modular 33 - x86_64 - Updates                            722 kB/s | 918 kB     00:01    
Fedora 33 - x86_64 - Updates                                    2.6 MB/s |  10 MB     00:03    
Fedora 33 - x86_64                                              4.5 MB/s |  72 MB     00:16    
Dependencies resolved.
================================================================================================
 Package                           Architecture  Version                   Repository      Size
================================================================================================
Upgrading:
...
(途中省略)
...

Complete!
[bitwalk@toolbox ~]$ 

Toolbox で利用できる領域は、ホストの /var/home/アカウント が利用できる領域になります。

[bitwalk@toolbox ~]$ df -hT
Filesystem     Type                 Size  Used Avail Use% Mounted on
fuse-overlayfs fuse.fuse-overlayfs  176G   12G  164G   7% /
devtmpfs       devtmpfs             1.8G     0  1.8G   0% /dev
tmpfs          tmpfs                1.9G   84K  1.9G   1% /dev/shm
tmpfs          tmpfs                375M  204K  375M   1% /run/secrets
tmpfs          tmpfs                749M  9.8M  739M   2% /run/media
/dev/sda1      vfat                  29G  144K   29G   1% /run/media/bitwalk/DATA
/dev/mmcblk0p3 btrfs                176G   12G  164G   7% /run/host/var
/dev/mmcblk0p3 btrfs                176G   12G  164G   7% /var/home/bitwalk
tmpfs          tmpfs                1.9G   48K  1.9G   1% /tmp
[bitwalk@toolbox ~]$ 

Toolbox コンテナ内のアプリを実行

例として、あらかじめホストでダウンロードしておいた Google Chrome をコンテナ内でインストールします。

[bitwalk@toolbox ダウンロード]$ ls
google-chrome-stable_current_x86_64.rpm
[bitwalk@toolbox ダウンロード]$ sudo dnf install ./google-chrome-stable_current_x86_64.rpm
Last metadata expiration check: 0:20:54 ago on Tue Nov  3 10:39:33 2020.
Dependencies resolved.
================================================================================================
 Package                        Arch      Version                         Repository       Size
================================================================================================
Installing:
 google-chrome-stable           x86_64    86.0.4240.183-1                 @commandline     68 M
Installing dependencies:
 acl                            x86_64    2.2.53-9.fc33                   fedora           72 k
...
(途中省略)
...

Complete!
[bitwalk@toolbox ダウンロード]$ 

このまま、コンテナ内で google-chrome とタイプすれば Google Chrome が起動しますが、ここでは敢えてコンテナから抜け、ホストから実行してみます。コンテナから抜けるには exit とタイプします。

[bitwalk@toolbox ダウンロード]$ exit
logout
[bitwalk@localhost ~]$

コンテナから exit コマンドで抜けても、コンテナは実行状態のままです。

[bitwalk@localhost ~]$ toolbox list
IMAGE ID      IMAGE NAME                                        CREATED
92d6fdd7ebda  registry.fedoraproject.org/f33/fedora-toolbox:33  3 days ago

CONTAINER ID  CONTAINER NAME     CREATED      STATUS   IMAGE NAME
8b48b031af21  fedora-toolbox-33  3 hours ago  running  registry.fedoraproject.org/f33/fedora-toolbox:33
[bitwalk@localhost ~]$ 

ホスト側から(デフォルトのコンテナに対して)コマンド google-chrome を実行します。

[bitwalk@localhost ~]$ toolbox run google-chrome
Gtk-Message: 11:06:43.094: Failed to load module "canberra-gtk-module"
Gtk-Message: 11:06:43.121: Failed to load module "canberra-gtk-module"
[10908:10908:1103/110643.266238:ERROR:angle_platform_impl.cc(43)] initialize(797): ANGLE Display::initialize error 12289: Could not dlopen libGL.so.1: libGL.so.1: cannot open shared object file: No such file or directory
[10908:10908:1103/110643.266460:ERROR:gl_surface_egl.cc(767)] EGL Driver message (Critical) eglInitialize: Could not dlopen libGL.so.1: libGL.so.1: cannot open shared object file: No such file or directory
[10908:10908:1103/110643.266851:ERROR:gl_surface_egl.cc(1295)] eglInitialize OpenGL failed with error EGL_NOT_INITIALIZED, trying next display type
...
(以下省略)
ホストから起動したコンテナ内の Google Chrome

Google Chrome は確かに起動しましたが、コンテナ側の環境には日本語フォントがインストールされていないので文字化けしています。詳細は省略しますが、コンテナ側の日本語環境を整えれば使えるようになります。

Toolbox コマンド概略

toolbox コマンドの概略を以下にまとめました。覚えるべきコマンドは 6 種類です。

Toolbox コマンド概略
コマンド例 説  明
toolbox create [--container <name>]
  ツールボックスコンテナを作成します。デフォルトでは、ホストのバージョンと同じ Fedora のイメージをダウンロードします。オプションなしで使用すると、toolbox create は自動的に作成するコンテナに名前を付けます。追加のツールボックスを作成するには --container <name> オプションを使用します。
toolbox enter [--container <name>]
  toolbox のコンテナを対話的に使用するために入ります。オプションを指定せずに使用すると、toolbox enter はデフォルトの toolbox のコンテナを開きます。複数のツールボックスがある場合は、--container <name> オプションを使って利用するツールボックスを指定します。
toolbox run [--container <name>] <cmd> <arg …​>
  toolbox のコンテナに入らずにコマンドを実行します。オプションなしで使用すると、toolbox run は toolbox のデフォルトのコンテナでコマンドを実行します。複数のツールボックスがある場合は、--container <name> オプションを使用して使用するツールボックスを指定します。
toolbox list
  ローカルにある toolbox のイメージとコンテナの一覧を表示します。
toolbox rm [--force] <name>
  toolbox のコンテナを削除します。--force オプションを付けると、実行中であってもコンテナを削除します。
toolbox rmi [--force] <name>
  toolbox のイメージを削除します。
toolbox --help
  使用可能なコマンドを一覧表示します。

参考サイト

  1. bitWalk's: Linux ディストロ探訪(10) 〜 Fedora Silverblue 〜 [2019-11-24]

ブログランキング・にほんブログ村へ
にほんブログ村

0 件のコメント: