# Obarun : 66 init/supervisor # Maintainer : Eric Vidal <eric@obarun.org> # Maintainer : Jean-Michel T.Dydak <jean-michel@obarun.org> # Obarun PkgSrc : https://git.obarun.org/pkg/{obcore,obextra,obcommunity,obmultilib,observice}/$NAME #---------------- # Website : https://..../ #-------------------------------------------------------------- # DESCRIPTION ] pkgbase=qemu pkgname=( qemu qemu-headless qemu-arch-extra qemu-headless-arch-extra qemu-block-{iscsi,gluster} qemu-guest-agent ) pkgver=6.1.0 pkgrel=2 pkgdesc="A generic and open source machine emulator and virtualizer" url="https://wiki.qemu.org/" source=(https://download.qemu.org/qemu-$pkgver.tar.xz #{,.sig} fix_unix_sockets.diff::https://gitlab.com/qemu-project/qemu/-/commit/118d527f2e4baec5fe8060b22a6212468b8e4d3f.diff 65-kvm.rules) #-------------------- # BUILD PREPARATION ] prepare() { mkdir build-{full,headless} mkdir -p extra-arch-{full,headless}/usr/{bin,share/qemu} cd ${pkgname}-${pkgver} patch -p1 < ../fix_unix_sockets.diff # FS#72115 } #---------------------- # BUILD CONFIGURATION ] makedepends=( alsa-lib brltty bzip2 cairo # ceph curl cdrtools dtc fuse3 gcc-libs gdk-pixbuf2 glib2 glusterfs gnutls gtk3 jack libaio libbpf libcacard libcap-ng libepoxy libffi libiscsi libnfs libpng libpulse libsasl libseccomp libslirp libssh liburing libusb libx11 libxkbcommon lzo mesa meson ncurses ndctl numactl pam python python-sphinx python-sphinx_rtd_theme sdl2 sdl2_image seabios snappy spice-protocol spice # systemd usbredir vde2 virglrenderer vte3 xfsprogs zlib zstd ) #------------------------ # INSTALL CONFIGURATION ] arch=(x86_64) _headlessdeps=(seabios gnutls libpng libaio numactl libnfs lzo snappy curl vde2 libcap-ng spice libcacard usbredir libslirp libssh zstd liburing ndctl dtc fuse3 libbpf) depends=( virglrenderer sdl2 vte3 libpulse libjack.so brltty "${_headlessdeps[@]}" ) #---------------- # BUILD CONTROL ] _path=( ) _flags=( ) #-------- # BUILD ] build() { _build full \ --audio-drv-list="pa alsa sdl jack" _build headless \ --audio-drv-list= \ --disable-sdl \ --disable-gtk \ --disable-vte \ --disable-brlapi \ --disable-opengl \ --disable-virglrenderer } _build() ( cd build-$1 ../${pkgname}-${pkgver}/configure \ --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ --libexecdir=/usr/lib/qemu \ --smbd=/usr/bin/smbd \ --enable-modules \ --enable-sdl \ --enable-slirp=system \ --enable-xfsctl \ "${@:2}" ninja ) package_qemu() { depends=( alsa-lib libasound.so bzip2 libbz2.so cairo curl libcurl.so dtc fuse3 gcc-libs gdk-pixbuf2 libgdk_pixbuf-2.0.so glib2 libgio-2.0.so libglib-2.0.so libgmodule-2.0.so libgobject-2.0.so gnutls gtk3 libgdk-3.so libgtk-3.so jack libjack.so libaio libbpf libbpf.so libcacard libcap-ng libcap-ng.so libepoxy libjpeg libjpeg.so libnfs libpng libpulse libpulse.so libsasl libseccomp libseccomp.so libslirp libslirp.so libssh libssh.so libusb libusb-1.0.so liburing liburing.so libx11 libxkbcommon libxkbcommon.so lzo mesa ncurses libncursesw.so ndctl numactl libnuma.so pam libpam.so pixman libpixman-1.so seabios sdl2 sdl2_image snappy spice libspice-server.so eudev libeudev usbredir virglrenderer vde2 vte3 libvte-2.91.so zlib zstd libzstd.so ) optdepends=( 'brltty: for braille device support' 'qemu-arch-extra: extra architectures support' ) provides=(qemu-headless) conflicts=(qemu-headless) replaces=(qemu-kvm) _package full } package_qemu-headless() { pkgdesc="QEMU without GUI" depends=( bzip2 libbz2.so curl libcurl.so dtc fuse3 gcc-libs glib2 libgio-2.0.so libglib-2.0.so libgmodule-2.0.so libgobject-2.0.so gnutls libaio libbpf libbpf.so libcacard libcap-ng libcap-ng.so libjpeg libjpeg.so libnfs libpng libsasl libseccomp libseccomp.so libslirp libslirp.so libssh libssh.so libusb libusb-1.0.so liburing liburing.so libxkbcommon libxkbcommon.so lzo ndctl numactl libnuma.so ncurses libncursesw.so pam libpam.so pixman libpixman-1.so seabios snappy spice libspice-server.so eudev libeudev usbredir vde2 zlib zstd libzstd.so ) optdepends=('qemu-headless-arch-extra: extra architectures support') _package headless } _package() { optdepends+=('samba: SMB/CIFS server support' 'qemu-block-iscsi: iSCSI block support' #'qemu-block-rbd: RBD block support' 'qemu-block-gluster: glusterfs block support') install=qemu.install options=(!strip !emptydirs) DESTDIR="$pkgdir" ninja -C build-$1 install "${@:2}" # systemd stuff install -Dm644 65-kvm.rules "$pkgdir/usr/lib/udev/rules.d/65-kvm.rules" # remove conflicting /var/run directory cd "$pkgdir" rm -r var cd usr/lib # bridge_helper needs suid # https://bugs.archlinux.org/task/32565 chmod u+s qemu/qemu-bridge-helper # remove split block modules rm qemu/block-iscsi.so cd ../bin # remove extra arch for _bin in qemu-*; do [[ -f $_bin ]] || continue case ${_bin#qemu-} in # guest agent ga) rm "$_bin"; continue ;; # tools edid|img|io|keymap|nbd|pr-helper|storage-daemon) continue ;; # core emu system-${arch}) continue ;; esac mv "$_bin" "$srcdir/extra-arch-$1/usr/bin" done cd ../share/qemu for _blob in *; do [[ -f $_blob ]] || continue case $_blob in # provided by seabios package bios.bin|bios-256k.bin|vgabios-cirrus.bin|vgabios-qxl.bin|\ vgabios-stdvga.bin|vgabios-vmware.bin|vgabios-virtio.bin|vgabios-bochs-display.bin|\ vgabios-ramfb.bin) rm "$_blob"; continue ;; # provided by edk2-ovmf package edk2-*) rm "$_blob"; continue ;; # iPXE ROMs efi-*|pxe-*) continue ;; # core blobs bios-microvm.bin|kvmvapic.bin|linuxboot*|multiboot.bin|sgabios.bin|vgabios*) continue ;; # Trace events definitions trace-events*) continue ;; esac mv "$_blob" "$srcdir/extra-arch-$1/usr/share/qemu" done # provided by edk2-ovmf package rm -r firmware cd .. if [ "$1" = headless ]; then rm -r {applications,icons}; fi } package_qemu-arch-extra() { pkgdesc="QEMU for foreign architectures" depends=( dtc fuse3 gcc-libs gnutls libaio libbpf libbpf.so glib2 libgio-2.0.so libglib-2.0.so libgobject-2.0.so libgmodule-2.0.so libjpeg libjpeg.so libpng libsasl libseccomp libseccomp.so libslirp libslirp.so liburing liburing.so lzo ndctl numactl libnuma.so pam libpam.so pixman libpixman-1.so snappy #systemd-libs libudev.so qemu vde2 zlib zstd libzstd.so ) optdepends=( 'edk2-armvirt: for aarch64 UEFI support' 'edk2-ovmf: for ia32 and x64 UEFI support' ) provides=(qemu-headless-arch-extra) conflicts=(qemu-headless-arch-extra) options=(!strip) mv -v extra-arch-full/usr "$pkgdir" } package_qemu-headless-arch-extra() { pkgdesc="QEMU without GUI, for foreign architectures" depends=( dtc fuse3 gcc-libs gnutls libaio libbpf libbpf.so glib2 libgio-2.0.so libglib-2.0.so libgobject-2.0.so libgmodule-2.0.so libjpeg libjpeg.so libpng libsasl libseccomp libseccomp.so libslirp libslirp.so liburing liburing.so lzo ndctl numactl libnuma.so pam libpam.so pixman libpixman-1.so snappy qemu-headless #systemd-libs libudev.so vde2 zlib zstd libzstd.so ) optdepends=( 'edk2-armvirt: for aarch64 UEFI support' 'edk2-ovmf: for ia32 and x64 UEFI support' ) options=(!strip) mv -v extra-arch-headless/usr "$pkgdir" } package_qemu-block-iscsi() { pkgdesc="QEMU iSCSI block module" depends=(glibc libiscsi) install -vDm 755 build-full/block-iscsi.so -t "$pkgdir/usr/lib/qemu/" } #package_qemu-block-rbd() { # pkgdesc="QEMU RBD block module" # depends=(glibc ceph-libs) # # install -vDm 755 build-full/block-rbd.so -t "$pkgdir/usr/lib/qemu/" #} package_qemu-block-gluster() { pkgdesc="QEMU GlusterFS block module" depends=(glibc glusterfs) install -vDm 755 build-full/block-gluster.so -t "$pkgdir/usr/lib/qemu/" } package_qemu-guest-agent() { pkgdesc="QEMU Guest Agent" depends=(gcc-libs glib2 libudev.so liburing) install -vDm 755 build-full/qga/qemu-ga -t "$pkgdir/usr/bin/" install -vDm 755 "$srcdir/qemu-$pkgver/scripts/qemu-guest-agent/fsfreeze-hook" -t "$pkgdir/etc/qemu/" } #------------------------- # LICENCE AND VALIDATION ] license=(GPL2 LGPL2.1) sha512sums=('3378ae21c75b77ee6a759827f1fcf7b2a50a0fef07e3b0e89117108022a8d8655fa977e4d65596f4f24f7c735c6594d44b0c6f69732ea4465e88a7406b1d5d3c' 'SKIP' 'a87b0da1d49b4d17e9128544c2b0f00f1ac5242adc7fd9e8c9efd24ab6791ed702b2a0866383d31c1bff3259c281c95a60a96453ad998256a8b133cfd7107a59' 'bdf05f99407491e27a03aaf845b7cc8acfa2e0e59968236f10ffc905e5e3d5e8569df496fd71c887da2b5b8d1902494520c7da2d3a8258f7fd93a881dd610c99') #validpgpkeys=('CEACC9E15534EBABB82D3FA03353C9CEF108B584') # Michael Roth <flukshun@gmail.com>