diff options
Diffstat (limited to 'pcr/xen/PKGBUILD')
-rw-r--r-- | pcr/xen/PKGBUILD | 763 |
1 files changed, 306 insertions, 457 deletions
diff --git a/pcr/xen/PKGBUILD b/pcr/xen/PKGBUILD index 2e0dd94d8..80b0f5022 100644 --- a/pcr/xen/PKGBUILD +++ b/pcr/xen/PKGBUILD @@ -1,497 +1,346 @@ -# current version adapted from https://gitlab.com/archlinux-packages-johnth/xen/tree/xen-4.10 - -# Maintainer (AUR): John Thomson <aur.xen at j0aur.mm.st> -# Contributor (Arch): David Sutton <kantras - gmail.com> -# Contributor (Arch): Shanmu Thiagaraja <sthiagaraja+AUR@prshanmu.com> -# Contributor (Arch): Limao Luo -# Contributor (Arch): Luceo -# Contributor (Arch): Revellion -# Contributor: André Silva <emulatorman@hyperbola.info> -# Contributor: Márcio Silva <coadde@hyperbola.info> -# Contributor: Isaac David <isacdaavid@at@isacdaavid@dot@info> - -#linux-4.7 EFI boot panic issue (patch linux) -#http://lkml.iu.edu/hypermail/linux/kernel/1608.2/03448.html - -_build_stubdom="${build_stubdom:-false}" -_system_seabios="${system_seabios:-false}" -_build_debug="${build_debug:-false}" -_build_livepatch="${build_livepatch:-false}" - -## use _build_stubdom=true to build xen with stubdom -## use _system_seabios=true to use system seabios -## this bios file is slightly different to the xen seabios -## /usr/share/qemu/bios-256k.bin uses CONFIG_ROM_SIZE=256, and newer seabios -## can force use this file through vm.cfg bios_path_override='/usr/share/qemu/bios-256k.bin' -## use _build_debug=true to compile Xen with debug options -## use _build_livepatch=true to compile Xen with livepatch support - -#_build_stubdom=true -#_system_seabios=true -#_build_debug=true -#_build_livepatch=true +# Maintainer (aur): Sam Mulvey (Refutationalist) <archlinux@sammulvey.com> +# Contributor: Filipe Laíns (FFY00) <lains@archlinux.org> +# Contributor: Chris Chapman (cman) <chris.chapman@aggiemail.usu.edu> + +# Build Options +_build_stubdom=${build_stubdom:-false} +_build_qemu=${build_qemu:-true} +_boot_dir=${boot_dir:-/boot} +_efi_dir=${efi_dir:-/boot} +_efi_mountpoint=${efi_mountpoint:-/boot} + +# Check http://xenbits.xen.org/xen-extfiles/ for updates +_gmp=4.3.2 +_grub=0.97 +_lwip=1.3.0 +_newlib=1.16.0 +_pciutils=2.2.9 +_polarssl=1.1.4 +_tpm_emulator=0.7.4 +_zlib=1.2.3 pkgbase=xen -pkgname=(xen{,-docs,-syms}) -_pkgname=xen -pkgver=4.10.0 -_pkgver=${pkgver/rc/-rc} -pkgrel=1 -pkgdesc='Virtual Machine Hypervisor & Tools (Parabola rebranded)' -arch=(x86_64 armv7h) -depends=( - bridge-utils - curl - gnutls - iproute2 - libaio - libcacard - libcap-ng - libiscsi - libnl - libpng - lzo - pciutils - python2 - sdl - spice - systemd - usbredir - yajl - # seabios ovmf qemu -) -[[ "$CARCH" == 'x86_64' ]] && depends+=( - lib32-glibc -) -[[ "$CARCH" == *'arm'* ]] && depends+=( - dtc-overlay -) -[[ "$_system_seabios" == true ]] && depends+=( - seabios -) -url='http://www.xenproject.org/' +pkgname=("xen" "xen-docs") +pkgver=4.16.0 +pkgrel=3 +pkgdesc='Open-source type-1 or baremetal hypervisor' +arch=('x86_64') +url='https://xenproject.org/' license=('GPL2') +options=(!buildflags) + makedepends=( - cmake - figlet - git - markdown - nasm - ocaml-findlib - spice-protocol - wget + 'zlib' 'python' 'ncurses' 'openssl' 'libx11' 'libuuid.so' 'yajl' 'libaio' 'glib2' 'pkgconf' + 'bridge-utils' 'iproute2' 'inetutils' 'acpica' 'lib32-glibc' 'gnutls' + 'vde2' 'lzo' 'pciutils' 'sdl2' 'systemd-libs' + 'systemd' 'wget' 'pandoc' 'valgrind' 'git' 'bin86' 'dev86' 'bison' 'gettext' 'flex' 'pixman' 'ocaml' 'ocaml-findlib' 'fig2dev' +) # last line from namcap, these depends are the xen depends +_stubdom_makedepends=('cmake') +_qemu_makedepends=('ninja') + +_source=( + "https://downloads.xenproject.org/release/xen/$pkgver/$pkgname-$pkgver.tar.gz"{,.sig} + "efi-xen.cfg" + "xen.conf" + "tmpfiles.conf" + "xen-ucode-extract.sh" + "xen-intel-ucode.hook" + "xen-amd-ucode.hook" ) -[[ "$CARCH" == 'x86_64' ]] && makedepends+=( - bin86 - dev86 - gcc-multilib - iasl + +validpgpkeys=('23E3222C145F4475FA8060A783FE14C957E82BD9') # Xen.org Xen tree code signing (signatures on the xen hypervisor and tools) <pgp@xen.org> + + +# Follow the Xen securite mailing lists, and if a patch is applicable to our package +# add the URL here. +_patches=( + "https://xenbits.xen.org/xsa/xsa393.patch" + "https://xenbits.xen.org/xsa/xsa394.patch" + "https://xenbits.xen.org/xsa/xsa395.patch" + ) -[[ "$CARCH" == 'i686' ]] && makedepends+=( - bin86 - dev86 - iasl + + +# Sources required for building stubdom +_stubdom_source=( + "http://xenbits.xen.org/xen-extfiles/gmp-$_gmp.tar.bz2" + "http://xenbits.xen.org/xen-extfiles/grub-$_grub.tar.gz" + "http://xenbits.xen.org/xen-extfiles/lwip-$_lwip.tar.gz" + "http://xenbits.xen.org/xen-extfiles/newlib-$_newlib.tar.gz" + "http://xenbits.xen.org/xen-extfiles/pciutils-$_pciutils.tar.bz2" + "http://xenbits.xen.org/xen-extfiles/polarssl-$_polarssl-gpl.tgz" + "http://xenbits.xen.org/xen-extfiles/tpm_emulator-$_tpm_emulator.tar.gz" + "http://xenbits.xen.org/xen-extfiles/zlib-$_zlib.tar.gz" ) -## For building Xen EFI boot file. -## mingw-w64-binutils only needed if -## binutils not built with --enable-targets=x86_64-pep -_binutils_efi=false - -if [[ "$CARCH" == 'x86_64' ]]; then - if which ld 2>&1 > /dev/null; then - _binutils_emulations="$(ld -V)" - if [[ "$_binutils_emulations" == *'i386pep'* ]]; then - _binutils_efi=true - msg '#ld has efi support' - else - makedepends+=( - mingw-w64-binutils - ) - msg '#ld does not have efi support, using mingw' - fi - else - true - fi -fi +# from cheap hack known as break_out_sums.sh +_sha512sums=( + "2869ed90d1779c9754d7f2397f5fc67a655304d9c32953ac20655ef96cb154521d8fce9f23915ac0c91f984dc54f72c67e5e619e2da318b5997748f44cf21b87" # xen-4.16.0.tar.gz + "SKIP" # xen-4.16.0.tar.gz.sig + "1bbcbcd9fb8344a207409ec9f0064a45b726416f043f902ca587f5e4fa58497a759be4ffd584fa32318e960aa478864cc05ec026c444e8d27ca8e3248bd67420" # efi-xen.cfg + "ccaa2ff82e4203b11e5dec9aeccac2e165721d8067e0094603ecaa7a70b78c9eb9e2287a32687883d26b6ceae6f8d2ad7636ddf949eb658637b3ceaa6999711b" # xen.conf + "53ba61587cc2e84044e935531ed161e22c36d9e90b43cab7b8e63bcc531deeefacca301b5dff39ce89210f06f1d1e4f4f5cf49d658ed5d9038c707e3c95c66ef" # tmpfiles.conf + "a9230ec6ef9636ac3f3e4b72b1747ee8c4648a8bf4bd8dc3650365e34f1f67474429dbdd24996907d277b0ff5f235574643e781cb3ff37da954e899ddadbe0d6" # xen-ucode-extract.sh + "7a832de9b35f4b77ee80d33310b23886f4d48d1d42c3d6ef6f8e2b428bec7332a285336864b61cfa01d9a14c2023674015beb7527bd5849b069f2be88e6500cd" # xen-intel-ucode.hook + "99921b94a29fa7988c7fb5c17da8e598e777c972d6cae8c8643c991e5ff911a25525345ea8913945313d5c49fecf9da8cc3b83d47ab03928341e917b304370a9" # xen-amd-ucode.hook +) -options=(!buildflags !strip) -changelog=ChangeLog -##SeaBIOS & OVMF tags are in src/xen-*/tools/Config.mk -##grep -rE '_(REVISION|VERSION|TAG)( \?| :){0,1}=' src/xen**/{Config.mk,stubdom/configure,tools/firmware/etherboot/Makefile} -_git_tag_seabios='#tag=rel-1.10.2' -_git_tag_ovmf='#tag=947f3737abf65fda63f3ffd97fddfa6986986868' -_git_tag_ipxe='356f6c1b64d7a97746d1816cef8ca22bdd8d0b5d' +_patch_sums=( + "32efed25f988579be8266a6bc80ed7c09c408519c6b6c5264b7e032849e3accc7ddea19c5879c06d7e7b27308d06e114f6e3ca4f814d53b9be9d239fb09c71f1" # xsa393.patch + "a0afa766e492a4dc921cd5c4c43c9ecbe87f79c07986504c8626ab7f06736147bdfa4637ea4c4abf17b9f1df31056bbcbb6c51a52e244e57467564c8ea06a52e" # xsa394.patch + "0aafb55b88a7feefeb0162b2722efc8ad43edcdfc7926492e1d49945eafb8dda900f7da37b2d49fd4dbc2d0c9a068ad6e47674a6df108a58842275695ed73540" # xsa395.patch +) -if [[ "$_build_stubdom" == true ]]; then - if [[ "$CARCH" == *'arm'* ]]; then - echo '####Compile settings error:' - echo "#cannot build stubdom for $CARCH" - _build_stubdom=false - fi -fi -source=( - "https://downloads.xenproject.org/release/$_pkgname/$_pkgver/$_pkgname-$_pkgver.tar.gz"{,.sig} - "http://xenbits.xen.org/xen-extfiles/ipxe-git-$_git_tag_ipxe.tar.gz" +_stub_sums=( + "2e0b0fd23e6f10742a5517981e5171c6e88b0a93c83da701b296f5c0861d72c19782daab589a7eac3f9032152a0fc7eff7f5362db8fccc4859564a9aa82329cf" # gmp-4.3.2.tar.bz2 + "c2bc9ffc8583aeae71cee9ddcc4418969768d4e3764d47307da54f93981c0109fb07d84b061b3a3628bd00ba4d14a54742bc04848110eb3ae8ca25dbfbaabadb" # grub-0.97.tar.gz + "1465b58279af1647f909450e394fe002ca165f0ff4a0254bfa9fe0e64316f50facdde2729d79a4e632565b4500cf4d6c74192ac0dd3bc9fe09129bbd67ba089d" # lwip-1.3.0.tar.gz + "40eb96bbc6736a16b6399e0cdb73e853d0d90b685c967e77899183446664d64570277a633fdafdefc351b46ce210a99115769a1d9f47ac749d7e82837d4d1ac3" # newlib-1.16.0.tar.gz + "2b3d98d027e46d8c08037366dde6f0781ca03c610ef2b380984639e4ef39899ed8d8b8e4cd9c9dc54df101279b95879bd66bfd4d04ad07fef41e847ea7ae32b5" # pciutils-2.2.9.tar.bz2 + "88da614e4d3f4409c4fd3bb3e44c7587ba051e3fed4e33d526069a67e8180212e1ea22da984656f50e290049f60ddca65383e5983c0f8884f648d71f698303ad" # polarssl-1.1.4-gpl.tgz + "4928b5b82f57645be9408362706ff2c4d9baa635b21b0d41b1c82930e8c60a759b1ea4fa74d7e6c7cae1b7692d006aa5cb72df0c3b88bf049779aa2b566f9d35" # tpm_emulator-0.7.4.tar.gz + "021b958fcd0d346c4ba761bcf0cc40f3522de6186cf5a0a6ea34a70504ce9622b1c2626fce40675bc8282cf5f5ade18473656abc38050f72f5d6480507a2106e" # zlib-1.2.3.tar.gz +) - 'seabios'::"git://xenbits.xen.org/seabios.git$_git_tag_seabios" - 'ovmf'::"git://xenbits.xen.org/ovmf.git$_git_tag_ovmf" - ##HTTP access - #'seabios'::"git+http://xenbits.xen.org/git-http/seabios.git$_git_tag_seabios" +# Simplify things for makepkg +source=( "${_source[@]}" "${_patches[@]}" ) +sha512sums=( "${_sha512sums[@]}" "${_patch_sums[@]}" ) - ## Compile patches - ati-passthrough.patch - patch-ovmf-use-python2.patch +for file in "${_patches[@]}"; do + noextract+=( $(basename ${file}) ) +done - ## Files - xen.install - 21_linux_xen_multiboot_arch - efi-xen.cfg - "tmpfiles.d-$_pkgname.conf" - ## XSA patches - https://xenbits.xen.org/xsa/xsa253.patch -) -if [[ "$_build_stubdom" == true ]]; then - msg '#building with stubdom' - source+=( - http://xenbits.xen.org/xen-extfiles/lwip-1.3.0.tar.gz - http://xenbits.xen.org/xen-extfiles/zlib-1.2.3.tar.gz - http://xenbits.xen.org/xen-extfiles/newlib-1.16.0.tar.gz - http://xenbits.xen.org/xen-extfiles/pciutils-2.2.9.tar.bz2 - http://xenbits.xen.org/xen-extfiles/polarssl-1.1.4-gpl.tgz - http://xenbits.xen.org/xen-extfiles/grub-0.97.tar.gz - http://xenbits.xen.org/xen-extfiles/tpm_emulator-0.7.4.tar.gz - http://xenbits.xen.org/xen-extfiles/gmp-4.3.2.tar.bz2 - http://caml.inria.fr/pub/distrib/ocaml-3.11/ocaml-3.11.0.tar.gz - ) -fi +# stubdom handling +if [ "${_build_stubdom}" == "true" ]; then + source=("${source[@]}" "${_stubdom_source[@]}") + sha512sums=("${sha512sums[@]}" "${_stub_sums[@]}") + # Add in automagic dependency in order to build vtpm and vtpmmgr stubdoms + makedepends=( "${makedepends[@]}" "${_stubdom_makedepends[@]}" ) -noextract=( - "ipxe-git-$_git_tag_ipxe.tar.gz" -) + for file in "${_stubdom_source[@]}"; do + noextract+=( $(basename ${file}) ) + done -if [[ "$_build_stubdom" == true ]]; then - noextract+=( - lwip-1.3.0.tar.gz - zlib-1.2.3.tar.gz - newlib-1.16.0.tar.gz - pciutils-2.2.9.tar.bz2 - polarssl-1.1.4-gpl.tgz - grub-0.97.tar.gz - tpm_emulator-0.7.4.tar.gz - gmp-4.3.2.tar.bz2 - ocaml-3.11.0.tar.gz - ) + _config_stubdom='--enable-stubdom' + + # make sure to build the stubdom package + pkgname+=("xen-stubdom") + +else + _config_stubdom='--disable-stubdom' fi -validpgpkeys=('23E3222C145F4475FA8060A783FE14C957E82BD9') -#gpg --keyserver pgp.mit.edu --recv-key 23E3222C145F4475FA8060A783FE14C957E82BD9 -sha256sums=('0262a7023f8b12bcacfb0b25e69b2a63291f944f7683d54d8f33d4b2ca556844' - 'SKIP' - '251e5516d7de470c434ae5c393aacca2b61fb24d93770592a4a20add60b785c4' - 'SKIP' - 'SKIP' - 'd93c2d5bcdf0c3e4c6e8efb357cb4b9d618209025361f5ccd9d03651a8acd7a3' - '5fb65130f96d1728368a09042e55f622c14117572030ce2141bff4ae150e4a01' - '55145ff9c1570257478842e4001b0dafe007d90f5b06db17231bc5bf20f3b23d' - '8101316cfdf4b59e9c39b7372d4240a4552971c0fa53a4719bbb7a22f5622f4e' - 'efb3c5713d556aa4890136ebf61502060cf90234fbd2e85701ad7a7ed2524fb1' - '40e0760810a49f925f2ae9f986940b40eba477dc6d3e83a78baaae096513b3cf' - 'bba1abb5e4368421de29385e37f8477bf3534d3ba3ff7e2aae9c9d3da53f1393') - - -if [[ "$_build_stubdom" == true ]]; then - sha256sums+=( - #stubdom bits - '772e4d550e07826665ed0528c071dd5404ef7dbe1825a38c8adbc2a00bca948f' - '1795c7d067a43174113fdf03447532f373e1c6c57c08d61d9e4e9be5e244b05e' - 'db426394965c48c1d29023e1cc6d965ea6b9a9035d8a849be2750ca4659a3d07' - 'f60ae61cfbd5da1d849d0beaa21f593c38dac9359f0b3ddc612f447408265b24' - '2d29fd04a0d0ba29dae6bd29fb418944c08d3916665dcca74afb297ef37584b6' - '4e1d15d12dbd3e9208111d6b806ad5a9857ca8850c47877d36575b904559260b' - '4e48ea0d83dd9441cc1af04ab18cd6c961b9fa54d5cbf2c2feee038988dea459' - '936162c0312886c21581002b79932829aa048cfaf9937c6265aeaa14f1cd1775' - 'ecdd4f8473ab0dee5d3acb5c0a31a4c1dd6aa12179895cf1903dd0f455c43a4f' - - #stubdom patches - ) +if [ "${_build_qemu}" == "true" ]; then + _config_qemu="" + # qemu needs ninja to build as of 4.16.0 + makedepends=( "${makedepends[@]}" "${_qemu_makedepends[@]}" ) + pkgname+=("xen-qemu-builtin") +else + _config_qemu="--with-system-qemu=/usr/bin/qemu-system-x86_64" fi -_xen_kconfig_debug=$(cat <<EOF -CONFIG_DEBUG=y -CONFIG_CRASH_DEBUG=y -EOF -) -_xen_kconfig_livepatch=$(cat <<EOF -CONFIG_LIVEPATCH=y -EOF +_common_make_flags=( + "BOOT_DIR=${_boot_dir}" + "EFI_DIR=${_efi_dir}" + "EFI_MOUNTPOINT=${_efi_mountpoint}" + "XEN_VENDORVERSION=-${pkgrel}-arch" ) -_makevars=( - LANG=C - PYTHON=python2 -) +# TODO: Setup users, dirs, etc. prepare() { - cd "$_pkgname-$_pkgver/" - - ### Copy git sourced tools/firmware - # move seabios into place - mv --force "$srcdir/seabios" tools/firmware/seabios-dir-remote - # move ovmf into place - mv --force "$srcdir/ovmf" tools/firmware/ovmf-dir-remote - - ### Patching - - # XSA Patches - msg 'XSA patches' - # Security Patches - Base - patch -Np1 -i "$srcdir/xsa253.patch" - - # Security Patches - qemu-xen-traditional - cd 'tools/qemu-xen-traditional/' - cd '../../' - - # Security Patches - qemu-xen (upstream) - cd 'tools/qemu-xen/' - cd '../../' - - - # Compile Patches - msg 'Compile patches' - - # Build EFI binary with mingw - if [[ "$_binutils_efi" != true ]]; then - if $(stat /usr/x86_64-w64-mingw32/bin/ld >/dev/null 2>&1); then - sed -i.bak '/ EFI_LD/s/LD/LD_EFI/' xen/arch/x86/Makefile - sed -i.bak 's/LD/LD_EFI/' xen/arch/x86/efi/Makefile - sed -i.bak '/EFI_MOUNTPOINT .*/aLD_EFI ?= $(LD)' xen/Makefile - else - echo '#Not capable of building xen.efi. Need either:' - echo '#(preferred) binutils compiled with --enable-targets=x86_64-pep' - echo '#or install mingw-w64-binutils' - fi - fi - - # OVMF Compile support (Pulls from GIT repo, so patching to patch after pull request) - patch -Np1 -i "$srcdir/patch-ovmf-use-python2.patch" - #mkdir -p tools/firmware/ovmf-patches - #cp "$srcdir"/patch-inbuild-ovmf*.patch tools/firmware/ovmf-patches/ - - # Uncomment line below if you want to enable ATI Passthrough support (some reported successes, untested with 4.4) - #patch -Np1 -i "$srcdir/ati-passthrough.patch" - - ## Fix fixed rundir paths - ## grep -Rl '\/var\/run\/xen' * 2> /dev/null - _var_run_fixed_paths=( - tools/hotplug/Linux/locking.sh - tools/xenmon/xenbaked.c - tools/xenmon/xenmon.py - tools/pygrub/src/pygrub - ) - sed -i 's:/var/run:/run:' ${_var_run_fixed_paths[@]} - - ## Fix python version in shebang - msg 'Fix python shebang to python2' - _python_files=( $(grep -Rlse '^#!/usr/bin/.*python$' || : ) ) - sed -Ei 's|(^#!.*/usr/bin/(env ){0,1})python$|\1python2|' ${_python_files[@]} - - ## Fix systemd-modules-load.d/xen.conf - ## remove nonexistent modules - find tools -iname 'configure*' -exec sed -i -E -e ' - /^LINUX_BACKEND_MODULES="$/,/^"$/ { - #Address range where this variable is set - /"/b; #Do noting if the line contains " - /^xen-/!d; #Delete if does not start with xen - s/scsibk/scsiback/; #Change scsibk to scsiback - };' {} \; - - if [[ "$_build_stubdom" == true ]]; then - # Copy supporting tarballs into place - ln -s "$srcdir/lwip-1.3.0.tar.gz" stubdom/ - ln -s "$srcdir/zlib-1.2.3.tar.gz" stubdom/ - ln -s "$srcdir/newlib-1.16.0.tar.gz" stubdom/ - ln -s "$srcdir/pciutils-2.2.9.tar.bz2" stubdom/ - ln -s "$srcdir/polarssl-1.1.4-gpl.tgz" stubdom/ - ln -s "$srcdir/grub-0.97.tar.gz" stubdom/ - ln -s "$srcdir/tpm_emulator-0.7.4.tar.gz" stubdom/ - ln -s "$srcdir/gmp-4.3.2.tar.bz2" stubdom/ - ln -s "$srcdir/ocaml-3.11.0.tar.gz" stubdom/ - - ## Stubdom patches - cd 'extras/mini-os' - cd '../../' - - #vtpm - fi - - #etherboot - ln -s "$srcdir/ipxe-git-$_git_tag_ipxe.tar.gz" tools/firmware/etherboot/ipxe.tar.gz - #cp "$srcdir"/patch-inbuild-ipxe*.patch tools/firmware/etherboot/patches/ + + cd "${pkgbase}-${pkgver}" + + if [ "${_build_stubdom}" == "true" ]; then + + for file in "${_stubdom_source[@]}"; do + cp ../$(basename ${file}) stubdom/ + done + + fi + + + for patchurl in "${_patches[@]}"; do + patch=$(basename $patchurl) + echo "==> Applying security patch '${patch}'..." + patch -p1 < "../${patch}" + done + + # Fix Install Paths. + sed 's,/var/run,/run,g' -i tools/hotplug/Linux/locking.sh + sed 's,/var/run,/run,g' -i tools/misc/xenpvnetboot + sed 's,/var/run,/run,g' -i tools/xenmon/xenbaked.c + sed 's,/var/run,/run,g' -i tools/xenmon/xenmon.py + sed 's,/var/run,/run,g' -i tools/pygrub/src/pygrub } build() { - cd "$_pkgname-$_pkgver/" - export LD_EFI='/usr/x86_64-w64-mingw32/bin/ld' - ./autogen.sh - if [[ "$_build_stubdom" == true ]]; then - _config_stubdom=(--enable-stubdom) - _config_stubdom+=( - #--enable-ioemu-stubdom=no - #--enable-c-stubdom=no - #--enable-caml-stubdom=no - #--enable-pv-grub=no - #--enable-xenstore-stubdom=no - #--enable-vtpm-stubdom=no - #--enable-vtpmmgr-stubdom=no - ) - else - _config_stubdom=(--disable-stubdom) - fi - _config_seabios=() - if [[ "$_system_seabios" == true ]]; then - _config_seabios=(--with-system-seabios=/usr/share/qemu/bios-256k.bin) - fi - _config_xen_kconfig='' - _config_debug=() - if [[ "$_build_debug" == true ]]; then - _config_debug=(--enable-debug --enable-debug-tcg --enable-debug-info) - _config_xen_kconfig+="\n$_xen_kconfig_debug" - _makevars+=(debug=y CONFIG_DEBUG=y) - fi - if [[ "$_build_livepatch" == true ]]; then - _config_xen_kconfig+="\n$_xen_kconfig_livepatch" - fi - if [[ -n "$_config_xen_kconfig" ]]; then - cd xen - echo -e "$_config_xen_kconfig" > .config - make "${_makevars[@]}" olddefconfig V=1 - cd ../ - fi - ./configure PYTHON=/usr/bin/python2 --prefix=/usr --sbindir=/usr/bin --with-sysconfig-leaf-dir=conf.d --with-rundir=/run \ - --enable-systemd --enable-ovmf \ - "${_config_seabios[@]}" \ - "${_config_stubdom[@]}" \ - "${_config_debug[@]}" \ - --with-extra-qemuu-configure-args='--disable-bluez --disable-gtk --enable-spice --enable-usb-redir' - #--with-system-qemu --with-system-seabios --with-system-ovmf - #defaults --enable-qemu-traditional --enable-rombios \ - make "${_makevars[@]}" dist - if [[ "$_build_livepatch" == true ]]; then - make "${_makevars[@]}" build-tests - fi + cd "${pkgbase}-${pkgver}" + + if [ "${_build_stubdom}" == "true" ]; then + echo "NOTE: Xen build with stubdom support." + fi + + if [ "${_build_qemu}" == "true" ]; then + echo "NOTE: Xen build with integrated QEMU." + fi + + + ./configure \ + --prefix=/usr \ + --sbindir=/usr/bin \ + --libdir=/usr/lib \ + --with-rundir=/run \ + --enable-systemd \ + --disable-qemu-traditional \ + ${_config_stubdom} \ + ${_config_qemu} \ + --with-sysconfig-leaf-dir=conf.d \ + --with-system-ovmf=/usr/share/ovmf/x64/OVMF.fd \ + --with-system-seabios=/usr/share/qemu/bios-256k.bin + + make "${_common_make_flags[@]}" } package_xen() { - _makevars_package=("${_makevars[@]}" DESTDIR="$pkgdir") - optdepends=( - 'xen-docs: Official Xen documentation' - 'openvswitch: Optional advanced networking support' - 'urlgrabber: Required for xenpvnetboot' - ) - conflicts=(xen-{git,rc,igvtg,4.{8,9}} xenstore) - provides=(xenstore) - replaces=(xen-{git,rc,4.{8,9}}) - backup=( - etc/conf.d/xen{domains,commons} - "etc/$_pkgname/grub.conf" - "etc/$_pkgname/oxenstored.conf" - "etc/$_pkgname/xl.conf" - ) - install="$_pkgname.install" - - cd "$_pkgname-$_pkgver/" - - make "${_makevars_package[@]}" install-xen - make "${_makevars_package[@]}" install-tools - if [[ "$_build_stubdom" == true ]]; then - make "${_makevars_package[@]}" install-stubdom - fi - if [[ "$_build_livepatch" == true ]]; then - make "${_makevars_package[@]}" install-tests - fi - - cd "$pkgdir" - - # Install files from Parabola package - install -Dm644 "$srcdir/tmpfiles.d-$_pkgname.conf" "usr/lib/tmpfiles.d/$_pkgname.conf" - install -Dm755 "$srcdir/21_linux_xen_multiboot_arch" etc/grub.d/21_linux_xen_multiboot_arch - install -Dm644 "$srcdir/efi-xen.cfg" etc/xen/efi-xen.cfg - - mkdir -p var/log/xen/console - - # Sanitize library path (if lib64 exists) - if [[ -d usr/lib64 ]]; then - cd usr/ - mv lib64/* lib/ - rmdir lib64 - cd ../ - fi - - # If EFI binaries built, move to /boot - if [[ -f usr/lib/efi/xen.efi ]]; then - mv usr/lib/efi/*.efi boot/ - rmdir usr/lib/efi - fi - - # Remove syms - find usr/lib/debug -type f \( -name '*-syms*' -or -name '*\.map' \) -delete - rmdir --ignore-fail-on-non-empty usr/lib/debug - - # Remove hypervisor boot symlinks - rm -f boot/xen{,-4{,.8,.9}}{,.{gz,efi}} - - # Documentation cleanup ( see xen-docs package ) - #rm -rf usr/share/doc - #rm -rf usr/share/man - - # Remove tempdirs - rmdir run/xen{,stored} - rmdir run - - # Remove unnecessary qemu ELF support files - # qemuu - rm -f usr/share/qemu-xen/qemu/{palcode,openbios,s390}-* - rm -f usr/share/qemu-xen/qemu/u-boot.e500 - # qemut - if [[ "$CARCH" == *'x86'* ]]; then - rm -f usr/share/xen/qemu/openbios-* - fi - - # adhere to Static Library Packaging Guidelines - rm -rf usr/lib/*.a - - # Remove unneeded init.d files - rm -rf etc/init.d + pkgdesc='Open-source type-1 or baremetal hypervisor' + + depends=( + 'zlib' 'python' 'ncurses' 'openssl' 'libx11' 'libuuid.so' 'yajl' 'libaio' 'glib2' 'pkgconf' + 'bridge-utils' 'iproute2' 'inetutils' 'acpica' 'lib32-glibc' 'gnutls' + 'vde2' 'lzo' 'pciutils' 'sdl2' + 'pixman' 'libseccomp' 'libpng' 'libjpeg-turbo' # inhereted depends because of build environment + ) + + optdepends=( + 'edk2-ovmf: UEFI support' + 'seabios: SeaBIOS payload support' + 'xen-docs: HTML documentation and man pages' + 'grub-xen-git: GRUB and pvgrub2 bootloader support' + 'linux-headers: extract bootable non-zstd kernel for recent kernels' + ) + + if [ "${_build_qemu}" == "false" ]; then + optdepends+=("qemu: HVM and PV support") + fi + + install="xen.install" + + + backup=( + "etc/conf.d/xencommons" + "etc/conf.d/xendomains" + "etc/xen/efi-xen.cfg" + "etc/xen/cpupool" + "etc/xen/xl.conf" + ) + + + cd "${pkgbase}-${pkgver}" + + make "${_common_make_flags[@]}" DESTDIR="$pkgdir" install + + rm -rf "$pkgdir"/var/run + + # Symlinks to prior installed versions are not The Arch Way, leave only the bare EFI binary + (cd "${pkgdir}/${_efi_dir}" && mv "$(realpath xen.efi)" xen.efi) + + [ -d "$pkgdir"/etc/xen/scripts ] && backup+=($(find "$pkgdir"/etc/xen/scripts/ -type f | sed "s|^$pkgdir/||g")) + + mkdir -p "${pkgdir}/var/log/xen/console" + + # Continued: Trim hypervisor symlinks. + (cd "${pkgdir}/${_boot_dir}" && mv "$(realpath xen.gz)" xen.gz) + + # Do all symlink removals after the directories have had the real + # binaries moved overtop any symlinks. Note that dependening on + # configuratation _efi_dir and _boot_dir may be the same directory, so + # don't clean any of them until they've all been processed. + find "${pkgdir}/${_efi_dir}" -type l -delete + find "${pkgdir}/${_boot_dir}" -type l -delete + + # Remove syms. + find "${pkgdir}/usr/lib/debug" -type f \( -name '*-syms*' -or -name '*\.map' \) -delete + rmdir "${pkgdir}/usr/lib/debug/usr/lib/xen/boot" + rmdir "${pkgdir}/usr/lib/debug/usr/lib/xen" + rmdir "${pkgdir}/usr/lib/debug/usr/lib" + rmdir "${pkgdir}/usr/lib/debug/usr" + rmdir "${pkgdir}/usr/lib/debug" + + # Remove SysVinit files. + rm -r "${pkgdir}/etc/init.d" + + # Install files for Arch Linux. + install -D -m 0644 "${srcdir}/efi-xen.cfg" "${pkgdir}/etc/xen/efi-xen.cfg" + install -D -m 0644 "${srcdir}/xen.conf" "${pkgdir}/usr/lib/modules-load.d/xen.conf" + install -D -m 0644 "${srcdir}/tmpfiles.conf" "${pkgdir}/usr/lib/tmpfiles.d/${pkgbase}.conf" + + # microcode hooks + mkdir -p "${pkgdir}/usr/share/libalpm/scripts" "${pkgdir}/usr/share/libalpm/hooks" + install -m755 "${srcdir}/xen-ucode-extract.sh" "${pkgdir}/usr/share/libalpm/scripts" + install -m644 "${srcdir}/xen-intel-ucode.hook" "${pkgdir}/usr/share/libalpm/hooks" + install -m644 "${srcdir}/xen-amd-ucode.hook" "${pkgdir}/usr/share/libalpm/hooks" + + # Remove documentation (included in separate xen-docs package). + rm -r "${pkgdir}/usr/share/doc" + rm -r "${pkgdir}/usr/share/man" + + # remove potential stubdom files + rm -r "${pkgdir}/usr/lib/xen/boot" + + # remove qemu + if [ "${_build_qemu}" == "true" ]; then + + rm -r "${pkgdir}/usr/share/qemu-xen" + rm -r \ + "${pkgdir}/usr/lib/xen/include/qemu-plugin.h" \ + "${pkgdir}/usr/lib/xen/bin/qemu-pr-helper" \ + "${pkgdir}/usr/lib/xen/bin/qemu-edid" \ + "${pkgdir}/usr/lib/xen/bin/elf2dmp" \ + "${pkgdir}/usr/lib/xen/bin/qemu-storage-daemon" \ + "${pkgdir}/usr/lib/xen/bin/qemu-nbd" \ + "${pkgdir}/usr/lib/xen/bin/qemu-io" \ + "${pkgdir}/usr/lib/xen/bin/qemu-img" \ + "${pkgdir}/usr/lib/xen/bin/qemu-system-i386" \ + "${pkgdir}/usr/lib/xen/libexec/virtiofsd" \ + "${pkgdir}/usr/lib/xen/libexec/qemu-bridge-helper" \ + "${pkgdir}/usr/lib/xen/libexec/virtfs-proxy-helper" + + fi + + } -package_xen-docs(){ - _makevars_package=("${_makevars[@]}" DESTDIR="$pkgdir") - pkgdesc='Xen virtual machine hypervisor documentation' - arch=('any') - depends=() - cd "$_pkgname-$_pkgver/" - make "${_makevars_package[@]}" install-docs +package_xen-docs() { + pkgdesc="Xen hypervisor documentation and man pages" + arch=("any") + cd "${pkgbase}-${pkgver}" + make "${_common_make_flags[@]}" DESTDIR="$pkgdir" install-docs } -package_xen-syms(){ - _makevars_package=("${_makevars[@]}" DESTDIR="$pkgdir") - pkgdesc='Xen virtual machine hypervisor debugging symbols' - arch=('any') - depends=() - _installdir="${pkgdir}/usr/lib/debug" - cd "$_pkgname-$_pkgver/" - install -d -m0755 "$_installdir" - for _path in $(find xen -type f \( -name '*-syms' -or -name '*\.map' \)); do - _file=$(basename "$_path") - _installfile=$(echo "$_file" | - sed "s/\([^.]*\)\(\.*\)/\1-${_pkgver}\2/" ) - install -D -m0644 -p "$_path" "$_installdir/$_installfile" - done + +package_xen-stubdom() { + pkgdesc="Xen hypervisor stubdom files" + arch=("x86_64") + depends=("xen") + + cd "${srcdir}/${pkgbase}-${pkgver}/stubdom" + make DESTDIR="${pkgdir}" install } + +package_xen-qemu-builtin() { + pkgdesc="Xen hypervisor QEMU components" + arch=("x86_64") + depends=("xen") + + cd "${srcdir}/${pkgbase}-${pkgver}/tools/qemu-xen-build" + make DESTDIR="${pkgdir}" install +} + |