diff --git a/Makefile b/Makefile index 0754bec4..98c92b75 100644 --- a/Makefile +++ b/Makefile @@ -7,13 +7,17 @@ export LIBDIR SCRIPTSDIR SYSLIBDIR INCLUDEDIR all: $(MAKE) -C qrexec-lib all +ifeq ($(BACKEND_VMM),xen) $(MAKE) -C qmemman all +endif $(MAKE) -C imgconverter all install: $(MAKE) -C udev install $(MAKE) -C qrexec-lib install +ifeq ($(BACKEND_VMM),xen) $(MAKE) -C qmemman install +endif $(MAKE) -C imgconverter install install-fedora-kernel-support: @@ -29,7 +33,9 @@ install-debian-kernel-support: clean: $(MAKE) -C qrexec-lib clean +ifeq ($(BACKEND_VMM),xen) $(MAKE) -C qmemman clean +endif $(MAKE) -C imgconverter clean rm -rf debian/changelog.* rm -rf pkgs diff --git a/dracut/Makefile b/dracut/Makefile index 30f90cbb..55873103 100644 --- a/dracut/Makefile +++ b/dracut/Makefile @@ -2,4 +2,6 @@ install: $(MAKE) -C simple $(MAKE) -C full-dmroot $(MAKE) -C full-modules +ifeq ($(BACKEND_VMM),xen) $(MAKE) -C xen-balloon-scrub-pages +endif diff --git a/dracut/simple/init.sh b/dracut/simple/init.sh index 1d6f6b1d..2b6c341f 100644 --- a/dracut/simple/init.sh +++ b/dracut/simple/init.sh @@ -1,6 +1,20 @@ #!/bin/sh echo "Qubes initramfs script here:" +if [ -d /sys/devices/system/xen_memory ]; then + HYPERVISOR=xen +else + HYPERVISOR=kvm +fi + +if [ $HYPERVISOR = "xen" ]; then + echo "Running under xen" + DEVPREFIX="xvd" +else + echo "Running under kvm" + DEVPREFIX="vd" +fi + mkdir -p /proc /sys /dev mount -t proc proc /proc mount -t sysfs sysfs /sys @@ -15,31 +29,35 @@ if [ -e /dev/mapper/dmroot ] ; then echo "Qubes: FATAL error: /dev/mapper/dmroot already exists?!" fi -/sbin/modprobe xenblk || /sbin/modprobe xen-blkfront || echo "Qubes: Cannot load Xen Block Frontend..." +if [ $HYPERVISOR = "xen" ]; then + /sbin/modprobe xenblk || /sbin/modprobe xen-blkfront || echo "Qubes: Cannot load Xen Block Frontend..." +elif [ $HYPERVISOR = "kvm" ]; then + /sbin/modprobe virtio_blk || echo "Qubes: Cannot load Virtio Block Driver..." +fi die() { echo "$@" >&2 exit 1 } -echo "Waiting for /dev/xvda* devices..." -while ! [ -e /dev/xvda ]; do sleep 0.1; done +echo "Waiting for /dev/${DEVPREFIX}a* devices..." +while ! [ -e /dev/${DEVPREFIX}a ]; do sleep 0.1; done # prefer partition if exists -if [ -b /dev/xvda1 ]; then +if [ -b /dev/${DEVPREFIX}a1 ]; then if [ -d /dev/disk/by-partlabel ]; then ROOT_DEV=$(readlink "/dev/disk/by-partlabel/Root\\x20filesystem") ROOT_DEV=${ROOT_DEV##*/} else - ROOT_DEV=$(grep -l "PARTNAME=Root filesystem" /sys/block/xvda/xvda*/uevent |\ - grep -o "xvda[0-9]") + ROOT_DEV=$(grep -l "PARTNAME=Root filesystem" /sys/block/${DEVPREFIX}a/${DEVPREFIX}a*/uevent |\ + grep -o "${DEVPREFIX}a[0-9]") fi if [ -z "$ROOT_DEV" ]; then # fallback to third partition - ROOT_DEV=xvda3 + ROOT_DEV=${DEVPREFIX}a3 fi else - ROOT_DEV=xvda + ROOT_DEV=${DEVPREFIX}a fi SWAP_SIZE=$(( 1024 * 1024 * 2 )) # sectors, 1GB @@ -47,40 +65,40 @@ SWAP_SIZE=$(( 1024 * 1024 * 2 )) # sectors, 1GB if [ `cat /sys/class/block/$ROOT_DEV/ro` = 1 ] ; then echo "Qubes: Doing COW setup for AppVM..." - while ! [ -e /dev/xvdc ]; do sleep 0.1; done - VOLATILE_SIZE=$(cat /sys/class/block/xvdc/size) # sectors + while ! [ -e /dev/${DEVPREFIX}c ]; do sleep 0.1; done + VOLATILE_SIZE=$(cat /sys/class/block/${DEVPREFIX}c/size) # sectors ROOT_SIZE=$(cat /sys/class/block/$ROOT_DEV/size) # sectors if [ $VOLATILE_SIZE -lt $SWAP_SIZE ]; then die "volatile.img smaller than 1GB, cannot continue" fi - /sbin/sfdisk -q --unit S /dev/xvdc >/dev/null </dev/null </dev/null </dev/null < /var/lib/qubes/initramfs-updated fi + %endif fi %changelog diff --git a/rpm_spec/qubes-utils.spec.in b/rpm_spec/qubes-utils.spec.in index cc177df4..93da25a0 100644 --- a/rpm_spec/qubes-utils.spec.in +++ b/rpm_spec/qubes-utils.spec.in @@ -1,3 +1,6 @@ + +%define backend_vmm @BACKEND_VMM@ + Name: qubes-utils Version: @VERSION@ Release: 1%{?dist} @@ -16,8 +19,10 @@ Requires: python%{python3_pkgversion}-qubesimgconverter BuildRequires: systemd BuildRequires: python%{python3_pkgversion}-setuptools BuildRequires: python3-rpm-macros +%if "%{?backend_vmm}" == "xen" # for meminfo-writer BuildRequires: xen-devel +%endif BuildRequires: gcc %description @@ -57,6 +62,7 @@ make all BACKEND_VMM=@BACKEND_VMM@ PYTHON=%{__python3} %install make install DESTDIR=%{buildroot} PYTHON=%{__python3} +%if "%{?backend_vmm}" == "xen" %post # dom0 %systemd_post qubes-meminfo-writer-dom0.service @@ -70,6 +76,7 @@ make install DESTDIR=%{buildroot} PYTHON=%{__python3} %postun %systemd_postun_with_restart qubes-meminfo-writer-dom0.service %systemd_postun_with_restart qubes-meminfo-writer.service +%endif %post libs -p /sbin/ldconfig %postun libs -p /sbin/ldconfig @@ -82,9 +89,11 @@ rm -rf $RPM_BUILD_ROOT /usr/lib/udev/rules.d/*-qubes-*.rules /usr/lib/tmpfiles.d/xen-devices-qubes.conf /usr/lib/qubes/udev-* +%if "%{?backend_vmm}" == "xen" %{_sbindir}/meminfo-writer %{_unitdir}/qubes-meminfo-writer.service %{_unitdir}/qubes-meminfo-writer-dom0.service +%endif %files -n python%{python3_pkgversion}-qubesimgconverter %{python3_sitelib}/qubesimgconverter/__init__.py