# # spec file for package xen # # Copyright (c) 2024 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed # upon. The license for this file, and modifications and additions to the # file, is the same license as for the pristine package itself (unless the # license for the pristine package is not an Open Source License, in which # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. # Please submit bugfixes or comments via https://bugs.opensuse.org/ # # needssslcertforbuild #Compat macro for new _fillupdir macro introduced in Nov 2017 %if ! %{defined _fillupdir} %define _fillupdir /var/adm/fillup-templates %endif # Tumbleweed now defines _libexecdir as /usr/libexec # Keep it at the original location (/usr/lib) for backward compatibility %define _libexecdir /usr/lib %{?!primary_python:%define primary_python python3} Name: xen ExclusiveArch: %ix86 x86_64 aarch64 %define xen_build_dir xen-4.19.0-testing # %define with_gdbsx 0 %define with_dom0_support 0 %ifarch x86_64 %bcond_without xen_debug %bcond_without xen_stubdom %else %bcond_with xen_debug %bcond_with xen_stubdom %endif # %define qemu_arch i386 %ifarch x86_64 %define with_gdbsx 1 %define with_dom0_support 1 %endif # %ifarch %arm aarch64 %define with_dom0_support 1 %define qemu_arch aarch64 %endif # %define xen_install_suffix %{nil} %ifarch x86_64 %define xen_install_suffix .gz %endif # EFI requires gcc 4.6 or newer # gcc46 is available in 12.1 or sles11sp2 # gcc47 is available in sles11sp3 # gcc48 is available in sles11sp4 # 12.2+ have gcc 4.7 as default compiler %define with_gcc47 0 %define with_gcc48 0 %define _fwdefdir /etc/sysconfig/SuSEfirewall2.d/services %systemd_requires BuildRequires: pkgconfig(libsystemd) %define with_systemd_modules_load %{_prefix}/lib/modules-load.d PreReq: %fillup_prereq %ifarch %arm aarch64 %if 0%{?suse_version} > 1320 || ( 0%{?suse_version} == 1315 && 0%{?sle_version} > 120200 ) BuildRequires: libfdt-devel %else BuildRequires: libfdt1-devel %endif %endif BuildRequires: bison BuildRequires: fdupes %if 0%{?suse_version} > 1315 BuildRequires: figlet %endif BuildRequires: flex BuildRequires: glib2-devel BuildRequires: libaio-devel BuildRequires: libbz2-devel BuildRequires: libnl3-devel BuildRequires: libpixman-1-0-devel BuildRequires: libuuid-devel BuildRequires: libxml2-devel BuildRequires: libyajl-devel %if %{with xen_stubdom} %if 0%{?suse_version} < 1230 BuildRequires: texinfo %else BuildRequires: makeinfo %endif %endif BuildRequires: acpica BuildRequires: libzstd-devel BuildRequires: lzo-devel BuildRequires: ncurses-devel BuildRequires: openssl-devel BuildRequires: python3-devel BuildRequires: xz-devel BuildRequires: pkgconfig(systemd) %ifarch x86_64 BuildRequires: gcc-32bit BuildRequires: gcc-c++ %if %{?with_gcc47}0 BuildRequires: gcc47 %endif %if %{?with_gcc48}0 BuildRequires: gcc48 %endif BuildRequires: glibc-32bit BuildRequires: glibc-devel-32bit BuildRequires: makeinfo %endif %ifarch x86_64 BuildRequires: pesign-obs-integration %endif BuildRequires: python-rpm-macros Provides: installhint(reboot-needed) Version: 4.19.0_04 Release: 0 Summary: Xen Virtualization: Hypervisor (aka VMM aka Microkernel) License: GPL-2.0-only Group: System/Kernel Source0: xen-4.19.0-testing-src.tar.bz2 Source1: stubdom.tar.bz2 Source2: mini-os.tar.bz2 Source9: xen.changes Source10: README.SUSE Source11: boot.xen Source12: boot.local.xenU Source13: xen-supportconfig Source14: logrotate.conf Source21: block-npiv-common.sh Source22: block-npiv Source23: block-npiv-vport Source24: block-dmmd # Xen API remote authentication sources Source30: etc_pam.d_xen-api Source31: xenapiusers # Init script and sysconf file for pciback Source34: init.pciback Source35: sysconfig.pciback Source36: xen2libvirt.py # Systemd service files Source41: xencommons.service Source42: xen-dom0-modules.service Source10172: xendomains-wait-disks.sh Source10173: xendomains-wait-disks.LICENSE Source10174: xendomains-wait-disks.README.md Source10183: xen_maskcalc.py # For xen-libs Source99: baselibs.conf # Upstream patches Patch1: 66a8b8ac-bunzip2-rare-failure.patch Patch2: 66bb6f78-x86-IOMMU-move-tracking-in-iommu_identity_mapping.patch Patch3: 66bb6fa5-x86-pass-through-document-as-security-unsupported.patch Patch4: 66cf737b-x86-Dom0-disable-SMAP-for-PV-only.patch Patch5: 66d02b69-Arm64-adjust-irq_to_desc-to-fix-build-with-gcc14.patch Patch6: 66d6dca8-libxl-nul-termination-in-xen_console_read_line.patch Patch7: 66d8690f-SUPPORT-split-XSM-from-Flask.patch Patch8: 66e29480-x86-HVM-properly-reject-indirect-VRAM-writes.patch Patch9: 66e44ae2-x86-ucode-AMD-buffer-underrun.patch Patch10: 66f2af41-x86-vLAPIC-undue-recursion-of-vlapic_error.patch Patch11: 66f2fd92-x86-ucode-Intel-stricter-sanity-check.patch # EMBARGOED security fixes # libxc Patch301: libxc-bitmap-long.patch Patch302: libxc-sr-xl-migration-debug.patch Patch303: libxc-sr-readv_exact.patch Patch304: libxc-sr-save-show_transfer_rate.patch Patch305: libxc-sr-save-mfns.patch Patch306: libxc-sr-save-types.patch Patch307: libxc-sr-save-errors.patch Patch308: libxc-sr-save-iov.patch Patch309: libxc-sr-save-rec_pfns.patch Patch310: libxc-sr-save-guest_data.patch Patch311: libxc-sr-save-local_pages.patch Patch312: libxc-sr-restore-pfns.patch Patch313: libxc-sr-restore-types.patch Patch314: libxc-sr-restore-mfns.patch Patch315: libxc-sr-restore-map_errs.patch Patch316: libxc-sr-restore-populate_pfns-pfns.patch Patch317: libxc-sr-restore-populate_pfns-mfns.patch Patch318: libxc-sr-restore-read_record.patch Patch319: libxc-sr-restore-handle_buffered_page_data.patch Patch320: libxc-sr-restore-handle_incoming_page_data.patch Patch321: libxc-sr-LIBXL_HAVE_DOMAIN_SUSPEND_PROPS.patch Patch322: libxc-sr-precopy_policy.patch Patch323: libxc-sr-max_iters.patch Patch324: libxc-sr-min_remaining.patch Patch325: libxc-sr-abort_if_busy.patch Patch326: libxc-sr-xg_sr_bitmap.patch Patch327: libxc-sr-xg_sr_bitmap-populated_pfns.patch Patch328: libxc-sr-restore-hvm-legacy-superpage.patch Patch329: libxc-sr-track-migration-time.patch Patch330: libxc-sr-number-of-iterations.patch # Our platform specific patches Patch400: xen-destdir.patch Patch401: vif-bridge-no-iptables.patch Patch402: vif-bridge-tap-fix.patch Patch403: xl-conf-default-bridge.patch Patch404: xl-conf-disable-autoballoon.patch Patch405: xen-arch-kconfig-nr_cpus.patch Patch406: suse-xendomains-service.patch Patch407: replace-obsolete-network-configuration-commands-in-s.patch Patch408: ignore-ip-command-script-errors.patch # Needs to go upstream Patch420: suspend_evtchn_lock.patch Patch421: vif-route.patch Patch422: gcc14-fixes.patch # Other bug fixes or features Patch450: xen.sysconfig-fillup.patch Patch451: xenconsole-no-multiple-connections.patch Patch452: hibernate.patch Patch453: stdvga-cache.patch Patch454: xl-save-pc.patch Patch455: pygrub-boot-legacy-sles.patch Patch456: pygrub-handle-one-line-menu-entries.patch Patch461: libxl.max_event_channels.patch Patch463: libxl.add-option-to-disable-disk-cache-flushes-in-qdisk.patch Patch464: xen.libxl.dmmd.patch Patch465: xenstore-run-in-studomain.patch Patch466: libxl.helper_done-crash.patch Patch467: libxl.LIBXL_HOTPLUG_TIMEOUT.patch # python3 conversion patches Patch500: build-python3-conversion.patch # Hypervisor and PV driver Patches Patch600: xen.bug1026236.suse_vtsc_tolerance.patch Patch601: x86-ioapic-ack-default.patch Patch602: xenwatchdogd-restart.patch Patch621: xen.build-compare.doc_html.patch # Build patches URL: http://www.cl.cam.ac.uk/Research/SRG/netos/xen/ BuildRoot: %{_tmppath}/%{name}-%{version}-build %define pyver %(python3 -c "import sys; print(sys.version.rpartition('.')[0])") %description Xen is a virtual machine monitor for x86 that supports execution of multiple guest operating systems with unprecedented levels of performance and resource isolation. This package contains the Xen Hypervisor. (tm) [Hypervisor is a trademark of IBM] %package libs Summary: Xen Virtualization: Libraries License: GPL-2.0-only Group: System/Kernel %description libs Xen is a virtual machine monitor for x86 that supports execution of multiple guest operating systems with unprecedented levels of performance and resource isolation. This package contains the libraries used to interact with the Xen virtual machine monitor. In addition to this package you need to install xen and xen-tools to use Xen. Authors: -------- Ian Pratt %if %{?with_dom0_support}0 %package tools Summary: Xen Virtualization: Control tools for domain 0 License: GPL-2.0-only Group: System/Kernel %if 0%{?suse_version} > 1500 BuildRequires: pam-devel %endif %ifarch x86_64 %if 0%{?suse_version} >= 1315 Requires: grub2-x86_64-xen %endif Recommends: qemu-ovmf-x86_64 Requires: qemu-x86 %endif %ifarch %arm aarch64 Requires: qemu-arm %endif Requires: %{name} = %{version}-%{release} Requires: %{name}-libs = %{version}-%{release} Recommends: multipath-tools Requires: %{primary_python} Requires: %{primary_python}-curses %ifarch %{ix86} x86_64 Requires: qemu-seabios %endif # subpackage existed in 10.3 Provides: xen-tools-ioemu = %{version} Obsoletes: xen-tools-ioemu < %{version} Conflicts: libvirt < 1.0.5 %description tools Xen is a virtual machine monitor for x86 that supports execution of multiple guest operating systems with unprecedented levels of performance and resource isolation. This package contains the control tools that allow you to start, stop, migrate, and manage virtual machines. In addition to this package you need to install xen and xen-libs to use Xen. Authors: -------- Ian Pratt %ifarch x86_64 %package tools-xendomains-wait-disk Summary: Adds a new xendomains-wait-disks.service License: GPL-3.0-or-later Group: System/Kernel Requires: %{name}-tools = %{version}-%{release} Requires: coreutils Requires: sed Requires: vim BuildArch: noarch %description tools-xendomains-wait-disk This package adds a new service named xendomains-wait-disks.service, that simply calls xendomains-wait-disks. xendomains-wait-disks script loops checking for the presence of every disk used by domU that xendomains.service will try to launch. The script returns when all disks become available or xendomains-wait-disks.service expires. xendomains-wait-disks.service has the same dependencies as xendomains.service, but it adds itself as a Wanted service for xendomains. If xendomains-wait-disks.service fails, xendomains.service is launched anyway. https://github.com/luizluca/xen-tools-xendomains-wait-disk %endif %endif %package tools-domU Summary: Xen Virtualization: Control tools for domain U License: GPL-2.0-only Group: System/Kernel Conflicts: %{name}-tools Requires: %{name}-libs = %{version}-%{release} %description tools-domU Xen is a virtual machine monitor for x86 that supports execution of multiple guest operating systems with unprecedented levels of performance and resource isolation. This package contains tools that allow unprivileged domains to query the virtualized environment. Authors: -------- Ian Pratt %package devel Summary: Xen Virtualization: Headers and libraries for development License: GPL-2.0-only Group: System/Kernel Requires: %{name}-libs = %{version} Requires: libuuid-devel %description devel Xen is a virtual machine monitor for x86 that supports execution of multiple guest operating systems with unprecedented levels of performance and resource isolation. This package contains the libraries and header files needed to create tools to control virtual machines. Authors: -------- Ian Pratt %if %{?with_dom0_support}0 %package doc-html Summary: Xen Virtualization: HTML documentation License: GPL-2.0-only Group: Documentation/HTML %description doc-html Xen is a virtual machine monitor for x86 that supports execution of multiple guest operating systems with unprecedented levels of performance and resource isolation. xen-doc-html contains the online documentation in HTML format. Point your browser at file:/usr/share/doc/packages/xen/html/ Authors: -------- Ian Pratt %endif %prep %setup -q -n %xen_build_dir -a 1 -a 2 %autosetup -D -T -n %xen_build_dir -p1 %build %define _lto_cflags %{nil} # we control the version info of this package # to gain control of filename of xen.gz XEN_VERSION=%{version} XEN_VERSION=${XEN_VERSION%%%%.*} XEN_SUBVERSION=%{version} XEN_SUBVERSION=${XEN_SUBVERSION#*.} XEN_SUBVERSION=${XEN_SUBVERSION%%%%.*} XEN_EXTRAVERSION="%version-%release" XEN_EXTRAVERSION="${XEN_EXTRAVERSION#*.}" XEN_EXTRAVERSION="${XEN_EXTRAVERSION#*.}" # remove trailing B_CNT to reduce build-compare noise XEN_EXTRAVERSION="${XEN_EXTRAVERSION%%.*}" XEN_FULLVERSION="$XEN_VERSION.$XEN_SUBVERSION.$XEN_EXTRAVERSION" XEN_BUILD_DATE="`date -u -d '1970-01-01'`" XEN_BUILD_TIME="`date -u -d '1970-01-01' +%%T`" SMBIOS_REL_DATE="`date -u -d '1970-01-01' +%%m/%%d/%%Y`" RELDATE="`date -u -d '1970-01-01' '+%%d %%b %%Y'`" if test -r %{S:9} then XEN_BUILD_DATE="` date -u -d \"$(sed -n '/@/{s/ - .*$//p;q}' %{S:9})\" `" XEN_BUILD_TIME="` date -u -d \"$(sed -n '/@/{s/ - .*$//p;q}' %{S:9})\" +%%T`" SMBIOS_REL_DATE="` date -u -d \"$(sed -n '/@/{s/ - .*$//p;q}' %{S:9})\" +%%m/%%d/%%Y`" RELDATE="` date -u -d \"$(sed -n '/@/{s/ - .*$//p;q}' %{S:9})\" '+%%d %%b %%Y'`" fi cat > .our_xenversion <<_EOV_ export WGET=$(type -P false) export FTP=$(type -P false) export GIT=$(type -P false) %ifarch aarch64 # GCC10+ enables outline-atomics option by default and breaks the build, so disable it %if 0%{?suse_version} >= 1550 export CFLAGS="%{optflags} -mno-outline-atomics" %endif %endif export EXTRA_CFLAGS_XEN_TOOLS="%{optflags}" export EXTRA_CFLAGS_QEMU_TRADITIONAL="%{optflags}" export SMBIOS_REL_DATE="$SMBIOS_REL_DATE" export RELDATE="$RELDATE" XEN_VERSION=$XEN_VERSION XEN_SUBVERSION=$XEN_SUBVERSION XEN_EXTRAVERSION=$XEN_EXTRAVERSION XEN_FULLVERSION=$XEN_FULLVERSION _EOV_ source ./.our_xenversion sed -i~ " s/XEN_VERSION[[:blank:]]*=.*/XEN_VERSION = $XEN_VERSION/ s/XEN_SUBVERSION[[:blank:]]*=.*/XEN_SUBVERSION = $XEN_SUBVERSION/ s/XEN_EXTRAVERSION[[:blank:]]*?=.*/XEN_EXTRAVERSION = .$XEN_EXTRAVERSION/ s/XEN_FULLVERSION[[:blank:]]*=.*/XEN_FULLVERSION = $XEN_FULLVERSION/ s/XEN_BUILD_DATE[[:blank:]]*?=.*/XEN_BUILD_DATE = $XEN_BUILD_DATE/ s/XEN_BUILD_TIME[[:blank:]]*?=.*/XEN_BUILD_TIME = $XEN_BUILD_TIME/ s/XEN_BUILD_HOST[[:blank:]]*?=.*/XEN_BUILD_HOST = buildhost/ s/XEN_DOMAIN[[:blank:]]*?=.*/XEN_DOMAIN = suse.de/ " xen/Makefile if diff -u xen/Makefile~ xen/Makefile then : no changes? fi configure_flags= configure_flags="--with-system-qemu=%{_bindir}/qemu-system-%{qemu_arch}" %if %{with xen_stubdom} configure_flags="${configure_flags} --enable-stubdom" %else # change the/our default to daemon due to lack of stubdom sed -i~ 's/ XENSTORETYPE=domain$/ XENSTORETYPE=daemon/' tools/hotplug/Linux/launch-xenstore.in configure_flags="${configure_flags} --disable-stubdom" %endif export PYTHON=$(realpath /usr/bin/python3) configure_flags="${configure_flags} --disable-qemu-traditional" ./configure \ --disable-xen \ --disable-pvshim \ --enable-tools \ --enable-docs \ --prefix=/usr \ --exec_prefix=/usr \ --bindir=%{_bindir} \ --sbindir=%{_sbindir} \ --libdir=%{_libdir} \ --libexecdir=%{_libexecdir} \ --with-libexec-leaf-dir=%{name} \ --datadir=%{_datadir} \ --mandir=%{_mandir} \ --includedir=%{_includedir} \ --docdir=%{_defaultdocdir}/xen \ --with-initddir=%{_initddir} \ --with-rundir=%{_rundir} \ --enable-systemd \ --with-systemd=%{_unitdir} \ --with-systemd-modules-load=%{with_systemd_modules_load} \ --with-system-ovmf=%{_datadir}/qemu/ovmf-x86_64-xen-4m.bin \ --with-system-seabios=%{_datadir}/qemu/bios-256k.bin \ ${configure_flags} make -C tools/include/xen-foreign %{?_smp_mflags} make %{?_smp_mflags} # %install source ./.our_xenversion # tools make \ DESTDIR=%{buildroot} \ SYSCONFIG_DIR=%{_fillupdir} \ PKG_INSTALLDIR=%{_libdir}/pkgconfig \ %{?_smp_mflags} \ install find %{buildroot} -ls for i in %{buildroot}/%{_fillupdir}/* do mv -v $i ${i%%/*}/sysconfig.${i##*/} done # udev_rulesdir=%{buildroot}/%{_udevrulesdir} tools_domU_dir=%{buildroot}/%{_libexecdir}/%{name}-tools-domU mkdir -p ${udev_rulesdir} mkdir -p ${tools_domU_dir} # tee ${udev_rulesdir}/80-%{name}-tools-domU.rules <<'_EOR_' # XenSource, Inc. Xen Platform Device SUBSYSTEM=="pci", ATTR{modalias}=="pci:v00005853d00000001sv00005853sd00000001bcFFsc80i00", TAG+="systemd", ENV{SYSTEMD_WANTS}+="%{name}-vcpu-watch.service" _EOR_ # tee %{buildroot}/%{_unitdir}/%{name}-vcpu-watch.service <<'_EOS_' [Unit] Description=Listen to CPU online/offline events from dom0 toolstack [Service] Type=simple ExecStart=%{_libexecdir}/%{name}-tools-domU/%{name}-vcpu-watch.sh Restart=always RestartSec=2 _EOS_ # tee %{buildroot}/%{_libexecdir}/%{name}-tools-domU/%{name}-vcpu-watch.sh <<'_EOS_' #!/bin/bash unset LANG unset ${!LC_*} echo "$0 starting" >&2 xenstore-watch cpu | while read do : xenstore event: ${REPLY} case "${REPLY}" in cpu) : just started ;; cpu/[0-9]/availability|cpu/[0-9][0-9]/availability) vcpu="${REPLY%%/*}" vcpu="${vcpu#*/}" sysfs="/sys/devices/system/cpu/cpu${vcpu}/online" if test -f "${sysfs}" then availability="`xenstore-read \"${REPLY}\"`" case "${availability}" in online|offline) if test "${availability}" = "online" then new_sysfs_state=1 else new_sysfs_state=0 fi read cur_sysfs_state rest < "${sysfs}" if test "${cur_sysfs_state}" = "${new_sysfs_state}" then : the vcpu "${vcpu}" already has state "${availability}" via "${sysfs}" else : setting vcpu "${vcpu}" to "${availability}" via "${sysfs}" echo "setting vcpu ${vcpu} to ${availability}" >&2 echo "${new_sysfs_state}" > "${sysfs}" fi ;; esac fi ;; *) : unhandled ;; esac done exit 1 _EOS_ chmod 755 %{buildroot}/%{_libexecdir}/%{name}-tools-domU/%{name}-vcpu-watch.sh # tee ${udev_rulesdir}/60-persistent-xvd.rules <<'_EOR_' ACTION=="remove", GOTO="xvd_aliases_end" SUBSYSTEM!="block", GOTO="xvd_aliases_end" KERNEL=="xvd*[!0-9]", IMPORT{program}=="%{name}-tools-domU.sh --devpath %%p --devtype $env{DEVTYPE}" KERNEL=="xvd*[0-9]", IMPORT{program}=="%{name}-tools-domU.sh --devpath %%p --devtype $env{DEVTYPE}" KERNEL=="xvd*[!0-9]", ENV{VBD_HD_SYMLINK}=="hd[a-d]", SYMLINK+="$env{VBD_HD_SYMLINK}" KERNEL=="xvd*[0-9]", ENV{VBD_HD_SYMLINK}=="hd[a-d]", SYMLINK+="$env{VBD_HD_SYMLINK}%%n" LABEL="xvd_aliases_end" _EOR_ # tee ${udev_rulesdir}/80-%{name}-channel-setup.rules <<'_EOF_' SUBSYSTEM=="xen", DEVPATH=="/devices/console-[0-9]", IMPORT{program}=="xen-channel-setup.sh $attr{nodename} %%n" SUBSYSTEM=="xen", DEVPATH=="/devices/console-[0-9]", ENV{XEN_CHANNEL_NAME}=="org.qemu.guest_agent.0", TAG+="systemd", ENV{SYSTEMD_WANTS}+="qemu-ga@hvc%%n.service" _EOF_ # dracut_moduledir=%{buildroot}/usr/lib/dracut/modules.d/50%{name}-tools-domU mkdir -p ${dracut_moduledir} tee ${dracut_moduledir}/module-setup.sh <<'_EOS_' #!/bin/bash check() { require_binaries xenstore-read || return 1 return 0 } depends() { return 0 } install() { inst_multiple xenstore-read inst_multiple ${udevdir}/%{name}-tools-domU.sh inst_rules 60-persistent-xvd.rules } _EOS_ chmod 755 ${dracut_moduledir}/module-setup.sh # udev_programdir=%{buildroot}/usr/lib/udev mkdir -p ${udev_programdir} tee ${udev_programdir}/%{name}-tools-domU.sh <<'_EOS_' #!/bin/bash set -e devpath= devtype= dev= while test "$#" -gt 0 do : "$1" case "$1" in --devpath) devpath=$2 ; shift ;; --devtype) devtype=$2 ; shift ;; *) echo "$0: Unknown option $1" >&2 ; exit 1 ;; esac shift done test -n "${devpath}" || exit 1 test -n "${devtype}" || exit 1 cd "/sys/${devpath}" case "${devtype}" in partition) cd .. ;; esac cd -P device d="${PWD##*/}" d="${d/-/\/}" backend="`xenstore-read device/${d}/backend`" dev="`xenstore-read \"${backend}\"/dev`" test -n "${dev}" && echo "VBD_HD_SYMLINK=${dev}" _EOS_ # tee ${udev_programdir}/%{name}-channel-setup.sh <<'_EOF_' #!/bin/bash if test "$#" -ne 2; then exit 1 fi channel_path="$1" channel_num="$2" name="`xenstore-read \"$channel_path\"/name`" test -z "$name" && exit 1 if test $name != "org.qemu.guest_agent.0"; then exit 1 fi mkdir -p /dev/xenchannel devname=/dev/xenchannel/$name # Xen's console devices are used for channels. See xen-pv-channel(7) # for more details ln -sfn /dev/hvc$channel_num $devname echo "XEN_CHANNEL_NAME=$name" _EOF_ chmod 755 ${udev_programdir}/*.sh # EFI %if %{?with_dom0_support}0 arch=`uname -m` install_xen() { local ext="" find %{buildroot}/boot -ls if [ -n "$1" ]; then ext="-$1" mv %{buildroot}/boot/xen-syms-${XEN_FULLVERSION} \ %{buildroot}/boot/xen-syms${ext}-${XEN_FULLVERSION} mv %{buildroot}/boot/xen-${XEN_FULLVERSION}%{xen_install_suffix} \ %{buildroot}/boot/xen${ext}-${XEN_FULLVERSION}%{xen_install_suffix} if test -d %{buildroot}/%{_libdir}/efi; then mv %{buildroot}/%{_libdir}/efi/xen-${XEN_FULLVERSION}.efi %{buildroot}/%{_libdir}/efi/xen${ext}-${XEN_FULLVERSION}.efi ln -sf xen${ext}-${XEN_FULLVERSION}.efi %{buildroot}/%{_libdir}/efi/xen${ext}-$XEN_VERSION.$XEN_SUBVERSION.efi ln -sf xen${ext}-${XEN_FULLVERSION}.efi %{buildroot}/%{_libdir}/efi/xen${ext}-$XEN_VERSION.efi ln -sf xen${ext}-${XEN_FULLVERSION}.efi %{buildroot}/%{_libdir}/efi/xen${ext}.efi fi elif test -d %{buildroot}/%{_libdir}/efi; then # Move the efi files to /usr/share/efi/ (fate#326960) mkdir -p %{buildroot}/%{_datadir}/efi/$arch mv %{buildroot}/%{_libdir}/efi/xen*.efi %{buildroot}/%{_datadir}/efi/$arch/ ln -s %{_datadir}/efi/$arch/xen-${XEN_FULLVERSION}.efi %{buildroot}/%{_libdir}/efi/xen.efi fi rm %{buildroot}/boot/xen-$XEN_VERSION.$XEN_SUBVERSION%{xen_install_suffix} rm %{buildroot}/boot/xen-$XEN_VERSION%{xen_install_suffix} rm %{buildroot}/boot/xen%{xen_install_suffix} # Do not link to links; grub cannot follow. ln -s xen${ext}-${XEN_FULLVERSION}%{xen_install_suffix} %{buildroot}/boot/xen${ext}-$XEN_VERSION.$XEN_SUBVERSION%{xen_install_suffix} ln -s xen${ext}-${XEN_FULLVERSION}%{xen_install_suffix} %{buildroot}/boot/xen${ext}-$XEN_VERSION%{xen_install_suffix} ln -s xen${ext}-${XEN_FULLVERSION}%{xen_install_suffix} %{buildroot}/boot/xen${ext}%{xen_install_suffix} if test -f xen-syms${ext}-${XEN_FULLVERSION}; then ln -sf xen-syms${ext}-${XEN_FULLVERSION} %{buildroot}/boot/xen-syms${ext} fi find %{buildroot}/boot -ls } export BRP_PESIGN_FILES="*.efi /lib/firmware" CC=gcc %if %{?with_gcc47}0 CC=gcc-4.7 %endif %if %{?with_gcc48}0 CC=gcc-4.8 %endif rm -fv xen/.config echo CONFIG_REQUIRE_NX=y > xen/.config echo CONFIG_DIT_DEFAULT=y >> xen/.config %if %{with xen_debug} echo CONFIG_DEBUG=y >> xen/.config echo "CONFIG_DOM0_MEM=\"1G+10%%,max:64G\"" >> xen/.config yes '' | make -C xen oldconfig make -C xen install XEN_BUILD_DATE="$XEN_BUILD_DATE" XEN_BUILD_TIME="$XEN_BUILD_TIME" DEBUG_DIR=/boot DESTDIR=%{buildroot} CC=$CC %{?_smp_mflags} install_xen dbg make -C xen clean %endif echo CONFIG_DEBUG=n >> xen/.config echo "CONFIG_DOM0_MEM=\"1G+10%%,max:64G\"" >> xen/.config yes '' | make -C xen oldconfig make -C xen install XEN_BUILD_DATE="$XEN_BUILD_DATE" XEN_BUILD_TIME="$XEN_BUILD_TIME" DEBUG_DIR=/boot DESTDIR=%{buildroot} CC=$CC %{?_smp_mflags} install_xen make -C xen clean %endif # On x86_64, qemu-xen was installed as /usr/lib/xen/bin/qemu-system-i386 # and advertised as the in libvirt capabilities. Tool such as # virt-install include in domXML they produce, so we need to # preserve the path. For x86_64, create a simple wrapper that invokes # /usr/bin/qemu-system-i386 # Using qemu-system-x86_64 will result in an incompatible VM %ifarch x86_64 aarch64 hardcoded_path_in_existing_domU_xml='%{_libexecdir}/%{name}/bin' mkdir -vp %{buildroot}${hardcoded_path_in_existing_domU_xml} tee %{buildroot}${hardcoded_path_in_existing_domU_xml}/qemu-system-%{qemu_arch} << 'EOF' #!/bin/sh exec %{_bindir}/qemu-system-%{qemu_arch} "$@" EOF chmod 0755 %{buildroot}${hardcoded_path_in_existing_domU_xml}/qemu-system-%{qemu_arch} # unit='%{_libexecdir}/%{name}/bin/xendomains-wait-disks' mkdir -vp '%{buildroot}%{_libexecdir}/%{name}/bin' cp -avL '%{SOURCE10172}' "%{buildroot}${unit}" mkdir xendomains-wait-disk cp -avL '%{SOURCE10173}' xendomains-wait-disk/LICENSE cp -avL '%{SOURCE10174}' xendomains-wait-disk/README.md tee %{buildroot}%{_unitdir}/xendomains-wait-disks.service <<_EOS_ [Unit] Description=Xendomains - for those machines that will start, wait for their disks to appear Requires=proc-xen.mount xenstored.service After=proc-xen.mount xenstored.service xenconsoled.service xen-init-dom0.service After=network-online.target After=remote-fs.target Before=xendomains.service ConditionPathExists=/proc/xen/capabilities [Service] Type=oneshot ExecStart=${unit} TimeoutSec=5min [Install] WantedBy=xendomains.service _EOS_ # %endif # Stubdom %if %{?with_dom0_support}0 # Docs mkdir -p %{buildroot}/%{_defaultdocdir}/xen/misc for name in COPYING %SOURCE10 %SOURCE11 %SOURCE12; do install -m 644 $name %{buildroot}/%{_defaultdocdir}/xen/ done for name in vtpm-platforms.txt crashdb.txt xenpaging.txt \ xen-command-line.pandoc xenstore-paths.pandoc; do install -m 644 docs/misc/$name %{buildroot}/%{_defaultdocdir}/xen/misc/ done # Xen utilities install -m755 %SOURCE36 %{buildroot}/usr/sbin/xen2libvirt install -m755 %SOURCE10183 %{buildroot}/usr/sbin/xen_maskcalc %python3_fix_shebang rm -f %{buildroot}/etc/xen/README* # Example config mkdir -p %{buildroot}/etc/xen/{vm,examples,scripts} mv %{buildroot}/etc/xen/xlexample* %{buildroot}/etc/xen/examples rm -f %{buildroot}/etc/xen/examples/*nbd # Scripts rm -f %{buildroot}/etc/xen/scripts/block-*nbd install -m755 %SOURCE21 %SOURCE22 %SOURCE23 %SOURCE24 %{buildroot}/etc/xen/scripts/ install -m755 tools/pygrub/src/pygrub %{buildroot}/usr/bin/pygrub mkdir -p %{buildroot}/usr/lib/supportconfig/plugins install -m 755 %SOURCE13 %{buildroot}/usr/lib/supportconfig/plugins/xen # Xen API remote authentication files and Logrotate files install -m644 %SOURCE31 %{buildroot}/etc/xen/ %if 0%{?suse_version} > 1500 mkdir -p %{buildroot}%{_distconfdir}/logrotate.d install -m644 -D %SOURCE14 %{buildroot}%{_distconfdir}/logrotate.d/xen install -d %{buildroot}%{_pam_vendordir} install -m644 %SOURCE30 %{buildroot}/%{_pam_vendordir}/xen-api %else install -m644 -D %SOURCE14 %{buildroot}%{_sysconfdir}/logrotate.d/xen install -d %{buildroot}/etc/pam.d install -m644 %SOURCE30 %{buildroot}/etc/pam.d/xen-api %endif # Directories mkdir -p %{buildroot}/var/lib/xenstored mkdir -p %{buildroot}/var/lib/xen/images mkdir -p %{buildroot}/var/lib/xen/jobs mkdir -p %{buildroot}/var/lib/xen/save mkdir -p %{buildroot}/var/lib/xen/dump mkdir -p %{buildroot}/var/log/xen mkdir -p %{buildroot}/var/log/xen/console # Systemd cp -bavL %{S:41} %{buildroot}/%{_unitdir} bn=`basename %{S:42}` cp -bavL %{S:42} %{buildroot}/%{_unitdir}/${bn} mods="` for conf in $(ls %{buildroot}/%{with_systemd_modules_load}/*.conf) do grep -v ^# $conf echo -n > $conf done `" > mods for mod in $mods do # load by alias, if possible, to handle pvops and xenlinux alias="$mod" case "$mod" in xen-evtchn) ;; xen-gntdev) ;; xen-gntalloc) ;; xen-blkback) alias='xen-backend:vbd' ;; xen-netback) alias='xen-backend:vif' ;; xen-pciback) alias='xen-backend:pci' ;; evtchn) unset alias ;; gntdev) unset alias ;; netbk) alias='xen-backend:vif' ;; blkbk) alias='xen-backend:vbd' ;; xen-scsibk) unset alias ;; usbbk) unset alias ;; pciback) alias='xen-backend:pci' ;; xen-acpi-processor) ;; blktap2) unset alias ;; *) ;; esac if test -n "${alias}" then echo "ExecStart=-/bin/sh -c 'modprobe $alias || :'" >> mods fi done sort -u mods | tee -a %{buildroot}/%{_unitdir}/${bn} rm -rfv %{buildroot}/%{_initddir} install -m644 %SOURCE35 %{buildroot}/%{_fillupdir}/sysconfig.pciback # Clean up unpackaged files find %{buildroot} \( \ -name .deps -o \ -name README.blktap -o \ -name README.xenmon -o \ -name target-x86_64.conf -o \ -name xen-mfndump -o \ -name qcow-create -o \ -name img2qcow -o \ -name qcow2raw -o \ -name qemu-bridge-helper -o \ -name qemu-img-xen -o \ -name qemu-nbd-xen -o \ -name palcode-clipper -o \ -name "*.dtb" -o \ -name "openbios-*" -o \ -name "petalogix*" -o \ -name "ppc*" -o \ -name "*.pyc" -o \ -name "s390*" -o \ -name "slof*" -o \ -name "spapr*" -o \ -name "*.egg-info" \) \ -print -delete # Wipe empty directories if find %{buildroot}/usr -type d -print0 | xargs -0n1 rmdir -p 2>/dev/null then : fi # "xl devd" has to be called manually in a driver domain find %{buildroot} -name xendriverdomain.service -print -delete # Create hardlinks for 3 .txt files and 1 .py %fdupes %{buildroot}/%{_prefix} find %{buildroot} -type f -size 0 -delete -print %else # !with_dom0_support # 32 bit hypervisor no longer supported. Remove dom0 tools. rm -rf %{buildroot}/%{_datadir}/doc rm -rf %{buildroot}/%{_datadir}/man rm -rf %{buildroot}/%{_libexecdir}/%{name} rm -rf %{buildroot}/%{_libdir}/python* rm -rf %{buildroot}/%{_unitdir} rm -rf %{buildroot}/%{_fillupdir} rm -rf %{buildroot}/%{with_systemd_modules_load} rm -rf %{buildroot}/usr/sbin rm -rf %{buildroot}/etc/xen rm -rf %{buildroot}/var rm -f %{buildroot}/%{_sysconfdir}/bash_completion.d/xl rm -f %{buildroot}/%{_sysconfdir}/init.d/xen* rm -f %{buildroot}/%{_bindir}/*trace* rm -f %{buildroot}/%{_bindir}/vchan-socket-proxy rm -f %{buildroot}/%{_bindir}/xenalyze* rm -f %{buildroot}/%{_bindir}/xenco* rm -f %{buildroot}/%{_bindir}/xen-cpuid rm -f %{buildroot}/%{_bindir}/pygrub rm -f %{buildroot}/%{_bindir}/remus rm -f %{buildroot}/usr/etc/qemu/target-x86_64.conf rm -f %{buildroot}/usr/libexec/qemu-bridge-helper %endif %if %{?with_dom0_support}0 %files %defattr(-,root,root) /boot/* %{_libdir}/efi %{_datadir}/efi %endif %files libs %defattr(-,root,root) %{_libdir}/xenfsimage/ %{_libdir}/*.so.* %if %{?with_dom0_support}0 %files tools %defattr(-,root,root) /usr/bin/xenalyze /usr/bin/xenstore* /usr/bin/pygrub /usr/bin/vchan-socket-proxy /usr/bin/xencov_split %ifarch x86_64 /usr/bin/xen-cpuid %endif /usr/sbin/xenbaked /usr/sbin/xenconsoled /usr/sbin/xencov /usr/sbin/xenlockprof /usr/sbin/xenmon /usr/sbin/xenperf /usr/sbin/xenpm /usr/sbin/xenpmd /usr/sbin/xenstored /usr/sbin/xentop /usr/sbin/xentrace /usr/sbin/xentrace_setmask /usr/sbin/xentrace_setsize /usr/sbin/xenwatchdogd /usr/sbin/flask-get-bool /usr/sbin/flask-getenforce /usr/sbin/flask-label-pci /usr/sbin/flask-loadpolicy /usr/sbin/flask-set-bool /usr/sbin/flask-setenforce %if %{?with_gdbsx}0 /usr/sbin/gdbsx %endif /usr/sbin/xl /usr/sbin/xen2libvirt /usr/sbin/xen-access /usr/sbin/xen_maskcalc %ifarch %ix86 x86_64 /usr/sbin/xen-hptool /usr/sbin/xen-hvmcrash /usr/sbin/xen-hvmctx /usr/sbin/xen-kdd /usr/sbin/xen-lowmemd /usr/sbin/xen-memshare /usr/sbin/xen-ucode /usr/sbin/xen-mceinj /usr/sbin/xen-vmtrace %endif /usr/sbin/xenhypfs /usr/sbin/xen-livepatch /usr/sbin/xen-diag %dir %attr(700,root,root) /etc/xen %dir /etc/xen/scripts /etc/xen/scripts/block* /etc/xen/scripts/external-device-migrate /etc/xen/scripts/hotplugpath.sh /etc/xen/scripts/launch-xenstore /etc/xen/scripts/locking.sh /etc/xen/scripts/logging.sh /etc/xen/scripts/vif-* /etc/xen/scripts/vscsi /etc/xen/scripts/xen-hotplug-* /etc/xen/scripts/xen-network-common.sh /etc/xen/scripts/xen-script-common.sh /etc/xen/scripts/colo-proxy-setup /etc/xen/scripts/remus-netbuf-setup %dir /usr/lib/supportconfig %dir /usr/lib/supportconfig/plugins /usr/lib/supportconfig/plugins/xen %dir %{_libexecdir}/%{name} %{_libexecdir}/%{name}/bin %exclude %{_libexecdir}/%{name}-tools-domU %ifarch x86_64 %{_libexecdir}/%{name}/boot %exclude %{_libexecdir}/%{name}/bin/xendomains-wait-disks %endif %{_fillupdir}/sysconfig.pciback %{_fillupdir}/sysconfig.xencommons %{_fillupdir}/sysconfig.xendomains %dir /var/lib/xen %dir %attr(700,root,root) /var/lib/xen/images %dir %attr(700,root,root) /var/lib/xen/save %dir %attr(700,root,root) /var/lib/xen/dump %ifarch %ix86 x86_64 %dir %attr(700,root,root) /var/lib/xen/xenpaging %endif %dir /var/lib/xenstored %dir /var/log/xen %dir /var/log/xen/console %if 0%{?suse_version} > 1500 %{_distconfdir}/logrotate.d/xen %{_pam_vendordir}/xen-api %else %config(noreplace) %{_sysconfdir}/logrotate.d/xen %config /etc/pam.d/xen-api %endif /etc/xen/auto %config /etc/xen/examples %config /etc/xen/cpupool %config /etc/xen/vm %config(noreplace) /etc/xen/xenapiusers %config(noreplace) /etc/xen/xl.conf %config %{_unitdir} %exclude %{_unitdir}/%{name}-vcpu-watch.service %exclude %{_unitdir}/xendomains-wait-disks.service %config %{with_systemd_modules_load} /etc/bash_completion.d/xl %dir %{_libdir}/python%{pyver}/site-packages/grub %dir %{_libdir}/python%{pyver}/site-packages/xen %dir %{_libdir}/python%{pyver}/site-packages/xen/lowlevel %dir %{_libdir}/python%{pyver}/site-packages/xen/migration %{_libdir}/python%{pyver}/site-packages/grub/* %{_libdir}/python%{pyver}/site-packages/xen/util.py %{_libdir}/python%{pyver}/site-packages/xen/lowlevel/* %{_libdir}/python%{pyver}/site-packages/xen/migration/* %{_libdir}/python%{pyver}/site-packages/*.so %dir %{_defaultdocdir}/xen %{_defaultdocdir}/xen/COPYING %{_defaultdocdir}/xen/README.SUSE %{_defaultdocdir}/xen/boot.local.xenU %{_defaultdocdir}/xen/boot.xen %{_mandir}/man*/* %ifarch x86_64 %files tools-xendomains-wait-disk %license xendomains-wait-disk/LICENSE %doc xendomains-wait-disk/README.md %config %{_unitdir}/xendomains-wait-disks.service %config %attr(0755,root,root) %{_libexecdir}/%{name}/bin/xendomains-wait-disks %endif # with_dom0_support %endif %posttrans -n %{name}-tools-domU %{?regenerate_initrd_posttrans} %files tools-domU %defattr(-,root,root) %ifarch %ix86 x86_64 /usr/bin/xen-detect %exclude /usr/bin/xenstore-control %endif /usr/bin/xenstore* %if %{?with_dom0_support}0 %config %{_unitdir}/%{name}-vcpu-watch.service %endif %{_libexecdir}/%{name}-tools-domU /usr/lib/udev /usr/lib/dracut %files devel %defattr(-,root,root) %{_libdir}/*.a %{_libdir}/*.so /usr/include/* %{_libdir}/pkgconfig/xenlight.pc %{_libdir}/pkgconfig/xlutil.pc %{_libdir}/pkgconfig/xencall.pc %{_libdir}/pkgconfig/xencontrol.pc %{_libdir}/pkgconfig/xendevicemodel.pc %{_libdir}/pkgconfig/xenevtchn.pc %{_libdir}/pkgconfig/xenforeignmemory.pc %{_libdir}/pkgconfig/xengnttab.pc %{_libdir}/pkgconfig/xenguest.pc %{_libdir}/pkgconfig/xenhypfs.pc %{_libdir}/pkgconfig/xenstat.pc %{_libdir}/pkgconfig/xenstore.pc %{_libdir}/pkgconfig/xentoolcore.pc %{_libdir}/pkgconfig/xentoollog.pc %{_libdir}/pkgconfig/xenvchan.pc %if %{?with_dom0_support}0 %files doc-html %defattr(-,root,root) %dir %{_defaultdocdir}/xen %{_defaultdocdir}/xen/misc %{_defaultdocdir}/xen/html %post if [ -x /sbin/update-bootloader ]; then /sbin/update-bootloader --refresh; exit 0 fi %pre tools %service_add_pre xencommons.service %service_add_pre xendomains.service %service_add_pre xen-watchdog.service %service_add_pre xenstored.service %service_add_pre xen-dom0-modules.service %service_add_pre xenconsoled.service %service_add_pre xen-init-dom0.service %service_add_pre xen-qemu-dom0-disk-backend.service %if 0%{?suse_version} > 1500 # Prepare for migration to /usr/etc; save any old .rpmsave for i in logrotate.d/xen pam.d/xen-api ; do test -f %{_sysconfdir}/${i}.rpmsave && mv -v %{_sysconfdir}/${i}.rpmsave %{_sysconfdir}/${i}.rpmsave.old ||: done %endif %if 0%{?suse_version} > 1500 %posttrans tools # Migration to /usr/etc, restore just created .rpmsave for i in logrotate.d/xen pam.d/xen-api ; do test -f %{_sysconfdir}/${i}.rpmsave && mv -v %{_sysconfdir}/${i}.rpmsave %{_sysconfdir}/${i} ||: done %endif %post tools %{fillup_only -n xencommons xencommons} %{fillup_only -n xendomains xendomains} %service_add_post xencommons.service %service_add_post xendomains.service %service_add_post xen-watchdog.service %service_add_post xenstored.service %service_add_post xen-dom0-modules.service %service_add_post xenconsoled.service %service_add_post xen-init-dom0.service %service_add_post xen-qemu-dom0-disk-backend.service if [ -f /etc/default/grub ] && ! (/usr/bin/grep GRUB_CMDLINE_XEN /etc/default/grub >/dev/null); then echo '# Xen boot parameters for all Xen boots' >> /etc/default/grub echo 'GRUB_CMDLINE_XEN=""' >> /etc/default/grub echo '# Xen boot parameters for non-recovery Xen boots (in addition to GRUB_CMDLINE_XEN)' >> /etc/default/grub echo 'GRUB_CMDLINE_XEN_DEFAULT=""' >> /etc/default/grub fi if [ -f %{_datadir}/grub2/i386-xen/grub.xen ] && [ ! -f %{_libexecdir}/%{name}/boot/pvgrub32.bin ]; then ln -sv %{_datadir}/grub2/i386-xen/grub.xen %{_libexecdir}/%{name}/boot/pvgrub32.bin fi if [ -f %{_datadir}/grub2/x86_64-xen/grub.xen ] && [ ! -f %{_libexecdir}/%{name}/boot/pvgrub64.bin ]; then ln -sv %{_datadir}/grub2/x86_64-xen/grub.xen %{_libexecdir}/%{name}/boot/pvgrub64.bin fi %preun tools %service_del_preun xencommons.service %service_del_preun xendomains.service %service_del_preun xen-watchdog.service %service_del_preun xenstored.service %service_del_preun xen-dom0-modules.service %service_del_preun xenconsoled.service %service_del_preun xen-init-dom0.service %service_del_preun xen-qemu-dom0-disk-backend.service %postun tools %if %{defined service_del_postun_without_restart} %service_del_postun_without_restart xencommons.service %service_del_postun_without_restart xendomains.service %service_del_postun_without_restart xen-watchdog.service %service_del_postun_without_restart xenstored.service %service_del_postun_without_restart xen-dom0-modules.service %service_del_postun_without_restart xenconsoled.service %service_del_postun_without_restart xen-init-dom0.service %service_del_postun_without_restart xen-qemu-dom0-disk-backend.service %else export DISABLE_RESTART_ON_UPDATE=yes %service_del_postun xencommons.service %service_del_postun xendomains.service %service_del_postun xen-watchdog.service %service_del_postun xenstored.service %service_del_postun xen-dom0-modules.service %service_del_postun xenconsoled.service %service_del_postun xen-init-dom0.service %service_del_postun xen-qemu-dom0-disk-backend.service %endif %endif %post libs -p /sbin/ldconfig %postun libs -p /sbin/ldconfig %changelog