Ubuntu Core Desktopのアーキテクチャーとその構成
2023年8月11日、「Ubuntu Core Desktop」のアーキテクチャーとその構成が以下で紹介されています。いわゆるSnap版Ubuntu Desktop
以前紹介したように「Ubuntu Core Desktop」はいわゆるSnap版Ubuntu Desktopに相当する「Ubuntu Desktop」です。毎年のように機密情報の漏洩など何かしらインシデントやアクシデントが起きている今日昨今ですが、それらは特にエンタープライズの分野で致命的な問題に発展しかねません。
「Ubuntu Core Desktop」はその分野に訴求できるOSになるのではないでしょうか。
Snap
Snapはソフトウェアのパッケージングやデプロイ、そしてそれらを管理するめの仕組みです。すでに既存の「Ubuntu Desktop」にも導入されており、プリインストールされている「Firefox」はSnap版の「Firefox」になります。
実際にSnapで提供されるソフトウェアを管理しているのは「snapd」というソフトウェアになります。
Snapはそれぞれのソフトウェアを隔離して配置する仕組みを備えており、それぞれのソフトウェアがお互いが影響を与える範囲を最小化しています。
この仕組みをOSレベルで導入しているのが「Ubuntu Core」です。
現在「Ubuntu Core」はIoTやエッジデバイスの分野に向けて提供されているOSですが、これをデスクトップOSにまで拡大しようというのが今回紹介する「Ubuntu Core Desktop」の取り組みになります。
OSを構成するためのコンポーネント
OSを構成するには様々な役割を持ったソフトウェアが必要になります。カーネルやブートマネージャー、システムを管理するソフトウェアやアプリケーションなど、様々なソフトウェアでOSは構成されています。
それぞれの役割を大枠で分類しコンポーネント単位で見てみると、「Ubuntu Core Desktop」のコンポーネント構成は以下のような構成が考えられています。
これらのコンポーネントは目的に応じて中身のソフトウェアを入れ替えることができます。
またすべてのコンポーネントはSnapで提供されます。
1. カーネル
カーネルはOSの中核となるソフトウェアです。このカーネルもSnapで提供されており、ユーザーの目的にあったカーネルに入れ替えることが可能です。
例えば低遅延カーネルに入れ替えたり、ゲーム向けに最適化されたカーネルが提供されているなら、ゲームユーザーはそのカーネルに入れ替えることが可能です。
2. Snapd
上記でも紹介したとおり、パッケージ及びソフトウェアを管理するためのソフトウェアです。「Ubuntu Core Desktop」において中核となるソフトウェアです。
コンポーネントの構成変更や入れ替えは、この「Snapd」を通じて行うことになります。
3. ガジェット
ガジェットはブートローダーを提供したり、ファイルシステムやシステムの構成、ポリシーを構築するのに必要な情報を提供します。例えばカーネルのオプションやファイルシステムの暗号化情報、セキュリティー要件を提供します。
4. ブートベース
ブートベースは最小限のシステムを起動するのに必要なルートファイルシステムを提供します。加えてブートベースではディスプレイマネージャーも提供します。
ディスプレイマネージャーはユーザーから見ると、ログイン画面を提供するソフトウェアです。
ユーザーから見てログイン画面までを提供するルートファイルシステムあるいはコンポーネントだと思えば分かりやすいでしょう。
5. 追加ベース
追加ベースはそれぞれのSnapアプリが動作するために必要なファイルシステムを提供します。複数のベースをサポートすることで、Ubuntuの様々バージョン向けにリリースされているソフトウェが期待通りに動作できるようになります。
例えばアプリケーションの実行環境を提供する「base snap」には、「Ubuntu 18.04 LTS」ベースの「core18」や「Ubuntu 22.04 LTS」ベースの「core22」があります。
これらのSnapには多くのSnapアプリが幅広く利用するライブラリーなどソフトウェアやリソースが含まれています。
複数のベースをサポートすることで、「Ubuntu Core Desktop」のバージョンに依存せず「core18」ベースで開発されたSnapアプリでも期待通りに動作できます。
6. Ubuntu デスクトップセッション
デスクトップセッションは、デスクトップユーザーがログインした時にそのログインしたユーザーを管理するための仕組みです。これは既存の「Ubuntu Desktop」でも同様ですし、他のLinuxディストリビューションでも同様です。
既存の「Ubuntu Desktop」ではWayland環境でログインするWaylandセッションと、従来のX.org環境でログインするX.orgセッションがあります。
現在の「Ubuntu Desktop」のデフォルトのセッションは、Waylandセッションになっています。
この「Ubuntu デスクトップセッション」は既存の「Ubuntu Desktop」で提供しているWaylandセッションと同じデスクトップセッションを提供するコンポーネントです。
またこの「Ubuntu デスクトップセッション」はGNOME環境を提供します。
この「GNOME」は他のSnapアプリと同様にSnapにより隔離された環境に配置され、Snapが求めるセキュリティーの要件を満たせる範囲内で動作します。
「GNOME」がSnapによるセキュリティー上の厳しい制約を受けるため、デスクトップセッションを提供するために様々なデスクトップサービスを統合し連携して動作させる必要があります。
この辺の事情は次の機会に紹介される予定です。
7. アプリケーション
アプリケーションは文字通りユーザーが利用するSnapアプリのことを指します。このアプリケーションにはデフォルトでプリインストールされるSnapアプリと、ユーザーが後から追加でインストールするSnapアプリがあります。
これらのSnapアプリは既存のアプリと同様に、Snapにより隔離された環境に配置され、Snapが求めるセキュリティーの要件を満たせる範囲内で動作します。
また「Ubuntu デスクトップセッション」が提供するデスクトップサービスと連携して動作します。
モデルアサーション
モデルアサーションとは「Ubuntu Core Desktop」を組み立てるのに必要なコンポーネント構成を定義するものです。例えばOSに含めるSnap構成がモデルアサーションに含まれています。
このモデルアサーションを変更することで、「Ubuntu Core Desktop」の派生ディストリビューションやフレーバーの作成が可能になります。
Ubuntu Coreファイルシステム
さて各コンポーネントはSnapパッケージで提供されるソフトウェアであり、Snapソフトウェアは圧縮された読み取り専用の「squashfs」イメージで提供されます。「Ubuntu Core Desktop」ではこれがOS起動時にマウントされ、ソフトウェアが動作できるようになります。
core22-desktopの例
例えばシステムの起動に使用するブートベースに「core22-desktop」Snapパッケージが利用され、「core22-desktop」にはシステムを起動するために必要な最小限の環境を提供します。この「core22-desktop」の中身は、既存の「Ubuntu」のファイルシステムでよく見かけるファイル構成と似たような中身になっています。
sbin -> usr/sbin
libx32 -> usr/libx32
lib64 -> usr/lib64
lib32 -> usr/lib32
lib -> usr/lib
bin -> usr/bin
srv
opt
writable
root
snap
home
usr
boot
etc
var
meta
sys
proc
host
mnt
media
dev
run
tmp
libx32 -> usr/libx32
lib64 -> usr/lib64
lib32 -> usr/lib32
lib -> usr/lib
bin -> usr/bin
srv
opt
writable
root
snap
home
usr
boot
etc
var
meta
sys
proc
host
mnt
media
dev
run
tmp
OSを起動する時に環境によって異なる設定が必要になりますが、Snapは読み取り専用なのでこのままだとシステムに合わせた設定の変更ができなくなります。
もちろんこのままだとユーザーのホームフォルダーも読み込み専用になってしまいます。
読み書き可能な仕組み
そこで読み書き可能な仕組みが必要になります。上記のファイルシステムの中に「/writable」ディレクトリーがありますが、これが読み書き可能な仕組みに利用されます。
「/writable」ディレクトリーの中身は以下のようになります。
lost+found
system-data
user-data
system-data
user-data
「/writable/system-data」ディレクトリーには、システムの設定や構成に必要な読み書き可能なファイルが配置されます。
例えば従来の「/etc」ディレクトリー内に配置されているファイル群がこれに相当します。
「/writable/user-data」ディレクトリーは、ユーザーのホームフォルダーに利用されます。
例えば「/writable/user-data/ユーザー名」は従来と同じように「/home/ユーザー名」にマウントされ、そのユーザーのホームフォルダーとして利用されます。
Bind mountで読み書き可能なファイルシステムを実現
読み書き可能なファイルは読み込み専用の「/writable」ディレクトリーの上にBind mountされ、ユーザーに読み書き可能なファイル群を透過的に提供します。例えばマシンのホスト名を設定する「/etc/hostname」は、「/etc/hostname」の上に「/writable/system-data/etc/writable/hostname」がマウントされるため、ユーザーは違和感を覚えることなく読み書き可能な「/etc/hostname」にアクセスできます。