Limine

提供: ArchWiki
2024年11月23日 (土) 11:37時点におけるAshMyzk (トーク | 投稿記録)による版 (同期)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

関連記事

Limine は、先進的で、ポータブルな、マルチプロトコルのブートローダーです。元は Limine ブートプロトコルのリファレンス実装として開発されましたが、Linux のブートや他のブートローダのチェインロードもサポートしています。

ノート: 記事全体で、espEFI システムパーティション(別名 ESP) のマウントポイントを示します。

サポートされているファイルシステム

Limine は FAT12FAT16FAT32ISO9660サポートしています。これらに加えて、ext2 から ext4 までの試験的なサポートも存在していますが、上流でのサポートは限られています。サポートされているファイルシステムは、Limine の設計理念に基づいて意図的に制限されています

インストール

limine をインストールしてください。

Limine ブートローダーをインストールする

BIOS システム

MBR と GPT は両方ともサポートされており、インストール手順は非常に似ています。

デプロイ

コアのブートローダーファイルは /usr/share/limine にあります。BIOS システムにインストールする際に最も重要なのは limine-bios.sys ファイルです。このファイルには、Limine が起動するのに必要なステージ3のコードが含まれています。このファイルは、Limine を導入するディスク上の任意のパーティション上のルートディレクトリか、/boot/limine/boot/limine ディレクトリのどれかに置く必要があります。さらに、そのファイルシステムがサポートされている必要があります。

例:

# cp /usr/share/limine/limine-bios.sys /boot/

次に、ステージ1とステージ2をディスクにデプロイする必要があります。Limine は使用されているスキームを自動検出して適切にインストールするので、MBR と GPT のどちらが使用されていようとインストール方法は同じです:

# limine bios-install /dev/sdX

/dev/sdX の部分は、Limine をインストールするディスク(パーティションではありません)に書き換えてください。例えば、/dev/sda/dev/nvme0n1 です。ブロックデバイス名のスキームについては デバイスファイル#ブロックデバイスの名前 を見てください。

UEFI システム

UEFI システム上に Limine をデプロイするには、/usr/share/limine/BOOTX64.EFI ファイルを EFI システムパーティションにコピーします。通常 esp/EFI/BOOT/BOOTX64.EFI にコピーしますが、別のファイル名を使用することもできます。ただし、UEFI BIOS がそのファイルを検出できる必要があります。GRUB とは異なり、Limine は NVRAM に Limine のブートローダーエントリを追加しません。Limine のエントリをセットアップするには efibootmgr を使用してください。

UEFI+BIOS 起動可能ドライブ

ドライブが GPT でフォーマットされていて、かつ EFI システムパーティション を含んでいる場合、BIOS と UEFI の両方のデプロイ手順を行うことにより、そのドライブをレガシー BIOS と UEFI の両方のシステムで起動できるようになります。これは、例えば、UEFI に対応/非対応の複数のシステム上で使用する USB フラッシュドライブにオペレーティングシステムをインストールする場合や、システムをまたいでハードドライブを使用しやすくする場合に便利です。

設定

limine にはデフォルトの設定ファイルが同梱されていません。なので、作成する必要があります。このファイルは、どのオペレーティングシステムが起動できるかを Limine に指示するために必要です。Limine はカスタマイズ性が高いので、設定ファイルには多くのオプションがあります。設定ファイルのフォーマットやオプションに関する詳細なドキュメントはここで見られます。

設定ファイルは、(limine-bios.sys と同じように) Limine がデプロイされたドライブ上の任意のパーティションにあるルートディレクトリか /boot/limine/boot/limine ディレクトリのどれかに置く必要があります。ただし、そのパーティションのファイルシステムがサポートされている必要があります。設定ファイルは limine.conf という名前でなければなりません。

ノート: Limine の設定では、boot():/limine.conf が存在するパーティションを表しています。/boot のあるパーティションが分離されておらず、limine.conf が代わりにルートパーティションにある場合、boot():/boot():/boot/ のように書き換える必要があります。

以下は、典型的な Arch Linux カーネルと initramfs の1つのブートメニューエントリを含む設定の例です:

limine.conf
timeout: 5

/Arch Linux
    protocol: linux
    kernel_path: boot():/vmlinuz-linux
    kernel_cmdline: root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw
    module_path: boot():/initramfs-linux.img

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx はルートファイルシステムの UUID です。

ヒント: セキュアブートが有効化されている UEFI システムでブートする場合は、Limine の設定ファイルとリソースファイル (カーネルやモジュールなど) の両方をセキュアにしておくことを検討してください。実際、これらの設定ファイルとリソースファイルが格納されている FAT パーティションにアクセスできる人物は、セキュアブートが有効化されている場合でもこれらのファイルを変更できてしまいます。

これらのファイルを守るには、まず、すべてのリソースファイルの b2sum チェックサムを設定ファイル内に記述しておく必要があります。Limine でのファイルパスには、ファイルの b2sum チェックサムを記述するための任意のフィールドが存在します。このフィールドは、ファイルパスの後に # 文字を追加し、さらにその後に 128 文字のチェックサムを追加することで指定できます:


boot():/path#checksum
設定ファイルを守るには、limine enroll-config コマンドで EFI 実行ファイル内に設定ファイルの b2sum チェックサムを埋め込んでおく必要があります。

Windows エントリ

Windows を起動できるようにするには、ESP 内の bootmgfw.efi へのパスを知る必要があります。ESP 内に移動して、以下のコマンドを使用することで可能です:

$ find -name "bootmgfw.efi"
./EFI/Microsoft/Boot/bootmgfw.efi

次にするべきことは、以下の内容を設定に追加することだけです:

limine.conf
/Windows
    protocol: efi_chainload
    image_path: boot():/EFI/Microsoft/Boot/bootmgfw.efi

pacman フック

必須ではありませんが、Limine がアップデートされるたびに Limine をデプロイする pacman フック を設定すれば便利です。

以下は単なる例です。システム構成に合うようにパスやデバイスを編集してください。

BIOS

ノート: デバイスを接続/除去したり、別のマシンにインストール環境を移動したり、または他の原因により、デバイスのパスは変わるかもしれないことに注意してください。これにより、BIOS のフックが意図しないデバイスに誤って Limine をインストールするかもしれません。
/etc/pacman.d/hooks/liminedeploy.hook
[Trigger]
Operation = Install
Operation = Upgrade
Type = Package
Target = limine

[Action]
Description = Deploying Limine after upgrade...
When = PostTransaction
Exec = /bin/sh -c "/usr/bin/limine bios-install /dev/sdX && /usr/bin/cp /usr/share/limine/limine-bios.sys /boot/"

UEFI

/etc/pacman.d/hooks/liminedeploy.hook
[Trigger]
Operation = Install
Operation = Upgrade
Type = Package
Target = limine

[Action]
Description = Deploying Limine after upgrade...
When = PostTransaction
Exec = /usr/bin/cp /usr/share/limine/BOOTX64.EFI /boot/EFI/BOOT/

ヒントとテクニック

ブートエントリの自動化

Dracut サポート

limine-dracut-supportAUR は、initramfs の生成に Dracut を使用するユーザーのために開発されました。これは、Limine ブートローダーでのカーネルのインストールと削除を自動化することで、カーネルの管理をシンプルにします。

ノート: x86_64 アーキテクチャの UEFI システムにおいては、Limine を更新あるいは再インストールすると、Limine の EFI イメージは自動的に ESP へと配置されます。

/etc/limine-entry-tool.conf を以下のように編集してください:

ヒント: KERNEL_CMDLINE が設定されていない場合、このツールはまず /etc/kernel/cmdline ファイルから読み取ろうとします。このファイルも利用できない場合、代わりに /proc/cmdline から読み取ります。
  • ESP のスペースを節約するために、DRACUT_FALLBACKno に設定して initramfs フォールバックイメージの自動生成を無効化する。

設定ファイルを編集したら、以下のコマンドを root 権限で実行して initramfs を生成し、esp/limine.conf を更新します。

# dracut-rebuild

あるいは、このコマンドのエイリアスを使ってもよいです:

# limine-update

その他の情報は limine-entry-tool の README と設定オプションを参照してください。

