LoginSignup
3
7

More than 5 years have passed since last update.

「openSUSEで最強仮想環境!」という甘い話にホイホイ乗ったらハマったことの一覧

Posted at

勢いだけで用意したので項目の順番とか読みやすさとかはぐちゃぐちゃです。
できそうな時にもうちょっと整理するつもりですが、実際できるかはわかりませんorz

はじめに

元ネタのスライドはこちら。スライド最後に付け足されている補足はこちら
こんなタイトルですがzgock先生は神です。これ読む前はやりたくても手をつけられずにいたため、今は崇めています(
もちろんAlex神のことも崇めなければこの世界ではやっていけません。

手元の環境について軽く触れておきます

  • i7-6700K + Z170
    • CPU側PCIeにACS問題があると知った今となってはSkylake-Xが欲しくて欲しくて、、
  • パススルーさせたいのはGTX980TiとUSBコントローラひとつとNIC
  • 人間はopenSUSE初見&Linux初級者。Gentoo使ってるけどemergeすら毎回ググってるし初級者
    • 本当はFreeBSD+bhyveでやりたいけど、Skylake/Broadwell+bhyve+PCIpassthruするとOSが爆発炎上してド派手に死ぬそれは言い過ぎかもしれませんが、ホスト起動中に大変悲しいことになるので普通にKVMです
  • 書き始める前最後の構築をした時のTumbleweedスナップショットは20170726
    • 構築途上ではUbuntu17.04とかLeap42.2とかUbuntu16.04.2とか色々漂流した果てにTumbleweedに戻ってくることになりました

ネットワークインストールのときミラーを変更する方法

  • 確かLeap42.2も同様だった。さっき公開されたばかりなのに早くも好評を自称している42.3は知らん!
  • 件のスライドでriken.jpが紹介されている。ぜひ活用したいが……
  • 実は、自動起動するYaST2インストーラ上からは一旦インストールまでたどり着いてから途中でLANケーブル引っこ抜いてダイアログ出させる、みたいなすごく乱暴な方法を使わない限り無理
  • その辺のオンラインガイドではブートストラップ画面でファンクションキー押すみたいなことが書かれているけど、今のバージョンでは何故か機能しない。
    • ではどうすればいいのかというと、一旦Abortまたは中止を押してこいつを閉じるとTUIのメニューが現れるので、そこからミラーを設定する
  • デフォルトのdownloads.opensuse.orgはダメ絶対。運が悪いと20KiB/secとかで5GBくらい転送し続ける状況になる
    • ネットワークインストールの場合、ブートそのものに気の遠くなるような時間がかかる。かかった。つらかった
    • 環境が整っている人なら、理研からバーニング最高速転送(言い過ぎ)してもらえる
    • NGN IPoE民のためのIPv6鯖は本家にすらないっぽい

Skylake環境依存と思われる問題

  • 仮想マシンにSMPを設定する、または2048MBを上回るRAMを与えるとOVMFが正しく起動できず、CPU時間を無限にmogmogするだけのカビゴンVMが誕生する
    • 二つの条件は片方でも満たすとカビゴン化するので、ゲーマーはフリーソフト(死語)だと思って遊び始めたら体験版だった時の顔をする羽目に
      • redditのArch板だっけな?に同じ症状で悩んでいる人たちがいたっぽかった感じがしたので、多分これは近頃のOVMFがバグを抱えているということだと推測
        • QEMUも怪しかったが、回避を達成した結果からバックポートすれば犯人はOVMFだった
      • なお、この時使ってみたLeap42.2ではvfio系統のカーネルモジュールをロードさせるのに難儀。いろんな方法を調べたが、手元の環境では奇跡の一回以外は二度とできなくなってしまった……。
      • じゃあ正解はというと、TumbleweedでKVMの構築まで済ませてからOVMF本体の入ったLeap用rpmをもらってきてコマンドでインストールすること
    • 上記問題を回避したいからといって迂闊にLTS版Ubuntuとかの古いカーネルが入るディストロを使うと下記のZ170利得が失われて悲しい結果になる
      • Z170チップセットには(英語があんま読めないなりにAlex大明神の記述を見るにどうも半端で苛だたしい実装らしいが)ACSが実装されており、CPU側は相変わらず分離できないながらチップセット側は幸運な人にはうまく分離してくれる。してくれた
        • このためx4でも大概十分である(偏見)ゲーム用途の人はACSオーバーライドを使わず、グラボをサウスブリッジ側に回すのも選択肢
        • 他のチップセットで同じことをするとまず間違いなく大量のおまけをつける羽目になるので素直にCPU側のままACS上書きした方が賢明
        • 同世代の下位であるH170以下でどうなるのかは私の読解力ではわからず要人柱
      • openSUSEのカーネルはTumbleweedでもLeap42.2でもこいつを扱えるが、Ubuntu16.04.2のデフォルトカーネルはこいつを扱えずにチップセット側のパススルーが超どんぶり勘定になってしまう
        • 一回テストで使った17.04のカーネルは恐らく大丈夫だったはずだが自信はあんまりない。
        • おまけ情報:実は、openSUSEのovmfパッケージにはREADMEしか入っていない。qemu-ovmf-x86_64を入れよう
    • この手のSkylake不具合、大概Haswellは大丈夫でBroadwellは駄目なイメージがある。実際どうかは要人柱

日本語入力メソッドについて

  • どのデスクトップ環境を選んでも、デフォルトでは悪名高いiBusになっている。YaST2インストーラは入れるパッケージを全部手で指定できるようになっているので、気になる人は必ずfcitxに変更
  • ただ、私がわずかに使った範囲ではiBusで困ることもなかったので、気にならない人は放置でも駄目ではないかも

ホストネームについて

  • 地味にYaST2では設定できない。素直にhostnamectl set-hostnameしよう
  • でも現行Tumbleweedではそれだけだとlibvirtdとかがsystemdの片隅で人知れず愚痴ってたりするのでhostsにも書いとく
    • OSが認識する自ホストネームは設定できないYaST2だが、こっちはなぜか設定できる
    • 一方、Leap42.2のYaST2は自分のホストネームもちゃんと設定できた気がする

X転送について

  • これは、すらっぐが手持ちのMacを使った限り今のTumbleweedでは何やってもダメ。ファイアウォール切ろうが何しようがディスプレイサーバに弾かれたでござるとかのたまう
  • 一方Leap42.2では何の問題もなくできたので、ただいまのバージョンに何か問題があるのではなかろうか。まあ我がMacの/etc/ssh/ssh_config他が残念な可能性の方が高そうだけど
  • というわけで人によってはスライド通りいきなりnomodesetつけちゃうとドボンするので、あらかじめX転送がうまくいくことを確認してからランレベル下げる準備に入ると良いでしょう

BIOSについて

  • ASRockの某Z170ママンを使っているが、x2apicの無効化ビットとやらを解除する設定はどこにも見当たらなかった。このような場合はカーネルオプションにはintel_iommu=onの他にintremap=no_x2apic_optoutをつけておきましょう、なんて案内がされている。dmesgにも出るので、直接コピペするとoptoutをoutputと書いてしまうこともなくてgood
  • といいつつ、xapicモードのままで現実に何かしんどい問題が発生するのかどうかは不明。そのままでもよかったのかな

キーボード配列について

  • JISキーボードを使っている場合。インストール時に指定するキーボード配列は、Tumbleweedにおいてはなぜか完了後にYaST2からもう一回設定しないとUSになってしまう。dmesgをパイプしようとして気づきイラつくのはもはや一つの儀式と言っても過言ではない
  • なおLeapでは何の問題もなくインストール時の配列になってたので、ただいまの(ry

HiDPIモニタで設定する場合のもろもろ

  • 私の場合は一枚のdGPUさえパススルーできればオッケーだったので、i7-6700K内蔵のHD530はホストに使ってもらいました
    • 本当はMac miniからVNCしたいけど、どうしたことかVNCは繋がるけど肝心の画面は真っ黒
    • UEFIでのプライマリがオンボードになっていても、YaST2はdGPU優先でインストールリスト組んじゃうのでxf86-video-intelを手動指定しませう
  • インストール時にデスクトップ環境を好き放題選べる天国のようなYaST2インストーラだが、HiDPIモニタをお使いの方はKDE PlasmaかGNOMEがよろしい感じ
    • この二つは各々の設定ツールから普通にスケーリングの設定ができるので、私のようなHiDPIありきで27インチしかないUltraHDモニタ使ってるような人はちょっとサイズが大きくてもこいつらを採用した方が後々の不幸が少ない
      • 他の環境ではArchWikiを参考に設定することになるけど、結局拡大してくれるのは文字だけだったりモニタ全部一緒くたに拡大しちゃったりぽつぽつ対象外アプリが生じたりいい感じに残念という印象

zgock先生の公開されているリポジトリをどうやって使えばいいのか?

  • YaST2から「ソフトウェアリポジトリ」を選択するのだが、その先は初めて触った人にはちんぷんちんぷんぷんな世界に突入する
  • 追加ボタンを押すとまずリポジトリ名、これは単なる名前のくせに2バイト文字が入ってると怒られる
  • URLはbuild.opensuse.orgのURLでは駄目。スライドに書いてあるURLのページはまずGPG鍵をメモるだけの用途で、Repositories->Go to download repository->開いたページのdownload.opensuse.orgなURLをここに入れて進めばOK
    • なおURLスキームが入っていないと怒られるのでhttp://からちゃんと打つこと

zgock先生のパッケージの美味しいいただき方

  • YaST2やメニューからソフトウェア管理を起動すると、インストール直後はタブが三つしかない。左の表示(V)の中にリポジトリごとで集計してくれるタブが隠れているので、選んで用意する
  • こうしてzgock先生のパッケージが一覧できるようになるが、油断してはいけない
    • kernel関係がいろいろあるが、当初からチェックが入っているkernel-defaultバージョン(V)内でまずチェック対象をメインリポジトリのものからzgock先生のものに切り替える
      • 通常、このタブはラジオボタンで選択する内容になっているが、カーネル関連のパッケージだけは例外になっておりチェックボックスで複数選択が利くようになっている
      • ここで不用意に他のkernel-*パッケージに触れるとOSの起動に失敗してsnapper神に「神は言っている……ここで死ぬ運命ではないと……」してもらう円環の理に導かれてしまうことがあるので注意
    • 続いて必要な人はzfsのチェックを入れると推奨パッケージでいろんなやつにチェックが入るが、kernel系の奴らは全部公式リポジトリの奴らが指定されてしまうのでこれらもzgock先生のものに変えておくと安心。そうはせずkernel-default以外全部公式最新版使った場合どうなるかは試していないので不明。
    • 私はこのあと目についたzfs-dracutも入れておいたが、root on zfsにしてるわけでもないのに本当に必要かは不明
  • 全て適切な操作で完了まで行けば、YaST2から「新しいカーネルになったのでリブートしてちょ」って言われる
  • この後、ZFS入れた人はsystemctl statusするとdegradedとか言われる
    • systemctl --failedするとzfsのカーネルモジュールがないっすと申し出があるので、dkms先生にinstallしてもらいましょう

今のTumbleweedではYaST2の「ハイパーバイザとツールのインストール」が機能していない

  • 出てくるダイアログでKVMやその管理ツールにチェックを入れても、「インストールに失敗しました」と冷たい一言と共に閉じてしまう
  • めげずに、ソフトウェア管理の方から表示(V)パターン(N)KVMホストサーバにチェックを入れよう
  • ところが、このチェックボックスはlibvirtをスルーするガバガバ兄貴なのでそれには忘れず自分でチェックを入れておくこと
  • これで動くと思うじゃろ?……まだ仮想マシンマネージャーは動かない。YaST2のサービスマネージャからlibvirtdを有効にする作業をきっちりやってやる必要がある
  • なお、Leap42.2ではこの辺り全く正常に機能した
    • でもLeapはLeapで後述の問題で悲しいことになるわけで
  • しかし、なんかローリングリリースとはいえ作り込み具合のわりに結構各部がゆるゆるなのが気になる……

INITRD_MODULESの書き方について

  • 多分、snapper活用という意味では空っぽのINITRD_MODULES/etc/sysconfig/kernelに書いてから/etc/sysconfigエディタで中身を書くのが正しい
    • なお、YaST2の/etc/sysconfigエディタで新しいファイルや項目を作ることはできないし、作ったINITRD_MODULESSystemKernelではなくOtheretcsysconfigkernelという島流しされたとしか思えない位置に出現する。
  • 私はスライドに書かれていたpci-stubが必要な場合というのがどんな場合かわからなかったので、vfio系だけ登録
  • 変更するとその直後に「変更の有効化」なんてのが出てきてこれ見よがしにチェックマークが入ってからダイアログが閉じるが、もちろん有効化なんてされていない
    • 大人しくmkinitrdしましょう
    • なお、Leap42.2は全く同じ作業ができるが、なぜかやってもモジュールを読んではくれない。その他/etc/dracut.conf.d/somewhat.confなど書いても読んでくれず、何かの拍子に一回成功したと思ったらそのカーネルはリブートすると起動しなくなり、何故かsnapper神すら跳ね返し(XFSである/homeのdotfilesあたりに何かあった?)OSごと再構築してもう二度と再現できず、、結局諦めてしまった。

code 43 hellについて

  • 再構築の度についつい対策し忘れる。はいみなさんご一緒に、NVIDIA: **** you!
  • ArchWikiを見に行くと、スライドでの指定部の他に書き足すべき項目がもう一つある旨書かれているので一応参照のこと
  • ところで、ダブルクォーテーション付きで”code 43 hell”でググっても3つしか見つからない上にそのうち2つがこのスライド関連なのですが本当に言われてるんでしょうか

助けて!増やしたはずのCPUスレが1つしかないの!

  • うろたえるな!OVMF自身が起動できていれば、virshコマンドからvcpuを増やした上でゲストをリブートせしめれば拙者の場合はなんとかなったでござる。それで駄目なら拙者にはわからぬw

vfio-pciでパススルーするデバイスの指定について

  • 先生によればファイル名自由とのことでしたが、openSUSEの場合は元から99-local.confというお誂え向きの空っぽファイルがあるのでこだわりのない人はそこに書けばOK
    • ところで、systemdとかでよく見るこの手のファイル名冒頭の番号は何なのだろう。名前順ソート最適化のため?
  • もしかしてこいつに書いては駄目なのかと邪推した結果トラブルシューティングにかかる時間が増えたりしてた

ホストの起動時にwickedがぐずってめっちゃ時間かかる問題

  • 持病です。直す方法は、お持ちのルータをDHCP及びRSのリクエストにちょっぱやで応答してくれるように仕上げることです


今回参照した資料はもうとっちらかりすぎてあんま覚えてないっす

取り急ぎこんな感じで失礼します<(_ _)>
どうか、KVMで地獄のどハマりを経験する人が減りますように。

3
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
7