Linuxイメージが.isoファイルとして保存されるマルチブートハイブリッドEFI +レガシーUSBスティックを作成しています。 grub.cfgにシステムを手動で追加したり、イメージを追加したりするたびに何かをやり直すのを避けたかったので、USBドライブ上のファイルを繰り返しながら各ファイルのメニュー項目を作成してロードしました。 grub.cfgで実行したいものと同じbashは次のとおりです。
for iso in "/boot/iso/*.iso"
do
menuentry "$iso" --class os {
loopback loop $iso
linux (loop)/casper/vmlinuz
initrd (loop)/casper/initrd.lz
}
done
ただし、GRUBシェルは自分が依存するファイル名拡張子(ワイルドカード)を実行していないようです。似たような出力をls (hd0,gpt3)/boot/iso
キャプチャしてみましたが、確かにサポートもなく、追加する予定もありません。
たぶんforループでメニューを作成したいという考えを完全に失ったかもしれませんが、これを達成するモジュールがあることを願っています。また、for iso in a.iso b.iso
いくつかのブロックが実際に期待どおりに作成されましたが、その中の変数は置き換えられていないことも確認しました。menuentry
$iso
私の質問は、各.isoファイルのメニュー項目をどのように生成しますか?
ベストアンサー1
GRUBシェルが明らかになったするワイルドカード拡張はサポートされていますが、GRUBのregexpモジュールを初めてロードする場合にのみ可能です。引用符に注意することも重要です。
変数をパラメータとして指定して渡すこともできますmenuentry
(メニュー項目を関数として考えます)。その後、通貨に変換され、次のようにsetparams
設定されます。$1, $2, $3
次のコマンドは、イメージのファイル名をハードコードせずにLinux Mintイメージを正常に起動します。
insmod regexp
for iso in /boot/iso/*.iso
do
menuentry $iso $iso {
echo "Booting from $2"
loopback loop $2
linux (loop)/casper/vmlinuz file=/cdrom/preseed/linuxmint.seed boot=casper iso-scan/filename=$2
initrd (loop)/casper/initrd.lz
}
done
私も見つけました。マルチブートUSBプロジェクト、そうです。正確に私が達成しようとしたことは私の努力を無駄にしました。