File bacula.spec of Package bacula
#
# spec file for package bacula
#
# 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/
#
Name: bacula
Version: 15.0.3
Release: 1%{?dist}
Summary: The Network Backup Solution
Group: Productivity/Archiving/Backup
License: AGPL-3.0-only
URL: http://www.bacula.org
Source0: bacula-%{version}.tar.gz
Source1: bacula-rpmlintrc
Patch0: bacula-sd-service-pidfile.patch
BuildRequires: postgresql-devel
BuildRequires: libmariadb-devel
BuildRequires: sqlite3-devel
BuildRequires: libs3-4-devel
BuildRequires: readline-devel
BuildRequires: lzo-devel
#Buildrequires: aws-cli
BuildRequires: pwdutils
BuildRequires: gcc, gcc-c++, make, autoconf
BuildRequires: glibc, glibc-devel
BuildRequires: ncurses-devel
BuildRequires: libstdc++-devel, zlib-devel
BuildRequires: libcurl-devel
BuildRequires: libopenssl-devel
%if 0%{suse_version} >= 1600
BuildRequires: python313, python313-devel
%else
BuildRequires: python, python-devel
%endif
BuildRequires: libxml2-devel
BuildRequires: docker
%description
Bacula - The Leading Open Source Backup Solution.
Bacula is a set of computer programs that permit you (or the system
administrator) to manage backup, recovery, and verification of computer
data across a network of computers of different kinds. In technical terms,
it is a network client/server based backup program. Bacula is relatively
easy to use and efficient, while offering many advanced storage management
features that make it easy to find and recover lost or damaged files.
Bacula source code has been released under the AGPL version 3 license.
%package common
Summary: The Network Backup Solution
Group: Productivity/Archiving/Backup
Requires: openssl, glibc
%description common
Bacula - The Leading Open Source Backup Solution.
This package installs the shared libraries used by many bacula programs.
%package client
Summary: The Network Backup Solution
Group: Productivity/Archiving/Backup
Provides: %{name}-fd
Requires: openssl
Requires: glibc, %{name}-common
BuildRequires: systemd-rpm-macros
%description client
Bacula - The Leading Open Source Backup Solution.
This is the File daemon (Client) only package.
%package director
Summary: Bacula Director Daemon
Group: Productivity/Archiving/Backup
Provides: %{name}-dir
Requires: %{name}-db-driver
Requires: openssl
Requires: glibc, %{name}-common
BuildRequires: systemd-rpm-macros
%define __requires_exclude ^libbaccats.*$
%description director
The Bacula Director service performs all central coordination of backup
activity including backups, archiving, restores, verify and other
operations.
%package totp-dir-plugin
Summary: Bacula TOTP Authentication Plugin
Group: Productivity/Archiving/Backup
Requires: glibc, %{name}-common, %{name}-dir
Requires: qrencode
%description totp-dir-plugin
The TOTP (Time based One Time Password) Authentication Plugin is compatible
with the RFC 6238. Many smartphone apps are available to store the keys and
compute the TOTP code.
The standard password and encryption mechanisms will still be used to accept
an incoming console connection. Once accepted, the Console will prompt for a
second level of authentication with a TOTP secret key generated from a shared
token.
%package console
Summary: Bacula Console
Group: Productivity/Archiving/Backup
Requires: openssl
Requires: glibc, readline, %{name}-common
Requires: %{name}-client
%description console
The Bacula Console is the command line interface to communicating with the
Bacula director service. It is the main interface for controlling Bacula
systems and querying information, as well as performing an interactive restore.
Additionally, it can be used to submit any Bacula jobs.
%package storage
Summary: Bacula Storage Daemon
Group: Productivity/Archiving/Backup
Provides: %{name}-sd
Requires: openssl, mtx
Requires: glibc, %{name}-common
BuildRequires: systemd-rpm-macros
%description storage
The Bacula Storage service performs all storage activity including tape
management, file management, encryption and all other data moving
activities.
%package cloud-storage-plugins
Summary: Bacula Cloud Storage Plugins
Group: Productivity/Archiving/Backup
Requires: openssl, mtx
Requires: glibc, %{name}-sd
#Requires: aws-cli
%description cloud-storage-plugins
The Bacula Cloud Storage Plugins allow the Storage daemon to utilize
cloud storage such as AWS or S3 compatible destinations for data.
%package storage-key-manager
Summary: Bacula Storate Encryption Key Manager
Group: Productivity/Archiving/Backup
Requires: %{name}-sd, gpg
%description storage-key-manager
This add-on for the Bacula Storage Daemon is used to manage encryption keys
for the Volume Encryption feature. It can interface with a custom key manager
or the scripts can be used as their own key manager.
%package mysql
Summary: Bacula MySQL database driver
Group: Productivity/Archiving/Backup
Provides: %{name}-db-driver
#Conflicts: %{name}-postgresql, %{name}-sqlite
Requires: mysql
Requires: %{name}-dir
%description mysql
Provides MySQL database support for the Bacula director.
%package sqlite
Summary: Bacula SQLite database driver
Group: Productivity/Archiving/Backup
Provides: %{name}-db-driver
#Conflicts: %{name}-mysql, %{name}-postgresql
Requires: %{name}-dir
Requires: sqlite3
%description sqlite
Provides SQLite database support for the Bacula director.
%package postgresql
Summary: Bacula PostgreSQL database driver
Group: Productivity/Archiving/Backup
Provides: %{name}-db-driver
#Conflicts: %{name}-mysql, %{name}-sqlite
Requires: %{name}-dir
Requires: postgresql
%description postgresql
Provides PostgreSQL database support for the Bacula director.
%package docs
Summary: Bacula - The Network Backup Solution
Group: Productivity/Archiving/Backup
%description docs
Bacula - The Leading Open Source Backup Solution.
Bacula is a set of computer programs that permit you (or the system
administrator) to manage backup, recovery, and verification of computer
data across a network of computers of different kinds. In technical terms,
it is a network client/server based backup program. Bacula is relatively
easy to use and efficient, while offering many advanced storage management
features that make it easy to find and recover lost or damaged files.
Bacula source code has been released under the AGPL version 3 license.
This package provides documentation for all the Bacula components.
# Daemon user:group Don't change them unless you know what you are doing
%define director_daemon_user bacula
%define storage_daemon_user bacula
%define file_daemon_user root
%define daemon_group bacula
# group that has write access to tape devices, usually disk on Linux
%define storage_daemon_group disk
# Path references
%define script_dir %{_libexecdir}/bacula
%define plugin_dir %{_libdir}/bacula
%define sysconf_dir %{_sysconfdir}/bacula
%define working_dir /var/spool/bacula
%define log_dir %{_var}/log/bacula
%define manpage_ext gz
%prep
%autosetup -p0
%build
%configure \
--prefix=/usr \
--sysconfdir=%{sysconf_dir} \
--localstatedir=%{_localstatedir}/bacula \
--docdir=%{_docdir}/bacula \
--mandir=%{_mandir} \
--with-scriptdir=%{script_dir} \
--with-working-dir=%{working_dir} \
--with-logdir=%{log_dir} \
--with-pid-dir=%{_rundir}/bacula \
--with-subsys-dir=%{_rundir}/bacula \
--with-s3 \
--with-systemd=%{_unitdir} \
--with-plugindir=%{plugin_dir} \
--with-postgresql \
--with-mysql \
--with-sqlite3 \
--enable-smartalloc \
--enable-readline \
--with-readline \
--disable-static \
--with-dir-user=%{director_daemon_user} \
--with-dir-group=%{daemon_group} \
--with-sd-user=%{storage_daemon_user} \
--with-sd-group=%{storage_daemon_group} \
--with-fd-user=%{file_daemon_user} \
--with-fd-group=%{daemon_group} \
--enable-antivirus-plugin \
--enable-docker-plugin \
--enable-kubernetes-plugin \
--enable-totp-bpam \
--enable-cdp-plugin \
--with-aws \
--with-basename="XXX_HOSTNAME_XXX" \
--with-hostname="XXX_HOSTNAME_XXX" \
--with-dir-password="XXX_REPLACE_WITH_DIRECTOR_PASSWORD_XXX" \
--with-fd-password="XXX_REPLACE_WITH_CLIENT_PASSWORD_XXX" \
--with-sd-password="XXX_REPLACE_WITH_STORAGE_PASSWORD_XXX" \
--with-mon-dir-password="XXX_REPLACE_WITH_DIRECTOR_MONITOR_PASSWORD_XXX" \
--with-mon-fd-password="XXX_REPLACE_WITH_CLIENT_MONITOR_PASSWORD_XXX" \
--with-mon-sd-password="XXX_REPLACE_WITH_STORAGE_MONITOR_PASSWORD_XXX"
%make_build
%install
%make_install
mkdir -p %{?buildroot}%{_unitdir}
make install-autostart DESTDIR=$RPM_BUILD_ROOT DISTNAME=systemd
# Legacy startup scripts
ln -s %{script_dir}/bacula-ctl-dir %{buildroot}%{_sbindir}/rcbacula-dir
ln -s %{script_dir}/bacula-ctl-fd %{buildroot}%{_sbindir}/rcbacula-fd
ln -s %{script_dir}/bacula-ctl-sd %{buildroot}%{_sbindir}/rcbacula-sd
# Install some files manually
mkdir -p $RPM_BUILD_ROOT%{_datadir}/vim/site/ftdetect
mkdir -p $RPM_BUILD_ROOT%{_datadir}/vim/site/syntax
install -D -m644 scripts/filetype.vim $RPM_BUILD_ROOT%{_datadir}/vim/site/ftdetect/filetype.vim
install -D -m644 scripts/bacula.vim $RPM_BUILD_ROOT%{_datadir}/vim/site/syntax/bacula.vim
install -D -m644 src/plugins/fd/.libs/bpipe-fd.so $RPM_BUILD_ROOT%{plugin_dir}/bpipe-fd.so
install -D -m644 src/plugins/fd/.libs/kubernetes-fd.so $RPM_BUILD_ROOT%{plugin_dir}/kubernetes-fd.so
# Remove unneeded libtool files
rm -f $RPM_BUILD_ROOT%{_libdir}/libbaccats.la
rm -f $RPM_BUILD_ROOT%{_libdir}/libbacsd.la
rm -f $RPM_BUILD_ROOT%{_libdir}/libbacsql.la
rm -f $RPM_BUILD_ROOT%{_libdir}/libbac.la
rm -f $RPM_BUILD_ROOT%{_libdir}/libbaccats-mysql.la
rm -f $RPM_BUILD_ROOT%{_libdir}/libbaccats-postgresql.la
rm -f $RPM_BUILD_ROOT%{_libdir}/libbaccats-sqlite3.la
rm -f $RPM_BUILD_ROOT%{_libdir}/libbaccfg.la
rm -f $RPM_BUILD_ROOT%{_libdir}/libbacfind.la
# Remove unneeded documentation
rm -f $RPM_BUILD_ROOT%{_docdir}/bacula/INSTALL
# Remove the linked libbaccats database backends
rm -f $RPM_BUILD_ROOT%{_libdir}/libbaccats.so
rm -f $RPM_BUILD_ROOT%{_libdir}/libbaccats-%{version}.so
# Create a directory for PID files to prevent permission issues
mkdir -p $RPM_BUILD_ROOT%{_rundir}/bacula
# Create a log directory
mkdir -p $RPM_BUILD_ROOT%{log_dir}
# Create a directory to store TOTP key files
mkdir -p $RPM_BUILD_ROOT%{sysconf_dir}/conf.d/totp
# Create a directory to store volume encryption keys
mkdir -p $RPM_BUILD_ROOT%{sysconf_dir}/keydir
# Directory for variable files and bacula bootstrap files
mkdir -p $RPM_BUILD_ROOT%{_sharedstatedir}/bacula
%files common
%license LICENSE
%defattr(-,root,root)
%{_libdir}/libbac-*
%{_libdir}/libbac.*
%{_libdir}/libbaccfg*
%{_libdir}/libbacfind*
%{_libdir}/libbacsd.so
%{_libdir}/libbacsd-%{version}.so
%dir %{_datadir}/vim/site/ftdetect
%dir %{_datadir}/vim/site/syntax
%dir %{_datadir}/vim/site
%dir %{_datadir}/vim
%{_datadir}/vim/site/ftdetect/filetype.vim
%{_datadir}/vim/site/syntax/bacula.vim
%{script_dir}/bacula
%{script_dir}/bacula_config
%{_sbindir}/bacula
%{_sbindir}/bregex
%{_sbindir}/bwild
%dir %attr(0750, %{director_daemon_user}, %{daemon_group}) %{working_dir}
%dir %attr(0775, %{director_daemon_user}, %{daemon_group}) %{log_dir}
%ghost %dir %attr(0755, %{director_daemon_user}, %{daemon_group}) %{_rundir}/bacula
%dir %attr(0775, %{director_daemon_user}, ${daemon_group}) %{_sharedstatedir}/bacula
%pre common
getent group %{daemon_group} || groupadd -r %{daemon_group} > /dev/null 2>&1
getent passwd %{director_daemon_user} || useradd -r -c "Bacula" -d %{working_dir} -g %{daemon_group} -M -s /sbin/nologin %{director_daemon_user} > /dev/null 2>&1
%post common
%run_ldconfig
%postun common
%run_ldconfig
%files client
%defattr(-,root,root)
%attr(-, root, %{daemon_group}) %dir %{script_dir}
%attr(-, root, %{daemon_group}) %dir %{plugin_dir}
%attr(-, root, %{daemon_group}) %dir %{sysconf_dir}
%{script_dir}/bacula-ctl-fd
%{_sbindir}/rcbacula-fd
%{_unitdir}/bacula-fd.service
%attr(640, root, %{daemon_group}) %config(noreplace) %{sysconf_dir}/bacula-fd.conf
%{_sbindir}/bacula-fd
%{_sbindir}/btraceback
%{_sbindir}/bfdjson
%attr(-, root, %{daemon_group}) %{script_dir}/btraceback.gdb
%attr(-, root, %{daemon_group}) %{script_dir}/btraceback.dbx
%attr(-, root, %{daemon_group}) %{script_dir}/btraceback.mdb
%attr(0750, root, %{daemon_group}) %{plugin_dir}/bpipe-fd.so
%attr(0750, root, %{daemon_group}) %{plugin_dir}/antivirus-fd.so
%attr(0750, root, %{daemon_group}) %{plugin_dir}/docker-fd.so
%attr(0750, root, %{daemon_group}) %{plugin_dir}/kubernetes-fd.so
%attr(-, root, %{daemon_group}) %{script_dir}/bacula-tray-monitor.desktop
%{_sbindir}/cdp-client
%pre client
# Create the daemon group and user
getent group %{daemon_group} || groupadd -r %{daemon_group} > /dev/null 2>&1
getent passwd %{file_daemon_user} || useradd -r -c "Bacula" -d %{working_dir} -g %{daemon_group} -M -s /sbin/nologin %{file_daemon_user} > /dev/null 2>&1
%{service_add_pre bacula-fd.service}
%post client
%{service_add_post bacula-fd.service}
%preun client
%{service_del_preun bacula-fd.service}
%postun client
%{service_del_postun bacula-fd.service}
%files director
%defattr(-,root,root)
%attr(0640, %{director_daemon_user}, %{daemon_group}) %config(noreplace) %{sysconf_dir}/bacula-dir.conf
%{_unitdir}/bacula-dir.service
%attr(0750, %{director_daemon_user}, %{daemon_group}) %{_sbindir}/bacula-dir
%attr(0750, %{director_daemon_user}, %{daemon_group}) %{_sbindir}/bscan
%attr(0750, %{director_daemon_user}, %{daemon_group}) %{_sbindir}/dbcheck
%attr(0750, %{director_daemon_user}, %{daemon_group}) %{_sbindir}/bdirjson
%attr(0750, %{director_daemon_user}, %{daemon_group}) %{_sbindir}/bsmtp
%{_libdir}/libbacsql.so
%{_libdir}/libbacsql-%{version}.so
%attr(0750, %{director_daemon_user}, %{daemon_group}) %{script_dir}/create_bacula_database
%attr(0750, %{director_daemon_user}, %{daemon_group}) %{script_dir}/delete_catalog_backup
%attr(0750, %{director_daemon_user}, %{daemon_group}) %{script_dir}/drop_bacula_database
%attr(0750, %{director_daemon_user}, %{daemon_group}) %{script_dir}/drop_bacula_tables
%attr(0750, %{director_daemon_user}, %{daemon_group}) %{script_dir}/grant_bacula_privileges
%attr(0750, %{director_daemon_user}, %{daemon_group}) %{script_dir}/make_bacula_tables
%attr(0750, %{director_daemon_user}, %{daemon_group}) %{script_dir}/make_catalog_backup
%attr(0750, %{director_daemon_user}, %{daemon_group}) %{script_dir}/make_catalog_backup.pl
%attr(0750, %{director_daemon_user}, %{daemon_group}) %{script_dir}/update_bacula_tables
%attr(0750, %{director_daemon_user}, %{daemon_group}) %{script_dir}/bacula-ctl-dir
%attr(0750, %{director_daemon_user}, %{daemon_group}) %{_sbindir}/rcbacula-dir
%attr(-, %{director_daemon_user}, %{daemon_group}) %{_sbindir}/get_malware_abuse.ch
%attr(-, %{director_daemon_user}, %{daemon_group}) %{_sbindir}/md5tobase64.py
%pre director
getent group %{daemon_group} || groupadd -r %{daemon_group} > /dev/null 2>&1
getent passwd %{director_daemon_user} || useradd -r -c "Bacula" -d %{working_dir} -g %{daemon_group} -M -s /sbin/nologin %{director_daemon_user} > /dev/null 2>&1
%{service_add_pre bacula-dir.service}
%post director
%{service_add_post bacula-dir.service}
%run_ldconfig
%preun director
%{service_del_preun bacula-dir.service}
%postun director
%{service_del_postun bacula-dir.service}
%run_ldconfig
%files totp-dir-plugin
%defattr(755,root,root)
%{plugin_dir}/totp-dir.so
%{_sbindir}/btotp
%dir %attr(0755, %{director_daemon_user}, %{daemon_group}) %{sysconf_dir}/conf.d
%dir %attr(0750, %{director_daemon_user}, %{daemon_group}) %{sysconf_dir}/conf.d/totp
%files console
%defattr(-,root,root)
%attr(640, root, %{daemon_group}) %config(noreplace) %{sysconf_dir}/bconsole.conf
%attr(0755, root, %{daemon_group}) %{_sbindir}/bconsole
%attr(0755, root, %{daemon_group}) %{_sbindir}/bbconsjson
%attr(0755,%{file_daemon_user},%{daemon_group}) %{script_dir}/bconsole
%attr(0755,%{file_daemon_user},%{daemon_group}) %{script_dir}/baculabackupreport
%files storage
%defattr(-,root,root)
%attr(0640, %{storage_daemon_user}, %{storage_daemon_group}) %config(noreplace) %{sysconf_dir}/bacula-sd.conf
%{_unitdir}/bacula-sd.service
%attr(0750, %{storage_daemon_user}, %{storage_daemon_group}) %{_sbindir}/bacula-sd
%attr(0750, %{storage_daemon_user}, %{storage_daemon_group}) %{_sbindir}/bcopy
%attr(0750, %{storage_daemon_user}, %{storage_daemon_group}) %{_sbindir}/bextract
%attr(0750, %{storage_daemon_user}, %{storage_daemon_group}) %{_sbindir}/bls
%attr(0750, %{storage_daemon_user}, %{storage_daemon_group}) %{_sbindir}/btape
%attr(0750, %{storage_daemon_user}, %{storage_daemon_group}) %{_sbindir}/bsdjson
%attr(0750, %{storage_daemon_user}, %{storage_daemon_group}) %{script_dir}/disk-changer
%attr(0750, %{storage_daemon_user}, %{storage_daemon_group}) %{script_dir}/tapealert
%attr(0750, %{storage_daemon_user}, %{storage_daemon_group}) %{script_dir}/mtx-changer
%attr(0750, %{storage_daemon_user}, %{storage_daemon_group}) %{script_dir}/isworm
%attr(0750, %{storage_daemon_user}, %{storage_daemon_group}) %{script_dir}/mtx-changer.conf
%attr(0750, %{storage_daemon_user}, %{storage_daemon_group}) %{script_dir}/bacula-ctl-sd
%attr(0750, %{storage_daemon_user}, %{storage_daemon_group}) %{_sbindir}/rcbacula-sd
%pre storage
getent group %{storage_daemon_group} || groupadd -r %{storage_daemon_group} > /dev/null 2>&1
getent passwd %{storage_daemon_user} || useradd -r -c "Bacula" -d %{working_dir} -g %{storage_daemon_group} -M -s /sbin/nologin %{storage_daemon_user} > /dev/null 2>&1
%{service_add_pre bacula-sd.service}
%post storage
%{service_add_post bacula-sd.service}
%run_ldconfig
%preun storage
%{service_del_preun bacula-sd.service}
%postun storage
%{service_del_postun bacula-sd.service}
%run_ldconfig
%files cloud-storage-plugins
%defattr(-,%{storage_daemon_user},%{storage_daemon_group})
%{plugin_dir}/bacula-sd-cloud-aws-driver-%{version}.so
%{plugin_dir}/bacula-sd-cloud-aws-driver.so
%{plugin_dir}/bacula-sd-cloud-driver-%{version}.so
%{plugin_dir}/bacula-sd-cloud-driver.so
%{plugin_dir}/bacula-sd-cloud-s3-driver-%{version}.so
%{plugin_dir}/bacula-sd-cloud-s3-driver.so
%files storage-key-manager
%defattr(-,%{storage_daemon_user},%{storage_daemon_group})
%attr(0700, %{storage_daemon_user},%{storage_daemon_group}) %{sysconf_dir}/keydir
%{script_dir}/install-key-manager.sh
%{script_dir}/key-manager.py
%files mysql
%defattr(-, root, root)
%attr(-, root, %{daemon_group}) %{script_dir}/create_mysql_database
%attr(-, root, %{daemon_group}) %{script_dir}/drop_mysql_database
%attr(-, root, %{daemon_group}) %{script_dir}/make_mysql_tables
%attr(-, root, %{daemon_group}) %{script_dir}/drop_mysql_tables
%attr(-, root, %{daemon_group}) %{script_dir}/update_mysql_tables
%attr(-, root, %{daemon_group}) %{script_dir}/grant_mysql_privileges
%{_libdir}/libbaccats-mysql*
%ghost %{_libdir}/libbaccats.so
%ghost %{_libdir}/libbaccats-%{version}.so
%ghost %{_sysconfdir}/alternatives/libbaccats.so
%ghost %{_sysconfdir}/alternatives/libbaccats-%{version}.so
%post mysql
#ln -sf %{_libdir}/libbaccats-%{version}.so %{_libdir}/libbaccats-mysql.so
#ln -sf %{_libdir}/libbaccats.so %{_libdir}/libbaccats-%{version}.so
# Use the alternatives system instead of the manual symlinks
# We could also technically remote the Conflict lines for these packages
%{_sbindir}/update-alternatives --install %{_libdir}/libbaccats.so libbaccats.so %{_libdir}/libbaccats-mysql.so 5 \
--slave %{_libdir}/libbaccats-%{version}.so libbaccats-%{version}.so %{_libdir}/libbaccats-mysql-%{version}.so
%run_ldconfig
%postun mysql
# Reset alternatives to the next item in line
%{_sbindir}/update-alternatives --auto libbaccats.so
%run_ldconfig
%files sqlite
%defattr(-,root,root)
%attr(-, root, %{daemon_group}) %{script_dir}/create_sqlite3_database
%attr(-, root, %{daemon_group}) %{script_dir}/drop_sqlite3_database
%attr(-, root, %{daemon_group}) %{script_dir}/grant_sqlite3_privileges
%attr(-, root, %{daemon_group}) %{script_dir}/make_sqlite3_tables
%attr(-, root, %{daemon_group}) %{script_dir}/drop_sqlite3_tables
%attr(-, root, %{daemon_group}) %{script_dir}/update_sqlite3_tables
%{_libdir}/libbaccats-sqlite3*
%ghost %{_libdir}/libbaccats.so
%ghost %{_libdir}/libbaccats-%{version}.so
%ghost %{_sysconfdir}/alternatives/libbaccats.so
%ghost %{_sysconfdir}/alternatives/libbaccats-%{version}.so
%post sqlite
#ln -s %{_libdir}/libbaccats-%{version}.so %{_libdir}/libbaccats-sqlite3.so
#ln -s %{_libdir}/libbaccats.so %{_libdir}/libbaccats-%{version}.so
# Use the alternatives system instead of the manual symlinks
# We could also technically remote the Conflict lines for these packages
%{_sbindir}/update-alternatives --install %{_libdir}/libbaccats.so libbaccats.so %{_libdir}/libbaccats-sqlite3.so 5 \
--slave %{_libdir}/libbaccats-%{version}.so libbaccats-%{version}.so %{_libdir}/libbaccats-sqlite3-%{version}.so
%run_ldconfig
%postun sqlite
# Reset alternatives to the next item in line
%{_sbindir}/update-alternatives --auto libbaccats.so
%run_ldconfig
%files postgresql
%defattr(-,root,root)
%attr(755, root, %{daemon_group}) %{script_dir}/create_postgresql_database
%attr(755, root, %{daemon_group}) %{script_dir}/drop_postgresql_database
%attr(755, root, %{daemon_group}) %{script_dir}/make_postgresql_tables
%attr(755, root, %{daemon_group}) %{script_dir}/drop_postgresql_tables
%attr(755, root, %{daemon_group}) %{script_dir}/update_postgresql_tables
%attr(755, root, %{daemon_group}) %{script_dir}/grant_postgresql_privileges
%{_libdir}/libbaccats-postgresql*
%ghost %{_libdir}/libbaccats.so
%ghost %{_libdir}/libbaccats-%{version}.so
%ghost %{_sysconfdir}/alternatives/libbaccats.so
%ghost %{_sysconfdir}/alternatives/libbaccats-%{version}.so
%post postgresql
#ln -s %{_libdir}/libbaccats-%{version}.so %{_libdir}/libbaccats-postgresql.so
#ln -s %{_libdir}/libbaccats.so %{_libdir}/libbaccats-%{version}.so
# Use the alternatives system instead of the manual symlinks
# We could also technically remote the Conflict lines for these packages
%{_sbindir}/update-alternatives --install %{_libdir}/libbaccats.so libbaccats.so %{_libdir}/libbaccats-postgresql.so 5 \
--slave %{_libdir}/libbaccats-%{version}.so libbaccats-%{version}.so %{_libdir}/libbaccats-postgresql-%{version}.so
%run_ldconfig
%postun postgresql
# Reset alternatives to the next item in line
%{_sbindir}/update-alternatives --auto libbaccats.so
%run_ldconfig
%files docs
%doc %{_mandir}/man1/bsmtp.1.gz
%doc %{_mandir}/man8/bacula-dir.8.gz
%doc %{_mandir}/man8/bacula-sd.8.gz
%doc %{_mandir}/man8/bbconsjson.8.gz
%doc %{_mandir}/man8/bcopy.8.gz
%doc %{_mandir}/man8/bdirjson.8.gz
%doc %{_mandir}/man8/bextract.8.gz
%doc %{_mandir}/man8/bfdjson.8.gz
%doc %{_mandir}/man8/bls.8.gz
%doc %{_mandir}/man8/bregex.8.gz
%doc %{_mandir}/man8/bscan.8.gz
%doc %{_mandir}/man8/bsdjson.8.gz
%doc %{_mandir}/man8/btape.8.gz
%doc %{_mandir}/man8/bwild.8.gz
%doc %{_mandir}/man8/dbcheck.8.gz
%doc %{_mandir}/man8/bacula-fd.8.%{manpage_ext}
%doc %{_mandir}/man8/bacula.8.%{manpage_ext}
%doc %{_mandir}/man8/bconsole.8.%{manpage_ext}
%doc %{_mandir}/man8/btraceback.8.%{manpage_ext}
%doc %{_mandir}/man1/bat.1.%{manpage_ext}
%dir %{_docdir}/bacula
%doc %{_docdir}/bacula/*
%changelog
* Sun Sep 28 2025 Thomas Ruth <truth@ichaos.com> - 15.0.3-1
- Initial commit