Files
borgmatic/borgmatic.spec
Martin Pluskal 7ddc702433 - Update to 1.9.5
* #418: Backup and restore databases that have the same name but with different ports, hostnames,
    or hooks.
  * #947: To avoid a hang in the database hooks, error and exit when the borgmatic runtime
    directory overlaps with the configured excludes.
  * #954: Fix a findmnt command error in the Btrfs hook by switching to parsing JSON output.
  * #956: Fix the printing of a color reset code even when color is disabled.
  * #958: Drop colorama as a library dependency.
  * When the ZFS, Btrfs, or LVM hooks aren't configured, don't try to cleanup snapshots for them.
  * #80 (beta): Add an LVM hook for snapshotting and backing up LVM logical volumes. See the
    documentation for more information:
    https://torsion.org/borgmatic/docs/how-to/snapshot-your-filesystems/
  * #251 (beta): Add a Btrfs hook for snapshotting and backing up Btrfs subvolumes. See the
    documentation for more information:
    https://torsion.org/borgmatic/docs/how-to/snapshot-your-filesystems/
  * #926: Fix a library error when running within a PyInstaller bundle.
  * #950: Fix a snapshot unmount error in the ZFS hook when using nested datasets.
  * Update the ZFS hook to discover and snapshot ZFS datasets even if they are parent/grandparent
    directories of your source directories.
  * Reorganize data source and monitoring hooks to make developing new hooks easier.
  * #261 (beta): Add a ZFS hook for snapshotting and backing up ZFS datasets. See the documentation
    for more information: https://torsion.org/borgmatic/docs/how-to/snapshot-your-filesystems/
  * Remove any temporary copies of the manifest file created in support of the "bootstrap" action.
  * Deprecate the "store_config_files" option at the global scope and move it under the "bootstrap"
    hook. See the documentation for more information:
    https://torsion.org/borgmatic/docs/how-to/extract-a-backup/#extract-the-configuration-files-used-to-create-an-archive
  * Require the runtime directory to be an absolute path.
  * Add a "--deleted" flag to the "repo-list" action for listing deleted archives that haven't
    yet been compacted (Borg 2 only).
  * Promote the "spot" check from a beta feature to stable.
  * #441: Apply the "umask" option to all relevant actions, not just some of them.
  * #722: Remove the restriction that the "extract" and "mount" actions must match a single
    repository. Now they work more like other actions, where each repository is applied in turn.
  * #932: Fix the missing build backend setting in pyproject.toml to allow Fedora builds.
  * #934: Update the logic that probes for the borgmatic streaming database dump, bootstrap
    metadata, and check state directories to support more platforms and use cases. See the
    documentation for more information:
    https://torsion.org/borgmatic/docs/how-to/backup-your-databases/#runtime-directory
  * #934: Add the "RuntimeDirectory" and "StateDirectory" options to the sample systemd service
    file to support the new runtime and state directory logic.
  * #939: Fix borgmatic ignoring the "BORG_RELOCATED_REPO_ACCESS_IS_OK" and
    "BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK" environment variables.
  * Add a Pushover monitoring hook. See the documentation for more information:
    https://torsion.org/borgmatic/docs/how-to/monitor-your-backups/#pushover-hook
  * #928: Fix the user runtime directory location on macOS (and possibly Cygwin).
  * #930: Fix an error with the sample systemd service when no credentials are configured.
  * #931: Fix an error when implicitly upgrading the check state directory from ~/.borgmatic to
    ~/.local/state/borgmatic across filesystems.
  * #609: Fix the glob expansion of "source_directories" values to respect the "working_directory"
    option.
  * #609: BREAKING: Apply the "working_directory" option to all actions, not just "create". This
    includes repository paths, destination paths, mount points, etc.
  * #562: Deprecate the "borgmatic_source_directory" option in favor of "user_runtime_directory"
    and "user_state_directory".
  * #562: BREAKING: Move the default borgmatic streaming database dump and bootstrap metadata
    directory from ~/.borgmatic to /run/user/$UID/borgmatic, which is more XDG-compliant. You can
    override this location with the new "user_runtime_directory" option. Existing archives with
    database dumps at the old location are still restorable. 
  * #562, #638: Move the default check state directory from ~/.borgmatic to 
    ~/.local/state/borgmatic. This is more XDG-compliant and also prevents these state files from
    getting backed up (unless you explicitly include them). You can override this location with the
    new "user_state_directory" option. After the first time you run the "check" action with borgmatic
    1.9.0, you can safely delete the ~/.borgmatic directory.
  * #838: BREAKING: With Borg 1.4+, store database dumps and bootstrap metadata in a "/borgmatic"
    directory within a backup archive, so the path doesn't depend on the current user. This means
    that you can now backup as one user and restore or bootstrap as another user, among other use
    cases.
  * #902: Add loading of encrypted systemd credentials. See the documentation for more information:
    https://torsion.org/borgmatic/docs/how-to/provide-your-passwords/#using-systemd-service-credentials
  * #911: Add a "key change-passphrase" action to change the passphrase protecting a repository key.
  * #914: Fix a confusing apparent hang when when the repository location changes, and instead
    show a helpful error message.
  * #915: BREAKING: Rename repository actions like "rcreate" to more explicit names like
    "repo-create" for compatibility with recent changes in Borg 2.0.0b10.
  * #918: BREAKING: When databases are configured, don't auto-enable the "one_file_system" option,
    as existing auto-excludes of special files should be sufficient to prevent Borg from hanging on
    them. But if this change causes problems for you, you can always enable "one_file_system"
    explicitly.
  * #919: Clarify the command-line help for the "--config" flag.
  * #919: Document a policy for versioning and breaking changes:
    https://torsion.org/borgmatic/docs/how-to/upgrade/#versioning-and-breaking-changes
  * #921: BREAKING: Change soft failure command hooks to skip only the current repository rather than
    all repositories in the configuration file.
  * #922: Replace setup.py (Python packaging metadata) with the more modern pyproject.toml.
  * When using Borg 2, default the "archive_name_format" option to just "{hostname}", as Borg 2 does
    not require unique archive names; identical archive names form a common "series" that can be
    targeted together. See the Borg 2 documentation for more information:
    https://borgbackup.readthedocs.io/en/2.0.0b13/changes.html#borg-1-2-x-1-4-x-to-borg-2-0
  * Add support for Borg 2's "rclone:" repository URLs, so you can backup to 70+ cloud storage
    services whether or not they support Borg explicitly.
  * Add support for Borg 2's "sftp://" repository URLs.
  * Update the "--match-archives" and "--archive" flags to support Borg 2 series names or archive
    hashes.
  * Add a "--match-archives" flag to the "prune" action.
  * Add "--local-path" and "--remote-path" flags to the "config bootstrap" action for setting the
    Borg executable paths used for bootstrapping.
  * Add a "--user-runtime-directory" flag to the "config bootstrap" action for helping borgmatic
    locate the bootstrap metadata stored in an archive.
  * Add a Zabbix monitoring hook. See the documentation for more information:
    https://torsion.org/borgmatic/docs/how-to/monitor-your-backups/#zabbix-hook
  * Add a tarball of borgmatic's HTML documentation to the packages on the project page.
