Friday, 13 May 2022

KVM, UEFI and Rust

いろいろあった昨日の続き。OSの課題は、KVM / virsh でやってもらうんですが...

  virsh の権限の制御が大雑把すぎる

問題があって、結局、virsh のwrapper を書いたんですが、シス管の一人が

  Rust で書き直す

という技を。「え、それ誰がメンテするの」ってことなんですが、

  KVMで UEFI で起動するには、vvram の項目をKVMのVM定義xmlに追加する必要がある

ってことなので、泣きながら書き直す羽目に。こんな感じ。

  let elem = String::from_utf8_lossy(e.escaped()).replace("ie-virsh-template",&self.vm_name) ;
  writer.write_event(Event::Text(BytesText::from_plain_str(&*elem))).unwrap();

いや、単に xml の一部の文字列を置き換えてるだけですけどね。
とりあえず、&str と &[u8] と String を ad-hoc に変換しながら書く必要があるのはわかりました。

quick-xml がそういう書き方らしい。いや、Rust ってのはそんなもん。OptionとResultをnestさせたり。
僕の Rust の評価はそんなわけでかなり低いです。

  XMLのparseとか無駄なことするな
  単純な文字列置換でやれ

とは思いました。汎用じゃないんだから。

まぁ、一応、動いたっぽい。KVMは image を共有すると

 error: internal error: child reported (status=125): Requested operation is not valid:
 Setting different DAC user or group on /mnt/ie-virsh/teacher/kono/kono-02.qcow2 which is already in use

と文句をいうらしい。ついでに、

 OSの課題用の Fedora OSの install を ie-virsh でできるようにする

ってのをやりたいんだが、少し工夫(cdromの接続とBoot順)がいるので、しばらく放置か?

No comments: