This repository was archived by the owner on Jul 16, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 18
libvirt
Dom edited this page Aug 24, 2023
·
12 revisions
dnf -y install bridge-utils libvirt virt-install qemu-kvm virt-top libguestfs-tools virt-manager
git clone https://github.com/libvirt/libvirt.git
meson setup build -Dsystem=true -Ddriver_qemu=enabled
ninja -C build
ninja -C build install
meson.build:1602:6: ERROR: Problem encountered: YAJL 2 is required to build QEMU driver
Solution:
apt install libyajl-dev
docs/meson.build:176:2: ERROR: Program 'rst2html5 rst2html5.py rst2html5-3' not found or not executable
Solution:
apt-get install python3-docutils
virsh define debian12.xml
virsh start debian12
virsh list --all
virsh shutdown debian12
virsh destory debian12
virsh dumpxml debian12
virsh undefine debian12
virsh suspend debian12
virsh resume debian12
virsh snapshot
virsh snapshot-create debian12
virsh snapshot-current debian12
virsh snapshot-list debian12
virsh snapshot-revert debian12 1620616838
virsh snapshot-delete debian12 1620616838
Connect VM with virsh console
virsh console debian12
debian12.xml
<domain type='kvm'>
<name>debian12</name>
<uuid>00364662-13ee-4871-99e8-d3fbdf5d96d9</uuid>
<metadata>
<libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
<libosinfo:os id="http://centos.org/centos/8"/>
</libosinfo:libosinfo>
</metadata>
<memory unit='KiB'>20971520</memory>
<currentMemory unit='KiB'>20971520</currentMemory>
<vcpu placement='static'>4</vcpu>
<os>
<type arch='aarch64' machine='virt-4.2'>hvm</type>
<loader readonly='yes' type='pflash'>/usr/share/AAVMF/AAVMF_CODE.fd</loader>
<nvram>/var/lib/libvirt/qemu/nvram/centos8_perf_00001_VARS.fd</nvram>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<gic version='3'/>
</features>
<cpu mode='host-passthrough' check='none'/>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/bin/qemu-system-aarch64</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/home/dom/Qemu/bin/debian-12-generic-arm64-20230711-1438.qcow2'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
</disk>
<controller type='usb' index='0' model='qemu-xhci' ports='15'>
<address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
</controller>
<controller type='scsi' index='0' model='virtio-scsi'>
<address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
</controller>
<controller type='pci' index='0' model='pcie-root'/>
<controller type='pci' index='1' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='1' port='0x8'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' multifunction='on'/>
</controller>
<controller type='pci' index='2' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='2' port='0x9'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<controller type='pci' index='3' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='3' port='0xa'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
</controller>
<controller type='pci' index='4' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='4' port='0xb'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x3'/>
</controller>
<controller type='pci' index='5' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='5' port='0xc'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x4'/>
</controller>
<controller type='pci' index='6' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='6' port='0xd'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x5'/>
</controller>
<controller type='pci' index='7' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='7' port='0xe'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x6'/>
</controller>
<controller type='pci' index='8' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='8' port='0xf'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x7'/>
</controller>
<controller type='virtio-serial' index='0'>
<address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
</controller>
<interface type='network'>
<mac address='52:54:00:9d:34:c1'/>
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>
<serial type='pty'>
<target type='system-serial' port='0'>
<model name='pl011'/>
</target>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<channel type='unix'>
<target type='virtio' name='org.qemu.guest_agent.0'/>
<address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>
<audio id='1' type='none'/>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/>
</memballoon>
<rng model='virtio'>
<backend model='random'>/dev/urandom</backend>
<address type='pci' domain='0x0000' bus='0x07' slot='0x00' function='0x0'/>
</rng>
</devices>
</domain>
Example:
import libvirt
import time
from xml.etree import ElementTree
conn=libvirt.open("qemu:///system")
for id in conn.listDomainsID():
domain=conn.lookupByID(id)
print("name = " + domain.name())
print("UUID = " + domain.UUIDString())
print("info = " + str(domain.info()))
t1=time.time()
c1=int(domain.info()[4])
time.sleep(1);
t2=time.time();
c2=int(domain.info()[4])
c_nums=int(domain.info()[3])
usage=(c2-c1)*100/((t2-t1)*c_nums*1e9)
print("%s Cpu usage:%f" %(domain.name(),usage))
domain.setMemoryStatsPeriod(10)
meminfo=domain.memoryStats()
print("meminfo = " + str(meminfo))
tree=ElementTree.fromstring(domain.XMLDesc())
devices=tree.findall('devices/disk/target')
for d in devices:
device=d.get('dev')
try:
devinfo=domain.blockInfo(device)
except libvirt.libvirtError:pass
print("device = %s,devinfo = %s"%(str(device),str(devinfo)))
conn.close()