- Refresh dependencies
- Update packaging to the modern python standard

OBS-URL: https://build.opensuse.org/package/show/Archiving:Backup/borgmatic?expand=0&rev=93
2025-01-15 07:40:51 +00:00

159 lines
6.1 KiB
RPMSpec

#
# spec file for package borgmatic
#
# Copyright (c) 2025 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/
#
%define pythons python3
Name: borgmatic
Version: 1.9.5
Release: 0
Summary: Automation tool for borgbackup
License: GPL-3.0-only
URL: https://torsion.org/borgmatic
Source: https://github.com/borgmatic-collective/borgmatic/archive/%{version}.tar.gz#/borgmatic-%{version}.tar.gz
BuildRequires: %{python_module PyYAML}
BuildRequires: %{python_module appdirs}
BuildRequires: %{python_module apprise}
BuildRequires: %{python_module attrs}
BuildRequires: %{python_module base >= 3.8}
BuildRequires: %{python_module click}
BuildRequires: %{python_module coverage}
BuildRequires: %{python_module flake8}
BuildRequires: %{python_module flexmock}
BuildRequires: %{python_module jsonschema >= 3.2.0}
BuildRequires: %{python_module mccabe}
BuildRequires: %{python_module pip}
BuildRequires: %{python_module pluggy}
BuildRequires: %{python_module pycodestyle}
BuildRequires: %{python_module pyflakes}
BuildRequires: %{python_module pytest-cov}
BuildRequires: %{python_module pytest}
BuildRequires: %{python_module py}
BuildRequires: %{python_module requests}
BuildRequires: %{python_module ruamel.yaml}
BuildRequires: %{python_module setuptools}
BuildRequires: %{python_module toml}
BuildRequires: borgbackup
BuildRequires: fdupes
BuildRequires: pandoc
BuildRequires: pkgconfig
BuildRequires: python-rpm-macros
BuildRequires: systemd-rpm-macros
BuildRequires: pkgconfig(libsystemd)
Requires: %{pythons}-jsonschema >= 3.2.0
Requires: %{pythons}-packaging
Requires: %{pythons}-requests
Requires: %{pythons}-ruamel.yaml > 0.15.0
Requires: borgbackup
Suggests: %{pythons}-apprise
BuildArch: noarch
ExcludeArch: %{ix86}
%python_subpackages
%description
borgmatic is a Python wrapper script for the Borg backup software
that initiates a backup, prunes any old backups according to a
retention policy, and validates backups for consistency. The script
supports specifying your settings in a declarative configuration file
rather than having to put them all on the command-line, and handles
common errors.
%prep
%autosetup -p1
%if 0%{?suse_version} <= 1500
sed -i -e "s/^LogRateLimitIntervalSec=/#LogRateLimitIntervalSec=/" sample/systemd/borgmatic.service
%endif
# Make sample files use the borgmatic command on /usr/bin, not /usr/local/bin
perl -pi -e "s,PATH=\\$PATH:%{_prefix}/local/bin /root/.local/bin/borgmatic,%{_bindir}/borgmatic," sample/cron/borgmatic
perl -pi -e "s,/root/.local/bin/borgmatic,%{_bindir}/borgmatic," sample/systemd/borgmatic.service
perl -pi -e "s,/root/.local/bin/borgmatic,%{_bindir}/borgmatic," sample/systemd/borgmatic-user.service
perl -pi -e "s,=sleep,=%{_bindir}/sleep," sample/systemd/borgmatic.service
perl -pi -e "s,=sleep,=%{_bindir}/sleep," sample/systemd/borgmatic-user.service
perl -pi -e "s,=systemd-inhibit,=%{_bindir}/systemd-inhibit," sample/systemd/borgmatic.service
perl -pi -e "s/ruamel.yaml>0.15.0,<0.17.0/ruamel.yaml/" setup.py
perl -pi -e "s/packages=find_packages\(\)/packages=find_packages(exclude=('tests*',))/" setup.py
%build
%pyproject_wheel
# Create the manpage
pandoc -s -f markdown -t man README.md -o borgmatic.1
%install
%pyproject_install
%python_expand %fdupes %{buildroot}%{$python_sitelib}
install -d %{buildroot}%{_sysconfdir}/borgmatic
install -d %{buildroot}%{_sysconfdir}/borgmatic.d
install -d %{buildroot}%{_docdir}/%{name}/sample/cron
install -m 0644 sample/cron/borgmatic %{buildroot}%{_docdir}/%{name}/sample/cron/
install -d %{buildroot}%{_docdir}/%{name}/sample/systemd
install -m 0644 sample/systemd/borgmatic* %{buildroot}%{_docdir}/%{name}/sample/systemd/
install -d %{buildroot}%{_unitdir}/
install -m 0644 sample/systemd/borgmatic.* %{buildroot}%{_unitdir}/
install -D -m 0644 borgmatic.1 %{buildroot}%{_mandir}/man1/borgmatic.1
mkdir -p %{buildroot}%{_sbindir}
ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rcborgmatic
%check
# testing the build is a little awkward, since the original testsuite is based on tox and
# tox tries to create a virtual environment, that we need tight control on in order to get
# it to behave in our build system (offline mode, use site packages). OTOH, without the
# venv, we face problems with setuptools (borg uses pkg_resources to locate the installed
# package), while py.test relies on the usual module handling. <hpj@urpla.net>
export LANG=en_US.UTF-8
%python_exec -m venv --system-site-packages --without-pip borgmatic-env
source borgmatic-env/bin/activate
%python_exec -m pip install --disable-pip-version-check --no-compile --ignore-installed --no-deps --no-index --find-links ./build borgmatic==1.9.5
PYTHONPATH=$(pwd):%{buildroot} py.test -v --pyargs borgmatic tests
%post
%service_add_post borgmatic.service
if [ "$1" = 1 -a ! -f "%{_sysconfdir}/borgmatic/config.yaml" ]; then
%{_bindir}/borgmatic config generate
fi
%pre
%service_add_pre borgmatic.service
%preun
%service_del_preun borgmatic.service
%postun
%service_del_postun borgmatic.service
%files
%doc AUTHORS NEWS README.md
%license LICENSE
%config %ghost %attr(0600,root,root) %{_sysconfdir}/borgmatic/config.yaml
%dir %{_sysconfdir}/borgmatic
%dir %{_sysconfdir}/borgmatic.d
%dir %{_docdir}/%{name}/sample
%{python_sitelib}/borgmatic/
%{python_sitelib}/borgmatic-%{version}*info
%{_unitdir}/borgmatic.service
%{_unitdir}/borgmatic.timer
%{_bindir}/borgmatic
%{_sbindir}/rcborgmatic
%{_bindir}/generate-borgmatic-config
%{_bindir}/validate-borgmatic-config
%{_mandir}/man1/borgmatic.1%{?ext_man}
%{_docdir}/%{name}/sample/cron/
%{_docdir}/%{name}/sample/systemd/
%changelog