# # spec file for package transactional-update # # Copyright (c) 2024 SUSE LLC # Copyright (c) 2021 Neal Gompa # # 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/ # %global somajor 4 %global libprefix libtukit %global libname %{libprefix}%{somajor} %global devname %{libprefix}-devel # Compatibility macros %{!?_distconfdir: %global _distconfdir %{_prefix}%{_sysconfdir}} Name: transactional-update Version: 4.8.1 Release: 0 Summary: Transactional Updates with btrfs and snapshots License: GPL-2.0-or-later AND LGPL-2.1-or-later Group: System/Base URL: https://github.com/openSUSE/transactional-update Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz Source1: transactional-update.check BuildRequires: autoconf BuildRequires: autoconf-archive BuildRequires: automake BuildRequires: docbook-xsl-stylesheets BuildRequires: fdupes %if %{?suse_version} <= 1500 BuildRequires: gcc10-c++ %else BuildRequires: gcc-c++ %endif BuildRequires: libtool BuildRequires: libzypp BuildRequires: make BuildRequires: suse-module-tools BuildRequires: systemd-rpm-macros BuildRequires: pkgconfig(dbus-1) BuildRequires: pkgconfig(dracut) BuildRequires: pkgconfig(libeconf) BuildRequires: pkgconfig(libselinux) BuildRequires: pkgconfig(libsystemd) BuildRequires: pkgconfig(mount) BuildRequires: pkgconfig(rpm) BuildRequires: pkgconfig(systemd) BuildRequires: pkgconfig(udev) # Cannot use python3dist() names yet... BuildRequires: libxml2-tools BuildRequires: python3-lxml BuildRequires: w3m BuildRequires: xsltproc # XXX libsolv never sees the rpmlib provides fulfilled Requires: (compat-usrmerge-tools or rpmlib(X-CheckUnifiedSystemdir)) Requires: /usr/bin/bc Requires: dracut-transactional-update = %{version}-%{release} Requires: logrotate Requires: lsof # psmisc is needed because of fuser Requires: psmisc Requires: tukit = %{version}-%{release} Requires: zypper # Parameter --drop-if-no-change requires it Recommends: inotify-tools Recommends: rebootmgr Suggests: tukitd = %{version}-%{release} Conflicts: health-checker < 1.8 %description transactional-update is a tool to update a system in an atomic way with zypper, btrfs and snapshots. %package -n tukit Summary: Tool for doing transactional updates using Btrfs snapshots License: GPL-2.0-or-later Group: System/Base Requires: %{libname} = %{version}-%{release} Conflicts: transactional-update < 3.0.0 %description -n tukit tukit is a simple tool to make changes to a system in an atomic way with btrfs and snapshots. %package -n dracut-%{name} Summary: Dracut module for supporting transactional updates License: GPL-2.0-or-later Group: System/Boot Supplements: (tukit and kernel) Requires: tukit = %{version}-%{release} BuildArch: noarch Conflicts: transactional-update < 3.0.0 %description -n dracut-%{name} This package contains the dracut modules for handling early boot aspects for transactional updates. %package -n %{libname} Summary: Library for doing transactional updates using Btrfs snapshots License: LGPL-2.1-or-later Group: System/Libraries Requires: btrfsprogs Requires: rsync Requires: snapper >= 0.8.10 %description -n %{libname} This package contains the libraries required for programs to do transactional updates using btrfs snapshots. %package -n tukitd Summary: D-Bus controlling service for transactional updates License: GPL-2.0-or-later Group: System/Libraries Requires: %{libname} = %{version}-%{release} Requires: dbus-1 %description -n tukitd This package provedes the D-Bus service to access %{libname}'s functionality to manage transactional systems. %package -n %{devname} Summary: Development files for tukit library License: LGPL-2.1-or-later Group: Development/Libraries/C and C++ Provides: tukit-devel = %{version}-%{release} Provides: tukit-devel = %{version}-%{release} Requires: %{libname} = %{version}-%{release} %description -n %{devname} This package contains the files required to develop programs to do transactional updates using btrfs snapshots. %package zypp-config Summary: Zypper rule to prevent uninstallation of transactional-update License: GPL-2.0-or-later AND LGPL-2.1-or-later Group: System/Base BuildArch: noarch Requires: transactional-update = %{version}-%{release} %description zypp-config Adds a zypper rule to prevent accidental uninstallation of transactional-update. %prep %autosetup -p1 %build %if %{?suse_version} <= 1500 export CXX=g++-10 %endif autoreconf -fiv %configure --with-doc --docdir=%{_docdir}/%{name} --disable-static %make_build # Use "up" for non-rolling releases %if (%{defined sle_version} && %{undefined is_susecasp}) || 0%{?suse_version} == 1600 sed -i 's/^UPDATE_METHOD=.*/UPDATE_METHOD=up/' etc/transactional-update.conf %endif # Enable soft-reboot by default sed -i 's/^REBOOT_ALLOW_SOFT_REBOOT=.*/REBOOT_ALLOW_SOFT_REBOOT=false/' etc/tukit.conf %install %make_install %fdupes %{buildroot}%{_mandir} # Install zypp config files mkdir -p %{buildroot}%{_sysconfdir}/zypp/systemCheck.d/ install -m 644 %{SOURCE1} %{buildroot}%{_sysconfdir}/zypp/systemCheck.d/ # Delete libtool cruft rm -rf %{buildroot}%{_libdir}/*.la # Delete unwanted HTML documentation rm -rf %{buildroot}%{_docdir}/%{name}/*.html # move logrotate files from /etc/logrotate.d to /usr/etc/logrotate.d %if 0%{?suse_version} > 1500 mkdir -p %{buildroot}%{_distconfdir}/logrotate.d mv %{buildroot}/%{_sysconfdir}/logrotate.d/transactional-update %{buildroot}%{_distconfdir}/logrotate.d %endif %pre %systemd_pre %{name}.service %{name}.timer %systemd_pre %{name}-cleanup.service %{name}-cleanup.timer %if 0%{?suse_version} > 1500 # Prepare for migration of logrotate configuration to /usr/etc; save any old .rpmsave for i in logrotate.d/transactional-update ; do test -f %{_sysconfdir}/${i}.rpmsave && mv -v %{_sysconfdir}/${i}.rpmsave %{_sysconfdir}/${i}.rpmsave.old ||: done %endif %post %systemd_post %{name}.service %{name}.timer %systemd_post %{name}-cleanup.service %{name}-cleanup.timer %if 0%{?suse_version} > 1500 %posttrans # Migration of logrotate configuration to /usr/etc, restore just created .rpmsave for i in logrotate.d/transactional-update ; do test -f %{_sysconfdir}/${i}.rpmsave && mv -v %{_sysconfdir}/${i}.rpmsave %{_sysconfdir}/${i} ||: done %endif %preun %systemd_preun %{name}.service %{name}.timer %systemd_preun %{name}-cleanup.service %{name}-cleanup.timer %postun %systemd_postun_with_restart %{name}.service %{name}.timer %systemd_postun_with_restart %{name}-cleanup.service %{name}-cleanup.timer %pre -n tukit %systemd_pre create-dirs-from-rpmdb.service %systemd_pre prepare-nextroot-for-softreboot.service %post -n tukit %systemd_post create-dirs-from-rpmdb.service %systemd_post prepare-nextroot-for-softreboot.service %preun -n tukit %systemd_preun create-dirs-from-rpmdb.service %systemd_preun prepare-nextroot-for-softreboot.service %postun -n tukit %systemd_postun_with_restart create-dirs-from-rpmdb.service %systemd_postun_with_restart prepare-nextroot-for-softreboot.service %pre -n tukitd %systemd_pre tukitd.service %post -n tukitd %systemd_post tukitd.service %preun -n tukitd %systemd_preun tukitd.service %postun -n tukitd %systemd_postun_with_restart tukitd.service %post -n dracut-%{name} %regenerate_initrd_post %posttrans -n dracut-%{name} %regenerate_initrd_posttrans %postun -n dracut-%{name} %regenerate_initrd_post %post -n %{libname} -p /sbin/ldconfig %postun -n %{libname} -p /sbin/ldconfig %files %license COPYING %doc NEWS %doc %{_docdir}/%{name}/transactional-update.txt %if 0%{?suse_version} > 1500 %{_distconfdir}/logrotate.d/transactional-update %else %config(noreplace) %{_sysconfdir}/logrotate.d/transactional-update %endif %{_unitdir}/transactional-update.service %{_unitdir}/transactional-update.timer %{_unitdir}/transactional-update-cleanup.service %{_unitdir}/transactional-update-cleanup.timer %{_sbindir}/transactional-update %if %{?suse_version} <= 1500 %dir %{_distconfdir} %endif %{_distconfdir}/transactional-update.conf %{_mandir}/man5/transactional-update.conf.5* %{_mandir}/man8/transactional-update.8* %{_mandir}/man8/transactional-update.timer.8* %{_mandir}/man8/transactional-update.service.8* %ghost %attr(0644,root,root) %{_localstatedir}/log/transactional-update.log %files -n tukit %license COPYING gpl-2.0.txt %doc README.md NEWS %{_sbindir}/tukit %{_sbindir}/create_dirs_from_rpmdb %{_unitdir}/create-dirs-from-rpmdb.service %{_libexecdir}/prepare-nextroot-for-softreboot %{_unitdir}/prepare-nextroot-for-softreboot.service %{_distconfdir}/tukit.conf %{_mandir}/man5/tukit.conf.5.gz %files -n dracut-%{name} %license COPYING gpl-2.0.txt %doc README.md NEWS %dir %{_prefix}/lib/dracut %dir %{_prefix}/lib/dracut/modules.d %{_prefix}/lib/dracut/modules.d/50transactional-update/ %files -n %{libname} %license COPYING lgpl-2.1.txt %{_libdir}/libtukit.so.%{somajor}{,.*} %files -n tukitd %license COPYING gpl-2.0.txt %{_sbindir}/tukitd %{_unitdir}/tukitd.service %{_prefix}/share/dbus-1/system-services/org.opensuse.tukit.service %{_prefix}/share/dbus-1/system.d/org.opensuse.tukit.conf %{_prefix}/share/dbus-1/interfaces/org.opensuse.tukit.Snapshot.xml %{_prefix}/share/dbus-1/interfaces/org.opensuse.tukit.Transaction.xml %files -n %{devname} %license COPYING lgpl-2.1.txt %{_includedir}/tukit/ %{_libdir}/libtukit.so %{_libdir}/pkgconfig/tukit.pc %files zypp-config %config(noreplace) %{_sysconfdir}/zypp/systemCheck.d/transactional-update.check %check %changelog