「Systemd-boot」の版間の差分
(→Windows の bcdedit を使用した手動入力: 翻訳修正) |
|||
(4人の利用者による、間の18版が非表示) | |||
2行目: | 2行目: | ||
[[Category:ブートローダー]] |
[[Category:ブートローダー]] |
||
[[de:Gummiboot]] |
[[de:Gummiboot]] |
||
− | [[en: |
+ | [[en:Systemd-boot]] |
− | [[es: |
+ | [[es:Systemd-boot]] |
− | [[ru: |
+ | [[ru:Systemd-boot]] |
+ | [[zh-hans:Systemd-boot]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|Arch ブートプロセス}} |
{{Related|Arch ブートプロセス}} |
||
{{Related|ブートローダー}} |
{{Related|ブートローダー}} |
||
+ | {{Related|セキュアブート}} |
||
{{Related|Unified Extensible Firmware Interface}} |
{{Related|Unified Extensible Firmware Interface}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
14行目: | 16行目: | ||
systemd-boot は簡単に設定することができ、Linux カーネルの [[EFISTUB]] や UEFI シェル、grub.efi などの EFI 実行可能ファイルだけを起動できます。 |
systemd-boot は簡単に設定することができ、Linux カーネルの [[EFISTUB]] や UEFI シェル、grub.efi などの EFI 実行可能ファイルだけを起動できます。 |
||
+ | == インストール == |
||
− | {{Warning|systemd-boot は EFISTUB カーネルのブートメニューを提供します。{{Bug|33745}} にあるように EFISTUB カーネルの起動に問題が起こる場合は、[[GRUB]] や [[Syslinux]]、または [[ブートローダー#ELILO|ELILO]] といった EFISTUB を使用しないブートローダーを使ってください。}} |
||
+ | === EFI ブートマネージャのインストール === |
||
− | {{Note|この記事では [[UEFI#EFI System Partition|EFI System Partition]] (ESP) のマウントポイントを {{ic|$esp}} で示します。}} |
||
+ | ''systemd-boot'' の EFI ブートマネージャをインストールする場合、まず UEFI モードでシステムが起動しているかどうか、[[Unified Extensible Firmware Interface#UEFI 変数|UEFI 変数]]が利用できるかどうか確かめてください。{{ic|efivar --list}} コマンドを実行することでチェックできます。 |
||
− | == インストール == |
||
+ | ''systemd-boot'' は [[EFI システムパーティション]] (ESP) からしか [[EFISTUB]] カーネルをロードできません。カーネルを最新状態に保つために、ESP は {{ic|/boot}} にマウントすることが'''推奨'''されています。ESP を {{ic|/boot}} にマウントしなかった場合、カーネルと initramfs を ESP にコピーする必要があります。詳しくは [[EFISTUB#他の ESP マウントポイント]]を見てください。 |
||
− | === EFI ブート === |
||
− | まず、[[Unified_Extensible_Firmware_Interface#UEFI 変数のサポートを正しく動作させるための必要条件|EFI 変数にアクセスできるかチェック]]して UEFI モードで起動していることを確認してください。また、EFI System Partition が正しくマウントされて、カーネルと initramfs が ESP にコピーされていないと、systemd-boot は他のパーティションから EFI バイナリをロードすることができません。以上のことから systemd-boot を使う時は ESP を {{ic|/boot}} にマウントすることを強く推奨します。ESP を {{ic|/boot}} 以外に作りたい場合、[[#アップデート]] を見て下さい。 |
||
+ | このページでは ESP のマウントポイントを {{ic|''esp''}} として表します (大抵の場合は {{ic|/boot}} です)。 |
||
− | 以下のコマンドを実行することで systemd-boot のバイナリがあなたの EFI System Partition にコピーされ、EFI Boot Manager によってロードされるデフォルトの EFI アプリケーション (デフォルトブートエントリ) として systemd-boot が追加されます。UEFI モードで起動していない場合、また、EFI 変数にアクセスできないときは、ブートエントリの作成は失敗します。ただし systemd-boot のバイナリは ESP 内にある EFI バイナリのデフォルトの配置場所 (x64 環境では {{ic|$esp/EFI/boot/bootx64.efi}}) にコピーされるので systemd-boot を起動すること自体は可能です。 |
||
+ | ESP が {{ic|''esp''}} にマウントされているとして、{{man|1|bootctl}} を使用して EFI システムパーティションに ''systemd-boot'' をインストールします: |
||
− | # bootctl --path=''$esp'' install |
||
+ | # bootctl --path=''esp'' install |
||
+ | 上記のコマンドで ''systemd-boot'' ブートローダーが EFI パーティションにコピーされます。x64 アーキテクチャの場合は2つの同じバイナリ {{ic|''esp''/EFI/systemd/systemd-bootx64.efi}} と {{ic|''esp''/EFI/Boot/BOOTX64.EFI}} が ESP に転送されます。そして EFI ブートマネージャによってロードされるデフォルトの EFI アプリケーション (デフォルトブートエントリ) として ''systemd-boot'' が設定されます。 |
||
− | === レガシーブート === |
||
− | {{Warning|こちらの起動方法は推奨されません。}} |
||
− | レガシーな OS を起動したいときも systemd-boot をインストールすることは可能です。ただし、起動時に systemd-boot の EFI ファイルを実行するようにファームウェアを設定する必要があります: |
||
− | * EFI シェルを使用する。 |
||
− | * ファームウェアのインターフェイスから起動時にロードされる EFI ファイルを設定する。 |
||
− | {{Note|Dell の Latitude シリーズなどでは、EFI ブートを設定するために必要な全てがファームウェアのインターフェイスに揃っており、EFI シェルではコンピュータの ROM に書き込みを行えません。}} |
||
− | 設定できる場合、インストールは簡単です: EFI シェルやファームウェアの設定インターフェイスを開いて、マシンのデフォルトの EFI ファイルを {{ic|/<EFI boot partition>/EFI/systemd/systemd-bootx64.efi}} に変更してください。 |
||
+ | インストールしたら、[[#設定]]セクションに進んで ''systemd-boot'' を正しく機能させるために必要なブートローダーを追加してください。 |
||
− | === アップデート === |
||
+ | === XBOOTLDR を使用したインストール === |
||
− | systemd-boot はあなたの EFI System Partition が {{ic|/boot}} にマウントされていると予め事前設定されており、新しい systemd-boot がインストールされた場合、インストールスクリプトの {{ic|post_install}} によって {{ic|1=bootctl --path=/boot update}} コマンドが自動的に実行されます。ESP が {{ic|/boot}} にマウントされていないときは、手動でコマンドを実行する必要があります。 |
||
+ | systemd バージョン 242 以降では、カーネルと initramfs を {{ic|''esp''}} パーティションから分離するために、 {{ic|"Linux extended boot"}} タイプの別の {{ic|''boot''}} パーティションを作成することができます。 XBOOTLDR [https://systemd.io/BOOT_LOADER_SPECIFICATION] のパーティションタイプ GUID は {{ic|"bc13c2ff-59e6-4262-a352-b275fd6f7172}} である必要があります。 |
||
− | == 設定 == |
||
+ | これは、既存の [[EFI システムパーティション]] が小さすぎる [[Windows と Arch のデュアルブート]] 時に特に役立ちます。 それ以外の場合は、通常どおり{{ic|''esp''}} パーティションを作成し、同じ物理ドライブに {{ic|''boot''}} 用に別のパーティションを作成します。 {{ic|''boot''}} のサイズは、インストールするすべてのカーネルを収容するのに十分なはずです。 |
||
− | === 基本設定 === |
||
+ | {{Note|systemd-boot は、 ESP の場合のようにファイルシステムチェックを行いません。 したがって、他のファイルシステムを使用することは可能ですが、 UEFI 実装が起動中にそれを読み取ることができる場合に限ります。}} |
||
− | 基本的な設定は {{ic|/boot/loader/loader.conf}} に記述します、2つの設定オプションが使えます: |
||
− | + | インストール中に、{{ic|''esp''}} を {{ic|/mnt/efi}} にマウントし、 {{ic|''boot''}} を {{ic|/mnt/boot}} にマウントします。 |
|
+ | chrootになったら、次のコマンドを使用します: |
||
− | * {{ic|timeout}} – メニューのタイムアウト秒数。この値が設定されていない場合、起動中にスペースキーを押した時だけメニューが表示されます。 |
||
+ | # bootctl --esp-path=/efi --boot-path=/boot install |
||
− | 例: |
||
+ | インストールを完了するには [[#Configuration|configure]] ''systemd-boot'' |
||
− | {{hc|$esp/loader/loader.conf| |
||
− | default arch |
||
− | timeout 4 |
||
− | }} |
||
+ | === EFI ブートマネージャの更新 === |
||
− | オプションは両方ともブートメニューで変更するこができ、EFI 変数として保存されます。 |
||
+ | ''systemd-boot'' のバージョンが新しくなった場合、ユーザーがブートマネージャを更新する必要があります。手動で行ったり、もしくは pacman フックを使って自動で更新できます。 |
||
− | {{Note|タイムアウトが設定されてなかった場合、デフォルトのエントリがすぐさま起動します。}} |
||
+ | ==== 手動で更新 ==== |
||
− | === ブートエントリの追加 === |
||
− | {{Note|bootctl は自動的に "Windows Boot Manager" ({{ic|\EFI\Microsoft\Boot\Bootmgfw.efi}}), "EFI Shell" ({{ic|\shellx64.efi}}), "EFI Default Loader" ({{ic|\EFI\Boot\bootx64.efi}}) をチェックします。これらが検出された場合、自動的に適切なエントリが生成されます。ただし、([[rEFInd]] など) 他の EFI アプリケーションは自動検出されないため、カーネルを起動するには、手動で設定してエントリを作成する必要があります。Windows とデュアルブートする場合、Windows のデフォルトオプションである[[Windows と Arch のデュアルブート#高速スタートアップ|高速スタートアップ]]を無効にすることを強く推奨します。}} |
||
+ | ''bootctl'' を使用して ''systemd-boot'' をアップデートしてください。{{ic|path}} パラメータを指定しなかった場合 {{ic|/efi}}, {{ic|/boot}}, {{ic|/boot/efi}} がチェックされます。 |
||
− | {{Tip|{{ic|1=blkid -s PARTUUID -o value /dev/sdxY}} コマンドを使うことで root パーティションの PARTUUID を確認できます。'x' はデバイス文字、'Y' はパーティション番号に置き換えて下さい。確認するのは root パーティションだけで大丈夫です。$esp は確認する必要がありません。}} |
||
+ | # bootctl update |
||
− | bootctl は {{ic|$esp/loader/entries/*.conf}} にあるブートメニューのアイテムを検索します – 1つのファイルに1つのブートエントリを記述します。利用できるオプションは: |
||
+ | ESP を別の場所にマウントしている場合、{{ic|path}} オプションを以下のように指定します: |
||
− | * {{ic|title}} – オペレーティングシステムの名前。'''必須。''' |
||
+ | # bootctl --path=''esp'' update |
||
− | * {{ic|version}} – カーネルバージョン、同じ title のエントリが複数存在する場合にのみ表示されます。任意。 |
||
+ | {{Note|''gummiboot'' から移行する場合、上記のコマンドを使用してからパッケージを削除してください。パッケージを既に削除している場合、{{ic|1=bootctl --path=''esp'' install}} を実行してください。}} |
||
− | * {{ic|machine-id}} – {{ic|/etc/machine-id}} のマシン識別子、title と version が同じエントリが複数存在する場合にのみ表示されます。任意。 |
||
+ | ==== 自動で更新 ==== |
||
− | * {{ic|efi}} – 起動する EFI プログラム、ESP ({{ic|/boot}}) からの相対パス; 例: {{ic|/vmlinuz-linux}}。このオプションか {{ic|linux}} (下を参照) のどちらか一方が'''必須'''です。 |
||
+ | {{AUR|systemd-boot-pacman-hook}} パッケージには上記のアップデートを自動化する [[Pacman フック]]が含まれています。パッケージを[[インストール]]すると {{Pkg|systemd}} パッケージをアップグレードしたときに毎回フックが起動するようになります。また、パッケージをインストールする代わりに、{{ic|/etc/pacman.d/hooks/}} ディレクトリに以下の pacman フックを作成することでも自動更新できます: |
||
− | * {{ic|options}} – EFI プログラムに渡すコマンドラインオプション。任意ですが、Linux を起動する場合 {{ic|1=initrd=''efipath''}} と {{ic|1=root=''dev''}} が最低限必要になります。 |
||
+ | {{hc|/etc/pacman.d/hooks/systemd-boot.hook|2= |
||
− | Linux では、{{ic|linux ''path-to-vmlinuz''}} と {{ic|initrd ''path-to-initramfs''}} を指定することができます。この値は自動で {{ic|efi ''path''}} と {{ic|1=options initrd=''path''}} に翻訳されます – この文法は利便性のためにサポートされており機能に違いはありません。 |
||
+ | [Trigger] |
||
+ | Type = Package |
||
+ | Operation = Upgrade |
||
+ | Target = systemd |
||
+ | [Action] |
||
− | ==== 標準的な root インストール ==== |
||
+ | Description = Updating systemd-boot |
||
+ | When = PostTransaction |
||
+ | Exec = /usr/bin/bootctl update |
||
+ | }} |
||
+ | [https://wiki.archlinux.jp/index.php/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88 セキュアブート] を有効にしている場合は、 pacman フックをインストールして、カーネルと systemd-boot が更新されたときに自動的に再署名することをお勧めします。 |
||
− | LVM や LUKS がない root パーティションを使用するエントリの例: |
||
− | {{hc|/ |
+ | {{hc|/etc/pacman.d/hooks/99-secureboot.hook|2= |
+ | [Trigger] |
||
− | title Arch Linux |
||
+ | Operation = Install |
||
− | linux /vmlinuz-linux |
||
+ | Operation = Upgrade |
||
− | initrd /initramfs-linux.img |
||
+ | Type = Package |
||
− | options root=PARTUUID=14420948-2cea-4de7-b042-40f67c618660 rw |
||
+ | Target = linux |
||
+ | Target = systemd |
||
+ | |||
+ | [Action] |
||
+ | Description = Signing Kernel for SecureBoot |
||
+ | When = PostTransaction |
||
+ | Exec = /usr/bin/sh -c "/usr/bin/find /boot/ -type f \( -name 'vmlinuz-*' -o -name 'systemd*' \) -exec /usr/bin/sh -c 'if ! /usr/bin/sbverify --list {} 2>/dev/null {{!}} /usr/bin/grep -q \"signature certificates\"; then /usr/bin/sbsign --key db.key --cert db.crt --output {} {}; fi' \;" |
||
+ | Depends = sbsigntools |
||
+ | Depends = findutils |
||
+ | Depends = grep |
||
}} |
}} |
||
+ | 新しいパッケージを追加するたびに、 {{ic|Target}} を複製する必要があります。 {{ic|find}} ステートメントに関しては、ファイル名の条件があり、APLM フックがスペースで分割されているため、フックが適切に解析されるように、ステートメント全体を引用符で囲む必要がありました。 systemd-boot はサブディレクトリにあるため、 {{ic|-maxdepth}} 引数を削除するように、深さも調整する必要がありました。 煩わしさを避けるために、確信が持てない場合は、テストするパッケージを再インストールして、フックと署名部分が正常に処理されるかどうかを確認してください。 詳細については、 [[Pacman#フック]] または {{man|5|alpm-hooks}} を参照してください。 |
||
− | 上の例にある PARTUUID/PARTLABEL は GPT パーティションを識別しています。ファイルシステムを識別する UUID/LABEL とは異なっていることに注意してください。PARTUUID/PARTLABEL には他のファイルシステムでパーティションをフォーマットしなおしても値が変わらないという利点があります。またパーティションにファイルシステムがない (もしくは LABEL をサポートしていない LUKS を使っている) 場合などにも有用です。 |
||
+ | == 設定 == |
||
− | ==== LVM root インストール ==== |
||
+ | === ローダー設定 === |
||
− | [[LVM|論理ボリュームマネージャ]]を使う root パーティションのエントリ例: |
||
+ | ローダーの設定は {{ic|''esp''/loader/loader.conf}} ファイルに保存され、以下のオプションで設定します: |
||
− | {{hc|$esp/loader/entries/arch-lvm.conf|2= |
||
+ | |||
− | title Arch Linux (LVM) |
||
+ | * {{ic|default}} – [[#ローダーの追加]]で定義されるデフォルト選択エントリ。{{ic|.conf}} 拡張子は付けず、{{ic|arch-*}} のようにワイルドカードを使うことができます。 |
||
− | linux /vmlinuz-linux |
||
+ | * {{ic|timeout}} – デフォルトエントリが起動するまでのメニューのタイムアウト秒数。この値が設定されていない場合、起動中に {{ic|Space}} キーを押した時だけメニューが表示されます。 |
||
− | initrd /initramfs-linux.img |
||
+ | * {{ic|editor}} - カーネルパラメータの編集を可能にするかどうかの設定。{{ic|yes}} (デフォルト) は可能になり、{{ic|no}} は無効になります。{{ic|1=init=/bin/bash}} を加えることで root パスワードを回避して root 権限を得ることが出来てしまうため、このオプションは {{ic|no}} に設定することが強く推奨されています。 |
||
− | options root=/dev/mapper/<VolumeGroup-LogicalVolume> rw |
||
+ | * {{ic|auto-entries}} – {{ic|1}} (デフォルト) に設定した場合は Windows, EFI Shell, デフォルトローダーの自動エントリを表示し、{{ic|0}} の場合は表示しません。 |
||
+ | * {{ic|auto-firmware}} – {{ic|1}} (デフォルト) に設定した場合、UEFI ファームウェア設定を起動するエントリを表示し、{{ic|0}} に設定した場合は表示しません。 |
||
+ | * {{ic|console-mode}} – UEFI コンソールモードを変更します: |
||
+ | ** {{ic|0}} の場合は 80x25; |
||
+ | ** {{ic|1}} の場合は 80x50; |
||
+ | ** {{ic|2}} 以上の場合はデバイスファームウェアによって提供されている非標準モード; |
||
+ | ** {{ic|auto}} は適切なモードを自動的に選択します; |
||
+ | ** {{ic|max}} は一番解像度が高いモード; |
||
+ | ** {{ic|keep}} (デフォルト) はファームウェアが選択したモードを維持します; |
||
+ | * {{ic|random-seed-mode}} - ファイル {{ic|''esp''/loader/random-seed}} からランダムシードを読み取るかどうかを制御します。 {{ic|with-system-token}} (デフォルト)に設定すると、EFI 変数 {{ic|LoaderSystemToken}} が設定されている場合にのみファイルからシードがロードされます。 {{ic|always}} に設定すると、 EFI 変数が設定されていなくても、ファイルからシードが読み込まれます。 {{ic|off}} に設定すると、ファイルは無視されます。 |
||
+ | |||
+ | 利用可能なオプションの完全な一覧は {{man|5|loader.conf}} を参照。 |
||
+ | |||
+ | 設定例: |
||
+ | |||
+ | {{hc|''esp''/loader/loader.conf| |
||
+ | default arch.conf |
||
+ | timeout 4 |
||
+ | console-mode max |
||
+ | editor no |
||
}} |
}} |
||
+ | {{Tip| |
||
− | {{ic|<VolumeGroup-LogicalVolume>}} は実際の VG や LV の名前に置き換えて下さい (例: {{ic|1=root=/dev/mapper/volgroup00-lvolroot}})。また、UUID を使うこともできます: |
||
+ | * systemd-boot はインデント用のタブを受け入れません。代わりにスペースを使用してください。 |
||
− | .... |
||
+ | * {{ic|default}} と {{ic|timeout}} はブートメニューで変更することができ、変更した場合は EFI 変数として保存されます。上記のオプションよりも優先して設定されます。 |
||
− | options root=UUID=<UUID identifier> rw |
||
+ | * {{ic|bootctl set-default ""}} を使用すると、 {{ic|default}} オプションに優先して EFI 変数をクリアできます。 |
||
+ | * 基本的なローダーの設定ファイルは {{ic|/usr/share/systemd/bootctl/loader.conf}} に存在します。}} |
||
+ | === ローダーの追加 === |
||
− | LVM や LUKS がない root パーティションで使っていた {{ic|1=root='''PARTUUID'''=}} の代わりに {{ic|1=root='''UUID'''=}} を使っていることに注意してください。 |
||
+ | ''bootctl'' は {{ic|''esp''/loader/entries/*.conf}} からブートメニューのアイテムを検索します – 各ファイルにそれぞれひとつだけローダーを記述してください。利用可能なオプション: |
||
− | ==== 暗号化 root インストール ==== |
||
+ | * {{ic|title}} – オペレーティングシステムの名前。'''必須。''' |
||
− | root パーティションを暗号化している場合の設定ファイルの例 ([[Dm-crypt|DM-Crypt / LUKS]]): |
||
+ | * {{ic|version}} – カーネルバージョン、同じ title のエントリが複数存在する場合にのみ表示されます。任意。 |
||
+ | * {{ic|machine-id}} – {{ic|/etc/machine-id}} のマシン識別子、title と version が同じエントリが複数存在する場合にのみ表示されます。任意。 |
||
+ | * {{ic|efi}} – 起動する EFI プログラム、ESP ({{ic|/boot}}) からの相対パス。例: {{ic|/vmlinuz-linux}}。このオプションか {{ic|linux}} (下を参照) のどちらか一方が'''必須'''です。 |
||
+ | * {{ic|options}} – EFI プログラムに渡すコマンドラインオプションまたは[[カーネルパラメータ]]。任意ですが、Linux を起動する場合 {{ic|1=initrd=''efipath''}} と {{ic|1=root=''dev''}} が最低限必要になります。 |
||
+ | Linux を起動する場合、{{ic|efi}} と {{ic|options}} を使う代わりに以下のオプションが使用できます: |
||
− | {{hc|$esp/loader/entries/arch-encrypted.conf|2= |
||
+ | * {{ic|linux}} と {{ic|initrd}} で ESP の適切なファイルの相対パスを指定します。例: {{ic|/vmlinuz-linux}}。この値は自動で {{ic|efi ''path''}} と {{ic|1=options initrd=''path''}} に翻訳されます – この文法は利便性のためにサポートされており機能に違いはありません。 |
||
− | title Arch Linux Encrypted |
||
− | linux /vmlinuz-linux |
||
− | initrd /initramfs-linux.img |
||
− | options cryptdevice=UUID=<UUID>:<mapped-name> root=UUID=<luks-UUID> quiet ro |
||
− | }} |
||
+ | ''arch_os'' というラベルが付いたパーティションから Arch を起動して Intel CPU の[[マイクロコード]]をロードするローダーファイルの例: |
||
− | 上記の例では UUID を使っています。必要であれば、PARTUUID で UUID を置き換えることもできます。{{ic|<luks-UUID>}} は暗号化を解除した後の実際の root ファイルシステムの UUID を示しています ({{Ic|/dev/mapper/<mapped-name>}})。デバイスの UUID ではありません。[[Dm-crypt/システム設定#ブートローダー]]を見て下さい。 |
||
+ | {{hc|''esp''/loader/entries/arch.conf|2= |
||
+ | title Arch Linux |
||
+ | linux /vmlinuz-linux |
||
+ | initrd /intel-ucode.img |
||
+ | initrd /initramfs-linux.img |
||
+ | options root=LABEL=''arch_os'' rw}} |
||
+ | ''bootctl'' は自動的に "Windows Boot Manager" ({{ic|/EFI/Microsoft/Boot/Bootmgfw.efi}}), "EFI Shell" ({{ic|/shellx64.efi}}), "EFI Default Loader" ({{ic|/EFI/BOOT/bootx64.efi}}) をチェックします。また、{{ic|/EFI/Linux}} にカーネルファイルが存在しないかもチェックされます。これらが検出された場合、自動的に適切なエントリが生成されます ({{ic|auto-windows}}, {{ic|auto-efi-shell}}, {{ic|auto-efi-default}})。これらのエントリを手動でローダー設定する必要はありません。ただし、([[rEFInd]] など) 他の EFI アプリケーションは自動検出されないため、Linux カーネルを起動するには、手動で設定してエントリを作成する必要があります。 |
||
− | {{ic|\EFI\arch\grub.efi}} など他の EFI プログラムを追加することもできます。 |
||
+ | |||
+ | {{Note| |
||
+ | * Windows とデュアルブートする場合、Windows のデフォルトオプションである[[Windows と Arch のデュアルブート#高速スタートアップ|高速スタートアップ]]を無効にすることを強く推奨します。 |
||
+ | * 必要な場合は {{ic|initrd}} で Intel のマイクロコードをロードしてください。例は[[マイクロコード#systemd-boot]] を参照。 |
||
+ | * {{ic|1=blkid -s PARTUUID -o value /dev/sd''xY''}} コマンドを使うことで root パーティションの PARTUUID を確認できます。{{ic|''x''}} はデバイス文字、{{ic|''Y''}} はパーティション番号に置き換えて下さい。確認するのは root パーティションだけで大丈夫です。{{ic|''esp''}} は確認する必要がありません。 |
||
+ | }} |
||
+ | |||
+ | {{Tip| |
||
+ | * 設定済みのブートエントリは {{ic|bootctl list}} コマンドで確認できます。 |
||
+ | * サンプルエントリファイルが {{ic|/usr/share/systemd/bootctl/arch.conf}} に存在します。 |
||
+ | * [[LVM]], [[LUKS]], [[dm-crypt]] などで必要な[[カーネルパラメータ]]についてはそれぞれのページを確認してください。 |
||
+ | }} |
||
==== EFI シェルや他の EFI アプリ ==== |
==== EFI シェルや他の EFI アプリ ==== |
||
− | EFI シェル |
+ | [https://wiki.archlinux.jp/index.php/Unified_Extensible_Firmware_Interface#UEFI_.E3.82.B7.E3.82.A7.E3.83.AB EFI シェル] と [https://wiki.archlinux.jp/index.php/REFInd#.E3.83.84.E3.83.BC.E3.83.AB 他のEFIアプリケーション] を ESP にインストールした場合は、次のスニペットを使用できます。 |
+ | |||
+ | {{Note|{{ic|efi}} 行のファイルパスパラメータは、"esp" マウントポイントを基準にしています。 {{ic|/boot}} にマウントされていて、EFI バイナリが {{ic|/boot/EFI/xx.efi}} と {{ic|/boot/yy.efi}} にある場合は、次のようになります。 パラメータをそれぞれ {{ic|efi/EFI/xx.efi}} および {{ic|efi/yy.efi}} として指定します。}} |
||
+ | |||
+ | カスタム UEFI シェルローダーのロード例: |
||
− | {{hc| |
+ | {{hc|''esp''/loader/entries/uefi-shell-v1-x86_64.conf|2= |
title UEFI Shell x86_64 v1 |
title UEFI Shell x86_64 v1 |
||
efi /EFI/shellx64_v1.efi |
efi /EFI/shellx64_v1.efi |
||
}} |
}} |
||
− | {{hc| |
+ | {{hc|''esp''/loader/entries/uefi-shell-v2-x86_64.conf|2= |
title UEFI Shell x86_64 v2 |
title UEFI Shell x86_64 v2 |
||
efi /EFI/shellx64_v2.efi |
efi /EFI/shellx64_v2.efi |
||
}} |
}} |
||
+ | === /EFI/Linux のカーネルの準備 === |
||
− | === セキュリティ === |
||
+ | カーネル・初期 RAM ディスク (initrd)・カーネルコマンドライン・{{ic|/etc/os-release}} をひとつのファイルにまとめた特殊なカーネルファイルとして ''/EFI/Linux'' が検索されます。セキュアブートするために簡単にファイルに署名することができます。 |
||
− | {{ic|e}} を押すことで systemd-boot のブートメニューからカーネルコマンドラインのパラメータを編集することができますが ([[#キー一覧]]を参照)、これは場合によってセキュリティ上の欠陥となることがあるので注意してください。例えば {{ic|1=init=/bin/bash}} のように {{ic|1=init=}} を再定義することで、設定された root パスワードを迂回して、直接 root としてマシンを起動することが出来てしまいます。いまのところ systemd-boot にはパスワード機能がないためカーネルパラメータの変更を防ぐことはできません。コンピュータが起動されないようにするためには、ハードウェアレベル (UEFI/BIOS) でパスワードを設定する必要があります。 |
||
+ | {{Note|{{ic|systemd-boot}} は ID を生成して自動的にエントリを追加するために {{ic|os-release}} ファイルに {{ic|VERSION_ID}} または {{ic|BUILD_ID}} のどちらかを必要としますが、Arch の {{ic|os-release}} には含まれていません。どちらかを記述したコピーを作成するか、スクリプトで自動的に生成するようにしてください}} |
||
− | セキュリティはいくつかのレベルからなり、物理的なアクセスによってセキュリティが破られることもあるため、ディスクを [[dm-crypt]] で暗号化すると良いかもしれません (特にマシンがノートパソコンの場合)。これについては systemd-boot とは関係ありません。 |
||
+ | |||
+ | 使用したいカーネルコマンドラインをファイルに記述して以下のようにバンドルファイルを作成してください: |
||
+ | |||
+ | {{hc|Kernel packaging command:|2=objcopy \ |
||
+ | --add-section .osrel="/usr/lib/os-release" --change-section-vma .osrel=0x20000 \ |
||
+ | --add-section .cmdline="kernel-command-line.txt" --change-section-vma .cmdline=0x30000 \ |
||
+ | --add-section .linux="vmlinuz-file" --change-section-vma .linux=0x40000 \ |
||
+ | --add-section .initrd="initrd-file" --change-section-vma .initrd=0x3000000 \ |
||
+ | "/usr/lib/systemd/boot/efi/linuxx64.efi.stub" "''linux''.efi"}} |
||
+ | |||
+ | 生成した {{ic|''linux''.efi}} ファイルには任意で署名することができます。 |
||
+ | |||
+ | {{ic|''linux''.efi}} は {{ic|''esp''/EFI/Linux}} にコピーしてください。 |
||
=== ハイバネーション === |
=== ハイバネーション === |
||
148行目: | 215行目: | ||
[[サスペンドとハイバネート]]の記事を参照してください。 |
[[サスペンドとハイバネート]]の記事を参照してください。 |
||
+ | === パスワードで保護されたカーネルパラメータエディタ === |
||
− | == ブートメニュー == |
||
+ | |||
+ | {{ic|password}} 設定オプションをサポートしている {{AUR|systemd-boot-password}} をインストールすることもできます。{{ic|sbpctl generate}} を使ってオプションで指定する値を生成できます。 |
||
+ | |||
+ | ''systemd-boot-password'' は以下のコマンドでインストールしてください: |
||
+ | |||
+ | {{bc|1=# sbpctl install ''esp''}} |
||
+ | |||
+ | カーネルパラメータを編集する前にパスワードの入力が求められるようになります。 |
||
− | + | == ブートメニューのキー一覧 == |
|
メニューの中では以下のキーが使われます: |
メニューの中では以下のキーが使われます: |
||
157行目: | 232行目: | ||
* {{ic|d}} - (不揮発の EFI 変数に保存された) デフォルトエントリを選択して起動 |
* {{ic|d}} - (不揮発の EFI 変数に保存された) デフォルトエントリを選択して起動 |
||
* {{ic|t/T}} - (不揮発の EFI 変数に保存された) タイムアウトを調整 |
* {{ic|t/T}} - (不揮発の EFI 変数に保存された) タイムアウトを調整 |
||
− | * {{ic|e}} - カーネルコマンドラインを編集 |
+ | * {{ic|e}} - カーネルコマンドラインを編集。{{ic|editor}} オプションが {{ic|0}} に設定されている場合は使えません |
* {{ic|q}} - 終了 |
* {{ic|q}} - 終了 |
||
* {{ic|v}} - systemd-boot と UEFI のバージョンを表示 |
* {{ic|v}} - systemd-boot と UEFI のバージョンを表示 |
||
170行目: | 245行目: | ||
* {{ic|s}} - EFI Shell |
* {{ic|s}} - EFI Shell |
||
* {{ic|1-9}} - エントリの番号 |
* {{ic|1-9}} - エントリの番号 |
||
+ | |||
+ | == ヒントとテクニック == |
||
+ | |||
+ | === 再起動後の起動対象を選択する === |
||
+ | |||
+ | ブートマネージャーは systemctl コマンドに統合されており、再起動後に起動させるオプションを選択できます。例えば、カスタムカーネルのエントリファイルが {{ic|''esp''/loader/entries/arch-custom.conf}} にあるとき、次のようにするとデフォルト設定はそのままにカスタムカーネルが起動します: |
||
+ | |||
+ | $ systemctl reboot --boot-loader-entry=arch-custom |
||
+ | <!-- To see a list of possible entries pass the {{ic|--help}} option. --> |
||
+ | |||
+ | マザーボードのファームウェアを起動させるときは次のようにします: |
||
+ | |||
+ | $ systemctl reboot --firmware-setup |
||
+ | |||
+ | === Unified Kernel Image を使う === |
||
+ | |||
+ | systemd-boot は {{ic|''esp''/EFI/Linux/}} 内の unified kernel image を検索します。 |
||
+ | [https://systemd.io/BOOT_LOADER_SPECIFICATION#type-2-efi-unified-kernel-images unified kernel image] はカーネル、initrd、カーネルのコマンドライン、{{ic|/etc/os-release}} およびスプラッシュスクリーンを単一ファイルに格納したもので、[[セキュアブート]] のための署名が容易に可能です。 |
||
+ | |||
+ | 作成するには、カーネルコマンドラインを指定した上で次のようにします: |
||
+ | |||
+ | {{bc|1= |
||
+ | $ objcopy \ |
||
+ | --add-section .osrel="/usr/lib/os-release" --change-section-vma .osrel=0x20000 \ |
||
+ | --add-section .cmdline="kernel-command-line.txt" --change-section-vma .cmdline=0x30000 \ |
||
+ | --add-section .splash="/usr/share/systemd/bootctl/splash-arch.bmp" --change-section-vma .splash=0x40000 \ |
||
+ | --add-section .linux="vmlinuz-file" --change-section-vma .linux=0x2000000 \ |
||
+ | --add-section .initrd="initrd-file" --change-section-vma .initrd=0x3000000 \ |
||
+ | "/usr/lib/systemd/boot/efi/linuxx64.efi.stub" "''linux''.efi" |
||
+ | }} |
||
+ | |||
+ | 作成した {{ic|''linux''.efi}} を [https://wiki.archlinux.jp/index.php/%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%96%E3%83%BC%E3%83%88#.E8.87.AA.E5.88.86.E3.81.A7.E7.BD.B2.E5.90.8D.E3.81.97.E3.81.9F.E9.8D.B5.E3.82.92.E4.BD.BF.E3.81.86 署名] することもできます。 |
||
+ | |||
+ | {{ic|''linux''.efi}} を {{ic|''esp''/EFI/Linux/}} にコピーしてください。 |
||
+ | |||
+ | === Grml on ESP === |
||
+ | |||
+ | {{Note|以下の手順は、Grml 専用ではありません。若干の調整で他のソフト (例: [http://www.system-rescue-cd.org/ SystemRescueCD]) のインストールも可能です。}} |
||
+ | |||
+ | [https://grml.org/ Grml] は、システム管理とレスキュー用のソフトウェアを集めた小さなライブシステムです。 |
||
+ | |||
+ | Grml を ESP にインストールするには、カーネル {{ic|vmlinuz}}、 initramfs {{ic|initrd.img}}、 圧縮イメージ {{ic|grml64-small.squashfs}} を iso ファイルから ESP にコピーするだけです。そのためには、まず [https://grml.org/grml64-small.iso] ファイルをダウンロードして(マウントポイントは以降 ''mnt'' と表記される) ファイルをマウントします。カーネルと initramfs は {{ic|''mnt''/boot/grml6 small/}} にあり、圧縮されたイメージは {{ic|''mnt''/live/grml64-small/}} にあります。 |
||
+ | |||
+ | 次に、Grml用のディレクトリをESPに作成します: |
||
+ | |||
+ | # mkdir -p ''esp''/grml |
||
+ | |||
+ | 上記のファイルをコピーします: |
||
+ | |||
+ | # cp ''mnt''/boot/grml64small/vmlinuz ''esp''/grml |
||
+ | # cp ''mnt''/boot/grml64small/initrd.img ''esp''/grml |
||
+ | # cp ''mnt''/live/grml64-small/grml64-small.squashfs ''esp''/grml |
||
+ | |||
+ | 最後のステップで、システムブートローダー用のエントリを作成します。 {{ic|''esp''/loader/entries}} 次の内容の {{ic|grml.conf}} ファイルを作成します: |
||
+ | |||
+ | {{hc|''esp''/loader/entries/grml.conf|2= |
||
+ | title Grml Live Linux |
||
+ | linux /grml/vmlinuz |
||
+ | initrd /grml/initrd.img |
||
+ | options apm=power-off boot=live live-media-path=/grml/ nomce net.ifnames=0}} |
||
+ | |||
+ | 使用可能なブートオプションの概要については、 [http://git.grml.org/?p=grml-live.git;a=blob_plain;f=templates/GRML/grml-cheatcodes.txt;hb=HEAD cheatcode for Grml] |
||
+ | |||
+ | === BIOS システムでの systemd-boot === |
||
+ | |||
+ | [https://systemd.io/BOOT_LOADER_SPECIFICATION/ ブートローダーの仕様] に従う BIOS システム用のブートローダーが必要な場合は、 BIOS システムで systemd-boot を押してサービスを開始できます。 [[Clover]] ブートローダーは BIOS システムからの起動をサポートし、シミュレートされた EFI 環境を提供します。 |
||
== トラブルシューティング == |
== トラブルシューティング == |
||
− | + | === BIOS モードで起動後にインストール === |
|
+ | {{Warning|こちらの起動方法は推奨されません。}} |
||
− | {{ic|bootctl install}} コマンドが失敗した場合、{{ic|efibootmgr}} ユーティリティを使って EFI ブートエントリを手動で作成することができます: |
||
+ | BIOS モードで OS を起動したいときも ''systemd-boot'' をインストールすることは可能です。ただし、起動時に ''systemd-boot'' の EFI ファイルを実行するようにファームウェアを設定する必要があります: |
||
− | # efibootmgr -c -d /dev/sdX -p Y -l /EFI/systemd/systemd-bootx64.efi -L "Linux Boot Manager" |
||
+ | * EFI シェルを使用する。 |
||
+ | * ファームウェアのインターフェイスから起動時にロードされる EFI ファイルを設定する。 |
||
+ | 設定できる場合、インストールは簡単です: EFI シェルやファームウェアの設定インターフェイスを開いて、マシンのデフォルトの EFI ファイルを {{ic|''esp''/EFI/systemd/systemd-bootx64.efi}} (32ビット環境の場合 {{ic|systemd-bootia32.efi}}) に変更してください。 |
||
− | === Windows をアップグレードした後にメニューが表示されない === |
||
+ | {{Note|Dell の Latitude シリーズなどでは、EFI ブートを設定するために必要な全てがファームウェアのインターフェイスに揃っており、EFI シェルではコンピュータの ROM に書き込みを行えません。}} |
||
− | Windows 8 から Windows 8.1 にアップグレードした場合などに、ブートメニューが表示されなくなることがあります: |
||
− | * Secure Boot (UEFI 設定) と Fast Startup (Windows の電源オプション設定) が両方とも無効になっていることを確認してください。 |
||
− | * Windows Boot Manager よりも Linux Boot Manager が UEFI で優先されていることを確認してください (Hard Drive Disk Priority などの UEFI 設定)。 |
||
+ | === efibootmgr を使って手動エントリを追加する === |
||
− | {{Note|Windows 8.x 以上 (Windows 10 も含む) では、起動するたびにインストールした UEFI のエントリが上書きされてしまい、Windows が一番優先して起動されます。たとえ UEFI のファームウェアでブートの順番を変えたとしても、一度 Windows 10 を起動してしまえばそれで Windows が一番上に戻ります。マザーボードの 'Change Boot Option' キーが何なのか知っておいて下さい。}} |
||
+ | |||
− | Windows 8.x 以上で、設定したブートの順番を守るようにさせたい場合、Windows のグループポリシーを入力して起動時にバッチファイル (.bat) を起動するようにしてください。Windows 上で以下を実行: |
||
+ | {{ic|bootctl install}} コマンドが失敗した場合、{{Pkg|efibootmgr}} ユーティリティを使って EFI ブートエントリを手動で作成することができます: |
||
− | * 管理者権限でコマンドプロンプトを開いて下さい。そして {{ic|bcdedit /enum firmware}} と入力します。 |
||
+ | |||
− | * 説明に "Linux" と付いているファームウェアアプリケーションを探して下さい。例: "Linux Boot Manager"。 |
||
+ | # efibootmgr -c -d /dev/sdX -p Y -l "\EFI\systemd\systemd-bootx64.efi" -L "Linux Boot Manager" |
||
− | * 括弧も含めて Identifier をコピーします。例: {{ic|<nowiki>{31d0d5f4-22ad-11e5-b30b-806e6f6e6963}</nowiki>}}。 |
||
+ | |||
− | * gpedit から ローカルコンピュータポリシー-> コンピューターの構成-> Windows の設定-> スクリプト(スタートアップ/シャットダウン) を開いて "スタートアップ" を選択してください。"スタートアップのプロパティ" という名前のウィンドウが開きます。 |
||
+ | {{ic|/dev/sdXY}} は [[EFI システムパーティション]]に置き換えてください。 |
||
− | * "スクリプト"タブの、追加ボタンを押して下さい。 |
||
+ | |||
− | * スクリプトに名前を付けます。例: {{ic|bootorder.bat}}。 |
||
+ | {{Note|EFI イメージのパスでは区切り文字としてバックスラッシュ ({{ic|\}}) を使用します。}} |
||
− | * "スクリプトのパラメーター" には {{ic|<nowiki>bcdedit /set {fwbootmgr} DEFAULT {先にコピーした identifier}</nowiki>}} と入力します (例: {{ic|<nowiki>bcdedit /set {fwbootmgr} DEFAULT {31d0d5f4-22ad-11e5-b30b-806e6f6e6963}</nowiki>}})。 |
||
+ | |||
+ | === Windows の bcdedit を使用した手動入力 === |
||
+ | |||
+ | 何らかの理由で Windows から EFI ブートエントリを作成する必要がある場合は、管理者プロンプトから次のコマンドを使用してください。 |
||
+ | |||
+ | # bcdedit /copy {bootmgr} /d "Linux Boot Manager" |
||
+ | # bcdedit /set {guid} path \EFI\systemd\systemd-bootx64.efi |
||
+ | |||
+ | {{ic|{guid} }} を最初のコマンドによってリターンされた ID に置き換えます。これをデフォルトのエントリとして設定するには: |
||
+ | |||
+ | # bcdedit /default {guid} |
||
+ | |||
+ | === Windows をアップグレードした後にメニューが表示されない === |
||
+ | [[Unified Extensible Firmware Interface#Windows によってブート順序が変わってしまう]]を見てください。 |
||
− | 上記の設定が上手く行かない場合、Windows 環境のどこかに {{ic|<nowiki>bcdedit /set {fwbootmgr} DEFAULT {先にコピーした identifier}</nowiki>}} と記述したバッチファイルを作成して、gpedit から保存したファイルを参照してください。 |
||
== 参照 == |
== 参照 == |
||
− | * |
+ | * https://www.freedesktop.org/wiki/Software/systemd/systemd-boot/ |
+ | * https://github.com/systemd/systemd/tree/master/src/boot/efi |
||
+ | * https://bbs.archlinux.org/viewtopic.php?id=254374 |
||
+ | * https://systemd.io/BOOT_LOADER_SPECIFICATION/ |
2020年12月24日 (木) 12:54時点における版
systemd-boot (旧名 gummiboot) は設定済みの EFI イメージを実行できるシンプルな UEFI ブートマネージャです。デフォルトのエントリは設定したパターン (glob) または画面上のメニューで選択されます。systemd-boot は systemd 220-2 から systemd に同梱されるようになりました。
systemd-boot は簡単に設定することができ、Linux カーネルの EFISTUB や UEFI シェル、grub.efi などの EFI 実行可能ファイルだけを起動できます。
インストール
EFI ブートマネージャのインストール
systemd-boot の EFI ブートマネージャをインストールする場合、まず UEFI モードでシステムが起動しているかどうか、UEFI 変数が利用できるかどうか確かめてください。efivar --list
コマンドを実行することでチェックできます。
systemd-boot は EFI システムパーティション (ESP) からしか EFISTUB カーネルをロードできません。カーネルを最新状態に保つために、ESP は /boot
にマウントすることが推奨されています。ESP を /boot
にマウントしなかった場合、カーネルと initramfs を ESP にコピーする必要があります。詳しくは EFISTUB#他の ESP マウントポイントを見てください。
このページでは ESP のマウントポイントを esp
として表します (大抵の場合は /boot
です)。
ESP が esp
にマウントされているとして、bootctl(1) を使用して EFI システムパーティションに systemd-boot をインストールします:
# bootctl --path=esp install
上記のコマンドで systemd-boot ブートローダーが EFI パーティションにコピーされます。x64 アーキテクチャの場合は2つの同じバイナリ esp/EFI/systemd/systemd-bootx64.efi
と esp/EFI/Boot/BOOTX64.EFI
が ESP に転送されます。そして EFI ブートマネージャによってロードされるデフォルトの EFI アプリケーション (デフォルトブートエントリ) として systemd-boot が設定されます。
インストールしたら、#設定セクションに進んで systemd-boot を正しく機能させるために必要なブートローダーを追加してください。
XBOOTLDR を使用したインストール
systemd バージョン 242 以降では、カーネルと initramfs を esp
パーティションから分離するために、 "Linux extended boot"
タイプの別の boot
パーティションを作成することができます。 XBOOTLDR [1] のパーティションタイプ GUID は "bc13c2ff-59e6-4262-a352-b275fd6f7172
である必要があります。
これは、既存の EFI システムパーティション が小さすぎる Windows と Arch のデュアルブート 時に特に役立ちます。 それ以外の場合は、通常どおりesp
パーティションを作成し、同じ物理ドライブに boot
用に別のパーティションを作成します。 boot
のサイズは、インストールするすべてのカーネルを収容するのに十分なはずです。
インストール中に、esp
を /mnt/efi
にマウントし、 boot
を /mnt/boot
にマウントします。
chrootになったら、次のコマンドを使用します:
# bootctl --esp-path=/efi --boot-path=/boot install
インストールを完了するには configure systemd-boot
EFI ブートマネージャの更新
systemd-boot のバージョンが新しくなった場合、ユーザーがブートマネージャを更新する必要があります。手動で行ったり、もしくは pacman フックを使って自動で更新できます。
手動で更新
bootctl を使用して systemd-boot をアップデートしてください。path
パラメータを指定しなかった場合 /efi
, /boot
, /boot/efi
がチェックされます。
# bootctl update
ESP を別の場所にマウントしている場合、path
オプションを以下のように指定します:
# bootctl --path=esp update
自動で更新
systemd-boot-pacman-hookAUR パッケージには上記のアップデートを自動化する Pacman フックが含まれています。パッケージをインストールすると systemd パッケージをアップグレードしたときに毎回フックが起動するようになります。また、パッケージをインストールする代わりに、/etc/pacman.d/hooks/
ディレクトリに以下の pacman フックを作成することでも自動更新できます:
/etc/pacman.d/hooks/systemd-boot.hook
[Trigger] Type = Package Operation = Upgrade Target = systemd [Action] Description = Updating systemd-boot When = PostTransaction Exec = /usr/bin/bootctl update
セキュアブート を有効にしている場合は、 pacman フックをインストールして、カーネルと systemd-boot が更新されたときに自動的に再署名することをお勧めします。
/etc/pacman.d/hooks/99-secureboot.hook
[Trigger] Operation = Install Operation = Upgrade Type = Package Target = linux Target = systemd [Action] Description = Signing Kernel for SecureBoot When = PostTransaction Exec = /usr/bin/sh -c "/usr/bin/find /boot/ -type f \( -name 'vmlinuz-*' -o -name 'systemd*' \) -exec /usr/bin/sh -c 'if ! /usr/bin/sbverify --list {} 2>/dev/null | /usr/bin/grep -q \"signature certificates\"; then /usr/bin/sbsign --key db.key --cert db.crt --output {} {}; fi' \;" Depends = sbsigntools Depends = findutils Depends = grep
新しいパッケージを追加するたびに、 Target
を複製する必要があります。 find
ステートメントに関しては、ファイル名の条件があり、APLM フックがスペースで分割されているため、フックが適切に解析されるように、ステートメント全体を引用符で囲む必要がありました。 systemd-boot はサブディレクトリにあるため、 -maxdepth
引数を削除するように、深さも調整する必要がありました。 煩わしさを避けるために、確信が持てない場合は、テストするパッケージを再インストールして、フックと署名部分が正常に処理されるかどうかを確認してください。 詳細については、 Pacman#フック または alpm-hooks(5) を参照してください。
設定
ローダー設定
ローダーの設定は esp/loader/loader.conf
ファイルに保存され、以下のオプションで設定します:
default
– #ローダーの追加で定義されるデフォルト選択エントリ。.conf
拡張子は付けず、arch-*
のようにワイルドカードを使うことができます。timeout
– デフォルトエントリが起動するまでのメニューのタイムアウト秒数。この値が設定されていない場合、起動中にSpace
キーを押した時だけメニューが表示されます。editor
- カーネルパラメータの編集を可能にするかどうかの設定。yes
(デフォルト) は可能になり、no
は無効になります。init=/bin/bash
を加えることで root パスワードを回避して root 権限を得ることが出来てしまうため、このオプションはno
に設定することが強く推奨されています。auto-entries
–1
(デフォルト) に設定した場合は Windows, EFI Shell, デフォルトローダーの自動エントリを表示し、0
の場合は表示しません。auto-firmware
–1
(デフォルト) に設定した場合、UEFI ファームウェア設定を起動するエントリを表示し、0
に設定した場合は表示しません。console-mode
– UEFI コンソールモードを変更します:0
の場合は 80x25;1
の場合は 80x50;2
以上の場合はデバイスファームウェアによって提供されている非標準モード;auto
は適切なモードを自動的に選択します;max
は一番解像度が高いモード;keep
(デフォルト) はファームウェアが選択したモードを維持します;
random-seed-mode
- ファイルesp/loader/random-seed
からランダムシードを読み取るかどうかを制御します。with-system-token
(デフォルト)に設定すると、EFI 変数LoaderSystemToken
が設定されている場合にのみファイルからシードがロードされます。always
に設定すると、 EFI 変数が設定されていなくても、ファイルからシードが読み込まれます。off
に設定すると、ファイルは無視されます。
利用可能なオプションの完全な一覧は loader.conf(5) を参照。
設定例:
esp/loader/loader.conf
default arch.conf timeout 4 console-mode max editor no
ローダーの追加
bootctl は esp/loader/entries/*.conf
からブートメニューのアイテムを検索します – 各ファイルにそれぞれひとつだけローダーを記述してください。利用可能なオプション:
title
– オペレーティングシステムの名前。必須。version
– カーネルバージョン、同じ title のエントリが複数存在する場合にのみ表示されます。任意。machine-id
–/etc/machine-id
のマシン識別子、title と version が同じエントリが複数存在する場合にのみ表示されます。任意。efi
– 起動する EFI プログラム、ESP (/boot
) からの相対パス。例:/vmlinuz-linux
。このオプションかlinux
(下を参照) のどちらか一方が必須です。options
– EFI プログラムに渡すコマンドラインオプションまたはカーネルパラメータ。任意ですが、Linux を起動する場合initrd=efipath
とroot=dev
が最低限必要になります。
Linux を起動する場合、efi
と options
を使う代わりに以下のオプションが使用できます:
linux
とinitrd
で ESP の適切なファイルの相対パスを指定します。例:/vmlinuz-linux
。この値は自動でefi path
とoptions initrd=path
に翻訳されます – この文法は利便性のためにサポートされており機能に違いはありません。
arch_os というラベルが付いたパーティションから Arch を起動して Intel CPU のマイクロコードをロードするローダーファイルの例:
esp/loader/entries/arch.conf
title Arch Linux linux /vmlinuz-linux initrd /intel-ucode.img initrd /initramfs-linux.img options root=LABEL=arch_os rw
bootctl は自動的に "Windows Boot Manager" (/EFI/Microsoft/Boot/Bootmgfw.efi
), "EFI Shell" (/shellx64.efi
), "EFI Default Loader" (/EFI/BOOT/bootx64.efi
) をチェックします。また、/EFI/Linux
にカーネルファイルが存在しないかもチェックされます。これらが検出された場合、自動的に適切なエントリが生成されます (auto-windows
, auto-efi-shell
, auto-efi-default
)。これらのエントリを手動でローダー設定する必要はありません。ただし、(rEFInd など) 他の EFI アプリケーションは自動検出されないため、Linux カーネルを起動するには、手動で設定してエントリを作成する必要があります。
EFI シェルや他の EFI アプリ
EFI シェル と 他のEFIアプリケーション を ESP にインストールした場合は、次のスニペットを使用できます。
カスタム UEFI シェルローダーのロード例:
esp/loader/entries/uefi-shell-v1-x86_64.conf
title UEFI Shell x86_64 v1 efi /EFI/shellx64_v1.efi
esp/loader/entries/uefi-shell-v2-x86_64.conf
title UEFI Shell x86_64 v2 efi /EFI/shellx64_v2.efi
/EFI/Linux のカーネルの準備
カーネル・初期 RAM ディスク (initrd)・カーネルコマンドライン・/etc/os-release
をひとつのファイルにまとめた特殊なカーネルファイルとして /EFI/Linux が検索されます。セキュアブートするために簡単にファイルに署名することができます。
使用したいカーネルコマンドラインをファイルに記述して以下のようにバンドルファイルを作成してください:
Kernel packaging command:
objcopy \ --add-section .osrel="/usr/lib/os-release" --change-section-vma .osrel=0x20000 \ --add-section .cmdline="kernel-command-line.txt" --change-section-vma .cmdline=0x30000 \ --add-section .linux="vmlinuz-file" --change-section-vma .linux=0x40000 \ --add-section .initrd="initrd-file" --change-section-vma .initrd=0x3000000 \ "/usr/lib/systemd/boot/efi/linuxx64.efi.stub" "linux.efi"
生成した linux.efi
ファイルには任意で署名することができます。
linux.efi
は esp/EFI/Linux
にコピーしてください。
ハイバネーション
サスペンドとハイバネートの記事を参照してください。
パスワードで保護されたカーネルパラメータエディタ
password
設定オプションをサポートしている systemd-boot-passwordAUR をインストールすることもできます。sbpctl generate
を使ってオプションで指定する値を生成できます。
systemd-boot-password は以下のコマンドでインストールしてください:
# sbpctl install esp
カーネルパラメータを編集する前にパスワードの入力が求められるようになります。
ブートメニューのキー一覧
メニューの中では以下のキーが使われます:
Up/Down
- エントリの選択Enter
- 選択したエントリの起動d
- (不揮発の EFI 変数に保存された) デフォルトエントリを選択して起動t/T
- (不揮発の EFI 変数に保存された) タイムアウトを調整e
- カーネルコマンドラインを編集。editor
オプションが0
に設定されている場合は使えませんq
- 終了v
- systemd-boot と UEFI のバージョンを表示p
- 現在の設定を表示h
- キーマップを表示h/?
- ヘルプ
以下のホットキーを、起動中やメニューで押すことで、特定のエントリを直接起動します:
l
- Linuxw
- Windowsa
- OS Xs
- EFI Shell1-9
- エントリの番号
ヒントとテクニック
再起動後の起動対象を選択する
ブートマネージャーは systemctl コマンドに統合されており、再起動後に起動させるオプションを選択できます。例えば、カスタムカーネルのエントリファイルが esp/loader/entries/arch-custom.conf
にあるとき、次のようにするとデフォルト設定はそのままにカスタムカーネルが起動します:
$ systemctl reboot --boot-loader-entry=arch-custom
マザーボードのファームウェアを起動させるときは次のようにします:
$ systemctl reboot --firmware-setup
Unified Kernel Image を使う
systemd-boot は esp/EFI/Linux/
内の unified kernel image を検索します。
unified kernel image はカーネル、initrd、カーネルのコマンドライン、/etc/os-release
およびスプラッシュスクリーンを単一ファイルに格納したもので、セキュアブート のための署名が容易に可能です。
作成するには、カーネルコマンドラインを指定した上で次のようにします:
$ objcopy \ --add-section .osrel="/usr/lib/os-release" --change-section-vma .osrel=0x20000 \ --add-section .cmdline="kernel-command-line.txt" --change-section-vma .cmdline=0x30000 \ --add-section .splash="/usr/share/systemd/bootctl/splash-arch.bmp" --change-section-vma .splash=0x40000 \ --add-section .linux="vmlinuz-file" --change-section-vma .linux=0x2000000 \ --add-section .initrd="initrd-file" --change-section-vma .initrd=0x3000000 \ "/usr/lib/systemd/boot/efi/linuxx64.efi.stub" "linux.efi"
作成した linux.efi
を 署名 することもできます。
linux.efi
を esp/EFI/Linux/
にコピーしてください。
Grml on ESP
Grml は、システム管理とレスキュー用のソフトウェアを集めた小さなライブシステムです。
Grml を ESP にインストールするには、カーネル vmlinuz
、 initramfs initrd.img
、 圧縮イメージ grml64-small.squashfs
を iso ファイルから ESP にコピーするだけです。そのためには、まず [2] ファイルをダウンロードして(マウントポイントは以降 mnt と表記される) ファイルをマウントします。カーネルと initramfs は mnt/boot/grml6 small/
にあり、圧縮されたイメージは mnt/live/grml64-small/
にあります。
次に、Grml用のディレクトリをESPに作成します:
# mkdir -p esp/grml
上記のファイルをコピーします:
# cp mnt/boot/grml64small/vmlinuz esp/grml # cp mnt/boot/grml64small/initrd.img esp/grml # cp mnt/live/grml64-small/grml64-small.squashfs esp/grml
最後のステップで、システムブートローダー用のエントリを作成します。 esp/loader/entries
次の内容の grml.conf
ファイルを作成します:
esp/loader/entries/grml.conf
title Grml Live Linux linux /grml/vmlinuz initrd /grml/initrd.img options apm=power-off boot=live live-media-path=/grml/ nomce net.ifnames=0
使用可能なブートオプションの概要については、 cheatcode for Grml
BIOS システムでの systemd-boot
ブートローダーの仕様 に従う BIOS システム用のブートローダーが必要な場合は、 BIOS システムで systemd-boot を押してサービスを開始できます。 Clover ブートローダーは BIOS システムからの起動をサポートし、シミュレートされた EFI 環境を提供します。
トラブルシューティング
BIOS モードで起動後にインストール
BIOS モードで OS を起動したいときも systemd-boot をインストールすることは可能です。ただし、起動時に systemd-boot の EFI ファイルを実行するようにファームウェアを設定する必要があります:
- EFI シェルを使用する。
- ファームウェアのインターフェイスから起動時にロードされる EFI ファイルを設定する。
設定できる場合、インストールは簡単です: EFI シェルやファームウェアの設定インターフェイスを開いて、マシンのデフォルトの EFI ファイルを esp/EFI/systemd/systemd-bootx64.efi
(32ビット環境の場合 systemd-bootia32.efi
) に変更してください。
efibootmgr を使って手動エントリを追加する
bootctl install
コマンドが失敗した場合、efibootmgr ユーティリティを使って EFI ブートエントリを手動で作成することができます:
# efibootmgr -c -d /dev/sdX -p Y -l "\EFI\systemd\systemd-bootx64.efi" -L "Linux Boot Manager"
/dev/sdXY
は EFI システムパーティションに置き換えてください。
Windows の bcdedit を使用した手動入力
何らかの理由で Windows から EFI ブートエントリを作成する必要がある場合は、管理者プロンプトから次のコマンドを使用してください。
# bcdedit /copy {bootmgr} /d "Linux Boot Manager" # bcdedit /set {guid} path \EFI\systemd\systemd-bootx64.efi
{guid}
を最初のコマンドによってリターンされた ID に置き換えます。これをデフォルトのエントリとして設定するには:
# bcdedit /default {guid}
Windows をアップグレードした後にメニューが表示されない
Unified Extensible Firmware Interface#Windows によってブート順序が変わってしまうを見てください。