GeekFactory

int128.hatenablog.com

QEMUの引数からlibvirt XMLを自動生成する

libvirtdでVMを起動するにはドメインXMLファイルが必要ですが、QEMUの引数からXMLファイルを生成する方法を紹介します。

まず、QEMUコマンドラインをテキストファイルに保存します。下記例では見やすくするため改行していますが、すべて1行で書いてください。

kvm
 -drive index=0,file=/dev/vg/public.root,if=virtio
 -drive index=1,file=/dev/vg/public.var,if=virtio
 -drive index=2,file=/dev/vg/public.swap,if=virtio
 -net nic,model=virtio -net tap,ifname=tap1
 -m 512
 -kernel /boot/kvm.current/vmlinuz
 -append root=/dev/vda -vnc :0

テキストファイルをvirsh domxml-from-nativeコマンドに渡して、XMLに変換します。

virsh domxml-from-native qemu-argv public.kvm > public.xml

生成されたXMLを手直ししましょう。

<domain type='kvm'>
  <name>unnamed</name>    <!-- 名前を付ける -->
  <uuid>a8b095d3-29e0-8523-b9b7-179583a83d40</uuid>
  <memory>524288</memory>
  <currentMemory>524288</currentMemory>
  <vcpu>1</vcpu>
  <os>
    <type arch='i686'>hvm</type>    <!-- archを削除 -->
    <kernel>/boot/kvm.current/vmlinuz</kernel>
    <cmdline>root=/dev/vda</cmdline>
  </os>
  <features>
    <acpi/>
    <pae/>    <!-- 今回はPAE不要なので削除 -->
  </features>
  <clock offset='utc'/>    <!-- Localtimeの場合は修正 -->
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <devices>
    <emulator>kvm</emulator>
    <disk type='block' device='disk'>
      <source dev='/dev/vg/public.root'/>
      <target dev='vda' bus='virtio'/>
    </disk>
    <disk type='block' device='disk'>
      <source dev='/dev/vg/public.var'/>
      <target dev='vdb' bus='virtio'/>
    </disk>
    <disk type='block' device='disk'>
      <source dev='/dev/vg/public.swap'/>
      <target dev='vdc' bus='virtio'/>
    </disk>
    <interface type='ethernet'>
      <mac address='52:54:00:0d:0e:f1'/>
      <target dev='tap1'/>
      <model type='virtio'/>
    </interface>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='5900' autoport='no' listen=''/>
  </devices>
</domain>

トリビアですが、uuidはuuidgenコマンドで生成できます。