EFI+GRUBで悩む

久しぶりにEFI+GRUB関係で悩みました.

今,メインサーバーはSlackware ARMで動いてます.Raspberry Pi に切り替える前まで,メインサーバーだった,Core i7のデスクトップ機は,無任所workstation (WS)として存在していますが,とにかく使用目的がないので動かすのがまれで,そこそこのマシンパワーを持っているのに,持ち腐れ状態です.

最近,無線関係の機器を作りたい気持ちが高まってきていますが,まずは,GNU Radioでソフト的に遊んでみることにしました.Mac miniとMacBookには,Mac PortsでGNU Radioがインストールできましたが,そもそも非力だし,動作に怪しいところがあるので,そこで,このWSを使おうと思いつきました.

このWSはサーバー時代のままSlackware64が入っています.以前はSlackwareで,GNU Radioを手でbuildしたものですが,今はどうもそんな気力がありません.となると,UbuntuとかDebianです.Ubuntuはどうにもあかん(当社調べによる)ので,それならDebianにすることにしました.

Debianは既にそのWSの仮想マシンとしてインストールしてありますが,実時間性が必要となる信号処理で仮想マシンはたいていうまく動いてくれません.そこで,比較的余裕のあるルートディスクにパーティションを切って,Debianをクリーンインストールしてdual bootにしてしまおう,というところまでが,まえがきです.

EFI+GRUBはかつて,かなり苦労してそのWSに導入しました.GRUBは良く出来すぎていて,一度イントールしたら,kernelをupdateしても,ちょこっとしたおまじないでconfigファイルを書き直すだけでいいので,ほとんどいじることがないので,もともとよく理解しないままインストールした上に,すっかり忘れてしまいました.

そんなわけで,ただ元のルートディスクの中身を他のディスクに書き出して,その他の方からブートして,元のルートディスクに書き戻す,というだけの作業で苦労してしまいました.コピー自体は,rsyncを使う自作スクリプトで簡単なんですが,コピー先からのブートで難儀しました.

いろんな罠にハマりましたが,特に残念なのがGoogle検索です.GRUBのコマンドラインについて調べると,GRUB1についての解説が上位に出てきます.GRUB1と2ではコマンドの基本的な文法に大きな違いがあって,参考になるどころか害悪をもたらされ,時間を空費しました.

それでもなんとか,EFI+GRUBで,もとのSlackware64にてブートできるようになりました.最終的な手がかりは,自分の非公開Wikiに書いてあるメモでした😓 少しわかりにくい部分があったので,いつあるか解らない次回のために加筆修正しておきました.

このあと,あけたパーティションにDebian AMD64版をインストールして,GNU Radioもインストールしてみます.

だいたい何でもできます

Raspberry Pi 3にSlackware ARM 14.2をインストールして,サーバーに仕立てて,今までx86, AMD64版Slackwareで動かしていたサービスを「復元」していますが,ほとんどなんでも動きますね.

しかし,(サーバー・デーモンじゃないけど)FirefoxとThunderbirdは動きません.同じRaspberry PiでもRaspbianにはFirefoxとThunderbirdが用意されていますが,Slackware ARMでは自分でBuildするしかないでしょう.

手も足も出ないのはKVMです.

QEMU v2.7.91 (v2.8.0-rc1)にネットのバグ

ある日突然,仮想マシンがへそを曲げました.ホストのdnsmasqからゲストはIPアドレスを取得できず,IPv4LL (Local Link address)を自分勝手に設定するものですから,ホストとも当然外界ともつながりません.

ゲストのネットワーク設定を固定IPアドレスにすると,IPアドレスは設定されますが,ホストとつながらない状況は変わりません.つまり,ネットワークの機能そのものに問題があります.

KVM関係のパッケージのupdateをしましたが,事態は改善しません.

結論的には,表記にあるように,QEMUをv2.7.91 (v2.8.0-rc1)にするとNGと判明しました.gitのbranchを当然ながらのmasterにしておくと,はまります^^;

もちろん,今まで動いていたのに何にもしないのにある日突然動かなくなったわけではなく,いろいろアップデートの作業をしていて,気がついたら仮想マシンのネットが機能しなくなっていたと言うことです^^;

そこで,QEMUをStableの2.6(v2.6.2)にして使用しようかと思いましたが,qemuだけstable-2.6にしても,あまりに古くてvirt-mangerと整合性が悪いようで,仮想マシンが動いてくれません^^;;

そこで,不安定版^^; だけどソースがリリースされている2.7.0にしてみました.動きました.ネットもつながります.

2.8.0が正式リリースになるまでは,2.7.0を使うことにします.

[追記] 2.7.92 (2.8.0-rc2)も改善なし(2016年11月30日(水))

表題のままです.2.7.92がリリースされましたが,ネットに関する不具合は直っていません.

たぶん,qemu起動時のオプションの仕様が違うのだと思います.

Kernel 4.8.4で解消 (Kernel 4.8.0でvirtioグラフィック動かず(3))

治りました.

ゲストの仮想マシンのKernelを4.8.0〜4.8.3とした場合,仮想ビデオにvirtioを選択するとX.orgは動きませんでした.この問題は4.8.4で解消しました.

よくわかりませんが,Changelogにvirtioの修正の件が書いてあります.

Kernel 4.8.0でvirtioグラフィック動かず(2)

他のマシンでも試してみました.

  1. ホストマシンの,QEMU, libvirt, libvirt-glibを最新のものにして,Kernelは4.7.6のままにする
  2. ここで,ゲストマシンのKernelは4.7.xのまま再起動して,virtioドライバーでグラフィックが正常(X.orgがちゃんと起動する)であることを確認
  3. ゲストマシンのKernelを4.8.0にして,再起動

という手順で,ゲストマシンのビデオドライバーをこれまで使ってきたvirtioのままにすると,X.orgが起動しません.

QXL, cirrus, VMVGAでX.orgは起動しますが,cirrusとVMVGAでは,1024×768が最大の解像度です.QXLは,1920×1200までの各種解像度に設定ができますが,ドラッグしたウィンドーの跡が途中に残るとか,汚らしいです.

ということで,高解像まで各種の解像度設定ができて,跡が残るなどのバグのないvirtioドライバーがまた使えるようになってほしいです.

どこかの設定が変わった(新しい設定が必要になった)ってだけの話なのかなぁ

2016/10/10追記: 4.8.1でも同じ

バグならば改善されているかなと期待しましたが,何の変化もありません.やはり何か設定の変更(モジュールや機能の追加)が必要なのかな.

2016/10/24追記

Kernel 4.8.4で解消しました.

Ubuntuのゲストでは,VMVGAで,2560×1600までの多種の解像度が利用できます.当該のSlackware 13.xのゲストはX.orgが古いので,1024×768までに限定されるものと推測しています.