komeの備忘録

東大院卒外資ITエンジニアの技術ブログ

MSI製のGPU付きゲーミングPCにUbuntu16をインストールしようとしたらハマった話

はじめに

LEVEL-R037-i5-XNという、ゲーミング用PCでOSなしを買ってUbuntu16をインストールしようとしたらなかなかインストールができなかった。 プリインストールではWinsows10が入っているはずだったが、OSなしを選択した。 www.pc-koubou.jp

マシン: LEVEL-R037-i5-XN OS: Ubuntu16.04 Desktop マザボ: Z370-S01 BIOS Version: E7B48IM0.1L4

ACPIエラーでインストーラが起動しない

症状

いつも通りディスクを入れてUbuntuをインストールしようとしたら、インストーラが起動しなかった。 画面には、"ACPI Error"なるエラーが表示されていた。

ACPIエラー

ACPIとは、Advanced Configuration and Power Interface、つまり、"PC/AT互換機等の電源制御と構成要素に関する公開された統一規格"、らしい。 詳しくはWikipediaを参考(Advanced Configuration and Power Interface - Wikipedia)

そしてさらにACPIエラーでググると、先人の知恵が出てきた。 Turn Off ACPI while Booting Ubuntu via Grub2 - Ubuntu Sharing

処置

  1. 電源投入後、shiftキー連打でgrubを起動させる
  2. grub menuで、1:without installation, 2:install ubuntu みたいになっているところで、2にカーソルを合わせてeを押し、カーネルの起動オプション設定画面にする
  3. ~splash"という記述を見つけ、~splash acpi=off apm=on"に変更する
  4. めでたくインストーラが起動する!!

さて、Ubuntuを無事にインストールできて、終わったーと思うがつかの間。 インストールの最後でシステムリブートがかかるが、コンソールは返ってこなかった。

インストールしたUbuntuが起動しない

いろいろ考えたが、インストーラが起動しない問題で対応した上記の対策は、grubを直接書き換える一時的なものであった。そのため、再起動時には編集前の状態(~~splash")のまま起動オプションが選択されていたと考えられたので、再度同様の対応をすることにした。

処置

  1. 無理やりハードウェアで電源を落とし、そして電源ボタンを押して起動させる
  2. 電源投入後、shiftキー連打でgrubを起動させる
  3. grub menuで、1:without installation, 2:install ubuntu みたいになっているところで、2にカーソルを合わせてeを押し、カーネルの起動オプション設定画面にする
  4. splash"という記述を見つけ、splash acpi=off apm=on"に変更する
  5. めでたくUbuntuが起動する!!
  6. Ubuntuにログインしたら、上記の設定をデフォルト設定に反映させるために、/etc/default/grubを編集する(grub の設定ファイルは/etc/grubにもあるが、そこを直接書き換えてはだめ)
  7. 下記の2つの変数をgrubファイルから探し、下記の値に変更する
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi=off apm=on"
    GRUB_CMDLINE_LINUX="reboot=pci" # おまじない。こちらは検証していないのでやらなくてもいいかもしれない)
  8. $ sudo update-grub # defaultの設定が、grubの設定に上書きされる
  9. めでたく起動はできるようになった!
  10. が、まだシャットダウンするとエラーする

    シャットダウン時のエラーの解消

    今回の問題を通して、マザボとUbuntuの設定をいろいろ調べたら、下記のことが分かった。

    • マザボはデフォルトでACPIをサポートしていない
    • UbuntuはデフォルトでACPIを使おうとしてしまう

    これらの矛盾がシステム内でコンフリクトを起こしていると考え、無理やり起動したUbuntu上でACPIをdisableにしてしまおうと考えた!

    ACPIの無効化

    Ubuntuの中ではACPIは ACPI event daemon (acpid.service)となっており、init.dで管理されている。これを無効化すれば話は早いのだが、ACPIはほかのサービスと依存関係があり、ACPIだけを無効化しても他のサービスがACPIを無理やり起動させてしまう。なので今回は依存関係にあるサービスも無効化してみることにした。 対象となるサービスは以下の2つであり、これらを無効化した後にacpid.serviceを無効化することで、正常にシャットダウンができるようになる

    • acpid.socket
    • acpid.path

    処置

    1. $ sudo systemctl stop acpid.socket
    2. $ sudo systemctl disable acpid.socket
    3. $ sudo systemctl stop acpid.path
    4. $ sudo systemctl disable acpid.socket
    5. $ sudo systemctl stop acpid.service
    6. $ sudo systemctl disable acpid.service
    7. $ sudo reboot
    8. めでたくrebootができるようになった!!!!うれしい!!!

    最後に

    これでもダメだったら、BIOSの設定かもしれない。正直BIOSの設定は詰まったときにいじりすぎてよくわからないが、たぶん関係ないと信じている。最初にいろいろ調べていたらsecure bootをBIOSで変更できたら終わるみたいなことが書いてあったのだが、BIOSでsecure bootに相当する部分が変更不可能になっており、悲しみを感じていた。まさかUbuntuごときのインストールでこんなに悩まされることになるとは微塵も思っていなかった。


    追記

    上記を試してもまだ色々不思議な挙動をする部分があったので、BIOSの項目を全部見てみたら凶悪なオプションが存在した。もともとGPU付きのマシンなので、ディープラーニングとか重めの計算とか回したいなぁと思っていたのだが、そもそもなかなかNVIDIAのイケてるGPUのドライバインストールすらうまく行かなくて本当に辛かった。

    この記事の一番最初に書いたとおり、今回購入したPCはWindowsをインストールすることを前提に作られているものである。おそらく、だからだと思うが、BIOSにWindows専用の設定が存在した。前提がWindowsインストールなので、今回のようにOSなしで購入しても、Windows専用オプションがenableになっており、どうやらこいつが邪魔していたらしい。悔しい。悔しすぎる。

    boot optionに関しても、UEFIから変更ができない設定になっていたのはWindowsでは変更が不要だったからである。UbuntuをインストールするにはLegacy+UEFIにしたいができなかったのは憎きWindowsオプションenableのせいであった。

    その後さまざまな予期せぬ挙動は、このWindowsオプションをdisableにすることで解決した。boot optionも変更できた。何度トライしても失敗していたGPUのドライバインストールも成功した。GPUもCLIから確認できるようになった。そしてなぜか解像度も上がった。なかなかに辛かったが、MSIのBIOSはWindowsを前提にしてあるという教訓を得た。

    まとめ

    MSI製のBIOSでWindows以外のOSをインストールしようとしていて詰まった人は、最初にBIOSの設定でWindowsに関するオプションがないか必ず調べましょう。MSIはWindowsのことしか考えていません。

(C) komee.org