Fedora Silverblue: rpm-ostreeとToolboxによるシステムのインストールと管理

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

クイックスタート — 5分でできる

開発用ラップトップでFedora Silverblueを約6ヶ月使ってきて、はっきり言えることがある。これまで使ってきたディストリビューションの中で最も手放しがたいものだ——簡単だからではなく、慣れてしまうと以前のやり方に戻りたくなくなるからだ。

ISOはfedoraproject.org/silverblueからダウンロードし、通常のFedoraと同様にAnacondaインストーラーでインストールする。この手順に変わったところは何もない。デスクトップが起動したら、ターミナルを開いてすぐに実行しよう:

# 現在のシステム状態を確認
rpm-ostree status

# 実行中のdeploymentが表示される
● default ostree://fedora:fedora/41/x86_64/silverblue
             Version: 41.20241010.0 (2024-10-10)
          BaseCommit: a1b2c3d4e5f6...
  LayeredPackages: (追加インストールがない場合は空)

次にToolboxを作成しよう——これが本当に便利なところだ。すべての開発ツールはコンテナ内に収まり、ホストシステムには一切手を加えない:

# toolboxコンテナを作成(Fedora 41がデフォルト)
toolbox create

# toolboxに入る
toolbox enter

# コンテナ内にいる — 好きなものをインストール
sudo dnf install -y git nodejs python3 gcc make

完了。ホストシステムはクリーンなまま、すべての開発ツールはコンテナ内に収まっている。

rpm-ostreeの仕組み

通常のFedoraでdnf installに慣れていると、最初はrpm-ostreeの動作が少し奇妙に感じるかもしれない。2年間FedoraをメインのDev環境として使ってきて、パッケージ更新の速さには満足していた——しかしSilverblueはシステム管理の哲学を根本から変えてしまった。

SilverblueはOSTreeを使用している——これはOS全体を対象としたGitに似たファイルシステム管理システムだ。パッケージを/usrに直接インストールする代わりに、各システム状態がコミットとして保存される。具体的な影響は3つある:

  • /usr読み取り専用——rootでも直接書き込めない
  • /home/var/etcは通常通り書き込み可能
  • OSへのすべての変更はrpm-ostreeを経由し、再起動後にのみ有効になる

ホストシステムへのパッケージのインストール

ドライバー、カーネルモジュール、またはシステムに深く統合する必要があるツールなど、ホストに直接インストールしたいものがある場合:

# パッケージをインストール(ステージング — 再起動後に有効)
rpm-ostree install vim htop

# ベースイメージ上にレイヤーされたものを確認
rpm-ostree status
# LayeredPackages: htop vim

# レイヤーされたパッケージを削除
rpm-ostree uninstall htop

dnfとは異なり、これらのパッケージはベースイメージ上に「レイヤー」される——ベースイメージはそのまま保持され、何の影響も与えずにいつでもレイヤーを削除できる。

アップデート失敗時のロールバック

6ヶ月使って、ロールバックが必要になったのはちょうど2回だった。1回目は新しいカーネルがWi-Fiドライバーを壊したとき、2回目はMesaのアップデートで画面フリッカーが発生したときだ。どちらも30秒以内に対処できた:

# システムを更新(ステージング、すぐには適用されない)
rpm-ostree upgrade

# 新バージョンを適用するために再起動
systemctl reboot

# 再起動後に問題があればすぐにロールバック
rpm-ostree rollback
systemctl reboot

SilverblueはGRUBブートメニューに2つのdeploymentを保持している。再起動後に問題があれば、ブート画面から手動で古いdeploymentを選べばいい。この機能のおかげで、OSのアップデートを恐れなくなった——最悪の場合でも2分の再起動で済む。数時間のデバッグ作業は不要だ。

Toolbox — コンテナ内の開発環境

ToolboxはSilverblueを「面白い」から「実際に毎日使えるもの」へと変える存在だ。本質的には/homeがマウントされたPodmanコンテナを作成するため、何もコピーせずにコンテナ内から自分のすべてのファイルにアクセスできる。

プロジェクトごとの複数toolboxの管理

