diff --git a/.bacula.metadata b/.bacula.metadata new file mode 100644 index 0000000..c8ce4d4 --- /dev/null +++ b/.bacula.metadata @@ -0,0 +1,2 @@ +3fbca0dc9eb78a083589465052016f669c3b5e70 SOURCES/bacula-11.0.1.tar.gz +fec6073f62a07cd9df96fe3673d1dcea27d50984 SOURCES/bacula-tray-monitor.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..15df90d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +SOURCES/bacula-11.0.1.tar.gz +SOURCES/bacula-tray-monitor.png diff --git a/SOURCES/README.Redhat b/SOURCES/README.Redhat new file mode 100644 index 0000000..d6c1403 --- /dev/null +++ b/SOURCES/README.Redhat @@ -0,0 +1,90 @@ +======== Features + +- Standard components: director, storage, client, docs, bconsole. +- Graphical components: bat, bacula-tray-monitor. +- Tab completion for bconsole. +- Nagios plugin. +- HTML/PDF docs. +- Quick start guides. +- File Daemon bpipe-fd plugin. +- POSIX.1e capabilities for File Daemon. +- GZIP/LZO compression. +- Static uid/gid of 133 (see "setup" package). +- SQL libraries needed only by Director and Storage daemons. +- SQL backend management through the alternatives system. + +======== Quick start + +Please look at the following files for a quick start with the various database +backends: + +- quickstart_mysql.txt +- quickstart_postgresql.txt +- quickstart_sqlite3.txt + +======== PostgreSQL, MySQL and SQLite databases + +Bacula director supports different databases backends, if you want to switch +away from the default PostgreSQL one you need to change the "libbaccats" (the +catalogue library) symlink to the real library. + +To change to a different backend, issue the following command: + +# alternatives --config libbaccats.so + +There are 3 programs which provide 'libbaccats.so'. + + Selection Command +----------------------------------------------- + 1 /usr/lib64/libbaccats-mysql.so + 2 /usr/lib64/libbaccats-sqlite3.so +*+ 3 /usr/lib64/libbaccats-postgresql.so + +Enter to keep the current selection[+], or type selection number: 1 + +There is NO need to edit any part in the Bacula Director configuration; for the +purposes of the database creation steps, the bacula-dir.conf configuration file +can be left at their default values. + +======== Switiching between PostgreSQL, MySQL and SQLite backends + +To switch the configured backend to another one, follow the above procedure. +Again, there's no need to edit the Bacula Director configuration file; the +catalog resource can be left as is. + +Importing and exporting data between the various database formats is up to the +user. If the database will be re-initialized from scratch, follow the quick +start guides mentioned above. + +======== Upgrading from old Redhat releases + +When upgrading from old Redhat releases, the "bacula-libs-sql" package takes +care of making the appropriate selection for the database backend based on what +was previously configured on the old system. + +The default permissions in the "/etc/bacula" folder have changed; please perform +the following commands for restoring the permissions for the correct operation +of the daemons. + +# chown -R root:root /etc/bacula +# chmod 755 /etc/bacula +# chmod 640 /etc/bacula/* +# chgrp bacula /etc/bacula/bacula-dir.conf /etc/bacula/query.sql + +All the files that are part of the Director configuration (included with @) must +of course have the same permissions as the main configuration file. + +======== Documentation + +To see all the available documentation in both HTML and PDF formats, please +install the "bacula-docs" package. + +======== Granting user access to the console + +The console configuration files are normally readable only by root for security +reasons. If you need to grant access to a specific user or group of users to +the consoles, you can adjust the ACLs on the configuration files. For example: + +# setfacl -m u:user:r /etc/bacula/bconsole.conf /etc/bacula/bat.conf + +This way the user 'user' can open the console without superuser privileges. diff --git a/SOURCES/bacula-autoconf.patch b/SOURCES/bacula-autoconf.patch new file mode 100644 index 0000000..0cfe4c8 --- /dev/null +++ b/SOURCES/bacula-autoconf.patch @@ -0,0 +1,35 @@ +diff -Naur bacula-7.0.4.old/autoconf/ltmain.sh bacula-7.0.4/autoconf/ltmain.sh +--- bacula-7.0.4.old/autoconf/ltmain.sh 2014-07-24 17:43:23.085243360 +0200 ++++ bacula-7.0.4/autoconf/ltmain.sh 2014-07-24 17:45:12.505330842 +0200 +@@ -2429,6 +2429,7 @@ + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension ++ -soname SONAME override the standard shared object name + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries +@@ -5434,6 +5435,11 @@ + prev= + continue + ;; ++ soname) ++ soname_spec="$arg" ++ prev= ++ continue ++ ;; + weak) + func_append weak_libs " $arg" + prev= +@@ -5754,6 +5760,11 @@ + continue + ;; + ++ -soname) ++ prev=soname ++ continue ++ ;; ++ + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that diff --git a/SOURCES/bacula-bat-build.patch b/SOURCES/bacula-bat-build.patch new file mode 100644 index 0000000..f619814 --- /dev/null +++ b/SOURCES/bacula-bat-build.patch @@ -0,0 +1,39 @@ +diff -Naur bacula-11.0.0.old/src/qt-console/bat.pro.in bacula-11.0.0/src/qt-console/bat.pro.in +--- bacula-11.0.0.old/src/qt-console/bat.pro.in 2021-01-12 12:36:32.639470258 +0100 ++++ bacula-11.0.0/src/qt-console/bat.pro.in 2021-01-12 12:39:13.647417778 +0100 +@@ -6,7 +6,7 @@ + # + # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + # +-CONFIG += qt debug @QWT@ ++CONFIG += qt release @QWT@ + + greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +@@ -15,7 +15,7 @@ + bins.files = bat + confs.path = /$(DESTDIR)@sysconfdir@ + confs.commands = ./install_conf_file +-help.path = /$(DESTDIR)@docdir@ ++help.path = /$(DESTDIR)@htmldir@ + help.files = help/*.html images/status.png images/mail-message-new.png + + TEMPLATE = app +diff -Naur bacula-11.0.0.old/src/qt-console/main.cpp bacula-11.0.0/src/qt-console/main.cpp +--- bacula-11.0.0.old/src/qt-console/main.cpp 2021-01-12 12:36:32.640470277 +0100 ++++ bacula-11.0.0/src/qt-console/main.cpp 2021-01-12 12:39:13.647417778 +0100 +@@ -29,11 +29,11 @@ + #include + + /* +- * We need Qt version 4.8.4 or later to be able to comple correctly ++ * We need Qt version 4.6.2 or later to be able to comple correctly + */ +-#if QT_VERSION < 0x040804 ++#if QT_VERSION < 0x040602 + #error "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" +-#error "You need Qt version 4.8.4 or later to build Bat" ++#error "You need Qt version 4.6.2 or later to build Bat" + #error "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + #endif + diff --git a/SOURCES/bacula-build-cdp-plugin.patch b/SOURCES/bacula-build-cdp-plugin.patch new file mode 100644 index 0000000..9525a1e --- /dev/null +++ b/SOURCES/bacula-build-cdp-plugin.patch @@ -0,0 +1,43 @@ +diff -Naur bacula-11.0.0.old/src/plugins/fd/Makefile.in bacula-11.0.0/src/plugins/fd/Makefile.in +--- bacula-11.0.0.old/src/plugins/fd/Makefile.in 2021-01-15 14:28:41.375718846 +0100 ++++ bacula-11.0.0/src/plugins/fd/Makefile.in 2021-01-15 14:37:51.212066769 +0100 +@@ -22,7 +22,7 @@ + .c.lo: + $(LIBTOOL_COMPILE) $(CXX) $(DEFS) $(DEBUG) $(CPPFLAGS) $(CFLAGS) -I${SRCDIR} -I${FDDIR} -DTEST_PROGRAM -c $< + +-all: bpipe-fd.la test-plugin-fd.la test-deltaseq-fd.la pluglib.lo ++all: bpipe-fd.la cdp-fd.la test-plugin-fd.la test-deltaseq-fd.la pluglib.lo + + example-plugin-fd.lo: example-plugin-fd.c ${FDDIR}/fd_plugins.h + $(LIBTOOL_COMPILE) $(CXX) $(DEFS) $(DEBUG) $(CPPFLAGS) $(CFLAGS) -I../.. -I${FDDIR} -c example-plugin-fd.c +@@ -36,8 +36,6 @@ + bpipe-fd.la: Makefile bpipe-fd$(DEFAULT_OBJECT_TYPE) + $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -shared bpipe-fd.lo -o $@ -rpath $(plugindir) -module -export-dynamic -avoid-version + +-cdp: cdp-fd.la +- + cdp-fd.lo: cdp-fd.c journal.h folder-record.h file-record.h settings-record.h ${FDDIR}/fd_plugins.h + $(LIBTOOL_COMPILE) $(CXX) $(DEFS) $(DEBUG) $(CPPFLAGS) $(CFLAGS) -Wno-unused-function -I../.. -I${FDDIR} -c cdp-fd.c + +@@ -47,12 +45,6 @@ + cdp-fd.la: Makefile cdp-fd$(DEFAULT_OBJECT_TYPE) journal.lo + $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -shared cdp-fd.lo journal.lo -o $@ -rpath $(plugindir) -module -export-dynamic -avoid-version + +-install-cdp: cdp-fd.la +- $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) cdp-fd.la $(DESTDIR)$(plugindir) +- $(RMF) $(DESTDIR)$(plugindir)/cdp-fd.la +- +- +- + test-deltaseq-fd.lo: test-deltaseq-fd.c ${FDDIR}/fd_plugins.h fd_common.h + $(LIBTOOL_COMPILE) $(CXX) $(DEFS) $(DEBUG) $(CPPFLAGS) $(CFLAGS) -I../.. -I${FDDIR} -c test-deltaseq-fd.c + +@@ -69,6 +61,8 @@ + $(MKDIR) $(DESTDIR)$(plugindir) + $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) bpipe-fd.la $(DESTDIR)$(plugindir) + $(RMF) $(DESTDIR)$(plugindir)/bpipe-fd.la ++ $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) cdp-fd.la $(DESTDIR)$(plugindir) ++ $(RMF) $(DESTDIR)$(plugindir)/cdp-fd.la + + install-test-plugin: all + $(MKDIR) $(DESTDIR)$(plugindir) diff --git a/SOURCES/bacula-desktop.patch b/SOURCES/bacula-desktop.patch new file mode 100644 index 0000000..8f3371e --- /dev/null +++ b/SOURCES/bacula-desktop.patch @@ -0,0 +1,34 @@ +diff -Naur bacula-9.6.5.old/scripts/bacula-tray-monitor.desktop.in bacula-9.6.5/scripts/bacula-tray-monitor.desktop.in +--- bacula-9.6.5.old/scripts/bacula-tray-monitor.desktop.in 2020-07-24 09:11:40.976119619 +0200 ++++ bacula-9.6.5/scripts/bacula-tray-monitor.desktop.in 2020-07-24 09:16:52.055851377 +0200 +@@ -5,6 +5,5 @@ + Exec=@sbindir@/bacula-tray-monitor -c @sysconfdir@/bacula-tray-monitor.conf + Terminal=false + Type=Application +-Encoding=UTF-8 + X-Desktop-File-Install-Version=0.3 +-Categories=System;Application;Utility;X-Red-Hat-Base; ++Categories=System;Utility; +diff -Naur bacula-9.6.5.old/scripts/bat.desktop.in bacula-9.6.5/scripts/bat.desktop.in +--- bacula-9.6.5.old/scripts/bat.desktop.in 2020-07-24 09:11:40.976119619 +0200 ++++ bacula-9.6.5/scripts/bat.desktop.in 2020-07-24 09:17:21.178294361 +0200 +@@ -5,7 +5,6 @@ + Exec=@sbindir@/bat -c @sysconfdir@/bat.conf + Terminal=false + Type=Application +-Encoding=UTF-8 + StartupNotify=true + X-Desktop-File-Install-Version=0.3 +-Categories=System;Application;Utility;X-Red-Hat-Base; ++Categories=System;Utility; +diff -Naur bacula-9.6.5.old/scripts/Makefile.in bacula-9.6.5/scripts/Makefile.in +--- bacula-9.6.5.old/scripts/Makefile.in 2020-07-24 09:11:40.976119619 +0200 ++++ bacula-9.6.5/scripts/Makefile.in 2020-07-24 09:17:57.725850277 +0200 +@@ -67,7 +67,6 @@ + $(MV) -f ${DESTDIR}${scriptdir}/baculabackupreport ${DESTDIR}${scriptdir}/baculabackupreport.old; \ + fi + $(INSTALL_SCRIPT) baculabackupreport $(DESTDIR)$(scriptdir)/baculabackupreport +- $(INSTALL_SCRIPT) bacula-tray-monitor.desktop $(DESTDIR)$(scriptdir)/bacula-tray-monitor.desktop + chmod 0644 $(DESTDIR)$(scriptdir)/btraceback.gdb \ + $(DESTDIR)$(scriptdir)/btraceback.dbx \ + $(DESTDIR)$(scriptdir)/btraceback.mdb diff --git a/SOURCES/bacula-dir.service b/SOURCES/bacula-dir.service new file mode 100644 index 0000000..f7bd48e --- /dev/null +++ b/SOURCES/bacula-dir.service @@ -0,0 +1,13 @@ +[Unit] +Description=Bacula Director +Documentation=man:bacula-dir(8) +After=network.target nss-lookup.target + +[Service] +Environment=CONFIG=/etc/bacula/bacula-dir.conf +EnvironmentFile=-/etc/sysconfig/bacula-dir +ExecStart=/usr/sbin/bacula-dir -f $OPTS -c $CONFIG -u $DIR_USER -g $DIR_GROUP +Restart=on-failure + +[Install] +WantedBy=multi-user.target diff --git a/SOURCES/bacula-dir.sysconfig b/SOURCES/bacula-dir.sysconfig new file mode 100644 index 0000000..4250591 --- /dev/null +++ b/SOURCES/bacula-dir.sysconfig @@ -0,0 +1,9 @@ +# User and group for bacula director +# If no user is set bacula will run as root + +DIR_USER=bacula +DIR_GROUP=bacula + +# Useful for debugging +# +# OPTS="-d 200" diff --git a/SOURCES/bacula-docker-plugin.patch b/SOURCES/bacula-docker-plugin.patch new file mode 100644 index 0000000..e005498 --- /dev/null +++ b/SOURCES/bacula-docker-plugin.patch @@ -0,0 +1,29 @@ +diff -Naur bacula-11.0.1.old/autoconf/configure.in bacula-11.0.1/autoconf/configure.in +--- bacula-11.0.1.old/autoconf/configure.in 2021-02-11 14:12:19.547538024 +0100 ++++ bacula-11.0.1/autoconf/configure.in 2021-02-11 14:12:25.803641252 +0100 +@@ -3240,20 +3240,11 @@ + ] + ) + if test x$support_docker = xyes -o x$support_docker = xauto; then +- AC_CHECK_PROG(docker_bin, docker, yes, no, "/usr/bin/") +- if test x$docker_bin = xyes; then +- support_docker=yes +- FD_PLUGIN_DIR="$FD_PLUGIN_DIR src/plugins/fd/docker" +- PLUGCONFILES="${PLUGCONFILES} src/plugins/fd/docker/Makefile" +- else +- if test x$support_docker = xyes; then +- echo " " +- echo "You enabled a Docker Plugin build but 'docker' command not found." +- echo " " +- exit 1 +- fi +- support_docker=no +- fi ++ support_docker=yes ++ FD_PLUGIN_DIR="$FD_PLUGIN_DIR src/plugins/fd/docker" ++ PLUGCONFILES="${PLUGCONFILES} src/plugins/fd/docker/Makefile" ++else ++ support_docker=no + fi + + AC_SUBST(FD_PLUGIN_DIR) diff --git a/SOURCES/bacula-fd.service b/SOURCES/bacula-fd.service new file mode 100644 index 0000000..2724c4b --- /dev/null +++ b/SOURCES/bacula-fd.service @@ -0,0 +1,14 @@ +[Unit] +Description=Bacula File Daemon +Documentation=man:bacula-fd(8) +After=network.target nss-lookup.target + +[Service] +Environment=CONFIG=/etc/bacula/bacula-fd.conf +EnvironmentFile=-/etc/sysconfig/bacula-fd +ExecStart=/usr/sbin/bacula-fd -f $OPTS -c $CONFIG -u $FD_USER -g $FD_GROUP +IOSchedulingClass=idle +Restart=on-failure + +[Install] +WantedBy=multi-user.target diff --git a/SOURCES/bacula-fd.sysconfig b/SOURCES/bacula-fd.sysconfig new file mode 100644 index 0000000..09cae26 --- /dev/null +++ b/SOURCES/bacula-fd.sysconfig @@ -0,0 +1,21 @@ +# User and group for bacula client +# If no user is set bacula will run as root + +FD_USER=root +FD_GROUP=root + +# Useful for debugging +# +# OPTS="-d 200" + + +# Set the following options if you want to run bacula-fd with ReadAll +# capabilities after UID/GID switch. +# +# This allows the File Daemon to keep root read but drop write permission. +# This, however, has the side effect of disabling backups of extended +# attributes because this requires super user privileges. +# +# OPTS="-k" +# FD_USER="bacula" +# FD_GROUP="bacula" diff --git a/SOURCES/bacula-g++-options.patch b/SOURCES/bacula-g++-options.patch new file mode 100644 index 0000000..c99093f --- /dev/null +++ b/SOURCES/bacula-g++-options.patch @@ -0,0 +1,15 @@ +diff -Naur bacula-11.0.1.old/autoconf/configure.in bacula-11.0.1/autoconf/configure.in +--- bacula-11.0.1.old/autoconf/configure.in 2021-02-11 14:09:48.635047858 +0100 ++++ bacula-11.0.1/autoconf/configure.in 2021-02-11 14:10:48.026027852 +0100 +@@ -3274,11 +3274,6 @@ + AC_DEFINE(FDLIBS) + + CFLAGS=${CFLAGS--O} +- +-if test x$have_gcc = xyes ; then +- CPPFLAGS="$CPPFLAGS -x c++ -fno-strict-aliasing -fno-exceptions -fno-rtti" +- CFLAGS="$CFLAGS -x c++ -fno-strict-aliasing -fno-exceptions -fno-rtti" +-fi + LDFLAGS=${LDFLAGS--O} + CPPFLAGS="$CPPFLAGS" + CFLAGS="$CFLAGS" diff --git a/SOURCES/bacula-install.patch b/SOURCES/bacula-install.patch new file mode 100644 index 0000000..ecf7ceb --- /dev/null +++ b/SOURCES/bacula-install.patch @@ -0,0 +1,48 @@ +diff -Naur bacula-11.0.1.old/autoconf/configure.in bacula-11.0.1/autoconf/configure.in +--- bacula-11.0.1.old/autoconf/configure.in 2021-02-11 14:11:00.673236537 +0100 ++++ bacula-11.0.1/autoconf/configure.in 2021-02-11 14:11:36.910834489 +0100 +@@ -3798,7 +3798,7 @@ + cd src/qt-console + chmod 755 install_conf_file build-depkgs-qt-console + cd tray-monitor +-chmod 755 install_conf_file ++chmod 755 install_conf_file build-depkgs-qt-console + cd ${BUILD_DIR} + + cd scripts +diff -Naur bacula-11.0.1.old/examples/nagios/check_bacula/Makefile.in bacula-11.0.1/examples/nagios/check_bacula/Makefile.in +--- bacula-11.0.1.old/examples/nagios/check_bacula/Makefile.in 2021-02-11 14:09:48.630047776 +0100 ++++ bacula-11.0.1/examples/nagios/check_bacula/Makefile.in 2021-02-11 14:11:07.708352620 +0100 +@@ -72,7 +72,7 @@ + (cd $(srcdir); $(RMF) Makefile) + + install: all +- $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) check_bacula $(DESTDIR)$(sbindir)/check_bacula ++ $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) .libs/check_bacula $(DESTDIR)$(sbindir)/check_bacula + + uninstall: + (cd $(DESTDIR)$(sbindir); $(RMF) check_bacula) +diff -Naur bacula-11.0.1.old/src/qt-console/bat.pro.in bacula-11.0.1/src/qt-console/bat.pro.in +--- bacula-11.0.1.old/src/qt-console/bat.pro.in 2021-02-11 14:09:48.599047264 +0100 ++++ bacula-11.0.1/src/qt-console/bat.pro.in 2021-02-11 14:11:07.742353181 +0100 +@@ -12,7 +12,7 @@ + + datarootdir = @datarootdir@ + bins.path = /$(DESTDIR)@sbindir@ +-bins.files = bat ++bins.files = .libs/bat + confs.path = /$(DESTDIR)@sysconfdir@ + confs.commands = ./install_conf_file + help.path = /$(DESTDIR)@htmldir@ +diff -Naur bacula-11.0.1.old/src/qt-console/tray-monitor/tray-monitor.pro.in bacula-11.0.1/src/qt-console/tray-monitor/tray-monitor.pro.in +--- bacula-11.0.1.old/src/qt-console/tray-monitor/tray-monitor.pro.in 2021-02-11 14:09:48.603047330 +0100 ++++ bacula-11.0.1/src/qt-console/tray-monitor/tray-monitor.pro.in 2021-02-11 14:11:07.743353198 +0100 +@@ -26,7 +26,7 @@ + + + bins.path = /$(DESTDIR)@sbindir@ +-bins.files = bacula-tray-monitor ++bins.files = .libs/bacula-tray-monitor + confs.path = /$(DESTDIR)@sysconfdir@ + confs.commands = ./install_conf_file + diff --git a/SOURCES/bacula-logwatch.patch b/SOURCES/bacula-logwatch.patch new file mode 100644 index 0000000..410893b --- /dev/null +++ b/SOURCES/bacula-logwatch.patch @@ -0,0 +1,9 @@ +diff --git a/scripts/logwatch/logfile.bacula.conf.in b/scripts/logwatch/logfile.bacula.conf.in +index 22b6e98..5d257ca 100644 +--- a/scripts/logwatch/logfile.bacula.conf.in ++++ b/scripts/logwatch/logfile.bacula.conf.in +@@ -1,3 +1,3 @@ + # What actual file? Defaults to LogPath if not absolute path.... +-LogFile = @logdir@/bacula.log ++LogFile = @logdir@/*.log + diff --git a/SOURCES/bacula-nagios.patch b/SOURCES/bacula-nagios.patch new file mode 100644 index 0000000..10ea77a --- /dev/null +++ b/SOURCES/bacula-nagios.patch @@ -0,0 +1,13 @@ +diff -Naur bacula-11.0.0.old/examples/nagios/check_bacula/Makefile.in bacula-11.0.0/examples/nagios/check_bacula/Makefile.in +--- bacula-11.0.0.old/examples/nagios/check_bacula/Makefile.in 2021-01-15 14:28:41.415719526 +0100 ++++ bacula-11.0.0/examples/nagios/check_bacula/Makefile.in 2021-01-15 15:01:26.371678793 +0100 +@@ -72,7 +72,8 @@ + (cd $(srcdir); $(RMF) Makefile) + + install: all +- $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) .libs/check_bacula $(DESTDIR)$(sbindir)/check_bacula ++ $(MKDIR) $(DESTDIR)$(libdir)/nagios/plugins ++ $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) .libs/check_bacula $(DESTDIR)$(libdir)/nagios/plugins/check_bacula + + uninstall: + (cd $(DESTDIR)$(sbindir); $(RMF) check_bacula) diff --git a/SOURCES/bacula-non-free-code.patch b/SOURCES/bacula-non-free-code.patch new file mode 100644 index 0000000..6e1b571 --- /dev/null +++ b/SOURCES/bacula-non-free-code.patch @@ -0,0 +1,696 @@ +diff -Naur bacula-11.0.1.old/src/lib/lib.h bacula-11.0.1/src/lib/lib.h +--- bacula-11.0.1.old/src/lib/lib.h 2021-02-11 14:09:48.598047248 +0100 ++++ bacula-11.0.1/src/lib/lib.h 2021-02-11 14:10:04.432308524 +0100 +@@ -57,7 +57,6 @@ + #include "fnmatch.h" + #endif + #include "md5.h" +-#include "sha1.h" + #include "tree.h" + #include "watchdog.h" + #include "btimers.h" +diff -Naur bacula-11.0.1.old/src/lib/Makefile.in bacula-11.0.1/src/lib/Makefile.in +--- bacula-11.0.1.old/src/lib/Makefile.in 2021-02-11 14:09:48.598047248 +0100 ++++ bacula-11.0.1/src/lib/Makefile.in 2021-02-11 14:10:04.433308540 +0100 +@@ -40,7 +40,7 @@ + flist.h fnmatch.h guid_to_name.h htable.h lex.h \ + lib.h lz4.h md5.h mem_pool.h message.h \ + openssl.h plugins.h protos.h queue.h rblist.h \ +- runscript.h rwlock.h serial.h sellist.h sha1.h sha2.h \ ++ runscript.h rwlock.h serial.h sellist.h sha2.h \ + smartall.h status.h tls.h tree.h var.h \ + waitq.h watchdog.h workq.h \ + parse_conf.h ini.h \ +@@ -57,7 +57,7 @@ + guid_to_name.c hmac.c jcr.c lex.c lz4.c alist.c dlist.c \ + md5.c message.c mem_pool.c openssl.c \ + plugins.c priv.c queue.c bregex.c bsockcore.c \ +- runscript.c rwlock.c scan.c sellist.c serial.c sha1.c sha2.c \ ++ runscript.c rwlock.c scan.c sellist.c serial.c sha2.c \ + signal.c smartall.c rblist.c tls.c tree.c \ + util.c var.c watchdog.c workq.c btimers.c \ + worker.c flist.c bcollector.c collect.c \ +@@ -286,22 +286,6 @@ + $(RMF) md5.o + $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) md5.c + +-sha1sum: Makefile libbac.la sha1.c +- $(RMF) sha1.o +- $(CXX) -DSHA1_SUM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) sha1.c +- $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ sha1.o $(DLIB) -lbac -lm $(LIBS) $(OPENSSL_LIBS) +- $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/ +- $(RMF) sha1.o +- $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) sha1.c +- +-sha1_test: Makefile libbac.la sha1.c unittests.o +- $(RMF) sha1.o +- $(CXX) -DTEST_PROGRAM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) sha1.c +- $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ sha1.o unittests.o $(DLIB) -lbac -lm $(LIBS) +- $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/ +- $(RMF) sha1.o +- $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) sha1.c +- + bsnprintf_test: Makefile libbac.la bsnprintf.c unittests.o + $(RMF) bsnprintf.o + $(CXX) -DTEST_PROGRAM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) bsnprintf.c +@@ -397,7 +381,7 @@ + + clean: libtool-clean + @$(RMF) core a.out *.o *.bak *.tex *.pdf *~ *.intpro *.extpro 1 2 3 +- @$(RMF) rwlock_test md5sum sha1sum ++ @$(RMF) rwlock_test md5sum + + realclean: clean + @$(RMF) tags +diff -Naur bacula-11.0.1.old/src/lib/sha1.c bacula-11.0.1/src/lib/sha1.c +--- bacula-11.0.1.old/src/lib/sha1.c 2021-02-11 14:09:48.598047248 +0100 ++++ bacula-11.0.1/src/lib/sha1.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1,517 +0,0 @@ +-/* +- * sha1.c +- * +- * Description: +- * This file implements the Secure Hashing Algorithm 1 as +- * defined in FIPS PUB 180-1 published April 17, 1995. +- * +- * The SHA-1, produces a 160-bit message digest for a given +- * data stream. It should take about 2**n steps to find a +- * message with the same digest as a given message and +- * 2**(n/2) to find any two messages with the same digest, +- * when n is the digest size in bits. Therefore, this +- * algorithm can serve as a means of providing a +- * "fingerprint" for a message. +- * +- * Portability Issues: +- * SHA-1 is defined in terms of 32-bit "words". This code +- * uses (included via "sha1.h" to define 32 and 8 +- * bit unsigned integer types. If your C compiler does not +- * support 32 bit unsigned integers, this code is not +- * appropriate. +- * +- * Caveats: +- * SHA-1 is designed to work with messages less than 2^64 bits +- * long. Although SHA-1 allows a message digest to be generated +- * for messages of any number of bits less than 2^64, this +- * implementation only works with messages with a length that is +- * a multiple of the size of an 8-bit character. +- * +- * See sha1.h for copyright +- */ +- +-#include "sha1.h" +- +-/* +- * Define the SHA1 circular left shift macro +- */ +-#define SHA1CircularShift(bits,word) \ +- (((word) << (bits)) | ((word) >> (32-(bits)))) +- +-/* Local Function Prototyptes */ +-static void SHA1PadMessage(SHA1Context *); +-static void SHA1ProcessMessageBlock(SHA1Context *); +- +-/* +- * SHA1Init +- * +- * Description: +- * This function will initialize the SHA1Context in preparation +- * for computing a new SHA1 message digest. +- * +- * Parameters: +- * context: [in/out] +- * The context to reset. +- * +- * Returns: +- * sha Error Code. +- * +- */ +-int SHA1Init(SHA1Context *context) +-{ +- if (!context) +- { +- return shaNull; +- } +- +- context->Length_Low = 0; +- context->Length_High = 0; +- context->Message_Block_Index = 0; +- +- context->Intermediate_Hash[0] = 0x67452301; +- context->Intermediate_Hash[1] = 0xEFCDAB89; +- context->Intermediate_Hash[2] = 0x98BADCFE; +- context->Intermediate_Hash[3] = 0x10325476; +- context->Intermediate_Hash[4] = 0xC3D2E1F0; +- +- context->Computed = 0; +- context->Corrupted = 0; +- +- return shaSuccess; +-} +- +-/* +- * SHA1Final +- * +- * Description: +- * This function will return the 160-bit message digest into the +- * Message_Digest array provided by the caller. +- * NOTE: The first octet of hash is stored in the 0th element, +- * the last octet of hash in the 19th element. +- * +- * Parameters: +- * context: [in/out] +- * The context to use to calculate the SHA-1 hash. +- * Message_Digest: [out] +- * Where the digest is returned. +- * +- * Returns: +- * sha Error Code. +- * +- */ +-int SHA1Final(SHA1Context *context, +- uint8_t Message_Digest[SHA1HashSize]) +-{ +- int i; +- +- if (!context || !Message_Digest) { +- return shaNull; +- } +- +- if (context->Corrupted) { +- return context->Corrupted; +- } +- +- if (!context->Computed) { +- SHA1PadMessage(context); +- for(i=0; i<64; ++i) { +- /* message may be sensitive, clear it out */ +- context->Message_Block[i] = 0; +- } +- context->Length_Low = 0; /* and clear length */ +- context->Length_High = 0; +- context->Computed = 1; +- +- } +- +- for(i = 0; i < SHA1HashSize; ++i) { +- Message_Digest[i] = context->Intermediate_Hash[i>>2] +- >> 8 * ( 3 - ( i & 0x03 ) ); +- } +- +- return shaSuccess; +-} +- +-/* +- * SHA1Update +- * +- * Description: +- * This function accepts an array of octets as the next portion +- * of the message. +- * +- * Parameters: +- * context: [in/out] +- * The SHA context to update +- * message_array: [in] +- * An array of characters representing the next portion of +- * the message. +- * length: [in] +- * The length of the message in message_array +- * +- * Returns: +- * sha Error Code. +- * +- */ +-int SHA1Update(SHA1Context *context, +- const uint8_t *message_array, +- unsigned length) +-{ +- if (!length) { +- return shaSuccess; +- } +- +- if (!context || !message_array) { +- return shaNull; +- } +- +- if (context->Computed) { +- context->Corrupted = shaStateError; +- +- return shaStateError; +- } +- +- if (context->Corrupted) { +- return context->Corrupted; +- } +- while(length-- && !context->Corrupted) { +- context->Message_Block[context->Message_Block_Index++] = +- (*message_array & 0xFF); +- +- context->Length_Low += 8; +- if (context->Length_Low == 0) { +- context->Length_High++; +- if (context->Length_High == 0) { +- /* Message is too long */ +- context->Corrupted = 1; +- } +- } +- +- if (context->Message_Block_Index == 64) { +- SHA1ProcessMessageBlock(context); +- } +- +- message_array++; +- } +- +- return shaSuccess; +-} +- +-/* +- * SHA1ProcessMessageBlock +- * +- * Description: +- * This function will process the next 512 bits of the message +- * stored in the Message_Block array. +- * +- * Parameters: +- * None. +- * +- * Returns: +- * Nothing. +- * +- * Comments: +- +- * Many of the variable names in this code, especially the +- * single character names, were used because those were the +- * names used in the publication. +- * +- * +- */ +-static void SHA1ProcessMessageBlock(SHA1Context *context) +-{ +- const uint32_t K[] = { /* Constants defined in SHA-1 */ +- 0x5A827999, +- 0x6ED9EBA1, +- 0x8F1BBCDC, +- 0xCA62C1D6 +- }; +- int t; /* Loop counter */ +- uint32_t temp; /* Temporary word value */ +- uint32_t W[80]; /* Word sequence */ +- uint32_t A, B, C, D, E; /* Word buffers */ +- +- /* +- * Initialize the first 16 words in the array W +- */ +- for(t = 0; t < 16; t++) { +- W[t] = context->Message_Block[t * 4] << 24; +- W[t] |= context->Message_Block[t * 4 + 1] << 16; +- W[t] |= context->Message_Block[t * 4 + 2] << 8; +- W[t] |= context->Message_Block[t * 4 + 3]; +- } +- +- for(t = 16; t < 80; t++) { +- W[t] = SHA1CircularShift(1,W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16]); +- } +- +- A = context->Intermediate_Hash[0]; +- B = context->Intermediate_Hash[1]; +- C = context->Intermediate_Hash[2]; +- D = context->Intermediate_Hash[3]; +- E = context->Intermediate_Hash[4]; +- +- for(t = 0; t < 20; t++) { +- temp = SHA1CircularShift(5,A) + +- ((B & C) | ((~B) & D)) + E + W[t] + K[0]; +- E = D; +- D = C; +- C = SHA1CircularShift(30,B); +- +- B = A; +- A = temp; +- } +- +- for(t = 20; t < 40; t++) { +- temp = SHA1CircularShift(5,A) + (B ^ C ^ D) + E + W[t] + K[1]; +- E = D; +- D = C; +- C = SHA1CircularShift(30,B); +- B = A; +- A = temp; +- } +- +- for(t = 40; t < 60; t++) { +- temp = SHA1CircularShift(5,A) + +- ((B & C) | (B & D) | (C & D)) + E + W[t] + K[2]; +- E = D; +- D = C; +- C = SHA1CircularShift(30,B); +- B = A; +- A = temp; +- } +- +- for(t = 60; t < 80; t++) { +- temp = SHA1CircularShift(5,A) + (B ^ C ^ D) + E + W[t] + K[3]; +- E = D; +- D = C; +- C = SHA1CircularShift(30,B); +- B = A; +- A = temp; +- } +- +- context->Intermediate_Hash[0] += A; +- context->Intermediate_Hash[1] += B; +- context->Intermediate_Hash[2] += C; +- context->Intermediate_Hash[3] += D; +- context->Intermediate_Hash[4] += E; +- +- context->Message_Block_Index = 0; +-} +- +-/* +- * SHA1PadMessage +- * +- +- * Description: +- * According to the standard, the message must be padded to an even +- * 512 bits. The first padding bit must be a '1'. The last 64 +- * bits represent the length of the original message. All bits in +- * between should be 0. This function will pad the message +- * according to those rules by filling the Message_Block array +- * accordingly. It will also call the ProcessMessageBlock function +- * provided appropriately. When it returns, it can be assumed that +- * the message digest has been computed. +- * +- * Parameters: +- * context: [in/out] +- * The context to pad +- * ProcessMessageBlock: [in] +- * The appropriate SHA*ProcessMessageBlock function +- * Returns: +- * Nothing. +- * +- */ +- +-static void SHA1PadMessage(SHA1Context *context) +-{ +- /* +- * Check to see if the current message block is too small to hold +- * the initial padding bits and length. If so, we will pad the +- * block, process it, and then continue padding into a second +- * block. +- */ +- if (context->Message_Block_Index > 55) { +- context->Message_Block[context->Message_Block_Index++] = 0x80; +- while(context->Message_Block_Index < 64) { +- context->Message_Block[context->Message_Block_Index++] = 0; +- } +- +- SHA1ProcessMessageBlock(context); +- +- while(context->Message_Block_Index < 56) { +- context->Message_Block[context->Message_Block_Index++] = 0; +- } +- } else { +- context->Message_Block[context->Message_Block_Index++] = 0x80; +- while(context->Message_Block_Index < 56) { +- +- context->Message_Block[context->Message_Block_Index++] = 0; +- } +- } +- +- /* +- * Store the message length as the last 8 octets +- */ +- context->Message_Block[56] = context->Length_High >> 24; +- context->Message_Block[57] = context->Length_High >> 16; +- context->Message_Block[58] = context->Length_High >> 8; +- context->Message_Block[59] = context->Length_High; +- context->Message_Block[60] = context->Length_Low >> 24; +- context->Message_Block[61] = context->Length_Low >> 16; +- context->Message_Block[62] = context->Length_Low >> 8; +- context->Message_Block[63] = context->Length_Low; +- +- SHA1ProcessMessageBlock(context); +-} +- +- +-#ifndef TEST_PROGRAM +-#define TEST_PROGRAM_A +-#endif +- +-#ifdef TEST_PROGRAM +-/* +- * sha1test.c +- * +- * Description: +- * This file will exercise the SHA-1 code performing the three +- * tests documented in FIPS PUB 180-1 plus one which calls +- * SHA1Input with an exact multiple of 512 bits, plus a few +- * error test checks. +- * +- * Portability Issues: +- * None. +- * +- */ +- +-#include +-#include +-#include +-#include "sha1.h" +-#include "unittests.h" +- +-#define NRTESTS 4 +- +-/* +- * Define patterns for testing +- */ +-#define TEST1 "abc" +-#define TEST2a "abcdbcdecdefdefgefghfghighijhi" +- +-#define TEST2b "jkijkljklmklmnlmnomnopnopq" +-#define TEST2 TEST2a TEST2b +-#define TEST3 "a" +-#define TEST4a "01234567012345670123456701234567" +-#define TEST4b "01234567012345670123456701234567" +- /* an exact multiple of 512 bits */ +-#define TEST4 TEST4a TEST4b +- +-const char *testarray[NRTESTS] = +-{ +- TEST1, +- TEST2, +- TEST3, +- TEST4 +-}; +- +-int repeatcount[NRTESTS] = { 1, 1, 1000000, 10 }; +- +-const uint8_t resultarray[NRTESTS][20] = +-{ +- { 0xA9, 0x99, 0x3E, 0x36, 0x47, 0x06, 0x81, 0x6A, 0xBA, 0x3E, 0x25, 0x71, 0x78, 0x50, 0xC2, 0x6C, 0x9C, 0xD0, 0xD8, 0x9D }, +- { 0x84, 0x98, 0x3E, 0x44, 0x1C, 0x3B, 0xD2, 0x6E, 0xBA, 0xAE, 0x4A, 0xA1, 0xF9, 0x51, 0x29, 0xE5, 0xE5, 0x46, 0x70, 0xF1 }, +- { 0x34, 0xAA, 0x97, 0x3C, 0xD4, 0xC4, 0xDA, 0xA4, 0xF6, 0x1E, 0xEB, 0x2B, 0xDB, 0xAD, 0x27, 0x31, 0x65, 0x34, 0x01, 0x6F }, +- { 0xDE, 0xA3, 0x56, 0xA2, 0xCD, 0xDD, 0x90, 0xC7, 0xA7, 0xEC, 0xED, 0xC5, 0xEB, 0xB5, 0x63, 0x93, 0x4F, 0x46, 0x04, 0x52 }, +-}; +- +-int main() +-{ +- Unittests sha1_test("sha1_test"); +- SHA1Context sha; +- int i, j, err; +- uint8_t Message_Digest[20]; +- bool check_cont; +- bool ct; +- +- /* +- * Perform SHA-1 tests +- */ +- for(j = 0; j < 4; ++j) { +- // printf( "\nTest %d: %d, '%s'\n", j+1, repeatcount[j], testarray[j]); +- err = SHA1Init(&sha); +- nok(err, "Test SHA1Init"); +- if (err) { +- break; /* out of for j loop */ +- } +- ct = true; +- for(i = 0; i < repeatcount[j]; ++i) { +- err = SHA1Update(&sha, (const unsigned char *) testarray[j], strlen(testarray[j])); +- if (i < 5){ +- nok(err, "Test SHA1Update"); +- } +- if (ct && repeatcount[j] > 4 && i > 4){ +- ct = false; +- printf("...\n"); +- } +- if (err) { +- nok(err, "Test SHA1Update"); +- break; /* out of for i loop */ +- } +- } +- +- err = SHA1Final(&sha, Message_Digest); +- nok(err, "Test SHA1Final"); +- check_cont = true; +- for(i = 0; i < 20 ; ++i) { +- if (Message_Digest[i] != resultarray[j][i]){ +- check_cont = false; +- } +- } +- ok(check_cont, "Checking expected result"); +- } +- +- /* Test some error returns */ +- err = SHA1Update(&sha,(const unsigned char *) testarray[1], 1); +- ok(err == shaStateError, "Checking for shaStateError"); +- err = SHA1Init(0); +- ok(err == shaNull, "Checking for shaNull"); +- +- return report(); +-} +- +-#endif /* TEST_PROGRAM */ +- +-#ifdef SHA1_SUM +-/* +- * Reads a single ASCII file and prints the HEX sha1 sum. +- */ +-#include +-int main(int argc, char *argv[]) +-{ +- FILE *fd; +- SHA1Context ctx; +- char buf[5000]; +- char signature[25]; +- +- if (argc < 1) { +- printf("Must have filename\n"); +- exit(1); +- } +- fd = fopen(argv[1], "rb"); +- if (!fd) { +- berrno be; +- printf("Could not open %s: ERR=%s\n", argv[1], be.bstrerror(errno)); +- exit(1); +- } +- SHA1Init(&ctx); +- while (fgets(buf, sizeof(buf), fd)) { +- SHA1Update(&ctx, (unsigned char *)buf, strlen(buf)); +- } +- SHA1Final(&ctx, (unsigned char *)signature); +- for (int i=0; i < 20; i++) { +- printf("%02x", signature[i]& 0xFF); +- } +- printf(" %s\n", argv[1]); +- fclose(fd); +-} +-#endif /* SHA1_SUM */ +diff -Naur bacula-11.0.1.old/src/lib/sha1.h bacula-11.0.1/src/lib/sha1.h +--- bacula-11.0.1.old/src/lib/sha1.h 2021-02-11 14:09:48.599047264 +0100 ++++ bacula-11.0.1/src/lib/sha1.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,107 +0,0 @@ +-/* +- * sha1.h +- * +- * Description: +- * This is the header file for code which implements the Secure +- * Hashing Algorithm 1 as defined in FIPS PUB 180-1 published +- * April 17, 1995. +- * +- * Many of the variable names in this code, especially the +- * single character names, were used because those were the names +- * used in the publication. +- * +- * Please read the file sha1.c for more information. +- * +- * Full Copyright Statement +- * +- * Copyright (C) The Internet Society (2001). All Rights Reserved. +- * +- * This document and translations of it may be copied and furnished to +- * others, and derivative works that comment on or otherwise explain it +- * or assist in its implementation may be prepared, copied, published +- * and distributed, in whole or in part, without restriction of any +- * kind, provided that the above copyright notice and this paragraph are +- * included on all such copies and derivative works. However, this +- * document itself may not be modified in any way, such as by removing +- * the copyright notice or references to the Internet Society or other +- * Internet organizations, except as needed for the purpose of +- * developing Internet standards in which case the procedures for +- * copyrights defined in the Internet Standards process must be +- * followed, or as required to translate it into languages other than +- * English. +- * +- * The limited permissions granted above are perpetual and will not be +- * revoked by the Internet Society or its successors or assigns. +- * +- * This document and the information contained herein is provided on an +- * "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING +- * TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING +- * BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION +- * HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF +- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. +- * +- * Acknowledgement +- * +- * Funding for the RFC Editor function is currently provided by the +- * Internet Society. +- * +- */ +- +-#ifndef _SHA1_H_ +-#define _SHA1_H_ +- +-#include "bacula.h" +- +-/* +- * If you do not have the ISO standard stdint.h header file, then you +- * must typdef the following: +- * name meaning +- * uint32_t unsigned 32 bit integer +- * uint8_t unsigned 8 bit integer (i.e., unsigned char) +- * int32_t integer of 32 bits +- * +- */ +- +-#ifndef _SHA_enum_ +-#define _SHA_enum_ +-enum +-{ +- shaSuccess = 0, +- shaNull, /* Null pointer parameter */ +- shaInputTooLong, /* input data too long */ +- shaStateError /* called Input after Result */ +-}; +-#endif +-#define SHA1HashSize 20 +- +-/* +- * This structure will hold context information for the SHA-1 +- * hashing operation +- */ +-typedef struct SHA1Context +-{ +- uint32_t Intermediate_Hash[SHA1HashSize/4]; /* Message Digest */ +- +- uint32_t Length_Low; /* Message length in bits */ +- uint32_t Length_High; /* Message length in bits */ +- +- /* Index into message block array */ +- int32_t Message_Block_Index; +- uint8_t Message_Block[64]; /* 512-bit message blocks */ +- +- int Computed; /* Is the digest computed? */ +- int Corrupted; /* Is the message digest corrupted? */ +-} SHA1Context; +- +-/* +- * Function Prototypes +- */ +- +-int SHA1Init(SHA1Context *); +-int SHA1Update(SHA1Context *, +- const uint8_t *, +- unsigned int); +-int SHA1Final(SHA1Context *, +- uint8_t Message_Digest[SHA1HashSize]); +- +-#endif diff --git a/SOURCES/bacula-openssl.patch b/SOURCES/bacula-openssl.patch new file mode 100644 index 0000000..1d87083 --- /dev/null +++ b/SOURCES/bacula-openssl.patch @@ -0,0 +1,43 @@ +diff -Naur bacula-11.0.1.old/src/lib/crypto.c bacula-11.0.1/src/lib/crypto.c +--- bacula-11.0.1.old/src/lib/crypto.c 2021-02-11 14:08:38.220885976 +0100 ++++ bacula-11.0.1/src/lib/crypto.c 2021-02-11 14:08:42.518956898 +0100 +@@ -42,7 +42,7 @@ + * For OpenSSL version 1.x, EVP_PKEY_encrypt no longer + * exists. It was not an official API. + */ +-#ifdef HAVE_OPENSSLv1 ++#if (OPENSSL_VERSION_NUMBER >= 0x10000000L) + #define EVP_PKEY_encrypt EVP_PKEY_encrypt_old + #define EVP_PKEY_decrypt EVP_PKEY_decrypt_old + #endif +diff -Naur bacula-11.0.1.old/src/lib/tls.c bacula-11.0.1/src/lib/tls.c +--- bacula-11.0.1.old/src/lib/tls.c 2021-02-11 14:08:38.218885943 +0100 ++++ bacula-11.0.1/src/lib/tls.c 2021-02-11 14:08:42.565957674 +0100 +@@ -47,9 +47,6 @@ + + #include "openssl-compat.h" + +-/* No anonymous ciphers, no <128 bit ciphers, no export ciphers, no MD5 ciphers */ +-#define TLS_DEFAULT_CIPHERS "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH" +- + /* TLS Context Structure */ + struct TLS_Context { + SSL_CTX *openssl; +@@ -350,7 +347,7 @@ + SSL_CTX_set_options(ctx->openssl, SSL_OP_SINGLE_DH_USE); + } + +- if (SSL_CTX_set_cipher_list(ctx->openssl, TLS_DEFAULT_CIPHERS) != 1) { ++ if (SSL_CTX_set_cipher_list(ctx->openssl, "PROFILE=SYSTEM") != 1) { + Jmsg0(NULL, M_ERROR, 0, + _("Error setting cipher list, no valid ciphers available\n")); + goto err; +@@ -551,7 +548,7 @@ + extname = OBJ_nid2sn(OBJ_obj2nid(X509_EXTENSION_get_object(ext))); + + if (strcmp(extname, "subjectAltName") == 0) { +-#ifdef HAVE_OPENSSLv1 ++#if (OPENSSL_VERSION_NUMBER >= 0x10000000L) + const X509V3_EXT_METHOD *method; + #else + X509V3_EXT_METHOD *method; diff --git a/SOURCES/bacula-queryfile.patch b/SOURCES/bacula-queryfile.patch new file mode 100644 index 0000000..16b8312 --- /dev/null +++ b/SOURCES/bacula-queryfile.patch @@ -0,0 +1,39 @@ +diff -Naur bacula-11.0.0.old/src/dird/bacula-dir.conf.in bacula-11.0.0/src/dird/bacula-dir.conf.in +--- bacula-11.0.0.old/src/dird/bacula-dir.conf.in 2021-01-12 12:36:32.650470459 +0100 ++++ bacula-11.0.0/src/dird/bacula-dir.conf.in 2021-01-12 12:36:38.297573839 +0100 +@@ -18,7 +18,7 @@ + Director { # define myself + Name = @basename@-dir + DIRport = @dir_port@ # where we listen for UA connections +- QueryFile = "@scriptdir@/query.sql" ++ QueryFile = "@sysconfdir@/query.sql" + WorkingDirectory = "@working_dir@" + PidDirectory = "@piddir@" + Maximum Concurrent Jobs = 20 +diff -Naur bacula-11.0.0.old/src/dird/Makefile.in bacula-11.0.0/src/dird/Makefile.in +--- bacula-11.0.0.old/src/dird/Makefile.in 2021-01-12 12:36:32.657470588 +0100 ++++ bacula-11.0.0/src/dird/Makefile.in 2021-01-12 12:37:37.827663637 +0100 +@@ -125,11 +125,11 @@ + @if test "x${dir_group}" != "x"; then \ + chgrp -f ${dir_group} ${DESTDIR}${sysconfdir}/$$destconf ; \ + fi +- @if test -f ${DESTDIR}${scriptdir}/query.sql; then \ ++ @if test -f ${DESTDIR}${sysconfdir}/query.sql; then \ + echo " ==> Saving existing query.sql to query.sql.old"; \ +- $(MV) -f ${DESTDIR}${scriptdir}/query.sql ${DESTDIR}${scriptdir}/query.sql.old; \ ++ $(MV) -f ${DESTDIR}${sysconfdir}/query.sql ${DESTDIR}${sysconfdir}/query.sql.old; \ + fi +- ${INSTALL_DATA} query.sql ${DESTDIR}${scriptdir}/query.sql ++ ${INSTALL_DATA} query.sql ${DESTDIR}${sysconfdir}/query.sql + @if test -f static-bacula-dir; then \ + $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) static-bacula-dir $(DESTDIR)$(sbindir)/static-bacula-dir; \ + fi +@@ -138,7 +138,7 @@ + uninstall: + (cd $(DESTDIR)$(sbindir); $(RMF) bacula-dir bdirjson) + (cd $(DESTDIR)$(sysconfdir); $(RMF) bacula-dir.conf bacula-dir.conf.new) +- (cd $(DESTDIR)$(scriptdir); $(RMF) query.sql) ++ (cd $(DESTDIR)$(sysconfdir); $(RMF) query.sql) + + + diff --git a/SOURCES/bacula-sd.service b/SOURCES/bacula-sd.service new file mode 100644 index 0000000..e05e94b --- /dev/null +++ b/SOURCES/bacula-sd.service @@ -0,0 +1,13 @@ +[Unit] +Description=Bacula Storage Daemon +Documentation=man:bacula-sd(8) +After=network.target nss-lookup.target + +[Service] +Environment=CONFIG=/etc/bacula/bacula-sd.conf +EnvironmentFile=-/etc/sysconfig/bacula-sd +ExecStart=/usr/sbin/bacula-sd -f $OPTS -c $CONFIG -u $SD_USER -g $SD_GROUP +Restart=on-failure + +[Install] +WantedBy=multi-user.target diff --git a/SOURCES/bacula-sd.sysconfig b/SOURCES/bacula-sd.sysconfig new file mode 100644 index 0000000..d3c5c48 --- /dev/null +++ b/SOURCES/bacula-sd.sysconfig @@ -0,0 +1,9 @@ +# Users for bacula storage +# If no user is set bacula will run as root + +SD_USER=bacula +SD_GROUP=tape + +# Useful for debugging +# +# OPTS="-d 200" diff --git a/SOURCES/bacula-seg-fault.patch b/SOURCES/bacula-seg-fault.patch new file mode 100644 index 0000000..be28655 --- /dev/null +++ b/SOURCES/bacula-seg-fault.patch @@ -0,0 +1,21 @@ +diff -Naur bacula-11.0.0.old/src/lib/message.c bacula-11.0.0/src/lib/message.c +--- bacula-11.0.0.old/src/lib/message.c 2021-01-12 12:36:32.630470094 +0100 ++++ bacula-11.0.0/src/lib/message.c 2021-01-12 12:39:42.477945569 +0100 +@@ -28,6 +28,7 @@ + * + */ + ++#include + #include "bacula.h" + #include "jcr.h" + +@@ -1476,7 +1477,8 @@ + + if (type == M_ABORT) { + char *p = 0; +- p[0] = 0; /* generate segmentation violation */ ++ // p[0] = 0; /* generate segmentation violation */ ++ assert(p!=NULL); + } + if (type == M_ERROR_TERM) { + exit(1); diff --git a/SOURCES/bacula-sqlite-priv.patch b/SOURCES/bacula-sqlite-priv.patch new file mode 100644 index 0000000..20b0fb7 --- /dev/null +++ b/SOURCES/bacula-sqlite-priv.patch @@ -0,0 +1,9 @@ +diff -Naur bacula-11.0.0.old/src/cats/make_sqlite3_tables.in bacula-11.0.0/src/cats/make_sqlite3_tables.in +--- bacula-11.0.0.old/src/cats/make_sqlite3_tables.in 2021-01-12 12:36:32.660470643 +0100 ++++ bacula-11.0.0/src/cats/make_sqlite3_tables.in 2021-01-12 12:38:45.241897767 +0100 +@@ -555,4 +555,5 @@ + echo "" + + chmod 640 ${db_name}.db ++chown bacula:bacula ${db_name}.db + exit 0 diff --git a/SOURCES/bacula-use-crypto-from-openssl.patch b/SOURCES/bacula-use-crypto-from-openssl.patch new file mode 100644 index 0000000..80608c1 --- /dev/null +++ b/SOURCES/bacula-use-crypto-from-openssl.patch @@ -0,0 +1,296 @@ +Author: Vaclav Dolezal +Date: Mon Aug 12 14:51:39 2019 +0200 + + Use functions from OpenSSL for HMAC, MD5 and random bytes + +diff -up bacula-11.0.1/src/dird/dird_conf.c.orig bacula-11.0.1/src/dird/dird_conf.c +--- bacula-11.0.1/src/dird/dird_conf.c.orig 2021-02-05 22:23:44.000000000 +0100 ++++ bacula-11.0.1/src/dird/dird_conf.c 2022-02-11 19:43:38.870718113 +0100 +@@ -43,6 +43,10 @@ + #include "bacula.h" + #include "dird.h" + ++#if HAVE_OPENSSL ++# include ++#endif ++ + /* Define the first and last resource ID record + * types. Note, these should be unique for each + * daemon though not a requirement. +@@ -1783,6 +1787,11 @@ void free_resource(RES *rres, int type) + free(res->res_fs.exclude_items); + } + res->res_fs.num_excludes = 0; ++#if HAVE_OPENSSL ++ EVP_MD_CTX_free(res->res_fs.md5c); ++ res->res_fs.md5c = NULL; ++ res->res_fs.have_MD5 = false; ++#endif + break; + case R_POOL: + if (res->res_pool.pool_type) { +diff -up bacula-11.0.1/src/dird/dird_conf.h.orig bacula-11.0.1/src/dird/dird_conf.h +--- bacula-11.0.1/src/dird/dird_conf.h.orig 2021-02-05 22:23:44.000000000 +0100 ++++ bacula-11.0.1/src/dird/dird_conf.h 2022-02-11 19:43:38.870718113 +0100 +@@ -25,6 +25,10 @@ + + /* NOTE: #includes at the end of this file */ + ++#if HAVE_OPENSSL ++# include ++#endif ++ + /* + * Resource codes -- they must be sequential for indexing + */ +@@ -608,7 +612,11 @@ public: + INCEXE **exclude_items; + int32_t num_excludes; + bool have_MD5; /* set if MD5 initialized */ ++#if HAVE_OPENSSL ++ EVP_MD_CTX *md5c; /* MD5 of include/exclude */ ++#else + struct MD5Context md5c; /* MD5 of include/exclude */ ++#endif + char MD5[30]; /* base 64 representation of MD5 */ + bool ignore_fs_changes; /* Don't force Full if FS changed */ + bool enable_vss; /* Enable Volume Shadow Copy */ +diff -up bacula-11.0.1/src/dird/inc_conf.c.orig bacula-11.0.1/src/dird/inc_conf.c +--- bacula-11.0.1/src/dird/inc_conf.c.orig 2021-02-05 22:23:44.000000000 +0100 ++++ bacula-11.0.1/src/dird/inc_conf.c 2022-02-11 19:43:38.870718113 +0100 +@@ -32,6 +32,10 @@ + #include + #endif + ++#if HAVE_OPENSSL ++# include ++#endif ++ + /* Forward referenced subroutines */ + + void store_inc(LEX *lc, RES_ITEM *item, int index, int pass); +@@ -390,7 +394,17 @@ static void store_newinc(LEX *lc, RES_IT + bool options; + + if (!res_all.res_fs.have_MD5) { ++#if HAVE_OPENSSL ++ res_all.res_fs.md5c = EVP_MD_CTX_new(); ++ if (!res_all.res_fs.md5c ++ || !EVP_DigestInit_ex(res_all.res_fs.md5c, EVP_md5(), NULL) ++ ) { ++ Emsg1(M_ERROR_TERM, 0, "MD5 computation failed: %s\n", ++ ERR_reason_error_string(ERR_peek_last_error())); ++ } ++#else + MD5Init(&res_all.res_fs.md5c); ++#endif + res_all.res_fs.have_MD5 = true; + } + bmemset(&res_incexe, 0, sizeof(INCEXE)); +@@ -656,7 +670,13 @@ static void store_fname(LEX *lc, RES_ITE + } + case T_QUOTED_STRING: + if (res_all.res_fs.have_MD5) { ++#if HAVE_OPENSSL ++ if (!EVP_DigestUpdate(res_all.res_fs.md5c, (void *)lc->str, (size_t) lc->str_len)) ++ Emsg1(M_ERROR_TERM, 0, "MD5 computation failed: %s\n", ++ ERR_reason_error_string(ERR_peek_last_error())); ++#else + MD5Update(&res_all.res_fs.md5c, (unsigned char *)lc->str, lc->str_len); ++#endif + } + incexe = &res_incexe; + if (incexe->name_list.size() == 0) { +@@ -699,7 +719,13 @@ static void store_plugin_name(LEX *lc, R + } + case T_QUOTED_STRING: + if (res_all.res_fs.have_MD5) { ++#if HAVE_OPENSSL ++ if (!EVP_DigestUpdate(res_all.res_fs.md5c, (void *)lc->str, (size_t) lc->str_len)) ++ Emsg1(M_ERROR_TERM, 0, "MD5 computation failed: %s\n", ++ ERR_reason_error_string(ERR_peek_last_error())); ++#else + MD5Update(&res_all.res_fs.md5c, (unsigned char *)lc->str, lc->str_len); ++#endif + } + incexe = &res_incexe; + if (incexe->plugin_list.size() == 0) { +diff -up bacula-11.0.1/src/dird/job.c.orig bacula-11.0.1/src/dird/job.c +--- bacula-11.0.1/src/dird/job.c.orig 2021-02-05 22:23:44.000000000 +0100 ++++ bacula-11.0.1/src/dird/job.c 2022-02-11 19:43:38.871718095 +0100 +@@ -27,6 +27,10 @@ + #include "bacula.h" + #include "dird.h" + ++#if HAVE_OPENSSL ++# include ++#endif ++ + /* Forward referenced subroutines */ + static void *job_thread(void *arg); + static void job_monitor_watchdog(watchdog_t *self); +@@ -1342,10 +1346,27 @@ bool get_or_create_fileset_record(JCR *j + memset(&fsr, 0, sizeof(FILESET_DBR)); + bstrncpy(fsr.FileSet, jcr->fileset->hdr.name, sizeof(fsr.FileSet)); + if (jcr->fileset->have_MD5) { ++#if HAVE_OPENSSL ++ EVP_MD_CTX *mdctx = EVP_MD_CTX_new(); ++ if (!mdctx) ++ Emsg1(M_ERROR_TERM, 0, "MD5 computation failed: %s\n", ++ ERR_reason_error_string(ERR_peek_last_error())); ++#else + struct MD5Context md5c; ++#endif + unsigned char digest[MD5HashSize]; ++#if HAVE_OPENSSL ++ if (!EVP_MD_CTX_copy_ex(mdctx, jcr->fileset->md5c) ++ || !EVP_DigestFinal_ex(mdctx, digest, NULL) ++ ) { ++ Emsg1(M_ERROR_TERM, 0, "MD5 computation failed: %s\n", ++ ERR_reason_error_string(ERR_peek_last_error())); ++ } ++ EVP_MD_CTX_free(mdctx); ++#else + memcpy(&md5c, &jcr->fileset->md5c, sizeof(md5c)); + MD5Final(digest, &md5c); ++#endif + /* + * Keep the flag (last arg) set to false otherwise old FileSets will + * get new MD5 sums and the user will get Full backups on everything +diff -up bacula-11.0.1/src/lib/hmac.c.orig bacula-11.0.1/src/lib/hmac.c +--- bacula-11.0.1/src/lib/hmac.c.orig 2021-02-05 22:23:44.000000000 +0100 ++++ bacula-11.0.1/src/lib/hmac.c 2022-02-11 19:43:38.871718095 +0100 +@@ -26,6 +26,10 @@ + */ + #include "bacula.h" + ++#if HAVE_OPENSSL ++# include ++#endif ++ + #define PAD_LEN 64 /* PAD length */ + #define SIG_LEN MD5HashSize /* MD5 digest length */ + +@@ -36,6 +40,19 @@ hmac_md5( + uint8_t* key, /* pointer to authentication key */ + int key_len, /* length of authentication key */ + uint8_t *hmac) /* returned hmac-md5 */ ++#if HAVE_OPENSSL ++{ ++ if (!HMAC( ++ EVP_md5(), ++ key, key_len, ++ text, text_len, ++ hmac, NULL ++ )) { ++ Emsg0(M_ERROR_TERM, 0, "HMAC computation failed\n"); ++ } ++ ++} ++#else + { + MD5Context md5c; + uint8_t k_ipad[PAD_LEN]; /* inner padding - key XORd with ipad */ +@@ -90,6 +107,7 @@ hmac_md5( + MD5Update(&md5c, hmac, SIG_LEN); /* hash inner hash */ + MD5Final(hmac, &md5c); /* store results */ + } ++#endif + /* + Test Vectors (Trailing '\0' of a character string not included in test): + +diff -up bacula-11.0.1/src/lib/parse_conf.c.orig bacula-11.0.1/src/lib/parse_conf.c +--- bacula-11.0.1/src/lib/parse_conf.c.orig 2021-02-05 22:23:44.000000000 +0100 ++++ bacula-11.0.1/src/lib/parse_conf.c 2022-02-11 19:43:38.871718095 +0100 +@@ -59,6 +59,10 @@ + #define MAX_PATH 1024 + #endif + ++#if HAVE_OPENSSL ++# include ++#endif ++ + /* + * Define the Union of all the common resource structure definitions. + */ +@@ -588,7 +592,11 @@ void store_dir(LEX *lc, RES_ITEM *item, + void store_password(LEX *lc, RES_ITEM *item, int index, int pass) + { + unsigned int i, j; ++#if HAVE_OPENSSL ++ EVP_MD_CTX *mdctx = NULL; ++#else + struct MD5Context md5c; ++#endif + unsigned char digest[CRYPTO_DIGEST_MD5_SIZE]; + char sig[100]; + +@@ -598,9 +606,21 @@ void store_password(LEX *lc, RES_ITEM *i + } else { + lex_get_token(lc, T_STRING); + if (pass == 1) { ++#if HAVE_OPENSSL ++ mdctx = EVP_MD_CTX_new(); ++ if (!mdctx ++ || !EVP_DigestInit_ex(mdctx, EVP_md5(), NULL) ++ || !EVP_DigestUpdate(mdctx, (const void *) lc->str, (size_t) lc->str_len) ++ || !EVP_DigestFinal_ex(mdctx, digest, NULL) ++ ) { ++ Emsg1(M_ERROR_TERM, 0, "MD5 computation failed: %s\n", ++ ERR_reason_error_string(ERR_peek_last_error())); ++ } ++#else + MD5Init(&md5c); + MD5Update(&md5c, (unsigned char *) (lc->str), lc->str_len); + MD5Final(digest, &md5c); ++#endif + for (i = j = 0; i < sizeof(digest); i++) { + sprintf(&sig[j], "%02x", digest[i]); + j += 2; +diff -up bacula-11.0.1/src/lib/util.c.orig bacula-11.0.1/src/lib/util.c +--- bacula-11.0.1/src/lib/util.c.orig 2021-02-05 22:23:44.000000000 +0100 ++++ bacula-11.0.1/src/lib/util.c 2022-02-11 19:43:38.872718077 +0100 +@@ -707,6 +707,35 @@ int do_shell_expansion(char *name, int n + from SpeakFreely by John Walker */ + + void make_session_key(char *key, char *seed, int mode) ++#if HAVE_OPENSSL ++{ ++ int j, k; ++ unsigned char buf[16]; ++ ++ (void) seed; ++ ++ if (!RAND_bytes(buf, sizeof(buf))) ++ Emsg1(M_ERROR_TERM, 0, "Random bytes generation failed: %s\n", ++ ERR_reason_error_string(ERR_peek_last_error())); ++ ++ if (mode) { ++ for (j = k = 0; j < 16; j++) { ++ unsigned char rb = buf[j]; ++ ++#define Rad16(x) ((x) + 'A') ++ key[k++] = Rad16((rb >> 4) & 0xF); ++ key[k++] = Rad16(rb & 0xF); ++#undef Rad16 ++ if (j & 1) { ++ key[k++] = '-'; ++ } ++ } ++ key[--k] = 0; ++ } else { ++ memcpy(key, buf, sizeof(buf)); ++ } ++} ++#else + { + int j, k; + struct MD5Context md5c; +@@ -790,6 +819,7 @@ void make_session_key(char *key, char *s + } + } + #undef nextrand ++#endif + + void encode_session_key(char *encode, char *session, char *key, int maxlen) + { diff --git a/SOURCES/bacula.logrotate b/SOURCES/bacula.logrotate new file mode 100644 index 0000000..c14fede --- /dev/null +++ b/SOURCES/bacula.logrotate @@ -0,0 +1,9 @@ +# Bacula logrotate script + +/var/log/bacula/*.log { + monthly + rotate 4 + notifempty + missingok +} + diff --git a/SOURCES/quickstart_mysql.txt b/SOURCES/quickstart_mysql.txt new file mode 100644 index 0000000..e923357 --- /dev/null +++ b/SOURCES/quickstart_mysql.txt @@ -0,0 +1,55 @@ +======== Quick installation guide with the MySQL backend ======== + +Perform the following commands to install Bacula with its default configuration +and all daemons and consoles in one server. + +1) Install packages + +# yum -y install mysql-server \ + bacula-director bacula-storage bacula-client \ + bacula-console bacula-console-bat + +2) Select the MySQL database backend + +# alternatives --set libbaccats.so /usr/lib64/libbaccats-mysql.so + +3) Create database + +# systemctl enable mysqld.service +# systemctl start mysqld.service + +# cd /usr/libexec/bacula +# ./create_bacula_database mysql +# ./make_bacula_tables mysql +# ./grant_bacula_privileges mysql + +4) Change passwords in /etc/bacula/*.conf with something you like. + +# sed -i -e 's/@@DIR_PASSWORD@@/dir-password/g' \ + -e 's/@@FD_PASSWORD@@/fd-password/g' \ + -e 's/@@SD_PASSWORD@@/sd-password/g' \ + -e 's/@@MON_DIR_PASSWORD@@/mon-dir-password/g' \ + -e 's/@@MON_FD_PASSWORD@@/mon-fd-password/g' \ + -e 's/@@MON_SD_PASSWORD@@/mon-sd-password/g' \ + /etc/bacula/*.conf + +5) Enable daemons and check they are working + +# systemctl enable bacula-dir.service +# systemctl enable bacula-sd.service +# systemctl enable bacula-fd.service + +# systemctl start bacula-dir.service +# echo status dir=bacula-dir | bconsole + +# systemctl start bacula-sd.service +# echo status storage=bacula-sd | bconsole + +# systemctl start bacula-fd.service +# echo status client=bacula-fd | bconsole + +6) To grant console access to regular users add the read permission to the +console configuration files. Remember that there is no authentication check; so +a user that can launch the console can perform any command. + +# chmod +r /etc/bacula/bconsole.conf /etc/bacula/bat.conf diff --git a/SOURCES/quickstart_postgresql.txt b/SOURCES/quickstart_postgresql.txt new file mode 100644 index 0000000..bb26666 --- /dev/null +++ b/SOURCES/quickstart_postgresql.txt @@ -0,0 +1,57 @@ +======== Quick installation guide with the default PostgreSQL backend ======== + +Perform the following commands to install Bacula with its default configuration +and all daemons and consoles in one server. + +1) Install packages + +# yum -y install postgresql-server \ + bacula-director bacula-storage bacula-client \ + bacula-console bacula-console-bat + +2) Select the PostgreSQL database backend + +# alternatives --set libbaccats.so /usr/lib64/libbaccats-postgresql.so + +3) Create database + +# postgresql-setup initdb +# systemctl enable postgresql.service +# systemctl start postgresql.service + +# su - postgres +$ cd /usr/libexec/bacula +$ ./create_bacula_database +$ ./make_bacula_tables +$ ./grant_bacula_privileges + +4) Change passwords in /etc/bacula/*.conf with something you like. + +# sed -i -e 's/@@DIR_PASSWORD@@/dir-password/g' \ + -e 's/@@FD_PASSWORD@@/fd-password/g' \ + -e 's/@@SD_PASSWORD@@/sd-password/g' \ + -e 's/@@MON_DIR_PASSWORD@@/mon-dir-password/g' \ + -e 's/@@MON_FD_PASSWORD@@/mon-fd-password/g' \ + -e 's/@@MON_SD_PASSWORD@@/mon-sd-password/g' \ + /etc/bacula/*.conf + +5) Enable daemons and check they are working + +# systemctl enable bacula-dir.service +# systemctl enable bacula-sd.service +# systemctl enable bacula-fd.service + +# systemctl start bacula-dir.service +# echo status dir=bacula-dir | bconsole + +# systemctl start bacula-sd.service +# echo status storage=bacula-sd | bconsole + +# systemctl start bacula-fd.service +# echo status client=bacula-fd | bconsole + +6) To grant console access to regular users add the read permission to the +console configuration files. Remember that there is no authentication check; so +a user that can launch the console can perform any command. + +# chmod +r /etc/bacula/bconsole.conf /etc/bacula/bat.conf diff --git a/SOURCES/quickstart_sqlite3.txt b/SOURCES/quickstart_sqlite3.txt new file mode 100644 index 0000000..fb684d5 --- /dev/null +++ b/SOURCES/quickstart_sqlite3.txt @@ -0,0 +1,52 @@ +======== Quick installation guide with the SQLite backend ======== + +Perform the following commands to install Bacula with its default configuration +and all daemons and consoles in one server. + +1) Install packages + +# yum -y install sqlite \ + bacula-director bacula-storage bacula-client \ + bacula-console bacula-console-bat + +2) Select the SQLite database backend + +# alternatives --set libbaccats.so /usr/lib64/libbaccats-sqlite3.so + +3) Create database + +# cd /usr/libexec/bacula +# ./create_bacula_database sqlite3 +# ./make_bacula_tables sqlite3 +# ./grant_bacula_privileges sqlite3 + +4) Change passwords in /etc/bacula/*.conf with something you like. + +# sed -i -e 's/@@DIR_PASSWORD@@/dir-password/g' \ + -e 's/@@FD_PASSWORD@@/fd-password/g' \ + -e 's/@@SD_PASSWORD@@/sd-password/g' \ + -e 's/@@MON_DIR_PASSWORD@@/mon-dir-password/g' \ + -e 's/@@MON_FD_PASSWORD@@/mon-fd-password/g' \ + -e 's/@@MON_SD_PASSWORD@@/mon-sd-password/g' \ + /etc/bacula/*.conf + +5) Enable daemons and check they are working + +# systemctl enable bacula-dir.service +# systemctl enable bacula-sd.service +# systemctl enable bacula-fd.service + +# systemctl start bacula-dir.service +# echo status dir=bacula-dir | bconsole + +# systemctl start bacula-sd.service +# echo status storage=bacula-sd | bconsole + +# systemctl start bacula-fd.service +# echo status client=bacula-fd | bconsole + +6) To grant console access to regular users add the read permission to the +console configuration files. Remember that there is no authentication check; so +a user that can launch the console can perform any command. + +# chmod +r /etc/bacula/bconsole.conf /etc/bacula/bat.conf diff --git a/SPECS/bacula.spec b/SPECS/bacula.spec new file mode 100644 index 0000000..8a1d454 --- /dev/null +++ b/SPECS/bacula.spec @@ -0,0 +1,762 @@ +%global uid 133 +%global username bacula + +%if 0%{?rhel} && ! 0%{?epel} +%bcond_with nagios +%else +%bcond_without nagios +%endif + +Name: bacula +Version: 11.0.1 +Release: 5%{?dist} +Summary: Cross platform network backup for Linux, Unix, Mac and Windows +# See LICENSE for details +License: AGPLv3 with exceptions +URL: http://www.bacula.org + +Source0: http://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.gz + +Source2: quickstart_postgresql.txt +Source3: quickstart_mysql.txt +Source4: quickstart_sqlite3.txt +Source5: README.Redhat +Source6: %{name}.logrotate +Source10: %{name}-fd.service +Source11: %{name}-dir.service +Source12: %{name}-sd.service +Source15: %{name}-fd.sysconfig +Source16: %{name}-dir.sysconfig +Source17: %{name}-sd.sysconfig +Source19: https://salsa.debian.org/bacula-team/bacula/-/raw/master/debian/additions/bacula-tray-monitor.png#/bacula-tray-monitor.png + +Patch1: %{name}-openssl.patch +Patch2: %{name}-queryfile.patch +Patch3: %{name}-sqlite-priv.patch +Patch4: %{name}-bat-build.patch +Patch5: %{name}-seg-fault.patch +Patch6: %{name}-logwatch.patch +Patch7: %{name}-non-free-code.patch +Patch8: %{name}-desktop.patch +Patch9: %{name}-g++-options.patch +Patch10: %{name}-install.patch +Patch11: %{name}-docker-plugin.patch +# Original patch removed by mistake, upstream is not willing to add it again: +# http://www.bacula.org/git/cgit.cgi/bacula/commit/?h=Branch-7.0&id=51b3b98fb77ab3c0decee455cc6c4d2eb3c5303a +# Without this, there is no library providing the correct shared object name +# required by the daemons. +# http://bugs.bacula.org/view.php?id=2084 +Patch12: %{name}-autoconf.patch +Patch13: %{name}-build-cdp-plugin.patch +Patch14: %{name}-nagios.patch +Patch15: %{name}-use-crypto-from-openssl.patch + +BuildRequires: desktop-file-utils +BuildRequires: perl-generators +BuildRequires: sed + +BuildRequires: autoconf +BuildRequires: automake +BuildRequires: gcc +BuildRequires: gcc-c++ +BuildRequires: glibc-devel +BuildRequires: libacl-devel +BuildRequires: libstdc++-devel +BuildRequires: libxml2-devel +BuildRequires: libcap-devel +BuildRequires: lzo-devel +BuildRequires: make +BuildRequires: ncurses-devel +BuildRequires: openssl-devel +BuildRequires: qt5-qtbase-devel +BuildRequires: readline-devel +BuildRequires: sqlite-devel +BuildRequires: systemd +BuildRequires: zlib-devel + +%if 0%{?fedora} || 0%{?rhel} > 7 +BuildRequires: mariadb-connector-c-devel +# https://fedoraproject.org/wiki/Changes/perl_Package_to_Install_Core_Modules +BuildRequires: perl-interpreter +%else +BuildRequires: mysql-devel +BuildRequires: perl +BuildRequires: tcp_wrappers-devel +%endif + +%if 0%{?fedora} +BuildRequires: libpq-devel +%else +BuildRequires: postgresql-devel +%endif + +%description +Bacula is a set of programs that allow you to manage the backup, recovery, and +verification of computer data across a network of different computers. It is +based on a client/server architecture and is efficient and relatively easy to +use, while offering many advanced storage management features that make it easy +to find and recover lost or damaged files. + +%package libs +Summary: Bacula libraries + +%description libs +Bacula is a set of programs that allow you to manage the backup, +recovery, and verification of computer data across a network of +different computers. It is based on a client/server architecture. + +This package contains basic Bacula libraries, which are used by all +Bacula programs. + +%package libs-sql +Summary: Bacula SQL libraries +Obsoletes: bacula-libs-mysql <= 5.0.3 +Obsoletes: bacula-libs-sqlite <= 5.0.3 +Obsoletes: bacula-libs-postgresql <= 5.0.3 +Provides: bacula-libs-mysql = %{version}-%{release} +Provides: bacula-libs-sqlite = %{version}-%{release} +Provides: bacula-libs-postgresql = %{version}-%{release} + +%description libs-sql +Bacula is a set of programs that allow you to manage the backup, recovery, and +verification of computer data across a network of different computers. It is +based on a client/server architecture. + +This package contains the SQL Bacula libraries, which are used by Director and +Storage daemons. You have to select your preferred catalog library through the +alternatives system. + +%package common +Summary: Common Bacula files +Provides: group(%username) = %uid +Provides: user(%username) = %uid +Requires: bacula-libs%{?_isa} = %{version}-%{release} +Requires(pre): shadow-utils +Requires(postun): shadow-utils + +%description common +Bacula is a set of programs that allow you to manage the backup, recovery, and +verification of computer data across a network of different computers. It is +based on a client/server architecture. + +This package contains files common to all Bacula daemons. + +%package director +Summary: Bacula Director files +Requires: bacula-common%{?_isa} = %{version}-%{release} +Requires: bacula-libs%{?_isa} = %{version}-%{release} +Requires: bacula-libs-sql%{?_isa} = %{version}-%{release} +# Director backends merged into core. +Provides: bacula-director-common = %{version}-%{release} +Obsoletes: bacula-director-common < 5.2.3-5 +Provides: bacula-director-mysql = %{version}-%{release} +Obsoletes: bacula-director-mysql < 5.2.3-5 +Provides: bacula-director-sqlite = %{version}-%{release} +Obsoletes: bacula-director-sqlite < 5.2.3-5 +Provides: bacula-director-postgresql = %{version}-%{release} +Obsoletes: bacula-director-postgresql < 5.2.3-5 + +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd + +%description director +Bacula is a set of programs that allow you to manage the backup, recovery, and +verification of computer data across a network of different computers. It is +based on a client/server architecture. + +This package contains the director files. + +%package logwatch +Summary: Bacula Director logwatch scripts +BuildArch: noarch +Requires: bacula-director = %{version}-%{release} +Requires: logwatch + +%description logwatch +Bacula is a set of programs that allow you to manage the backup, recovery, and +verification of computer data across a network of different computers. It is +based on a client/server architecture. + +This package contains logwatch scripts for Bacula Director. + +%package storage +Summary: Bacula storage daemon files +Requires: bacula-common%{?_isa} = %{version}-%{release} +Requires: bacula-libs%{?_isa} = %{version}-%{release} +Requires: bacula-libs-sql%{?_isa} = %{version}-%{release} +Requires: mt-st +Requires: mtx +# Storage backends merged into core. +Provides: bacula-storage-common = %{version}-%{release} +Obsoletes: bacula-storage-common < 5.2.2-2 +Provides: bacula-storage-mysql = %{version}-%{release} +Obsoletes: bacula-storage-mysql < 5.2.0 +Provides: bacula-storage-sqlite = %{version}-%{release} +Obsoletes: bacula-storage-sqlite < 5.2.0 +Provides: bacula-storage-postgresql = %{version}-%{release} +Obsoletes: bacula-storage-postgresql < 5.2.0 + +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd + +%description storage +Bacula is a set of programs that allow you to manage the backup, recovery, and +verification of computer data across a network of different computers. It is +based on a client/server architecture. + +This package contains the storage daemon, the daemon responsible for writing +the data received from the clients onto tape drives or other mass storage +devices. + +%package client +Summary: Bacula backup client +Requires: bacula-common%{?_isa} = %{version}-%{release} +Requires: bacula-libs%{?_isa} = %{version}-%{release} + +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd + +%description client +Bacula is a set of programs that allow you to manage the backup, recovery, and +verification of computer data across a network of different computers. It is +based on a client/server architecture. + +This package contains the bacula client, the daemon running on the system to be +backed up. + +%package console +Summary: Bacula management console +Obsoletes: bacula-console-wxwidgets <= 5.0.3 +Requires: bacula-libs%{?_isa} = %{version}-%{release} + +%description console +Bacula is a set of programs that allow you to manage the backup, recovery, and +verification of computer data across a network of different computers. It is +based on a client/server architecture. + +This package contains the command-line management console for the bacula backup +system. + +%package console-bat +Summary: Bacula bat console +Requires: bacula-libs%{?_isa} = %{version}-%{release} +Requires: dejavu-lgc-sans-fonts + +%description console-bat +Bacula is a set of programs that allow you to manage the backup, recovery, and +verification of computer data across a network of different computers. It is +based on a client/server architecture. + +This package contains the bat version of the bacula management console. + +%package traymonitor +Summary: Bacula system tray monitor +Requires: bacula-libs%{?_isa} = %{version}-%{release} +Requires: dejavu-lgc-sans-fonts + +%description traymonitor +Bacula is a set of programs that allow you to manage the backup, recovery, and +verification of computer data across a network of different computers. It is +based on a client/server architecture. + +This package contains the Gnome and KDE compatible tray monitor to monitor your +bacula server. + +%package devel +Summary: Bacula development files +Requires: bacula-libs%{?_isa} = %{version}-%{release} +Requires: bacula-libs-sql%{?_isa} = %{version}-%{release} + +%description devel +Bacula is a set of programs that allow you to manage the backup, recovery, and +verification of computer data across a network of different computers. It is +based on a client/server architecture. + +This development package contains static libraries and header files. + +%if %{with nagios} +%package -n nagios-plugins-bacula +Summary: Nagios Plugin - check_bacula +Requires: bacula-libs%{?_isa} = %{version}-%{release} +Requires: nagios-common%{?_isa} + +%description -n nagios-plugins-bacula +Provides check_bacula support for Nagios. +%endif + +%prep +%autosetup -p1 + +cp %{SOURCE2} %{SOURCE3} %{SOURCE4} %{SOURCE5} . + +# Regenerate configure +pushd autoconf +sed -i -r 's/(hardcode_into_libs)=.*$/\1=no/' libtool/libtool.m4 +aclocal -I bacula-macros/ -I gettext-macros/ -I libtool/ +popd +autoconf -I autoconf/ -o configure autoconf/configure.in + +# Remove execution permissions from files we're packaging as docs later on +find updatedb -type f | xargs chmod -x + +%build +export CFLAGS="%{optflags} -I%{_includedir}/ncurses" +export CPPFLAGS="%{optflags} -I%{_includedir}/ncurses" +export PATH="$PATH:%{_qt5_bindir}" + +%configure \ + --disable-conio \ + --disable-rpath \ + --disable-s3 \ + --docdir=%{_datadir}/bacula \ + --enable-bat \ + --enable-batch-insert \ + --enable-build-dird \ + --enable-build-stored \ + --enable-includes \ + --enable-largefile \ + --enable-readline \ + --enable-smartalloc \ + --sysconfdir=%{_sysconfdir}/bacula \ + --with-basename=bacula \ + --with-bsrdir=%{_localstatedir}/spool/bacula \ + --with-dir-password=@@DIR_PASSWORD@@ \ + --with-fd-password=@@FD_PASSWORD@@ \ + --with-hostname=localhost \ + --with-logdir=%{_localstatedir}/log/bacula \ + --with-mon-dir-password=@@MON_DIR_PASSWORD@@ \ + --with-mon-fd-password=@@MON_FD_PASSWORD@@ \ + --with-mon-sd-password=@@MON_SD_PASSWORD@@ \ + --with-mysql \ + --with-openssl \ + --with-pid-dir=%{_localstatedir}/run \ + --with-plugindir=%{_libdir}/%{name} \ + --with-postgresql \ + --with-scriptdir=%{_libexecdir}/bacula \ + --with-sd-password=@@SD_PASSWORD@@ \ + --with-smtp-host=localhost \ + --with-sqlite3 \ + --with-subsys-dir=%{_localstatedir}/lock/subsys \ +%if 0%{!?fedora} || 0%{!?rhel} > 7 + --with-tcp-wrappers \ +%endif + --with-working-dir=%{_localstatedir}/spool/bacula \ + --with-x + +# Remove RPATH +sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool +sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool + +pushd src/qt-console/ + %{?qmake_qt5}%{!?qmake_qt5:qmake-qt5} bat.pro + pushd tray-monitor + %{?qmake_qt5}%{!?qmake_qt5:qmake-qt5} tray-monitor.pro + popd +popd + +%make_build +%make_build -C src/tools/cdp-client +%if %{with nagios} +%make_build -C examples/nagios/check_bacula +%endif + +pushd src/qt-console/ + %{?qmake_qt5}%{!?qmake_qt5:qmake-qt5} bat.pro + pushd tray-monitor + %{?qmake_qt5}%{!?qmake_qt5:qmake-qt5} tray-monitor.pro + popd +popd + +# Convert image to png for tray monitor icon +%install +%make_install +%make_install -C src/tools/cdp-client +%if %{with nagios} +%make_install -C examples/nagios/check_bacula +%endif + +# This will be managed through alternatives, as it requires the name to NOT +# change between upgrades, so the versioned library name can not be used. +rm -f %{buildroot}%{_libdir}/libbaccats.so + +# Bat +install -p -m 644 -D src/qt-console/images/bat_icon.png %{buildroot}%{_datadir}/pixmaps/bat_icon.png +install -p -m 644 -D scripts/bat.desktop %{buildroot}%{_datadir}/applications/bat.desktop +install -p -m 755 -D src/qt-console/.libs/bat %{buildroot}%{_sbindir}/bat + +install -p -m 644 -D manpages/bacula-tray-monitor.1 %{buildroot}%{_mandir}/man1/bacula-tray-monitor.1 +install -p -m 644 -D %{SOURCE19} %{buildroot}%{_datadir}/pixmaps/bacula-tray-monitor.png +install -p -m 644 -D scripts/bacula-tray-monitor.desktop %{buildroot}%{_datadir}/applications/bacula-tray-monitor.desktop + +# Logrotate +mkdir -p %{buildroot}%{_localstatedir}/log/bacula +install -p -m 644 -D %{SOURCE6} %{buildroot}%{_sysconfdir}/logrotate.d/bacula + +# Logwatch +install -p -m 755 -D scripts/logwatch/bacula %{buildroot}%{_sysconfdir}/logwatch/scripts/services/bacula +install -p -m 755 -D scripts/logwatch/applybaculadate %{buildroot}%{_sysconfdir}/logwatch/scripts/shared/applybaculadate +install -p -m 644 -D scripts/logwatch/logfile.bacula.conf %{buildroot}%{_sysconfdir}/logwatch/conf/logfiles/bacula.conf +install -p -m 644 -D scripts/logwatch/services.bacula.conf %{buildroot}%{_sysconfdir}/logwatch/conf/services/bacula.conf + +# Systemd unit files +mkdir -p %{buildroot}%{_unitdir} +install -p -m 644 -D %{SOURCE10} %{buildroot}%{_unitdir}/bacula-fd.service +install -p -m 644 -D %{SOURCE11} %{buildroot}%{_unitdir}/bacula-dir.service +install -p -m 644 -D %{SOURCE12} %{buildroot}%{_unitdir}/bacula-sd.service + +# Sysconfig +install -p -m 644 -D %{SOURCE15} %{buildroot}%{_sysconfdir}/sysconfig/bacula-fd +install -p -m 644 -D %{SOURCE16} %{buildroot}%{_sysconfdir}/sysconfig/bacula-dir +install -p -m 644 -D %{SOURCE17} %{buildroot}%{_sysconfdir}/sysconfig/bacula-sd + +# Spool directory +mkdir -p %{buildroot}%{_localstatedir}/spool/bacula + +# Remove stuff we do not need +rm -f %{buildroot}%{_libexecdir}/bacula/{bacula,bacula-ctl-*,startmysql,stopmysql,bconsole,make_catalog_backup} +rm -f %{buildroot}%{_sbindir}/bacula +rm -f %{buildroot}%{_mandir}/man8/bacula.8.gz +rm -f %{buildroot}%{_libdir}/*.la +rm -f %{buildroot}%{_datadir}/bacula/{ChangeLog,INSTALL,LICENSE*,README,ReleaseNotes,VERIFYING,technotes} + +# Fix up some perms so rpmlint does not complain too much +chmod 755 %{buildroot}%{_sbindir}/* +chmod 755 %{buildroot}%{_libdir}/%{name}/* +chmod 755 %{buildroot}%{_libexecdir}/bacula/* +chmod 644 %{buildroot}%{_libexecdir}/bacula/btraceback.* + +%ldconfig_scriptlets libs + +%post libs-sql +/usr/sbin/alternatives --install %{_libdir}/libbaccats.so libbaccats.so %{_libdir}/libbaccats-mysql.so 50 +/usr/sbin/alternatives --install %{_libdir}/libbaccats.so libbaccats.so %{_libdir}/libbaccats-sqlite3.so 40 +/usr/sbin/alternatives --install %{_libdir}/libbaccats.so libbaccats.so %{_libdir}/libbaccats-postgresql.so 60 + +# Fix for automatic selection of backends during upgrades +if readlink /etc/alternatives/libbaccats.so | grep --silent mysql || \ + readlink /etc/alternatives/bacula-dir | grep --silent mysql || \ + readlink /etc/alternatives/bacula-sd | grep --silent mysql; then + /usr/sbin/alternatives --set libbaccats.so %{_libdir}/libbaccats-mysql.so +elif readlink /etc/alternatives/libbaccats.so | grep --silent sqlite || \ + readlink /etc/alternatives/bacula-dir | grep --silent sqlite || \ + readlink /etc/alternatives/bacula-sd | grep --silent sqlite; then + /usr/sbin/alternatives --set libbaccats.so %{_libdir}/libbaccats-sqlite3.so +else + /usr/sbin/alternatives --set libbaccats.so %{_libdir}/libbaccats-postgresql.so +fi +%{?ldconfig} + +%preun libs-sql +if [ "$1" = 0 ]; then + /usr/sbin/alternatives --remove libbaccats.so %{_libdir}/libbaccats-mysql.so + /usr/sbin/alternatives --remove libbaccats.so %{_libdir}/libbaccats-sqlite3.so + /usr/sbin/alternatives --remove libbaccats.so %{_libdir}/libbaccats-postgresql.so +fi + +%ldconfig_postun libs-sql + +%pre common +getent group %username >/dev/null || groupadd -g %uid -r %username &>/dev/null || : +getent passwd %username >/dev/null || useradd -u %uid -r -s /sbin/nologin \ + -d /var/spool/bacula -M -c 'Bacula Backup System' -g %username %username &>/dev/null || : +exit 0 + +%post client +%systemd_post %{name}-fd.service + +%preun client +%systemd_preun %{name}-fd.service + +%postun client +%systemd_postun_with_restart %{name}-fd.service + +%post director +%systemd_post %{name}-dir.service + +%preun director +%systemd_preun %{name}-dir.service + +%postun director +%systemd_postun_with_restart %{name}-dir.service + +%post storage +%systemd_post %{name}-sd.service + +%preun storage +%systemd_preun %{name}-sd.service + +%postun storage +%systemd_postun_with_restart %{name}-sd.service + +%files libs +%license LICENSE +%doc AUTHORS ChangeLog SUPPORT ReleaseNotes LICENSE-FAQ LICENSE-FOSS +%{_libdir}/libbac-%{version}.so +%{_libdir}/libbaccfg-%{version}.so +%{_libdir}/libbacfind-%{version}.so +%{_libdir}/libbacsd-%{version}.so + +%files libs-sql +# On Fedora 28 this gets recreated automatically even if the library is +# deleted in the install section. +# On EPEL 6 this is required until RPM assembly time or an error is given due +# to the missing library. +# So: leave the library in place until the very end and just exclude it. +%exclude %{_libdir}/libbaccats-%{version}.so +%{_libdir}/libbaccats-mysql-%{version}.so +%{_libdir}/libbaccats-mysql.so +%{_libdir}/libbaccats-postgresql-%{version}.so +%{_libdir}/libbaccats-postgresql.so +%{_libdir}/libbaccats-sqlite3-%{version}.so +%{_libdir}/libbaccats-sqlite3.so +%{_libdir}/libbacsql-%{version}.so + +%files common +%doc README.Redhat quickstart_* +%config(noreplace) %{_sysconfdir}/logrotate.d/bacula +%dir %{_localstatedir}/log/bacula %attr(750, bacula, bacula) +%dir %{_localstatedir}/spool/bacula %attr(750, bacula, bacula) +%dir %{_libexecdir}/%{name} +%dir %{_sysconfdir}/%{name} %attr(755,root,root) +%{_libexecdir}/%{name}/btraceback.dbx +%{_libexecdir}/%{name}/btraceback.gdb +%{_libexecdir}/%{name}/bacula_config +%{_libexecdir}/%{name}/btraceback.mdb +%{_mandir}/man8/btraceback.8* +%{_sbindir}/btraceback + +%files director +%doc updatedb examples/sample-query.sql +%config(noreplace) %{_sysconfdir}/bacula/bacula-dir.conf %attr(640,root,bacula) +%config(noreplace) %{_sysconfdir}/bacula/query.sql %attr(640,root,bacula) +%config(noreplace) %{_sysconfdir}/sysconfig/bacula-dir +%{_libexecdir}/%{name}/baculabackupreport +%{_libexecdir}/%{name}/create_bacula_database +%{_libexecdir}/%{name}/delete_catalog_backup +%{_libexecdir}/%{name}/drop_bacula_database +%{_libexecdir}/%{name}/drop_bacula_tables +%{_libexecdir}/%{name}/grant_bacula_privileges +%{_libexecdir}/%{name}/make_bacula_tables +%{_libexecdir}/%{name}/make_catalog_backup.pl +%{_libexecdir}/%{name}/update_bacula_tables +%{_libexecdir}/%{name}/create_mysql_database +%{_libexecdir}/%{name}/drop_mysql_database +%{_libexecdir}/%{name}/drop_mysql_tables +%{_libexecdir}/%{name}/grant_mysql_privileges +%{_libexecdir}/%{name}/make_mysql_tables +%{_libexecdir}/%{name}/update_mysql_tables +%{_libexecdir}/%{name}/create_sqlite3_database +%{_libexecdir}/%{name}/drop_sqlite3_database +%{_libexecdir}/%{name}/drop_sqlite3_tables +%{_libexecdir}/%{name}/grant_sqlite3_privileges +%{_libexecdir}/%{name}/make_sqlite3_tables +%{_libexecdir}/%{name}/update_sqlite3_tables +%{_libexecdir}/%{name}/create_postgresql_database +%{_libexecdir}/%{name}/drop_postgresql_database +%{_libexecdir}/%{name}/drop_postgresql_tables +%{_libexecdir}/%{name}/grant_postgresql_privileges +%{_libexecdir}/%{name}/make_postgresql_tables +%{_libexecdir}/%{name}/update_postgresql_tables +%{_mandir}/man1/bsmtp.1* +%{_mandir}/man8/bacula-dir.8* +%{_mandir}/man8/bregex.8* +%{_mandir}/man8/bwild.8* +%{_mandir}/man8/dbcheck.8* +%{_sbindir}/bacula-dir +%{_sbindir}/bdirjson +%{_sbindir}/bregex +%{_sbindir}/bsmtp +%{_sbindir}/bwild +%{_sbindir}/dbcheck +%{_unitdir}/bacula-dir.service + +%files logwatch +%config(noreplace) %{_sysconfdir}/logwatch/conf/logfiles/bacula.conf +%config(noreplace) %{_sysconfdir}/logwatch/conf/services/bacula.conf +%{_sysconfdir}/logwatch/scripts/services/bacula +%{_sysconfdir}/logwatch/scripts/shared/applybaculadate + +%files storage +%config(noreplace) %{_sysconfdir}/bacula/bacula-sd.conf %attr(640,root,root) +%config(noreplace) %{_sysconfdir}/sysconfig/bacula-sd +%{_libexecdir}/%{name}/disk-changer +%{_libexecdir}/%{name}/isworm +%{_libexecdir}/%{name}/mtx-changer +%{_libexecdir}/%{name}/mtx-changer.conf +%{_libexecdir}/%{name}/tapealert +%{_mandir}/man8/bacula-sd.8* +%{_mandir}/man8/bcopy.8* +%{_mandir}/man8/bextract.8* +%{_mandir}/man8/bls.8* +%{_mandir}/man8/bscan.8* +%{_mandir}/man8/btape.8* +%{_sbindir}/bacula-sd +%{_sbindir}/bcopy +%{_sbindir}/bextract +%{_sbindir}/bls +%{_sbindir}/bscan +%{_sbindir}/bsdjson +%{_sbindir}/btape +%{_unitdir}/bacula-sd.service + +%files client +%config(noreplace) %{_sysconfdir}/bacula/bacula-fd.conf %attr(640,root,root) +%config(noreplace) %{_sysconfdir}/sysconfig/bacula-fd +%{_mandir}/man8/bacula-fd.8* +%{_libdir}/%{name}/bpipe-fd.so +%{_libdir}/%{name}/cdp-fd.so +%{_libdir}/%{name}/docker-fd.so +%{_sbindir}/bacula-fd +%{_sbindir}/bfdjson +%{_sbindir}/cdp-client +%{_unitdir}/bacula-fd.service + +%files console +%config(noreplace) %{_sysconfdir}/bacula/bconsole.conf %attr(640,root,root) +%{_mandir}/man8/bconsole.8* +%{_sbindir}/bconsole +%{_sbindir}/bbconsjson + +%files console-bat +%config(noreplace) %{_sysconfdir}/bacula/bat.conf %attr(640,root,root) +%{_datadir}/applications/bat.desktop +%{_datadir}/bacula/*.html +%{_datadir}/bacula/*.png +%{_datadir}/pixmaps/bat_icon.png +%{_mandir}/man1/bat.1* +%{_sbindir}/bat + +%files traymonitor +%config(noreplace) %{_sysconfdir}/bacula/bacula-tray-monitor.conf %attr(640,root,root) +%{_datadir}/applications/bacula-tray-monitor.desktop +%{_datadir}/pixmaps/bacula-tray-monitor.png +%{_mandir}/man1/bacula-tray-monitor.1* +%{_sbindir}/bacula-tray-monitor + +%files devel +%{_includedir}/bacula +%{_libdir}/libbac.so +%{_libdir}/libbaccfg.so +%{_libdir}/libbacfind.so +%{_libdir}/libbacsd.so +%{_libdir}/libbacsql.so + +%if %{with nagios} +%files -n nagios-plugins-bacula +%{_libdir}/nagios/plugins/check_bacula +%endif + +%changelog +* Tue Feb 15 2022 Pavel Cahyna - 11.0.1-5 +- Make nagios-plugin build conditional and disabled on RHEL to avoid + generating this subpackage that has missing dependencies +- Fix flags for annobin in Qt tools (bat & tray-monitor) build +- Add a forgotten RHEL 8 patch to use openssl crypto (random numbers, hmac, + hashing functions) + Resolves: rhbz#1935458 + +* Mon Aug 09 2021 Mohan Boddu - 11.0.1-4 +- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags + Related: rhbz#1991688 + +* Wed Jun 16 2021 Mohan Boddu - 11.0.1-3 +- Rebuilt for RHEL 9 BETA for openssl 3.0 + Related: rhbz#1971065 + +* Thu Apr 15 2021 Mohan Boddu - 11.0.1-2 +- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 + +* Thu Feb 11 2021 Simone Caronni - 11.0.1-1 +- Update to 11.0.1. + +* Mon Feb 08 2021 Pavel Raiskup - 11.0.0-5 +- rebuild for libpq ABI fix rhbz#1908268 + +* Thu Jan 28 2021 Simone Caronni - 11.0.0-4 +- Remove leftover ImageMagick build requirement. + +* Tue Jan 26 2021 Fedora Release Engineering - 11.0.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Fri Jan 15 2021 Simone Caronni - 11.0.0-2 +- Build CDP plugin components. + +* Tue Jan 12 2021 Simone Caronni - 11.0.0-1 +- Update to 11.0.0. +- Enable Docker plugin. + +* Tue Jan 12 2021 Simone Caronni - 9.6.7-1 +- Update to 9.6.7. +- Drop support for building on CentOS/RHEL 6 and upgrades from version 2.4. +- Trim changelog. + +* Wed Oct 07 2020 Simone Caronni - 9.6.6-1 +- Update to 9.6.6. + +* Mon Jul 27 2020 Fedora Release Engineering - 9.6.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Fri Jul 24 2020 Simone Caronni - 9.6.5-1 +- Update to 9.6.5. + +* Tue Mar 17 2020 Simone Caronni - 9.6.3-1 +- Update to 9.6.3. + +* Thu Mar 05 2020 Simone Caronni - 9.6.2-2 +- Fix RHEL/CentOS 6 builds. + +* Sat Feb 29 2020 Simone Caronni - 9.6.2-1 +- Update to 9.6.2. + +* Mon Feb 10 2020 Václav Doležal - 9.4.4-4 +- Fix FTBFS (#1799185) + +* Tue Jan 28 2020 Fedora Release Engineering - 9.4.4-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Wed Jul 24 2019 Fedora Release Engineering - 9.4.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Wed May 29 2019 Simone Caronni - 9.4.4-1 +- Update to 9.4.4. + +* Sat May 18 2019 Simone Caronni - 9.4.3-2 +- SPEC file cleanups. + +* Wed May 15 2019 Simone Caronni - 9.4.3-1 +- Update to 9.4.3. + +* Thu Apr 18 2019 Simone Caronni - 9.4.2-1 +- Update to 9.4.2. + +* Sun Feb 17 2019 Igor Gnatenko - 9.4.1-6 +- Rebuild for readline 8.0 + +* Thu Jan 31 2019 Fedora Release Engineering - 9.4.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Mon Jan 14 2019 Björn Esser - 9.4.1-4 +- Rebuilt for libcrypt.so.2 (#1666033) + +* Sun Jan 13 2019 Simone Caronni - 9.4.1-3 +- Build QT programs with QT 5 on RHEL/CentOS 7. Also, reduce the number of + required QT packages for building. + +* Sun Jan 13 2019 Simone Caronni - 9.4.1-2 +- Add Debian patch to enable/disable S3 support at configure time. +- Disable S3 as it does not currently build: + http://bugs.bacula.org/view.php?id=2446 +- Update RPM macros. + +* Sat Jan 12 2019 Simone Caronni - 9.4.1-1 +- Update to 9.4.1. + +* Sat Jan 12 2019 Simone Caronni - 9.4.0-1 +- Update to 9.4.0. + +* Sat Jan 12 2019 Simone Caronni - 9.2.1-2 +- Make the build succeed also on supported RHEL and Fedora releases. +- Remove Fedora 27 references.