core-admin/rpm_spec/core-dom0.spec.in
Marek Marczykowski-Górecki 657b6e4806
Avoid moving old, user-modified qrexec policy to .rpmsave files
Keep it at original files, to still load it using compat rules.
This way the update should not break user's policies.

Note the unchanged policy files are still going to be removed - meaning
those calls will use the new policy.

QubesOS/qubes-issues#4370
2020-05-24 02:22:37 +02:00

548 lines
16 KiB
RPMSpec

#
# This is the SPEC file for creating binary RPMs for the Dom0.
#
#
# The Qubes OS Project, http://www.qubes-os.org
#
# Copyright (C) 2010 Joanna Rutkowska <joanna@invisiblethingslab.com>
# Copyright (C) 2010 Rafal Wojtczuk <rafal@invisiblethingslab.com>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, see <https://www.gnu.org/licenses/>.
#
#
%define _dracutmoddir /usr/lib/dracut/modules.d
%define backend_vmm @BACKEND_VMM@
Name: qubes-core-dom0
Version: @VERSION@
Release: 1%{dist}
Summary: The Qubes core files (Dom0-side)
Group: Qubes
Vendor: Invisible Things Lab
License: GPL
URL: http://www.qubes-os.org
# because we have "#!/usr/bin/env python" shebangs, RPM puts
# "Requires: $(which # python)" dependency, which, depending on $PATH order,
# may point to /usr/bin/python or /bin/python (because Fedora has this stupid
# /bin -> usr/bin symlink). python*.rpm provides only /usr/bin/python.
AutoReq: no
# FIXME: Enable this and disable debug_package
#BuildArch: noarch
BuildRequires: ImageMagick
BuildRequires: systemd-units
BuildRequires: systemd
BuildRequires: gcc
BuildRequires: python3-devel
# for building documentation
BuildRequires: python3-sphinx
BuildRequires: python3-lxml
BuildRequires: libvirt-python3
BuildRequires: python3-dbus
BuildRequires: python3-PyYAML
BuildRequires: python3-xen
Requires(post): systemd-units
Requires(preun): systemd-units
Requires(postun): systemd-units
Requires: python3
#Requires: python3-aiofiles
Requires: python3-docutils
Requires: python3-jinja2
Requires: python3-lxml
Requires: python3-qubesdb
Requires: python3-setuptools
Requires: python3-PyYAML
Requires: python3-xen
Requires: libvirt-python3
Requires: pciutils
Requires: qubes-core-dom0-linux >= 4.0.11
Requires: qubes-core-qrexec-dom0
Requires: qubes-db-dom0
# TODO: R: qubes-gui-dom0 >= 2.1.11
Conflicts: qubes-gui-dom0 < 1.1.13
%if x%{?backend_vmm} == xxen
Requires: xen-runtime
Requires: xen-hvm
Requires: xen-hvm-stubdom-linux >= 1.0.13
Requires: libvirt-daemon-xen >= 3.3.0-7
%endif
Requires: cronie
Requires: scrypt
# for qubes-hcl-report
Requires: dmidecode
# Required for qvm-console* tools
Requires: socat
%{?systemd_requires}
Obsoletes: qubes-core-dom0-doc <= 4.0
Provides: qubes-core-dom0-doc
# Prevent preupgrade from installation (it pretend to provide distribution upgrade)
Obsoletes: preupgrade < 2.0
Provides: preupgrade = 2.0
Source0: %{name}-%{version}.tar.gz
%description
The Qubes core files for installation on Dom0.
%prep
%setup -q
%build
make all
make -C doc PYTHON=%{__python3} SPHINXBUILD=sphinx-build-%{python3_version} man
%install
make install \
DESTDIR=$RPM_BUILD_ROOT \
BACKEND_VMM=%{backend_vmm} \
UNITDIR=%{_unitdir} \
PYTHON_SITEPATH=%{python3_sitelib} \
SYSCONFDIR=%{_sysconfdir}
make -C doc DESTDIR=$RPM_BUILD_ROOT \
PYTHON=%{__python3} SPHINXBUILD=sphinx-build-%{python3_version} \
install
mkdir -p $RPM_BUILD_ROOT/etc/qubes/backup
%post
%systemd_post qubes-core.service
%systemd_post qubes-qmemman.service
%systemd_post qubesd.service
sed '/^autoballoon=/d;/^lockfile=/d' -i /etc/xen/xl.conf
echo 'autoballoon=0' >> /etc/xen/xl.conf
echo 'lockfile="/var/run/qubes/xl-lock"' >> /etc/xen/xl.conf
if [ -e /etc/sysconfig/prelink ]; then
sed 's/^PRELINKING\s*=.*/PRELINKING=no/' -i /etc/sysconfig/prelink
fi
# Conflicts with libxl stack, so disable it
systemctl --no-reload disable xend.service >/dev/null 2>&1
systemctl --no-reload disable xendomains.service >/dev/null 2>&1
systemctl daemon-reload >/dev/null 2>&1 || :
if ! [ -e /var/lib/qubes/qubes.xml ]; then
# echo "Initializing Qubes DB..."
umask 007; sg qubes -c 'qubes-create --offline-mode'
fi
%clean
rm -rf $RPM_BUILD_ROOT
rm -f %{name}-%{version}
%pre
if ! grep -q ^qubes: /etc/group ; then
groupadd qubes
fi
%triggerin -- xen-runtime
/usr/lib/qubes/fix-dir-perms.sh
%preun
%systemd_preun qubes-core.service
%systemd_preun qubes-qmemman.service
%systemd_preun qubesd.service
if [ "$1" = 0 ] ; then
# no more packages left
service qubes_netvm stop
service qubes_core stop
fi
%postun
%systemd_postun qubes-core.service
%systemd_postun_with_restart qubes-qmemman.service
%systemd_postun_with_restart qubesd.service
if [ "$1" = 0 ] ; then
# no more packages left
chgrp root /etc/xen
chmod 700 /etc/xen
groupdel qubes
fi
%posttrans
# Preserve user-modified legacy policy at original location, revert rpm adding
# .rpmsave suffix. This needs to be done in %%posttrans, to be run after
# uninstalling the old package.
# List policy files explicitly, to not touch files from other packages.
SERVICES="
admin.Events
admin.backup.Cancel
admin.backup.Execute
admin.backup.Info
admin.deviceclass.List
admin.label.Create
admin.label.Get
admin.label.Index
admin.label.List
admin.label.Remove
admin.pool.Add
admin.pool.Info
admin.pool.List
admin.pool.ListDrivers
admin.pool.Remove
admin.pool.Set.revisions_to_keep
admin.pool.UsageDetails
admin.pool.volume.List
admin.property.Get
admin.property.GetAll
admin.property.GetDefault
admin.property.Help
admin.property.List
admin.property.Reset
admin.property.Set
admin.vm.Console
admin.vm.Create.AppVM
admin.vm.Create.DispVM
admin.vm.Create.StandaloneVM
admin.vm.Create.TemplateVM
admin.vm.CreateDisposable
admin.vm.CreateInPool.AppVM
admin.vm.CreateInPool.DispVM
admin.vm.CreateInPool.StandaloneVM
admin.vm.CreateInPool.TemplateVM
admin.vm.CurrentState
admin.vm.Kill
admin.vm.List
admin.vm.Pause
admin.vm.Remove
admin.vm.Shutdown
admin.vm.Start
admin.vm.Stats
admin.vm.Unpause
admin.vm.device.block.Attach
admin.vm.device.block.Available
admin.vm.device.block.Detach
admin.vm.device.block.List
admin.vm.device.block.Set.persistent
admin.vm.device.pci.Attach
admin.vm.device.pci.Available
admin.vm.device.pci.Detach
admin.vm.device.pci.List
admin.vm.device.pci.Set.persistent
admin.vm.feature.CheckWithAdminVM
admin.vm.feature.CheckWithNetvm
admin.vm.feature.CheckWithTemplate
admin.vm.feature.CheckWithTemplateAndAdminVM
admin.vm.feature.Get
admin.vm.feature.List
admin.vm.feature.Remove
admin.vm.feature.Set
admin.vm.firewall.Get
admin.vm.firewall.Reload
admin.vm.firewall.Set
admin.vm.property.Get
admin.vm.property.GetAll
admin.vm.property.GetDefault
admin.vm.property.Help
admin.vm.property.List
admin.vm.property.Reset
admin.vm.property.Set
admin.vm.tag.Get
admin.vm.tag.List
admin.vm.tag.Remove
admin.vm.tag.Set
admin.vm.volume.CloneFrom
admin.vm.volume.CloneTo
admin.vm.volume.Import
admin.vm.volume.ImportWithSize
admin.vm.volume.Info
admin.vm.volume.List
admin.vm.volume.ListSnapshots
admin.vm.volume.Resize
admin.vm.volume.Revert
admin.vm.volume.Set.revisions_to_keep
admin.vm.volume.Set.rw
admin.vmclass.List
include/admin-global-ro
include/admin-global-rwx
include/admin-local-ro
include/admin-local-rwx
policy.RegisterArgument
qubes.ConnectTCP
qubes.FeaturesRequest
qubes.Filecopy
qubes.GetDate
qubes.GetImageRGBA
qubes.GetRandomizedTime
qubes.NotifyTools
qubes.NotifyUpdates
qubes.OpenInVM
qubes.OpenURL
qubes.StartApp
qubes.UpdatesProxy
qubes.VMExec
qubes.VMExecGUI
qubes.VMRootShell
qubes.VMShell
"
for service in $SERVICES; do
if [ -f "/etc/qubes-rpc/policy/$service.rpmsave" ] && \
! [ -e "/etc/qubes-rpc/policy/$service" ]; then
mv -n "/etc/qubes-rpc/policy/$service.rpmsave" \
"/etc/qubes-rpc/policy/$service"
fi
done
# Take extra care about policy files in include/ - if any of them is gone
# (because unmodified) but user still reference them anywhere, the policy
# loading will be broken. Check for this case, and avoid the issue by creating
# a symlink to the new policy.
INCLUDES="admin-global-ro admin-global-rwx admin-local-ro admin-local-rwx"
for include in $INCLUDES; do
if grep -qr "include/$include" /etc/qubes-rpc && \
! [ -e "/etc/qubes-rpc/policy/include/$include" ]; then
ln -s "../../../qubes/policy.d/include/$include" \
"/etc/qubes-rpc/policy/include/$include"
fi
done
%files
%defattr(-,root,root,-)
%config(noreplace) %attr(0664,root,qubes) %{_sysconfdir}/qubes/qmemman.conf
%config(noreplace) /etc/logrotate.d/qubes
%attr(770,root,qubes) %dir /etc/qubes/backup
/usr/bin/qvm-*
/usr/bin/qubes-*
/usr/bin/qmemmand
/usr/bin/qubesd*
%{_mandir}/man1/qubes*.1*
%{_mandir}/man1/qvm-*.1*
%dir %{python3_sitelib}/qubes-*.egg-info
%{python3_sitelib}/qubes-*.egg-info/*
%dir %{python3_sitelib}/qubes
%dir %{python3_sitelib}/qubes/__pycache__
%{python3_sitelib}/qubes/__pycache__/*
%{python3_sitelib}/qubes/__init__.py
%{python3_sitelib}/qubes/app.py
%{python3_sitelib}/qubes/backup.py
%{python3_sitelib}/qubes/config.py
%{python3_sitelib}/qubes/devices.py
%{python3_sitelib}/qubes/dochelpers.py
%{python3_sitelib}/qubes/events.py
%{python3_sitelib}/qubes/exc.py
%{python3_sitelib}/qubes/features.py
%{python3_sitelib}/qubes/firewall.py
%{python3_sitelib}/qubes/log.py
%{python3_sitelib}/qubes/rngdoc.py
%{python3_sitelib}/qubes/tarwriter.py
%{python3_sitelib}/qubes/utils.py
%dir %{python3_sitelib}/qubes/api
%dir %{python3_sitelib}/qubes/api/__pycache__
%{python3_sitelib}/qubes/api/__pycache__/*
%{python3_sitelib}/qubes/api/__init__.py
%{python3_sitelib}/qubes/api/admin.py
%{python3_sitelib}/qubes/api/internal.py
%{python3_sitelib}/qubes/api/misc.py
%dir %{python3_sitelib}/qubes/vm
%dir %{python3_sitelib}/qubes/vm/__pycache__
%{python3_sitelib}/qubes/vm/__pycache__/*
%{python3_sitelib}/qubes/vm/__init__.py
%{python3_sitelib}/qubes/vm/adminvm.py
%{python3_sitelib}/qubes/vm/appvm.py
%{python3_sitelib}/qubes/vm/dispvm.py
%{python3_sitelib}/qubes/vm/qubesvm.py
%{python3_sitelib}/qubes/vm/standalonevm.py
%{python3_sitelib}/qubes/vm/templatevm.py
%dir %{python3_sitelib}/qubes/vm/mix
%dir %{python3_sitelib}/qubes/vm/mix/__pycache__
%{python3_sitelib}/qubes/vm/mix/__pycache__/*
%{python3_sitelib}/qubes/vm/mix/__init__.py
%{python3_sitelib}/qubes/vm/mix/net.py
%dir %{python3_sitelib}/qubes/storage
%dir %{python3_sitelib}/qubes/storage/__pycache__
%{python3_sitelib}/qubes/storage/__pycache__/*
%{python3_sitelib}/qubes/storage/__init__.py
%{python3_sitelib}/qubes/storage/file.py
%{python3_sitelib}/qubes/storage/reflink.py
%{python3_sitelib}/qubes/storage/kernels.py
%{python3_sitelib}/qubes/storage/lvm.py
%dir %{python3_sitelib}/qubes/tools
%dir %{python3_sitelib}/qubes/tools/__pycache__
%{python3_sitelib}/qubes/tools/__pycache__/*
%{python3_sitelib}/qubes/tools/__init__.py
%{python3_sitelib}/qubes/tools/qmemmand.py
%{python3_sitelib}/qubes/tools/qubes_create.py
%{python3_sitelib}/qubes/tools/qubesd.py
%{python3_sitelib}/qubes/tools/qubesd_query.py
%dir %{python3_sitelib}/qubes/ext
%dir %{python3_sitelib}/qubes/ext/__pycache__
%{python3_sitelib}/qubes/ext/__pycache__/*
%{python3_sitelib}/qubes/ext/__init__.py
%{python3_sitelib}/qubes/ext/admin.py
%{python3_sitelib}/qubes/ext/block.py
%{python3_sitelib}/qubes/ext/core_features.py
%{python3_sitelib}/qubes/ext/gui.py
%{python3_sitelib}/qubes/ext/audio.py
%{python3_sitelib}/qubes/ext/pci.py
%{python3_sitelib}/qubes/ext/r3compatibility.py
%{python3_sitelib}/qubes/ext/services.py
%{python3_sitelib}/qubes/ext/windows.py
%dir %{python3_sitelib}/qubes/tests
%dir %{python3_sitelib}/qubes/tests/__pycache__
%{python3_sitelib}/qubes/tests/__pycache__/*
%{python3_sitelib}/qubes/tests/__init__.py
%{python3_sitelib}/qubes/tests/run.py
%{python3_sitelib}/qubes/tests/extra.py
%{python3_sitelib}/qubes/tests/api.py
%{python3_sitelib}/qubes/tests/api_admin.py
%{python3_sitelib}/qubes/tests/api_internal.py
%{python3_sitelib}/qubes/tests/api_misc.py
%{python3_sitelib}/qubes/tests/app.py
%{python3_sitelib}/qubes/tests/devices.py
%{python3_sitelib}/qubes/tests/devices_block.py
%{python3_sitelib}/qubes/tests/events.py
%{python3_sitelib}/qubes/tests/ext.py
%{python3_sitelib}/qubes/tests/firewall.py
%{python3_sitelib}/qubes/tests/init.py
%{python3_sitelib}/qubes/tests/rpc_import.py
%{python3_sitelib}/qubes/tests/storage.py
%{python3_sitelib}/qubes/tests/storage_file.py
%{python3_sitelib}/qubes/tests/storage_reflink.py
%{python3_sitelib}/qubes/tests/storage_kernels.py
%{python3_sitelib}/qubes/tests/storage_lvm.py
%{python3_sitelib}/qubes/tests/tarwriter.py
%dir %{python3_sitelib}/qubes/tests/vm
%dir %{python3_sitelib}/qubes/tests/vm/__pycache__
%{python3_sitelib}/qubes/tests/vm/__pycache__/*
%{python3_sitelib}/qubes/tests/vm/__init__.py
%{python3_sitelib}/qubes/tests/vm/init.py
%{python3_sitelib}/qubes/tests/vm/adminvm.py
%{python3_sitelib}/qubes/tests/vm/appvm.py
%{python3_sitelib}/qubes/tests/vm/dispvm.py
%{python3_sitelib}/qubes/tests/vm/qubesvm.py
%dir %{python3_sitelib}/qubes/tests/vm/mix
%dir %{python3_sitelib}/qubes/tests/vm/mix/__pycache__
%{python3_sitelib}/qubes/tests/vm/mix/__pycache__/*
%{python3_sitelib}/qubes/tests/vm/mix/__init__.py
%{python3_sitelib}/qubes/tests/vm/mix/net.py
%dir %{python3_sitelib}/qubes/tests/tools
%dir %{python3_sitelib}/qubes/tests/tools/__pycache__
%{python3_sitelib}/qubes/tests/tools/__pycache__/*
%{python3_sitelib}/qubes/tests/tools/__init__.py
%dir %{python3_sitelib}/qubes/tests/integ
%dir %{python3_sitelib}/qubes/tests/integ/__pycache__
%{python3_sitelib}/qubes/tests/integ/__pycache__/*
%{python3_sitelib}/qubes/tests/integ/__init__.py
%{python3_sitelib}/qubes/tests/integ/backup.py
%{python3_sitelib}/qubes/tests/integ/backupcompatibility.py
%{python3_sitelib}/qubes/tests/integ/basic.py
%{python3_sitelib}/qubes/tests/integ/devices_block.py
%{python3_sitelib}/qubes/tests/integ/devices_pci.py
%{python3_sitelib}/qubes/tests/integ/dispvm.py
%{python3_sitelib}/qubes/tests/integ/dom0_update.py
%{python3_sitelib}/qubes/tests/integ/mime.py
%{python3_sitelib}/qubes/tests/integ/network.py
%{python3_sitelib}/qubes/tests/integ/grub.py
%{python3_sitelib}/qubes/tests/integ/salt.py
%{python3_sitelib}/qubes/tests/integ/storage.py
%{python3_sitelib}/qubes/tests/integ/vm_qrexec_gui.py
%dir %{python3_sitelib}/qubes/tests/integ/tools
%dir %{python3_sitelib}/qubes/tests/integ/tools/__pycache__
%{python3_sitelib}/qubes/tests/integ/tools/__pycache__/*
%{python3_sitelib}/qubes/tests/integ/tools/__init__.py
%{python3_sitelib}/qubes/tests/integ/tools/qubes_create.py
%dir %{python3_sitelib}/qubes/qmemman
%dir %{python3_sitelib}/qubes/qmemman/__pycache__
%{python3_sitelib}/qubes/qmemman/__pycache__/*
%{python3_sitelib}/qubes/qmemman/__init__.py
%{python3_sitelib}/qubes/qmemman/algo.py
%{python3_sitelib}/qubes/qmemman/client.py
/usr/lib/qubes/cleanup-dispvms
/usr/lib/qubes/fix-dir-perms.sh
/usr/lib/qubes/startup-misc.sh
/usr/libexec/qubes/qubesd-query-fast
%{_unitdir}/lvm2-pvscan@.service.d/30_qubes.conf
%{_unitdir}/qubes-core.service
%{_unitdir}/qubes-qmemman.service
%{_unitdir}/qubes-vm@.service
%{_unitdir}/qubesd.service
%attr(2770,root,qubes) %dir /var/lib/qubes
%attr(2770,root,qubes) %dir /var/lib/qubes/vm-templates
%attr(2770,root,qubes) %dir /var/lib/qubes/appvms
%attr(2770,root,qubes) %dir /var/lib/qubes/servicevms
%attr(2770,root,qubes) %dir /var/lib/qubes/backup
%attr(2770,root,qubes) %dir /var/lib/qubes/dvmdata
%attr(2770,root,qubes) %dir /var/lib/qubes/vm-kernels
/usr/share/qubes/templates/libvirt/xen.xml
/usr/share/qubes/templates/libvirt/devices/block.xml
/usr/share/qubes/templates/libvirt/devices/pci.xml
/usr/share/qubes/templates/libvirt/devices/net.xml
/usr/lib/tmpfiles.d/qubes.conf
/etc/xen/scripts/block-snapshot
/etc/xen/scripts/block-origin
/etc/xen/scripts/vif-route-qubes
%attr(0664,root,qubes) %config(noreplace) /etc/qubes/policy.d/90-admin-default.policy
%attr(0664,root,qubes) %config(noreplace) /etc/qubes/policy.d/90-default.policy
%attr(0664,root,qubes) %config(noreplace) /etc/qubes/policy.d/include/admin-global-ro
%attr(0664,root,qubes) %config(noreplace) /etc/qubes/policy.d/include/admin-global-rwx
%attr(0664,root,qubes) %config(noreplace) /etc/qubes/policy.d/include/admin-local-ro
%attr(0664,root,qubes) %config(noreplace) /etc/qubes/policy.d/include/admin-local-rwx
/etc/qubes-rpc/admin.*
/etc/qubes-rpc/qubes.FeaturesRequest
/etc/qubes-rpc/qubes.GetDate
/etc/qubes-rpc/qubes.GetRandomizedTime
/etc/qubes-rpc/qubes.NotifyTools
/etc/qubes-rpc/qubes.NotifyUpdates
/etc/qubes-rpc/qubes.ConnectTCP
%attr(2770,root,qubes) %dir /var/log/qubes
%attr(0770,root,qubes) %dir /var/run/qubes
/usr/share/doc/qubes/relaxng/*.rng
%changelog
@CHANGELOG@