Commit e5c372bf authored by nc's avatar nc
Browse files

New port: emulators/qemu-guest-agent: QEMU Guest Agent for FreeBSD

PR:		254105
Submitted by:	zhecka AT gmail DOT com
parent b5a8aafc
......@@ -113,6 +113,7 @@
SUBDIR += qemu
SUBDIR += qemu-cheri
SUBDIR += qemu-devel
SUBDIR += qemu-guest-agent
SUBDIR += qemu-powernv
SUBDIR += qemu-user-static
SUBDIR += qemu-user-static-devel
......
# Created by: Kaltashkin Eugene <zhecka@gmail.com>
# $FreeBSD$
PORTNAME= qemu
DISTVERSION= 5.0.1
CATEGORIES= emulators
MASTER_SITES= https://download.qemu.org/
PKGNAMESUFFIX= -guest-agent
MAINTAINER= zhecka@gmail.com
COMMENT= QEMU guest-agent utilities
LICENSE= GPLv2
DIST_SUBDIR= qemu/${PORTVERSION}
FILESDIR= ${.CURDIR}/files
HAS_CONFIGURE= yes
USES= gmake gnome pkgconfig python:build tar:xz
USE_GNOME= glib20
USE_RC_SUBR= qemu-guest-agent
MAKE_ENV+= BSD_MAKE="${MAKE}" PREFIX=${PREFIX}
CONFLICTS_INSTALL= qemu-[0-9]* qemu-devel-* qemu-sbruno-*
OPTIONS_EXCLUDE=SAMBA X11 GTK3 OPENGL GNUTLS SASL JPEG PNG CURL \
CDROM_DMA PCAP USBREDIR GNS3 X86_TARGETS DOCS\
STATIC_LINK NCURSES VDE
PLIST= ${.CURDIR}/pkg-plist
DESCR= ${.CURDIR}/pkg-descr
CONFIGURE_ARGS?=--localstatedir=/var --extra-ldflags=-L\"${LOCALBASE}/lib\" \
--mandir=${MANPREFIX}/man \
--prefix=${PREFIX} --cc=${CC} --disable-kvm \
--python=${PYTHON_CMD} \
--extra-cflags=-I${WRKSRC}\ -I${LOCALBASE}/include\ -DPREFIX=\\\"\"${PREFIX}\\\"\"\ -DBSD_GUEST_AGENT\ -DFREEBSD \
--disable-blobs \
--disable-system \
--disable-user \
--disable-linux-user \
--disable-bsd-user \
--disable-docs \
--enable-guest-agent \
--disable-guest-agent-msi \
--disable-pie \
--disable-modules \
--disable-module-upgrades \
--disable-debug-tcg \
--disable-debug-info \
--disable-sparse \
--disable-gnutls \
--disable-nettle \
--disable-gcrypt \
--disable-auth-pam \
--disable-sdl \
--disable-sdl-image \
--disable-gtk \
--disable-vte \
--disable-curses \
--disable-iconv \
--disable-vnc \
--disable-vnc-sasl \
--disable-vnc-jpeg \
--disable-vnc-png \
--disable-cocoa \
--disable-virtfs \
--disable-mpath \
--disable-xen \
--disable-xen-pci-passthrough \
--disable-brlapi \
--disable-curl \
--disable-membarrier \
--disable-fdt \
--disable-kvm \
--disable-hax \
--disable-hvf \
--disable-whpx \
--disable-rdma \
--disable-pvrdma \
--disable-vde \
--disable-netmap \
--disable-linux-aio \
--disable-linux-io-uring \
--disable-cap-ng \
--disable-attr \
--disable-vhost-net \
--disable-vhost-vsock \
--disable-vhost-scsi \
--disable-vhost-crypto \
--disable-vhost-kernel \
--disable-vhost-user \
--disable-spice \
--disable-rbd \
--disable-libiscsi \
--disable-libnfs \
--disable-smartcard \
--disable-libusb \
--disable-live-block-migration \
--disable-usb-redir \
--disable-lzo \
--disable-snappy \
--disable-bzip2 \
--disable-lzfse \
--disable-zstd \
--disable-seccomp \
--disable-coroutine-pool \
--disable-glusterfs \
--disable-tpm \
--disable-libssh \
--disable-numa \
--disable-libxml2 \
--disable-tcmalloc \
--disable-jemalloc \
--disable-avx2 \
--disable-avx512f \
--disable-replication \
--disable-opengl \
--disable-virglrenderer \
--disable-xfsctl \
--disable-qom-cast-debug \
--enable-tools \
--disable-vxhs \
--disable-bochs \
--disable-cloop \
--disable-dmg \
--disable-qcow1 \
--disable-vdi \
--disable-vvfat \
--disable-qed \
--disable-parallels \
--disable-sheepdog \
--disable-crypto-afalg \
--disable-capstone \
--disable-debug-mutex \
--disable-libpmem \
--disable-xkbcommon
post-install:
@${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/qemu-*
@${RM} ${STAGEDIR}${PREFIX}/bin/qemu-nbd
@${RM} ${STAGEDIR}${PREFIX}/bin/qemu-edid
@${RM} ${STAGEDIR}${PREFIX}/bin/qemu-img
@${RM} ${STAGEDIR}${PREFIX}/bin/qemu-io
@${RMDIR} ${STAGEDIR}${DATADIR}
${MKDIR} ${STAGEDIR}${PREFIX}/qemu
.include <bsd.port.options.mk>
.if !defined(STRIP) || ${STRIP} == ""
CONFIGURE_ARGS+=--disable-strip
.endif
.if ${ARCH} == "amd64"
MAKE_ARGS+= ARCH=x86_64
.endif
.if ${ARCH} == "powerpc"
MAKE_ARGS+= ARCH=ppc
.endif
.if ${ARCH} == "powerpc64"
MAKE_ARGS+= ARCH=ppc64
.endif
.if ${ARCH} == "sparc64"
CONFIGURE_ARGS+= --sparc_cpu=v9
.endif
.if ${OSVERSION} < 1200000
PKGMESSAGE= ${.CURDIR}/pkg-message-11
.else
PKGMESSAGE= ${.CURDIR}/pkg-message
.endif
PLIST_SUB+= LINUXBOOT_DMA=""
# XXX need to disable usb host code on head while it's not ported to the
# new usb stack yet
post-configure:
@${REINPLACE_CMD} -E \
-e "s|^(HOST_USB=)bsd|\1stub|" \
${WRKSRC}/config-host.mak
.include <bsd.port.mk>
TIMESTAMP = 1603483758
SHA256 (qemu/5.0.1/qemu-5.0.1.tar.xz) = 135fab4c3699a378c9584b3453927e2f5002e440311f21efa66fc189d4bb4982
SIZE (qemu/5.0.1/qemu-5.0.1.tar.xz) = 62430168
SHA256 (qemu/5.0.1/55765822804f.patch) = 10c2cc93ad01b02d854e26a9e445ba22bb5434dda1ef25baeb979be6292fa8ef
SIZE (qemu/5.0.1/55765822804f.patch) = 2271
SHA256 (qemu/5.0.1/aa4d30f6618d.patch) = eeddc5f5e08a460d2c133b4193d115fa1f00f206e0833f33ec66379981473efe
SIZE (qemu/5.0.1/aa4d30f6618d.patch) = 2211
--- Makefile.orig 2020-09-15 19:31:13 UTC
+++ Makefile
@@ -361,29 +361,6 @@
MANUAL_BUILDDIR := docs
endif
-ifdef BUILD_DOCS
-DOCS+=$(MANUAL_BUILDDIR)/system/qemu.1
-DOCS+=$(MANUAL_BUILDDIR)/tools/qemu-img.1
-DOCS+=$(MANUAL_BUILDDIR)/tools/qemu-nbd.8
-DOCS+=$(MANUAL_BUILDDIR)/interop/qemu-ga.8
-ifeq ($(CONFIG_LINUX)$(CONFIG_SECCOMP)$(CONFIG_LIBCAP_NG),yyy)
-DOCS+=$(MANUAL_BUILDDIR)/tools/virtiofsd.1
-endif
-DOCS+=$(MANUAL_BUILDDIR)/system/qemu-block-drivers.7
-DOCS+=docs/interop/qemu-qmp-ref.html docs/interop/qemu-qmp-ref.txt docs/interop/qemu-qmp-ref.7
-DOCS+=docs/interop/qemu-ga-ref.html docs/interop/qemu-ga-ref.txt docs/interop/qemu-ga-ref.7
-DOCS+=$(MANUAL_BUILDDIR)/system/qemu-cpu-models.7
-DOCS+=$(MANUAL_BUILDDIR)/index.html
-ifdef CONFIG_VIRTFS
-DOCS+=$(MANUAL_BUILDDIR)/tools/virtfs-proxy-helper.1
-endif
-ifdef CONFIG_TRACE_SYSTEMTAP
-DOCS+=$(MANUAL_BUILDDIR)/tools/qemu-trace-stap.1
-endif
-else
-DOCS=
-endif
-
SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory --quiet) BUILD_DIR=$(BUILD_DIR)
SUBDIR_DEVICES_MAK=$(patsubst %, %/config-devices.mak, $(filter %-softmmu, $(TARGET_DIRS)))
SUBDIR_DEVICES_MAK_DEP=$(patsubst %, %.d, $(SUBDIR_DEVICES_MAK))
@@ -878,10 +855,6 @@
$(call install-manual,user)
install-doc: $(DOCS) install-sphinxdocs
- $(INSTALL_DIR) "$(DESTDIR)$(qemu_docdir)"
- $(INSTALL_DATA) $(MANUAL_BUILDDIR)/index.html "$(DESTDIR)$(qemu_docdir)"
- $(INSTALL_DATA) docs/interop/qemu-qmp-ref.html "$(DESTDIR)$(qemu_docdir)"
- $(INSTALL_DATA) docs/interop/qemu-qmp-ref.txt "$(DESTDIR)$(qemu_docdir)"
ifdef CONFIG_POSIX
$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
$(INSTALL_DATA) $(MANUAL_BUILDDIR)/system/qemu.1 "$(DESTDIR)$(mandir)/man1"
@@ -889,21 +862,10 @@
$(INSTALL_DATA) docs/interop/qemu-qmp-ref.7 "$(DESTDIR)$(mandir)/man7"
$(INSTALL_DATA) $(MANUAL_BUILDDIR)/system/qemu-block-drivers.7 "$(DESTDIR)$(mandir)/man7"
$(INSTALL_DATA) $(MANUAL_BUILDDIR)/system/qemu-cpu-models.7 "$(DESTDIR)$(mandir)/man7"
-ifeq ($(CONFIG_TOOLS),y)
- $(INSTALL_DATA) $(MANUAL_BUILDDIR)/tools/qemu-img.1 "$(DESTDIR)$(mandir)/man1"
- $(INSTALL_DIR) "$(DESTDIR)$(mandir)/man8"
- $(INSTALL_DATA) $(MANUAL_BUILDDIR)/tools/qemu-nbd.8 "$(DESTDIR)$(mandir)/man8"
-endif
ifdef CONFIG_TRACE_SYSTEMTAP
$(INSTALL_DATA) $(MANUAL_BUILDDIR)/tools/qemu-trace-stap.1 "$(DESTDIR)$(mandir)/man1"
endif
-ifneq (,$(findstring qemu-ga,$(TOOLS)))
- $(INSTALL_DATA) $(MANUAL_BUILDDIR)/interop/qemu-ga.8 "$(DESTDIR)$(mandir)/man8"
- $(INSTALL_DATA) docs/interop/qemu-ga-ref.html "$(DESTDIR)$(qemu_docdir)"
- $(INSTALL_DATA) docs/interop/qemu-ga-ref.txt "$(DESTDIR)$(qemu_docdir)"
- $(INSTALL_DATA) docs/interop/qemu-ga-ref.7 "$(DESTDIR)$(mandir)/man7"
endif
-endif
ifdef CONFIG_VIRTFS
$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
$(INSTALL_DATA) $(MANUAL_BUILDDIR)/tools/virtfs-proxy-helper.1 "$(DESTDIR)$(mandir)/man1"
@@ -927,7 +889,7 @@
install-includedir:
$(INSTALL_DIR) "$(DESTDIR)$(includedir)"
-install: all $(if $(BUILD_DOCS),install-doc) \
+install: all \
install-datadir install-localstatedir install-includedir \
$(if $(INSTALL_BLOBS),$(edk2-decompressed)) \
recurse-install
@@ -974,31 +936,12 @@
"$(DESTDIR)$(qemu_datadir)/firmware/$$x"; \
done
endif
- for s in $(ICON_SIZES); do \
- mkdir -p "$(DESTDIR)$(qemu_icondir)/hicolor/$${s}/apps"; \
- $(INSTALL_DATA) $(SRC_PATH)/ui/icons/qemu_$${s}.png \
- "$(DESTDIR)$(qemu_icondir)/hicolor/$${s}/apps/qemu.png"; \
- done; \
- mkdir -p "$(DESTDIR)$(qemu_icondir)/hicolor/32x32/apps"; \
- $(INSTALL_DATA) $(SRC_PATH)/ui/icons/qemu_32x32.bmp \
- "$(DESTDIR)$(qemu_icondir)/hicolor/32x32/apps/qemu.bmp"; \
- mkdir -p "$(DESTDIR)$(qemu_icondir)/hicolor/scalable/apps"; \
- $(INSTALL_DATA) $(SRC_PATH)/ui/icons/qemu.svg \
- "$(DESTDIR)$(qemu_icondir)/hicolor/scalable/apps/qemu.svg"
- mkdir -p "$(DESTDIR)$(qemu_desktopdir)"
- $(INSTALL_DATA) $(SRC_PATH)/ui/qemu.desktop \
- "$(DESTDIR)$(qemu_desktopdir)/qemu.desktop"
ifdef CONFIG_GTK
$(MAKE) -C po $@
endif
ifeq ($(CONFIG_PLUGIN),y)
$(INSTALL_DATA) $(SRC_PATH)/include/qemu/qemu-plugin.h "$(DESTDIR)$(includedir)/qemu-plugin.h"
endif
- $(INSTALL_DIR) "$(DESTDIR)$(qemu_datadir)/keymaps"
- set -e; for x in $(KEYMAPS); do \
- $(INSTALL_DATA) $(SRC_PATH)/pc-bios/keymaps/$$x "$(DESTDIR)$(qemu_datadir)/keymaps"; \
- done
- $(INSTALL_DATA) $(BUILD_DIR)/trace-events-all "$(DESTDIR)$(qemu_datadir)/trace-events-all"
.PHONY: ctags
ctags:
--- configure.orig 2020-09-15 19:31:13 UTC
+++ configure
@@ -360,7 +360,7 @@
sdl=""
sdl_image=""
virtfs=""
-mpath=""
+mpath="no"
vnc="yes"
sparse="no"
vde=""
@@ -408,7 +408,7 @@
modules="no"
module_upgrades="no"
prefix="/usr/local"
-mandir="\${prefix}/share/man"
+mandir="\${prefix}/man"
datadir="\${prefix}/share"
firmwarepath="\${prefix}/share/qemu-firmware"
qemu_docdir="\${prefix}/share/doc/qemu"
@@ -493,6 +493,9 @@
tcmalloc="no"
jemalloc="no"
replication="yes"
+pcap="no"
+pcap_create="no"
+bpf="no"
vxhs=""
bochs="yes"
cloop="yes"
@@ -509,6 +512,7 @@
default_devices="yes"
plugins="no"
fuzzing="no"
+libudev="no"
supported_cpu="no"
supported_os="no"
@@ -904,7 +908,7 @@
kvm="yes"
QEMU_INCLUDES="-isystem \$(SRC_PATH)/linux-headers -isystem $PWD/linux-headers $QEMU_INCLUDES"
supported_os="yes"
- libudev="yes"
+ libudev="no"
;;
esac
@@ -1168,6 +1172,10 @@
;;
--enable-vnc-png) vnc_png="yes"
;;
+ --enable-pcap) pcap="yes"
+ ;;
+ --disable-pcap) pcap="no"
+ ;;
--disable-slirp) slirp="no"
;;
--enable-slirp=git) slirp="git"
@@ -3137,6 +3145,14 @@
fi
##########################################
+# getifaddrs (for tests/test-io-channel-socket )
+
+have_ifaddrs_h=yes
+if ! check_include "ifaddrs.h" ; then
+ have_ifaddrs_h=no
+fi
+
+##########################################
# VTE probe
if test "$vte" != "no"; then
@@ -3806,7 +3822,7 @@
glib_libs=$($pkg_config --libs $i)
QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
LIBS="$glib_libs $LIBS"
- libs_qga="$glib_libs $libs_qga"
+ libs_qga="$glib_libs -lintl $libs_qga"
else
error_exit "glib-$glib_req_ver $i is required to compile QEMU"
fi
@@ -3926,7 +3942,7 @@
##########################################
# pixman support probe
-if test "$want_tools" = "no" && test "$softmmu" = "no"; then
+if test "$softmmu" = "no"; then
pixman_cflags=
pixman_libs=
elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
@@ -4957,14 +4973,6 @@
fi
if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
docs=yes
- else
- if test "$docs" = "yes" ; then
- if has $sphinx_build && test "$sphinx_ok" != "yes"; then
- echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
- fi
- feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
- fi
- docs=no
fi
fi
@@ -5098,7 +5106,7 @@
# check for libusb
if test "$libusb" != "no" ; then
- if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
+ if $pkg_config libusb-1.0; then
libusb="yes"
libusb_cflags=$($pkg_config --cflags libusb-1.0)
libusb_libs=$($pkg_config --libs libusb-1.0)
@@ -5501,7 +5509,51 @@
fi
fi
+##########################################
+# pcap probe
+if test "$pcap" = "yes" -a "$pcap" != "no"; then
+ cat > $TMPC << EOF
+#include <pcap.h>
+int main(void) { return (pcap_lib_version() == (char *)0 ? 1 : 0); }
+EOF
+ if test "$mingw32" = "no" ; then
+ libpcap=-lpcap
+ else
+ libpcap=-lwpcap
+ fi
+ if compile_prog "" "$libpcap" ; then
+ :
+ else
+ echo
+ echo "Error: Could not find pcap"
+ echo "Make sure to have the pcap libs and headers installed."
+ echo
+ exit 1
+ fi
+ cat > $TMPC << EOF
+#include <pcap.h>
+int main(void)
+{
+ char errbuf[PCAP_ERRBUF_SIZE];
+ return (pcap_create("foo", errbuf) == (pcap_t *)0 ? 1 : 0);
+}
+EOF
+ if compile_prog "" "$libpcap" ; then
+ pcap_create="yes"
+ fi
+ cat > $TMPC << EOF
+#define PCAP_DONT_INCLUDE_PCAP_BPF_H
+#include <pcap.h>
+#include <net/bpf.h>
+int main(void) { return (BPF_MAJOR_VERSION); }
+EOF
+ if compile_prog ; then
+ bpf="yes"
+ fi
+ libs_softmmu="$libpcap $libs_softmmu"
+fi # test "$pcap"
+
##########################################
# check if we have open_by_handle_at
@@ -6627,6 +6679,7 @@
echo "Block whitelist (rw) $block_drv_rw_whitelist"
echo "Block whitelist (ro) $block_drv_ro_whitelist"
echo "VirtFS support $virtfs"
+echo "pcap support $pcap"
echo "Multipath support $mpath"
echo "VNC support $vnc"
if test "$vnc" = "yes" ; then
@@ -6864,6 +6917,15 @@
if test "$want_tools" = "yes" ; then
echo "CONFIG_TOOLS=y" >> $config_host_mak
fi
+if test "$pcap" = "yes" ; then
+ echo "CONFIG_PCAP=y" >> $config_host_mak
+ if test "$pcap_create" = "yes" ; then
+ echo "CONFIG_PCAP_CREATE=y" >> $config_host_mak
+ fi
+ if test "$bpf" = "yes" ; then
+ echo "CONFIG_BPF=y" >> $config_host_mak
+ fi
+fi
if test "$slirp" != "no"; then
echo "CONFIG_SLIRP=y" >> $config_host_mak
echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
@@ -7120,6 +7182,9 @@
# if this macro is set.
if test "$have_fsxattr" = "yes" ; then
echo "HAVE_FSXATTR=y" >> $config_host_mak
+fi
+if test "$have_ifaddrs_h" = "yes" ; then
+ echo "HAVE_IFADDRS_H=y" >> $config_host_mak
fi
if test "$have_copy_file_range" = "yes" ; then
echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
This diff is collapsed.
--- qga/main.c.orig 2020-09-15 16:31:14 UTC
+++ qga/main.c
@@ -46,9 +46,15 @@
#endif
#ifndef _WIN32
+#ifdef BSD_GUEST_AGENT
+#define QGA_VIRTIO_PATH_DEFAULT "/dev/vtcon/org.qemu.guest_agent.0"
+#define QGA_STATE_RELATIVE_DIR "run"
+#define QGA_SERIAL_PATH_DEFAULT "/dev/vtcon/org.qemu.guest_agent.0"
+#else
#define QGA_VIRTIO_PATH_DEFAULT "/dev/virtio-ports/org.qemu.guest_agent.0"
#define QGA_STATE_RELATIVE_DIR "run"
#define QGA_SERIAL_PATH_DEFAULT "/dev/ttyS0"
+#endif // BSD_GUEST_AGENT
#else
#define QGA_VIRTIO_PATH_DEFAULT "\\\\.\\Global\\org.qemu.guest_agent.0"
#define QGA_STATE_RELATIVE_DIR "qemu-ga"
@@ -1478,7 +1484,11 @@ int main(int argc, char **argv)
}
if (config->method == NULL) {
+#ifdef BSD_GUEST_AGENT
+ config->method = g_strdup("isa-serial");
+#else
config->method = g_strdup("virtio-serial");
+#endif // BSD_GUEST_AGENT
}
socket_activation = check_socket_activation();
#!/bin/sh
#
# PROVIDE: qemu_guest_agent
# REQUIRE: DAEMON
# KEYWORD: nojail
#
#
# Add the following lines to /etc/rc.conf to enable qemu-guest-agent:
#
#qemu_guest_agent_enable="YES"
#
# For detailed logging add flags -v and -l to /etc/rc.conf
#
#qemu_guest_agent_flags="-d -v -l /var/log/qemu-ga.log"
. /etc/rc.subr
name=qemu_guest_agent
rcvar=qemu_guest_agent_enable
load_rc_config $name
qemu_guest_agent_flags=${qemu_guest_agent_flags-"-d"}
qemu_guest_agent_enable=${qemu_guest_agent_enable:-"NO"}
qemu_guest_agent_bin=/usr/local/bin/qemu-ga
command=${qemu_guest_agent_bin}
pidfile="/var/run/qemu-ga.pid"
run_rc_command "$1"
QEMU Guest Agent for FreeBSD
Port homepage https://github.com/aborche/qemu-guest-agent
WWW: http://wiki.qemu.org/Main_Page
[
{ type: install
message: <<EOM
=======================================================
Modify your `/etc/rc.conf` by adding these settings
qemu_guest_agent_enable="YES"
qemu_guest_agent_flags="-d -v -l /var/log/qemu-ga.log"
and run
# service qemu-guest-agent start
For detailed help use `qemu-ga -h`
=======================================================
EOM
}
]
[
{ type: install
message: <<EOM
=======================================================
Modify your `/etc/rc.conf` by adding these settings
qemu_guest_agent_enable="YES"
qemu_guest_agent_flags="-d -v -l /var/log/qemu-ga.log"
and run
# service qemu-guest-agent start
For FreeBSD less than 12
------------------------
virtio_console driver in FreeBSD 11 doesn't support aliasing virtio channels in devfs. Use direct path for control device. eq:
qemu_guest_agent_flags="-d -v -l /var/log/qemu-ga.log -p /dev/ttyV0.2"
For detailed help use `qemu-ga -h`
Also read port homepage https://github.com/aborche/qemu-guest-agent
=======================================================