2020年07月03日

os-prober(grub-mkconfigでほかのosを見つけてgrub.cfgに記述するソフト)のmicrocode対応で、唯一デフォルト対応だったmanjaro依存から離脱が可能に。linuxのlinuxによるlinuxのためのマルチブート

上のタイトルの件、archlinuxでできたら、と
悶々と取り組んでおりましたが、さっぱりだめで、
アタマを切り替えsparky(debian系)でできないか、
やってみたら、あっさりできました。

/usr/lib/linux-boot-probes/mounted/40grub2の83、84行目に追記

#initrd="$(echo "$2" | sed 's/(.*)//')" ←81行目コメントアウト
 ↓  ↓  ↓
# Initrd same.
shift 1
initrd="$(echo "$@" | sed 's/(.*)//')"

 
/etc/grub.d/30_os-proberの246行目を変更

LINITRD="`echo ${LINUX} | cut -d ':' -f 5`"
 ↓  ↓  ↓  ↓  ↓  ↓
LINITRD="`echo ${LINUX} | cut -d ':' -f 5 | tr '^' ' '`"

$ sudo update-grub
もしくは、
$ sudo grub-mkconfig -o /boot/grub/grub.cfg

これで、archlinux系のimgファイルを使って、
microcodeを反映する系のディストリビューションでも、
okになりました。ubuntuでは試していないですが、
debian系ならおそらく大丈夫でしょう。

update-grubの実行の結果、/boot/grub/grub.cfgの
30_os-proberのエリアに、archlinuxなら、

initrd /boot/amd-ucode.img /boot/initramfs-linux.img

と記録され、manjaroなら、

initrd /boot/amd-ucode.img /boot/initramfs-5.6-x86_64.img

などと、記録されるようになります。

microcodeが反映されているかどうかは、
$ dmesg | grep microcode
セキュリティにうるさいmanjaroではsudoを付けて実行。

[ 0.327032] microcode: CPU0: patch_level=0x08101013
[ 0.327037] microcode: CPU1: patch_level=0x08101013
[ 0.327040] microcode: CPU2: patch_level=0x08101013
[ 0.327045] microcode: CPU3: patch_level=0x08101013
[ 0.327075] microcode: Microcode Update Driver: v2.2.

のような表示が出ますが、patch_levelと
出るから、効いているんじゃないですかね。
効いていない?
archlinuxなどで説明されている通りには、
grub.cfgの記述にはなったのですが。

archlinux系(カーネルのバージョン版数が入る場合)が
混在するマルチブート(grub2)
の場合のみの話ですが、、、カーネルが更新されるたびに、
いちいち手動でgrub.cfgを修正しなくても、
grub2によるマルチブートが維持されるようにはなりました。

archlinux(archbang)では、何をやっても
             ↓
initrd /boot/amd-ucode.img^/boot/initramfs-5.6-x86_64.img
             ↑
のような記述になっていました。
^」がどうしても、半角スペースに置き換えることができませんで、
2つの記述が1つにつながる状況でした。

microcodeについて、当初は「cpu機能の最適化」みたいな
説明がなされていたように記憶しています。
実際は、cpuの脆弱性をカバーするcodeのようでして、
今となっては、システムの安全性における必須アイテムらしいです。

archbangをインストールすると、amd-ucodeとintel-ucodeの
両方が入っている状態でインストールされます。
archbangそのものをgrubで起動するぶんには、os-proberは関係なく、

initrd /boot/intel-ucode.img /boot/amd-ucode.img /boot/initramfs-linux.img

のような記述になります。intel-ucodeかamd-ucodeかどうらか
一つは要らないわけで、pacman -R でアンインストールすると
いいと思います。存在しても、起動にはまったく差し障りありません。
存在するまま、片側だけ効かせたい場合は、
/etc/default/grubに、
GRUB_EARLY_INITRD_LINUX_STOCK="amd-ucode.img"
とか、
GRUB_EARLY_INITRD_LINUX_STOCK="intel-ucode.img"
とか、使うほうのucode.imgを記せば
無用なucode.imgがgrub.cfgのinitrd行に
入ることはないはずです。

反映には、
$ sudo update-grub
が必要です。


posted by ブログ開設者 at 00:43| Comment(0) | linux | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: