読者です 読者をやめる 読者になる 読者になる

解せぬ日記

雑な話をする

続・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が来てたもんで、直ってんじゃないのとノリで上げてしまった。

ということで、本格的に格闘することにした。

http://media.giphy.com/media/rEii7ZHwUARaw/giphy.gif

対処法

ログの見方などは前回、説明した通りにやればよい。

で、今回はちょっと詳細に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もマウントしておく。

ここを見ながらやるとよい。

Microcode - ArchWiki

日本語WikiGrubの設定の部分が古くて、コードや上記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

あとはこれで再起動すれば無事にエラーは解消して、いつもの画面に会える。

まとめ

Arch Linuxは相変わらずkawaii

nvidiaのパッケージが対応しない限り、nvidiaのパッケージはアップデートできず、アップデートが億劫になるので、対応したほうがよいように思う。

あとCPUのこととか、Linuxのこととか知らなすぎて辛い。