初めて購入したSkylake機にCentOSがインストールができず、それ以降インストールできないものと思い込んでいたが、CentOS6は普通にインストールできたよというありがたいコメントを頂いた。確認したのはCentOS7インストーラの起動失敗だけだったので、問題の特定も含めていろいろ検証し直す事に。以前、インストールに失敗した筐体はshuttleのSh170R8で、既に2台目も購入してある。1台目も2台目も同じサービスが提供できるように作ってあるが、一応マスターは1号機なので、新規に購入した方の2号機で検証を進める。
まずは問題の再現からやり直すために、CentOS7のkickstartを久々に動かす。Grubで3番目のmenuentryを選ぶとkickstartが始まるように作ってあるので、grub.cfgを修正してリブート。起動してくると、Install用のラベルが選択されて、CentOS7のインストーラが動き出す。確かこの辺で止まっちゃうんだよなあとか眺めているものの、何事もなかったかのようにanacondaが起動してインストールが始まった。あれあれ?どういうことだ?インストールが終わってリブートすると当たり前のようにCentOS7が起動してきた。普通にインストールできてしまった。。。
Shuttle SH170R8 ベアボーン
|
成功した筐体が2号機であることを気付き、以前失敗した1号機でも同様に試してみる。こちらはやはりインストーラーの起動でフリーズしてしまう。1号機の方のみ何かしら問題があるようだ。とはいえ、同じハードウェア構成で成功するマシンがあるということはシューティングのモチベーションを大きく引き上げる。1号機と2号機の違いを特定して修正してやれば、きっと1号機にもCentOSがインストールできるはず。今回も同じ筐体が2台あることのありがたみを改めて感じる。
インストーラーのフリーズは毎回微妙に異なる場所だが、何度も繰り返していると大体『nouveau』が表示される辺りで停止する事がわかる。
e1000e 0000:00:1f.6: Interrupt Throttling Rate(ints/sec) set to dynamic conservative mode
nouveau [ VBIOS][0000:01:00.0] using image from PROM
nouveau [ VBIOS][0000:01:00.0] BIT signature found
nouveau [ VBIOS][0000:01:00.0] version 82 07 32 00 1h
nouveauは3Dグラフィック用のドライバなので、グラフィック関連の問題が原因かもしれない。とりあえず画面出力をオンボードからPCIeのGeForceに切り替えてみる。BIOSで設定を変えて、HDMIケーブルを挿し直して電源を入れると・・・インストーラーがフリーズする事なく進んで行く!そのまま2号機同様にkickstartへ進みそうな気配。そんな期待を裏切るかのように途中でエラーが出始めてしまう。
dracut-initqueue timeout - starting timeout scripts
dracut-initqueue timeout - starting timeout scripts
dracut-initqueue timeout - starting timeout scripts
:
Warning: /dev/root does not exist
おお、/dev/root does not existって何か見覚えあるな。anacondaがIPアドレスをもらえないとかのネットワーク問題だったような。我が家のDHCPサーバは任意のmacアドレスに固定のIPアドレスを振る作りになっている。dhcpd.confの生成もchefで自動化されているため、図らずも通常起動用とkickstart用のIPアドレスが別々に用意され、1つのmacアドレスに対して2つのIPアドレスが重複してしまっていたのだ。しかし、今回はそういうミスは見つからない。
DHCPサーバは1号機と2号機でマスター・スレーブ構成となっており、2号機を作るときはmasterの1号機のDHCPサーバを使用し、問題なくインストール出来た。問題特定のためにも一応2号機をmasterに作り変えてみる。chefでmasterタグを付けてknifeするだけ。もう1度kickstartを実行すると、普通にanacondaが起動してCentOS7をインストールしてくれた。あとで気付いたのだが、dhcp slaveの設定ミスでmasterと正しく連携できていなかったのが原因だった。
さて、インストールは無事完了して再起動が進む。起動してくれると何故かコンソールが固まってしまう。他のPCからのssh接続には反応するのでネットワークは問題なさそう。インストール後のOS起動時にnouveauドライバが読み込まれてしまったので、コンソールがおかしくなってしまったのだろうか。試しにnouveauドライバを外して、どうなるか試してみる。/etc/default/grubのGRUB_CMDLINE_LINUXにnouveau.modeset=0を追加して、grub2-mkconfigを実行して再起動。今度はコンソールも普通に動作した。意外とあっさり特定できたのだが、nouveauドライバが読み込まれるとCentOS7の挙動がおかしくなるようだ。
新製品 Shuttle SH170R8 新デザイン!アルミ製シャーシ採用 キューブ型ベアボーン by Yahoo! ショッピング |
インストーラのkernelパラメータでもnouveauドライバを外し、kickstartファイルのkernelパラメータからもnouveauドライバを外してしまえば、kickstartインストールでの自動構築が実現できそう。早速、以下のように設定を変えてkickstartインストールをやり直す。
vi /boot/grub2/grub.cfg
:
menuentry "Install" --class gnu-linux --class gnu --class os {
insmod ext2
set root='hd0,msdos2'
linux /boot/vmlinuz nouveau.modeset=0 inst.stage2=http://repo/7/os/ ks=hd:sda2:/boot/ks.cfg
initrd /boot/initrd.img
}
vi /boot/ks.cfg
:
bootloader --append=" nouveau.modeset=0 intel_iommu=on crashkernel=auto" --location=mbr --boot-drive=sda
以上の変更で、何の問題もなくkickstartインストールが実行できた。CentOS7がインストール出来なかったのは、Skylakeの問題ではなく、nouveauドライバが悪さをしていたためとわかった。今更だけど、1号機にはGeForceを刺していて、2号機には何も刺していない。GeForceのためにnouveauドライバが入ったにもかかわらず、オンボードのグラフィック機能を使おうとするとおかしくなるようだ。ともあれ、Skylake機をCentOS7標準kernelで動かせるようになったので、QSV検証が容易に。次回はSkylakeのQSV機能を試してみたい。