Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app-emulation/libvirt/Manifest
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
DIST libvirt-11.2.0.tar.xz 9766976 BLAKE2B dc6288c2e61ab2730a8fa907b52061abb5bd3ca2ab28aa6e1e4142ddc00e9f0f4747240cae7dffed87c88fb4c14913a12f1fb3bad6d4079785e397ff78e2cc4c SHA512 78fdc0e7cc09687eb9fdb3d43ceab63018fb06d931669e4a461ddb2612a2367d885f59de14b7770ff164e5a30e487a0dc8c8bdcc778a14c4cf37e0e7db162792
DIST libvirt-11.3.0.tar.xz 9801572 BLAKE2B 61a69fd18d2caca71ec7b7e125568f85b03da0ec0f6c0ce0126cc5d50cbf8e631edc9fc8a27c5b8ffdfc84d5f027f7039651df15f55292106eb897d0451e5d01 SHA512 9d498c5b13d1754feebf3094bea773d1e07098d0badf6b6d816d7ba11a6eda5496a172aba789d3ae28578320559b5b3c9470411139c3dd58b0b763b85ec1c0a4
329 changes: 329 additions & 0 deletions app-emulation/libvirt/libvirt-11.3.0.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,329 @@
# Distributed under the terms of the GNU General Public License v2

EAPI=7

PYTHON_COMPAT=( python3+ )

inherit bash-completion-r1 linux-info meson python-any-r1 readme.gentoo-r1 user

DESCRIPTION="C toolkit to manipulate virtual machines"
HOMEPAGE="https://www.libvirt.org/"
SRC_URI="https://libvirt.org/sources/libvirt-11.3.0.tar.xz -> libvirt-11.3.0.tar.xz"

SLOT="0/${PV}"
LICENSE="LGPL-2.1"
KEYWORDS="*"
IUSE="
apparmor audit +caps +dbus dtrace firewalld fuse glusterfs iscsi
iscsi-direct +libvirtd lvm libssh lxc +macvtap nfs nls numa openvz
parted pcap policykit +qemu rbd sasl selinux +udev +vepa
virtualbox virt-network wireshark-plugins xen zfs
"

REQUIRED_USE="
firewalld? ( virt-network )
libvirtd? ( || ( lxc openvz qemu virtualbox xen ) )
lxc? ( caps libvirtd )
openvz? ( libvirtd )
policykit? ( dbus )
qemu? ( libvirtd )
vepa? ( macvtap )
virt-network? ( libvirtd )
virtualbox? ( libvirtd )
xen? ( libvirtd )"

# gettext.sh command is used by the libvirt command wrappers, and it's
# non-optional, so put it into RDEPEND.
# We can use both libnl:1.1 and libnl:3, but if you have both installed, the
# package will use 3 by default. Since we don't have slot pinning in an API,
# we must go with the most recent
MESON_DEPEND=">=dev-util/meson-0.54.0"
RDEPEND="
app-misc/scrub
>=dev-libs/glib-2.48.0
dev-libs/libgcrypt:0
dev-libs/libnl:3
>=dev-libs/libxml2-2.7.6
>=net-analyzer/openbsd-netcat-1.105-r1
>=net-libs/gnutls-1.0.25:0=
net-libs/libssh2
net-libs/libtirpc
net-libs/rpcsvc-proto
>=net-misc/curl-7.18.0
sys-apps/dmidecode
>=sys-apps/util-linux-2.17
sys-devel/gettext
sys-libs/ncurses:0=
sys-libs/readline:=
apparmor? ( sys-libs/libapparmor )
audit? ( sys-process/audit )
caps? ( sys-libs/libcap-ng )
dbus? ( sys-apps/dbus )
dtrace? ( dev-util/systemtap )
firewalld? ( >=net-firewall/firewalld-0.6.3 )
fuse? ( sys-fs/fuse:0= )
glusterfs? ( >=sys-cluster/glusterfs-3.4.1 )
iscsi? ( sys-block/open-iscsi )
iscsi-direct? ( >=net-libs/libiscsi-1.18.0 )
libssh? ( net-libs/libssh )
lvm? ( >=sys-fs/lvm2-2.02.48-r2[-device-mapper-only(-)] )
nfs? ( net-fs/nfs-utils )
numa? (
>sys-process/numactl-2.0.2
sys-process/numad
)
parted? (
>=sys-block/parted-1.8[device-mapper]
sys-fs/lvm2[-device-mapper-only(-)]
)
pcap? ( >=net-libs/libpcap-1.0.0 )
policykit? ( >=sys-auth/polkit-0.9 )
qemu? (
>=app-emulation/qemu-4.2
dev-libs/json-c
)
rbd? ( sys-cluster/ceph )
sasl? ( dev-libs/cyrus-sasl )
selinux? ( >=sys-libs/libselinux-2.0.85 )
virt-network? (
net-dns/dnsmasq[script]
net-firewall/ebtables
>=net-firewall/iptables-1.4.10[ipv6]
net-misc/radvd
sys-apps/iproute2[-minimal]
)
virtualbox? ( || ( app-emulation/virtualbox >=app-emulation/virtualbox-bin-2.2.0 ) )
wireshark-plugins? ( net-analyzer/wireshark:= )
xen? (
>=app-emulation/xen-4.6.0
app-emulation/xen-tools:=
)
udev? (
virtual/udev
>=x11-libs/libpciaccess-0.10.9
)
zfs? ( sys-fs/zfs )"

