Fedora System Extensions: 再起動なしで /usr ディレクトリをカスタマイズする活用術

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

Fedora Immutable OSにおける「再起動」の悩み

Fedora SilverblueやKinoiteを使用する最大のメリットは、その安定性にあります。/usr ディレクトリが読み取り専用(read-only)で保護されているため、誤操作によってシステムが壊れることはほとんどありません。しかし、その代償として、rpm-ostree install でツールを追加するたびにシステムの再起動が必要になります。

一時的なライブラリを使うためだけに30〜60秒待たされるのは、非常にストレスが溜まります。Fedoraをメインの開発マシンとして使っている私にとって、これはワークフローを中断させる大きな要因でした。幸いなことに、systemd-sysext (System Extensions) は、まさにこの問題を解決するために生まれました。

その仕組みは非常にスマートです。元のイメージを直接変更するのではなく、バイナリやライブラリのオーバーレイ(overlay)を、システム実行中に /usr に重ね合わせます。OSの整合性を保ったまま, 新しいツールを追加できるのです。非常に柔軟な手法です。

準備

嬉しいことに、systemd-sysext は最近のほとんどのFedoraバージョンで標準搭載されています。まずは、systemdのバージョンがv248以上であることを確認しましょう。

systemd --version

次に、拡張機能を配置する場所を作成します。読み取り専用パーティションの外にある /var/lib/extensions を使用することをお勧めします。管理が容易になります。

sudo mkdir -p /var/lib/extensions

実践:テキストエディタ「Micro」の拡張機能を作成する

ありふれた「Hello World」の例ではなく、RPMやFlatpakを使わずにテキストエディタ micro をシステムに導入してみましょう。

ステップ 1:ディレクトリ構造の構築

各拡張機能は、/usr の構造を正しく模倣する必要があります。micro のポータブル版をダウンロードし、適切な場所に配置します。

# 一時ディレクトリを作成
mkdir -p ~/micro-ext/usr/bin

# microのバイナリをダウンロード (x86_64アーキテクチャの例)
cd ~/micro-ext/usr/bin
curl -L https://github.com/zyedidia/micro/releases/download/v2.0.11/micro-2.0.11-linux64.tar.gz | tar xvz --strip-components=1 micro-2.0.11/micro

ステップ 2:メタデータの宣言(必須)

systemdがこの拡張機能を「マウント」することを許可するために、現在のFedoraバージョンとの互換性を証明する必要があります。このメタデータファイルは、拡張機能の身分証明書のようなものです。

mkdir -p ~/micro-ext/usr/lib/extension-release.d/

# 現在のOSのIDとバージョンを取得
source /etc/os-release

cat <<EOF > ~/micro-ext/usr/lib/extension-release.d/extension-release.micro
ID=$ID
VERSION_ID=$VERSION_ID
EOF

ヒント:この拡張機能をすべてのFedoraバージョンで動作させたい場合は、ID=_any を使用します。ただし、複雑な .so ライブラリを含む場合は、セグメンテーション違反(segfault)を避けるために正確なバージョンを指定してください。

ステップ 3:デプロイ

作成したディレクトリをシステムの管理領域にコピーします:

sudo cp -r ~/micro-ext /var/lib/extensions/micro

有効化:待機時間は不要

いよいよ成果を確認しましょう。systemdに新しい拡張機能をシステムに統合するよう指示します:

sudo systemd-sysext refresh

micro/usr/bin に存在するか確認します:

which micro
# 結果: /usr/bin/micro

すぐに micro と入力して編集を開始できます。すべてが一瞬で完了し、再起動も rpm-ostree のトランザクションも必要ありません。

トラブルシューティングとクリーンアップ

物事が期待通りに進まないこともあります。私の実体験に基づいたヒントをいくつか紹介します。

アクセス権限のエラー (SELinux)

Fedoraのセキュリティ設定は厳格です。/usr/bin 内にファイルは見えても実行できない(Permission Denied)場合、SELinuxのコンテキストが正しくない可能性があります。修正するには以下のコマンドを実行してください:

sudo restorecon -Rv /var/lib/extensions

拡張機能の削除

システムを元の状態に戻したいですか?マージを解除してディレクトリを削除するだけです:

sudo systemd-sysext unmerge
sudo rm -rf /var/lib/extensions/micro
sudo systemd-sysext refresh

systemd-sysext を活用することは、Fedora Immutableをカスタマイズするためのプロフェッショナルな方法です。ベースイメージをクリーンに保ちつつ、効率的に作業するために必要なツールを確保できます。

Share: