続・Arch Linux曰く、Something has gone wrong
先日、Arch Linux曰く、Something has gone wrong - 解せぬ日記でArch Linuxがぶっ壊れた話をしたんだけど、またぶっ壊れた。
原因はやはりnvidiaの349.16-1のパッケージ群っぽい。
よかろう、ならばダウングレードだと思ったんだけど、今回は詰んでいた。
なぜなら他にもアップグレードが来ていて、全部一緒にアップグレードした結果、linux-4.0系が入り、nvidiaの346.59-1はlinux-3.20以下という依存関係を持っていたためだ。
nvidia-349.16-2が来てたもんで、直ってんじゃないのとノリで上げてしまった。
ということで、本格的に格闘することにした。
対処法
ログの見方などは前回、説明した通りにやればよい。
で、今回はちょっと詳細にArch Linuxの公式のBBSやバグトラッカーなどを読んでいった。
すると、microcodeのアップデートする必要がありそうなことが分かった。
https://bbs.archlinux.org/viewtopic.php?pid=1522487#p1522487
理由は以下の通り。
https://bbs.archlinux.org/viewtopic.php?pid=1522675#p1522675
読むのが面倒くさい人のために簡単にまとめると、nvidia-libglの496.16-1にHLEの命令セットが導入されたためで、microcodeのアップデートによってHLEの命令セットを無効化することができるという感じだった。
CPUはHaswellを使ってて、Intel TSXはHLEのインターフェースを提供するらしいが、命令自体はエラッタのため、無効化されたとのことだった。
北森瓦版 - “Haswell”のTSX命令にエラッタが発見され、無効化される処置がとられる
無効化はmicrocodeによって行われたりするみたいで、BIOSのアップデートなどで提供されるらしいのだけど、Linuxなどではブート後にアップデートする仕組みを用意してるらしい。
ただ、あるバージョン以降、自動でアップデートしなくなったので、自分でパッケージを入れる必要がありそうだった。
とまあ、色々調べては見たものの、正直、練度が足りなすぎてホエーってなってる。
あくまで推測にすぎないとのことだが、fixしたよーとの報告も多々あったので、実際に試してみた。
作業ログ
前回の話でLive USBなどが必要という話はしたので、Live USBをブートしたところからやっていく。
今回はintel-ucodeというパッケージをインストールするのだけど、/boot/intel-ucode.img
ができるのでbootもマウントしておく。
ここを見ながらやるとよい。
日本語WikiはGrubの設定の部分が古くて、コードや上記Wikiを見ると最新版のGrubではintel-ucodeの対応はすでに入っているため、インストールしたらgrub-mkconfig
を実行すればよくなってる。
root@arch$ mount /dev/sda6 /mnt root@arch$ mount /dev/sda5 /mnt/boot root@arch$ mount /dev/sda2 /mnt/boot/efi root@arch$ arch-root /mnt sh-4.3$ export LANG=en_US.UTF-8 sh-4.3$ pacman -Ss intel-ucode sh-4.3$ grub-mkconfig -o /boot/grub/grub.cfg
あとはこれで再起動すれば無事にエラーは解消して、いつもの画面に会える。
まとめ
nvidiaのパッケージが対応しない限り、nvidiaのパッケージはアップデートできず、アップデートが億劫になるので、対応したほうがよいように思う。
あとCPUのこととか、Linuxのこととか知らなすぎて辛い。