DEPEND="${RDEPEND}
${PYTHON_DEPS}
app-text/xhtml1
dev-lang/perl
dev-libs/libxslt
dev-perl/XML-XPath
dev-python/docutils
virtual/pkgconfig"

pkg_setup() {
if use qemu; then
enewgroup qemu 77
enewuser qemu 77 -1 -1 "qemu,kvm"
fi

use policykit && enewgroup libvirt

# Check kernel configuration:
CONFIG_CHECK=""
use fuse && CONFIG_CHECK+="
~FUSE_FS"

use lvm && CONFIG_CHECK+="
~BLK_DEV_DM
~DM_MULTIPATH
~DM_SNAPSHOT"

use lxc && CONFIG_CHECK+="
~BLK_CGROUP
~CGROUP_CPUACCT
~CGROUP_DEVICE
~CGROUP_FREEZER
~CGROUP_NET_PRIO
~CGROUP_PERF
~CGROUPS
~CGROUP_SCHED
~CPUSETS
~IPC_NS
~MACVLAN
~NAMESPACES
~NET_CLS_CGROUP
~NET_NS
~PID_NS
~POSIX_MQUEUE
~SECURITYFS
~USER_NS
~UTS_NS
~VETH
~!GRKERNSEC_CHROOT_MOUNT
~!GRKERNSEC_CHROOT_DOUBLE
~!GRKERNSEC_CHROOT_PIVOT
~!GRKERNSEC_CHROOT_CHMOD
~!GRKERNSEC_CHROOT_CAPS"

kernel_is lt 4 7 && use lxc && CONFIG_CHECK+="
~DEVPTS_MULTIPLE_INSTANCES"

use macvtap && CONFIG_CHECK+="
~MACVTAP"

use virt-network && CONFIG_CHECK+="
~BRIDGE_EBT_MARK_T
~BRIDGE_NF_EBTABLES
~NETFILTER_ADVANCED
~NETFILTER_XT_CONNMARK
~NETFILTER_XT_MARK
~NETFILTER_XT_TARGET_CHECKSUM
~IP_NF_FILTER
~IP_NF_MANGLE
~IP_NF_NAT
~IP_NF_TARGET_MASQUERADE
~IP6_NF_FILTER
~IP6_NF_MANGLE
~IP6_NF_NAT"
# Bandwidth Limiting Support
use virt-network && CONFIG_CHECK+="
~BRIDGE_EBT_T_NAT
~IP_NF_TARGET_REJECT
~NET_ACT_POLICE
~NET_CLS_FW
~NET_CLS_U32
~NET_SCH_HTB
~NET_SCH_INGRESS
~NET_SCH_SFQ"

# Handle specific kernel versions for different features
kernel_is lt 3 6 && CONFIG_CHECK+=" ~CGROUP_MEM_RES_CTLR"
if kernel_is ge 3 6; then
CONFIG_CHECK+=" ~MEMCG ~MEMCG_SWAP "
kernel_is lt 4 5 && CONFIG_CHECK+=" ~MEMCG_KMEM "
fi

ERROR_USER_NS="Optional depending on LXC configuration."

if [[ -n ${CONFIG_CHECK} ]]; then
linux-info_pkg_setup
fi
}

