DESCRIPTION = "A toolkit to interact with the virtualization capabilities of recent versions of Linux." HOMEPAGE = "http://libvirt.org" LICENSE = "LGPLv2.1+ & GPLv2+" LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ file://COPYING.LESSER;md5=4b54a1fd55a448865a0b32d41598759d" SECTION = "console/tools" DEPENDS = "bridge-utils gnutls libxml2 lvm2 avahi parted curl libpcap util-linux e2fsprogs pm-utils \ iptables dnsmasq readline libtasn1 libxslt-native acl libdevmapper libtirpc \ python3-docutils-native \ ${@bb.utils.contains('PACKAGECONFIG', 'polkit', 'shadow-native', '', d)} \ ${@bb.utils.contains('PACKAGECONFIG', 'gnutls', 'gnutls-native', '', d)}" # libvirt-guests.sh needs gettext.sh # RDEPENDS:${PN} = "gettext-runtime" RDEPENDS:libvirt-libvirtd += "bridge-utils iptables pm-utils dnsmasq netcat-openbsd ebtables" RDEPENDS:libvirt-libvirtd:append:x86-64 = " dmidecode" RDEPENDS:libvirt-libvirtd:append:x86 = " dmidecode" #connman blocks the 53 port and libvirtd can't start its DNS service RCONFLICTS:${PN}_libvirtd = "connman" SRC_URI = "http://libvirt.org/sources/libvirt-${PV}.tar.xz;name=libvirt \ file://libvirtd.sh \ file://libvirtd.conf \ file://dnsmasq.conf \ file://hook_support.py \ file://gnutls-helper.py \ file://0002-meson-Fix-compatibility-with-Meson-0.58.patch \ file://0001-security-fix-SELinux-label-generation-logic.patch \ file://0001-storage_driver-Unlock-object-on-ACL-fail-in-storageP.patch \ " SRC_URI[libvirt.md5sum] = "92044b629216e44adce63224970a54a3" SRC_URI[libvirt.sha256sum] = "01f459d0c7ba5009622a628dba1a026200e8f4a299fea783b936a71d7e0ed1d0" inherit meson gettext update-rc.d pkgconfig systemd useradd perlnative USERADD_PACKAGES = "${PN}" GROUPADD_PARAM:${PN} = "-r qemu; -r kvm" USERADD_PARAM:${PN} = "-r -g qemu -G kvm qemu" EXTRA_OEMESON += "--cross-file ${WORKDIR}/meson-${PN}.cross" do_write_config:append() { cat >${WORKDIR}/meson-${PN}.cross < ${D}${sysconfdir}/default/volatiles/99_libvirt echo "d root root 0755 /run/libvirt/lockd none" \ >> ${D}${sysconfdir}/default/volatiles/99_libvirt echo "d root root 0755 /run/libvirt/lxc none" \ >> ${D}${sysconfdir}/default/volatiles/99_libvirt echo "d root root 0755 /run/libvirt/network none" \ >> ${D}${sysconfdir}/default/volatiles/99_libvirt echo "d root root 0755 /run/libvirt/qemu none" \ >> ${D}${sysconfdir}/default/volatiles/99_libvirt # Manually set permissions and ownership to match polkit recipe if ${@bb.utils.contains('PACKAGECONFIG', 'polkit', 'true', 'false', d)}; then install -d -m 0700 ${D}/${datadir}/polkit-1/rules.d chown polkitd ${D}/${datadir}/polkit-1/rules.d chgrp root ${D}/${datadir}/polkit-1/rules.d else rm -rf ${D}/${datadir}/polkit-1 fi # disable seccomp_sandbox if [ -e ${D}${sysconfdir}/libvirt/qemu.conf ] ; then sed -i '/^#seccomp_sandbox = 1/aseccomp_sandbox = 0' \ ${D}${sysconfdir}/libvirt/qemu.conf fi # Add hook support for libvirt mkdir -p ${D}/etc/libvirt/hooks for hook in "daemon" "lxc" "network" "qemu" do install -m 0755 ${WORKDIR}/hook_support.py ${D}/etc/libvirt/hooks/${hook} done # Force the main dnsmasq instance to bind only to specified interfaces and # to not bind to virbr0. Libvirt will run its own instance on this interface. install -m 644 ${WORKDIR}/dnsmasq.conf ${D}/${sysconfdir}/dnsmasq.d/libvirt-daemon # remove .la references to our working diretory for i in `find ${D}${libdir} -type f -name *.la`; do sed -i -e 's#-L${B}/src/.libs##g' $i done sed -i -e 's/^\(unix_sock_group\ =\ \).*/\1"kvm"/' ${D}/etc/libvirt/libvirtd.conf sed -i -e 's/^\(unix_sock_rw_perms\ =\ \).*/\1"0776"/' ${D}/etc/libvirt/libvirtd.conf case ${MACHINE_ARCH} in *mips*) break ;; *) if ${@bb.utils.contains('PACKAGECONFIG', 'qemu', 'true', 'false', d)}; then chown -R qemu:qemu ${D}/${localstatedir}/lib/libvirt/qemu echo "d qemu qemu 0755 ${localstatedir}/cache/libvirt/qemu none" \ >> ${D}${sysconfdir}/default/volatiles/99_libvirt break fi ;; esac if ${@bb.utils.contains('PACKAGECONFIG','gnutls','true','false',d)}; then # Generate sample keys and certificates. cd ${WORKDIR} ${WORKDIR}/gnutls-helper.py -y # Deploy all sample keys and certificates of CA, server and client # to target so that libvirtd is able to boot successfully and local # connection via 127.0.0.1 is available out of box. install -d ${D}/etc/pki/CA install -d ${D}/etc/pki/libvirt/private install -m 0755 ${WORKDIR}/gnutls-helper.py ${D}/${bindir} install -m 0644 ${WORKDIR}/cakey.pem ${D}/${sysconfdir}/pki/libvirt/private/cakey.pem install -m 0644 ${WORKDIR}/cacert.pem ${D}/${sysconfdir}/pki/CA/cacert.pem install -m 0644 ${WORKDIR}/serverkey.pem ${D}/${sysconfdir}/pki/libvirt/private/serverkey.pem install -m 0644 ${WORKDIR}/servercert.pem ${D}/${sysconfdir}/pki/libvirt/servercert.pem install -m 0644 ${WORKDIR}/clientkey.pem ${D}/${sysconfdir}/pki/libvirt/private/clientkey.pem install -m 0644 ${WORKDIR}/clientcert.pem ${D}/${sysconfdir}/pki/libvirt/clientcert.pem # Force the connection to be tls. sed -i -e 's/^\(listen_tls\ =\ .*\)/#\1/' -e 's/^\(listen_tcp\ =\ .*\)/#\1/' ${D}/etc/libvirt/libvirtd.conf fi # virt-login-shell needs to run with setuid permission chmod 4755 ${D}${bindir}/virt-login-shell } EXTRA_OEMESON += " \ -Dinit_script=${@bb.utils.contains('DISTRO_FEATURES','systemd','systemd','none', d)} \ -Drunstatedir=/run \ -Dtests=enabled \ " # gcc9 end up mis-compiling qemuxml2argvtest.o with Og which then # crashes on target, so remove -Og and use -O2 as workaround SELECTED_OPTIMIZATION:remove:virtclass-multilib-lib32:mipsarch = "-Og" SELECTED_OPTIMIZATION:append:virtclass-multilib-lib32:mipsarch = " -O2" pkg_postinst:${PN}() { if [ -z "$D" ] && [ -e /etc/init.d/populate-volatile.sh ] ; then /etc/init.d/populate-volatile.sh update fi mkdir -m 711 -p $D/data/images } python () { if not bb.utils.contains('DISTRO_FEATURES', 'sysvinit', True, False, d): d.setVar("INHIBIT_UPDATERCD_BBCLASS", "1") }