Btrfs の Snapper スナップショットとの統合

limine-snapper-syncAUR ツールは Snapper と Limine ブートローダーとを統合します。これは以下の点で便利です:

  • ブートする Snapper スナップショットの選択をサポート。
  • システムのスナップショットから復元する方法として rsyncbtrfs の2つを提供しています。
  • 読み取り専用スナップショットのテスト: overlayfs を使用してイミュータブルなシステムで実験を行い、システム上のオリジナルデータを変更せずに問題を再現することができます。
  • スナップショットからの復元後、「バックアップ」エントリが Limine ブートローダーに追加されます。これにより、必要になったときにバックアップへの巻き戻しが容易になります。
  • 新しいスナップショットが同じブータブルファイルで作成されている場合、破損したブータブルファイルを ESP 上の古いスナップショットを使って自動的に修復します。
  • ブータブルファイルのハッシュ値が ESP 上にある同じファイルのハッシュ値と一致しない場合、ハードウェアの問題が疑われるエラーメッセージを自動的に記録します。

セットアップ

ノート: (ブータブルスナップショットの数とインストールしたいカーネルバージョンの数によりますが) ESP には 1GB 以上を割り当てることが推奨されます。

1. Snapper にルートサブボリュームの構成が存在することを確認してください。

2. esp/limine.conf//Snapshots/Snapshots キーワードを加えてください。これは、自動生成されるスナップショットエントリに対応します。

例:

limine.conf
/+Arch Linux
comment: Any comment
comment: Machine-ID=yyyyyyyyyyyyyyyyyy

    //Linux
    protocol: linux
    kernel_path: boot():/vmlinuz-linux
    kernel_cmdline: root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw rootflags=subvol=/@
    module_path: boot():/initramfs-linux.img
    
    //Snapshots
ノート:

キーワードは、どちらか一方のみを使用してください:

  • //Snapshots は OS ブートエントリブロック内に記述します。
  • /Snapshots は OS ブートエントリブロック外に記述します。

/etc/machine-id のマシン ID を含めるのは任意ですが、自動識別に便利です。ブートエントリの名称変更はこのツールには影響しません。


カスタムのフラット Snapper レイアウトを使用する場合は、/etc/limine-snapper-sync.conf 設定ファイルを変更することを忘れないでください:

  • ルートサブボリュームへのパスは ROOT_SUBVOLUME_PATH で指定してください。
  • ルートスナップショットへのパスは ROOT_SNAPSHOTS_PATH で指定してください。

3. 次に、limine-snapper-watcher.service システムサービスを有効化してください。これは、Snapper リストが変更された場合にブートメニューにスナップショットエントリを自動的に生成します。

ヒント:

スナップショットからブートした際にワンクリックで復元できるデスクトップ通知を X11 または Wayland で受け取りたい場合は、dunst をインストールしてください。


dracut の場合:

1. ESP 上の limine.conf のブートエントリの作成を自動化するには limine-dracut-supportAUR をインストールしてください。詳細は #Dracut サポート を見てください。

2. 自動生成されたスナップショットエントリを示す //Snapshots キーワードか /Snapshots キーワードを esp/limine.conf に追加してください。

詳細は limine-snapper-sync の README と設定オプションを参照してください。

コマンド

  • limine-snapper-sync: Limine のスナップショットエントリを Snapper のリストと同期させます。
  • limine-snapper-list: 現在の Limine スナップショットエントリを表示します。
  • limine-snapper-info: バージョンとブータブルスナップショットの総数を表示し、ブータブルファイルの検証を行います。
  • limine-snapper-restore: 選択したスナップショットから、一致するカーネルのバージョンを含めて、システムを復元します。

既知の制限

  • サポートは Snapper レイアウトのみで、Snapper ではない任意の Btrfs レイアウトはサポート外です。
  • ツールがインストールされた時よりも前に作成された古いスナップショットのブータブルスナップショットエントリは生成できません。そのようなスナップショットには、対応するカーネルバージョンがたいてい記録されていないからです。

参照

翻訳ステータス: このページは en:Limine の翻訳バージョンです。最後の翻訳日は 2024-11-23 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。