src_prepare() {
touch "${S}/.mailmap"

default

# Tweak the init script:
cp "${FILESDIR}/libvirtd.init-r19" "${S}/libvirtd.init" || die
sed -e "s/USE_FLAG_FIREWALLD/$(usex firewalld 'need firewalld' '')/" \
-i "${S}/libvirtd.init" || die "sed failed"

#Replacing recurrent patches with sed scripts
mv src/security/apparmor/usr.lib.libvirt.virt-aa-helper.in src/security/apparmor/usr.libexec.virt-aa-helper.in
for x in $(grep -rl usr.lib.libvirt.virt-aa-helper.in); do
sed -e "s/usr.lib.libvirt.virt-aa-helper.in/usr.libexec.virt-aa-helper.in/g" -i $x
done
sed -e "s#/sysconfig/libvirt-guests#/sysconfig/libvirt-guests.conf#g" \
-e "s#/lock/subsys/libvirt-guests#/lock/libvirt-guests#g" \
-i tools/libvirt-guests.sh.in
}

src_configure() {
local emesonargs=(
$(meson_feature apparmor)
$(meson_feature apparmor apparmor_profiles)
$(meson_feature audit)
$(meson_feature caps capng)
$(meson_feature dtrace)
$(meson_feature firewalld)
$(meson_feature fuse)
$(meson_feature glusterfs)
$(meson_feature glusterfs storage_gluster)
$(meson_feature iscsi storage_iscsi)
$(meson_feature iscsi-direct storage_iscsi_direct)
$(meson_feature libvirtd driver_libvirtd)
$(meson_feature libssh)
$(meson_feature lvm storage_lvm)
$(meson_feature lvm storage_mpath)
$(meson_feature lxc driver_lxc)
$(meson_feature nls)
$(meson_feature numa numactl)
$(meson_feature numa numad)
$(meson_feature openvz driver_openvz)
$(meson_feature parted storage_disk)
$(meson_feature pcap libpcap)
$(meson_feature policykit polkit)
$(meson_feature qemu driver_qemu)
$(meson_feature qemu json_c)
$(meson_feature rbd storage_rbd)
$(meson_feature sasl)
$(meson_feature selinux)
$(meson_feature udev)
$(meson_feature virt-network driver_network)
$(meson_feature virtualbox driver_vbox)
$(meson_feature wireshark-plugins wireshark_dissector)
$(meson_feature xen driver_libxl)
$(meson_feature zfs storage_zfs)

-Dnetcf=disabled
-Dsanlock=disabled

-Ddriver_esx=enabled
-Dqemu_group=$(usex caps qemu root)
-Dqemu_user=$(usex caps qemu root)
-Ddriver_remote=enabled
-Dstorage_fs=enabled
-Ddriver_vmware=enabled

--localstatedir=/var
-Drunstatedir=/run
)

meson_src_configure
}

src_test() {
# remove problematic tests, bug #591416
sed -i -e '/commandtest/d' tests/meson.build
meson_src_test
}

src_install() {
meson_src_install

# Remove bogus, empty directories. They are either not used, or
# libvirtd is able to create them on demand
rm -rf "${D}"/etc/sysconfig
rm -rf "${D}"/var
rm -rf "${D}"/run

use libvirtd || return 0
# From here, only libvirtd-related instructions, be warned!

newinitd "${S}/libvirtd.init" libvirtd
newinitd "${FILESDIR}/libvirt-guests.init-r4" libvirt-guests
newinitd "${FILESDIR}/virtlockd.init-r2" virtlockd
newinitd "${FILESDIR}/virtlogd.init-r2" virtlogd

newconfd "${FILESDIR}/libvirtd.confd-r5" libvirtd
newconfd "${FILESDIR}/libvirt-guests.confd" libvirt-guests

DOC_CONTENTS=$(<"${FILESDIR}/README.gentoo-r3")
DISABLE_AUTOFORMATTING=true
readme.gentoo_create_doc
}

pkg_preinst() {
# we only ever want to generate this once
if [[ -e "${ROOT}"/etc/libvirt/qemu/networks/default.xml ]]; then
rm -rf "${D}"/etc/libvirt/qemu/networks/default.xml
fi
}

pkg_postinst() {
if [[ -e "${ROOT}"/etc/libvirt/qemu/networks/default.xml ]]; then
touch "${ROOT}"/etc/libvirt/qemu/networks/default.xml
fi

use libvirtd || return 0
# From here, only libvirtd-related instructions, be warned!

readme.gentoo_print_elog
}

# vim: filetype=ebuild
Loading