qemu: Update to 7.0.0, splits packages, enhances deps, extends tests/docs

This commit is contained in:
Helge Konetzka
2022-04-20 08:16:30 +02:00
parent 2d1b951719
commit 5d30bc8567
3 changed files with 1369 additions and 829 deletions

View File

@@ -1,12 +1,17 @@
_realname=qemu
pkgbase=mingw-w64-${_realname}
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}"
_base_ver="6.2.0"
pkgname=(
"${MINGW_PACKAGE_PREFIX}-qemu"
"${MINGW_PACKAGE_PREFIX}-qemu-common"
"${MINGW_PACKAGE_PREFIX}-qemu-guest-agent"
"${MINGW_PACKAGE_PREFIX}-qemu-image-util"
)
_base_ver="7.0.0"
# QEMU Versioning of RC-SourcePackage and RC-Version differs
# e.g. qemu-6.1.0-rc0.tar.xz contains 6.0.90, qemu-6.1.0-rc1.tar.xz contains 6.0.91
# Unset _rc_no to create Release-Build
#_rc_no="4"
_rc_base_ver="6.1.9${_rc_no}"
_rc_base_ver="6.2.9${_rc_no}"
_rc_file_ver="rc${_rc_no}"
_tarname=$( [ -z "${_rc_no}" ] && echo ${_realname}-${_base_ver} || echo ${_realname}-${_base_ver}-${_rc_file_ver} )
pkgver=$( [ -z "${_rc_no}" ] && echo ${_base_ver} || echo ${_rc_base_ver} )
@@ -24,49 +29,85 @@ makedepends=(
"${MINGW_PACKAGE_PREFIX}-python-sphinx"
"${MINGW_PACKAGE_PREFIX}-python-sphinx_rtd_theme"
"${MINGW_PACKAGE_PREFIX}-autotools"
"${MINGW_PACKAGE_PREFIX}-tools-git"
"${MINGW_PACKAGE_PREFIX}-cc"
'perl' 'bison' 'bsdtar')
depends=(
"${MINGW_PACKAGE_PREFIX}-capstone"
"${MINGW_PACKAGE_PREFIX}-curl"
"${MINGW_PACKAGE_PREFIX}-cyrus-sasl"
"${MINGW_PACKAGE_PREFIX}-expat"
"${MINGW_PACKAGE_PREFIX}-fontconfig"
"${MINGW_PACKAGE_PREFIX}-freetype"
"${MINGW_PACKAGE_PREFIX}-fribidi"
"${MINGW_PACKAGE_PREFIX}-gcc-libs"
"${MINGW_PACKAGE_PREFIX}-gdk-pixbuf2"
"${MINGW_PACKAGE_PREFIX}-gettext"
"${MINGW_PACKAGE_PREFIX}-glib2"
"${MINGW_PACKAGE_PREFIX}-gmp"
"${MINGW_PACKAGE_PREFIX}-gnutls"
"${MINGW_PACKAGE_PREFIX}-graphite2"
"${MINGW_PACKAGE_PREFIX}-gst-plugins-base"
"${MINGW_PACKAGE_PREFIX}-gstreamer"
"${MINGW_PACKAGE_PREFIX}-gtk3"
"${MINGW_PACKAGE_PREFIX}-libjpeg"
"${MINGW_PACKAGE_PREFIX}-harfbuzz"
"${MINGW_PACKAGE_PREFIX}-jbigkit"
"${MINGW_PACKAGE_PREFIX}-lerc"
"${MINGW_PACKAGE_PREFIX}-libc++"
"${MINGW_PACKAGE_PREFIX}-libdatrie"
"${MINGW_PACKAGE_PREFIX}-libdeflate"
"${MINGW_PACKAGE_PREFIX}-libepoxy"
"${MINGW_PACKAGE_PREFIX}-libffi"
"${MINGW_PACKAGE_PREFIX}-libiconv"
"${MINGW_PACKAGE_PREFIX}-libidn2"
"${MINGW_PACKAGE_PREFIX}-libjpeg-turbo"
"${MINGW_PACKAGE_PREFIX}-libnfs"
"${MINGW_PACKAGE_PREFIX}-libpng"
"${MINGW_PACKAGE_PREFIX}-libpsl"
"${MINGW_PACKAGE_PREFIX}-libslirp"
"${MINGW_PACKAGE_PREFIX}-libssh"
"${MINGW_PACKAGE_PREFIX}-libssh2"
"${MINGW_PACKAGE_PREFIX}-libssp"
"${MINGW_PACKAGE_PREFIX}-libtasn1"
"${MINGW_PACKAGE_PREFIX}-libthai"
"${MINGW_PACKAGE_PREFIX}-libtiff"
"${MINGW_PACKAGE_PREFIX}-libunistring"
"${MINGW_PACKAGE_PREFIX}-libunwind"
"${MINGW_PACKAGE_PREFIX}-libusb"
"${MINGW_PACKAGE_PREFIX}-libxml2"
"${MINGW_PACKAGE_PREFIX}-libwebp"
"${MINGW_PACKAGE_PREFIX}-libwinpthread-git"
"${MINGW_PACKAGE_PREFIX}-lz4"
"${MINGW_PACKAGE_PREFIX}-lzo2"
"${MINGW_PACKAGE_PREFIX}-nettle"
"${MINGW_PACKAGE_PREFIX}-nghttp2"
"${MINGW_PACKAGE_PREFIX}-openssl"
"${MINGW_PACKAGE_PREFIX}-opus"
"${MINGW_PACKAGE_PREFIX}-orc"
"${MINGW_PACKAGE_PREFIX}-p11-kit"
"${MINGW_PACKAGE_PREFIX}-pango"
"${MINGW_PACKAGE_PREFIX}-pcre"
"${MINGW_PACKAGE_PREFIX}-pixman"
"${MINGW_PACKAGE_PREFIX}-SDL2"
"${MINGW_PACKAGE_PREFIX}-SDL2_image"
"${MINGW_PACKAGE_PREFIX}-spice"
"${MINGW_PACKAGE_PREFIX}-snappy"
"${MINGW_PACKAGE_PREFIX}-spice"
"${MINGW_PACKAGE_PREFIX}-usbredir"
"${MINGW_PACKAGE_PREFIX}-xz"
"${MINGW_PACKAGE_PREFIX}-zlib"
"${MINGW_PACKAGE_PREFIX}-zstd"
)
optdepends=(
"${MINGW_PACKAGE_PREFIX}-gtk-vnc: Contains gvncviewer. For connections to Qemu VNC server"
"${MINGW_PACKAGE_PREFIX}-spice-gtk: Contains spicy. For connections to Qemu SPICE server"
"${MINGW_PACKAGE_PREFIX}-virt-viewer: Contains remote-viewer. For connections to Qemu SPICE or VNC server"
)
source=(
"https://download.qemu.org/${_tarname}.tar.xz"{,.sig}
msys2.readme.txt
msys2.qemu-guest-agent.txt
msys2.examples.tests.sh
)
sha256sums=(
'68e15d8e45ac56326e0b9a4afa8b49a3dfe8aba3488221d098c84698bca65b45'
'f6b375c7951f728402798b0baabb2d86478ca53d44cedbefabbe1c46bf46f839'
'SKIP'
'51625fd83c0a63729942d3dfc6d48be3491a700fe0f7cb8e88935b46081c9016'
'75723aade171bfe92082262819624df726f30122ccdd3a194584a3b74320f35d'
'f2f9eeb31023d002f54637a9941ea0d8fae3c6f0a66c05c033857b305bd1470d'
'3adcd2a37c975890c95e89538d6147872ea3d32b034edbedf5fafe8063bb62a1'
)
validpgpkeys=('CEACC9E15534EBABB82D3FA03353C9CEF108B584') # Michael Roth <flukshun@gmail.com>
# tar cannot create links, to keep build running, manual extraction is required
@@ -75,17 +116,15 @@ noextract=(${_tarname}.tar.xz)
prepare() {
[[ -d "${srcdir}"/${_tarname} ]] && rm -rf "${srcdir}"/${_tarname}
# tar cannot create links here, therefore hide the failure
tar -xf ${srcdir}/${_tarname}.tar.xz -C ${srcdir} || true
cd "${srcdir}/${_tarname}"
tar -xf "${srcdir}"/${_tarname}.tar.xz -C "${srcdir}" || true
}
build() {
LDFLAGS+=" -fstack-protector"
[[ -d "${srcdir}"/build-${CARCH} ]] && rm -rf "${srcdir}"/build-${CARCH}
mkdir -p "${srcdir}"/build-${CARCH} && cd "${srcdir}"/build-${CARCH}
mkdir -pv "${srcdir}"/build-${CARCH} && cd "${srcdir}"/build-${CARCH}
# configure failes to create links, which can be ignored
# configure fails to create links, which can be ignored
# qemu enables all features if possible, so keep it simple
# For faster testing:
#TARGETLIST="--target-list=x86_64-softmmu"
@@ -99,6 +138,10 @@ build() {
# Finally build
make
# TODO Remove widl-cmd as soon as qga-vss.tlb is generated by make
cd qga/vss-win32
widl -I${MINGW_PREFIX}/include -L${MINGW_PREFIX}/include \
-t "${srcdir}"/${_tarname}/qga/vss-win32/qga-vss.idl -o qga-vss.tlb
}
check() {
@@ -108,7 +151,7 @@ check() {
make test || true
}
package() {
makeinstall() {
cd "${srcdir}"/build-${CARCH}
# Install to ${pkgdir}
@@ -127,12 +170,76 @@ package() {
mv -v share/qemu/icons share/
mkdir -pv share/qemu/applications
mv -v share/qemu/applications share/
}
makeinstallpkg() {
local _pkg=$1
makeinstall
echo
echo "Split installation into partitions"
cd "${pkgdir}"
# Start with all content in qemu partition
local _qemu=qemu/${MINGW_PREFIX}
mkdir -pv qemu
mv -v ./${MINGW_PREFIX} qemu/
# Move to qemu-guest-agent partition
local _qemu_ga=qemu-guest-agent/${MINGW_PREFIX}
mkdir -pv ${_qemu_ga}/bin ${_qemu_ga}/share/man/man7 ${_qemu_ga}/share/man/man8
mv -v ${_qemu}/bin/qemu-ga.exe ${_qemu_ga}/bin/
mv -v ${_qemu}/share/man/man8/qemu-ga.8 ${_qemu_ga}/share/man/man8/
mv -v ${_qemu}/share/man/man7/qemu-ga-ref.7 ${_qemu_ga}/share/man/man7/
# Move to qemu-image-util partition
local _qemu_img=qemu-image-util/${MINGW_PREFIX}
mkdir -pv ${_qemu_img}/bin ${_qemu_img}/share/man/man1
mv -v ${_qemu}/bin/qemu-img.exe ${_qemu_img}/bin/
mv -v ${_qemu}/share/man/man1/qemu-img.1 ${_qemu_img}/share/man/man1/
# Move to qemu-common partition
local _qemu_com=qemu-common/${MINGW_PREFIX}
mkdir -pv ${_qemu_com}/share/doc
mv -v ${_qemu}/share/doc/qemu ${_qemu_com}/share/doc/
# Select requested partition and remove other partitions
echo
echo "Select partition ${_pkg} for packaging"
mv -v ${_pkg}/${MINGW_PREFIX} ./
rm -rf ${_qemu} ${_qemu_ga} ${_qemu_img} ${_qemu_com}
cd ./${MINGW_PREFIX}
}
package_qemu() {
# Split package depends
depends+=(
"${MINGW_PACKAGE_PREFIX}-qemu-common"
"${MINGW_PACKAGE_PREFIX}-qemu-guest-agent"
"${MINGW_PACKAGE_PREFIX}-qemu-image-util"
)
optdepends=(
"${MINGW_PACKAGE_PREFIX}-gtk-vnc: Contains gvncviewer. For connections to Qemu VNC server"
"${MINGW_PACKAGE_PREFIX}-spice-gtk: Contains spicy. For connections to Qemu SPICE server"
"${MINGW_PACKAGE_PREFIX}-virt-viewer: Contains remote-viewer. For connections to Qemu SPICE or VNC server"
)
makeinstallpkg qemu
# Fix firmware descriptors
# see https://bugzilla.redhat.com/show_bug.cgi?id=1728652#c7
mkdir -pv share/qemu/firmware
find share/qemu/firmware -type f -exec \
sed -i "s%\(\"filename\"\s*:\s*\"\).*edk2%\1${MINGW_PREFIX}/share/qemu/edk2%" {} \;
}
package_qemu-common() {
depends=()
makeinstallpkg qemu-common
# Add all licenses found in qemu sources to share/licences/qemu/
mkdir -pv share/licenses/qemu
@@ -145,7 +252,77 @@ package() {
) | tar -C share/licenses/qemu -xv
# Add msys2 docs
mkdir -pv share/doc/qemu
cp -pv "${srcdir}"/msys2.readme.txt share/doc/qemu/
cp -pv "${srcdir}"/msys2.examples.tests.sh share/doc/qemu/
install -v -Dm644 -t share/doc/qemu/ "${srcdir}"/msys2.readme.txt
install -v -Dm644 -t share/doc/qemu/ "${srcdir}"/msys2.qemu-guest-agent.txt
install -v -Dm755 -t share/doc/qemu/ "${srcdir}"/msys2.examples.tests.sh
}
package_qemu-guest-agent() {
depends=(
"${MINGW_PACKAGE_PREFIX}-gettext"
"${MINGW_PACKAGE_PREFIX}-gcc-libs"
"${MINGW_PACKAGE_PREFIX}-glib2"
"${MINGW_PACKAGE_PREFIX}-libc++"
"${MINGW_PACKAGE_PREFIX}-libiconv"
"${MINGW_PACKAGE_PREFIX}-libunwind"
"${MINGW_PACKAGE_PREFIX}-libwinpthread"
"${MINGW_PACKAGE_PREFIX}-pcre"
)
# Split package depends
depends+=(
"${MINGW_PACKAGE_PREFIX}-qemu-common"
)
makeinstallpkg qemu-guest-agent
# Upstream doesn't install, but creates qga.msi which contains these
install -v -Dm644 -t bin/ "${srcdir}"/build-${CARCH}/qga/vss-win32/qga-vss.dll
install -v -Dm644 -t bin/ "${srcdir}"/build-${CARCH}/qga/vss-win32/qga-vss.tlb
}
package_qemu-image-util() {
depends=(
"${MINGW_PACKAGE_PREFIX}-brotli"
"${MINGW_PACKAGE_PREFIX}-bzip2"
"${MINGW_PACKAGE_PREFIX}-curl"
"${MINGW_PACKAGE_PREFIX}-gcc-libs"
"${MINGW_PACKAGE_PREFIX}-gettext"
"${MINGW_PACKAGE_PREFIX}-glib2"
"${MINGW_PACKAGE_PREFIX}-gmp"
"${MINGW_PACKAGE_PREFIX}-gnutls"
"${MINGW_PACKAGE_PREFIX}-libiconv"
"${MINGW_PACKAGE_PREFIX}-libidn2"
"${MINGW_PACKAGE_PREFIX}-libffi"
"${MINGW_PACKAGE_PREFIX}-libnfs"
"${MINGW_PACKAGE_PREFIX}-libpsl"
"${MINGW_PACKAGE_PREFIX}-libssh"
"${MINGW_PACKAGE_PREFIX}-libssh2"
"${MINGW_PACKAGE_PREFIX}-libunistring"
"${MINGW_PACKAGE_PREFIX}-libtasn1"
"${MINGW_PACKAGE_PREFIX}-libwinpthread"
"${MINGW_PACKAGE_PREFIX}-nettle"
"${MINGW_PACKAGE_PREFIX}-nghttp2"
"${MINGW_PACKAGE_PREFIX}-openssl"
"${MINGW_PACKAGE_PREFIX}-pcre"
"${MINGW_PACKAGE_PREFIX}-p11-kit"
"${MINGW_PACKAGE_PREFIX}-zlib"
"${MINGW_PACKAGE_PREFIX}-zstd"
)
# Split package depends
depends+=(
"${MINGW_PACKAGE_PREFIX}-qemu-common"
)
makeinstallpkg qemu-image-util
}
# template start; name=mingw-w64-splitpkg-wrappers; version=1.0;
# vim: set ft=bash :
# generate wrappers
for _name in "${pkgname[@]}"; do
_short="package_${_name#${MINGW_PACKAGE_PREFIX}-}"
_func="$(declare -f "${_short}")"
eval "${_func/#${_short}/package_${_name}}"
done
# template end;

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,90 @@
----------
Versioning
----------
There are concurrent versioning schemes depending on the distribution source.
This qemu-ga binary shows the version based on QEMU source code.
----------------------------------------------
Start the guest with QEMU Guest Agent support:
----------------------------------------------
Before installing qemu-ga in the Windows guest, start the QEMU process for the Windows guest with guest support.
On Linux host add the following parameters to the qemu command line for guest support
-device virtio-serial-pci \
-chardev socket,id=qga0,path=qga.sock,server=on,wait=off \
-device virtserialport,chardev=qga0,name=org.qemu.guest_agent.0
On Windows host add the following parameters to the qemu command line
-device virtio-serial-pci \
-chardev socket,id=qga0,port=5906,host=127.0.0.1,server=on,wait=off \
-device virtserialport,chardev=qga0,name=org.qemu.guest_agent.0
Further information:
https://wiki.qemu.org/Features/GuestAgent
------------------------------------------
Install QEMU Guest Agent in Windows guest:
------------------------------------------
Install software as usual for your architecture:
pacman -S mingw-w64-<ARCH>-qemu-guest-agent
ARCH=x86_64: pacman -S mingw-w64-x86_64-qemu-guest-agent
As administrator start an installation shell depending on your architecture.
ARCH=x86_64: Start "MSYS2 MinGW 64-bit" shell as administrator
Check and stop an already registered qemu-ga with
net stop "QEMU Guest Agent"
net stop "QEMU Guest Agent VSS Provider"
Verify that the msys2 provided qemu-ga works with
qemu-ga -v
If the process logs messages and keeps running, qemu-ga is ready to react upon requests.
Stop this foreground qemu-ga with CTRL-C to go on.
If existing, uninstall the old qemu-ga using its appropriate routine now.
Register the msys2 provided qemu-ga with
qemu-ga -s install
Start freshly registered qemu-ga service with
net start "QEMU Guest Agent"
qemu-ga service is configured to start automatically on restart.
Furher information:
man qemu-ga
https://bugzilla.redhat.com/show_bug.cgi?id=962669
----------------------
Using QEMU Guest Agent
----------------------
Reacts in guest OS to your requests sent from host OS.
Open a shell on the host to connect to the guest's socket while qemu-ga is active now.
On Linux host (after installing socat)
socat - unix-connect:qga.sock
On Windows host (after pacman -S socat)
socat - tcp-connect:127.0.0.1:5906
Now you are ready to send a json request to the agent. For example sending
{"execute": "guest-info"}
will be answered with
{"return": {"version": "6.2.93", "supported_commands": ...
Stop the connection with CTRL-C
Further information:
man qemu-ga-ref
-----------------------------
QEMU Guest Agent VSS Provider
-----------------------------
VSS defines a process to create consistent backups initiated from Windows guest.
Further information:
https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service
https://bugzilla.redhat.com/show_bug.cgi?id=1286672