# 名前付きtoolboxを作成
toolbox create --container python-dev
toolbox create --container node-dev
toolbox create --container rust-dev

# すべてのtoolboxを一覧表示
toolbox list

# 特定のtoolboxに入る
toolbox enter python-dev

# 使わなくなったtoolboxを削除
toolbox rm python-dev

自分のマシンには常時3つのtoolboxがある:Pythonプロジェクト、Node.js、そして何でも試すサンドボックスだ。各toolboxは独立したパッケージセットを持っているため、プロジェクト間の依存関係の競合はもはや問題にならない。

Toolboxで別のディストリビューションを使う

toolbox内では必ずしもFedoraを使う必要はない。プロジェクトがUbuntuを必要としている場合や、別のディストリビューションでパッケージをテストしたい場合:

# Ubuntu 22.04で動くtoolbox
toolbox create --distro ubuntu --release 22.04 --container ubuntu-env

# Fedora 40で動くtoolbox(テスト用の古いバージョン)
toolbox create --distro fedora --release 40 --container fedora40-test

# ubuntu toolboxに入る
toolbox enter ubuntu-env

応用:overrideとrebase

ベースイメージのパッケージをoverride

実際のシナリオ:Mesa 23.2には一部のIntel GPUでフリッカーバグがある——システム全体を再構築せずに22.3にoverrideしたい場合や、使わないデフォルトアプリを削除したい場合:

# ベースイメージからパッケージを削除
rpm-ostree override remove gnome-tour

# RPMファイルから特定バージョンのパッケージに置き換え
rpm-ostree override replace ./mesa-libGL-22.3.0.x86_64.rpm

# 現在のoverride一覧を確認
rpm-ostree status
# RemovedBasePackages: gnome-tour

新バージョンまたは別のスピンへのrebase

Fedora 42にアップグレードしたいときに再インストールする必要はなく、直接rebaseできる——レイヤードパッケージと設定はすべてそのまま維持される:

# Fedora 42 Silverblueへrebase
rpm-ostree rebase ostree://fedora:fedora/42/x86_64/silverblue

# またはFedora Kinoiteを試す(GNOMEの代わりにKDE Plasma)
rpm-ostree rebase ostree://fedora:fedora/41/x86_64/kinoite

# 適用するために再起動
systemctl reboot

Fedora 42に問題があれば、Silverblue 41へのロールバックは数秒で完了する。

6ヶ月使って分かった実践的なTips

GUIアプリはすべてFlatpakで

Silverblueでの正しい哲学は:GUIアプリはFlatpak、開発ツールはToolbox、ドライバー/カーネルはrpm-ostreeだ。VS CodeやSlackをrpm-ostreeレイヤーでインストールしてはいけない。

# VS Code、Spotify、SlackをFlatpakでインストール
flatpak install flathub com.visualstudio.code
flatpak install flathub com.spotify.Client

# すべてのFlatpakアプリを更新
flatpak update

# システム全体の更新スクリプト
alias sysupdate='rpm-ostree upgrade && flatpak update'

ワークフローを高速化するエイリアス

# ~/.bashrcに追加
alias tbe='toolbox enter'
alias tbl='toolbox list'
alias rpmst='rpm-ostree status'
alias rpmup='rpm-ostree upgrade'

Silverblueが向かない場合

6ヶ月使って分かったのは、SilverblueはすべてのユーザーのためのOSではないということだ:

  • NVIDIAプロプライエタリドライバーを使ったゲーミング:セットアップがかなり複雑になる——Nobara Linuxを使う方が楽だ。
  • 本番サーバー:SilverblueはデスクトップOSだ。サーバーにはFedora CoreOS(同じOSTreeベース)の方が適している。
  • Linux完全初心者:通常のFedora Workstationの方が導入のハードルが低い。

一方、Python、Node.js、GoなどのDeveloperにとって、SilverblueとToolboxの組み合わせは今まで試した中で最もクリーンなセットアップだ。ホストシステムが開発の依存関係で散らかることがない。OSの更新がはるかに安全になる。そして問題が起きても、数十秒でロールバックできる——何時間もかけての再インストール作業は不要だ。

Share: