%bcond_without dbi # use Database Independent Abstraction Layer (libdbi)
%bcond_without mysql # use MySQL
%bcond_without pgsql # use PostgreSQL
-%bcond_with python
-%bcond_with rescue
%bcond_without sqlite3 # use SQLite3
+%bcond_without python
+%bcond_with rescue
%bcond_with sqlite3_sync_off # makes SQLite3 backend much faster, but less reliable
#
%if %{without sqlite3}
Summary(pl.UTF-8): Bacula - rozwiązanie do wykonywania kopii zapasowych po sieci
Name: bacula
Version: 5.0.1
-Release: 0.5
+Release: 3
Epoch: 0
License: extended GPL v2
Group: Networking/Utilities
Patch6: %{name}-64bitbuild_fix.patch
Patch7: %{name}-dbi_fixes.patch
Patch8: %{name}-dbi_dbcheck.patch
-Patch9: %{name}-config_no_clean.patch
+Patch9: %{name}-openssl1.patch
URL: http://www.bacula.org/
BuildRequires: acl-devel
BuildRequires: autoconf
BuildRequires: openssl-devel
BuildRequires: pkgconfig
%if %{with python}
-BuildRequires: python-static
+BuildRequires: python-devel
%endif
%if %{with bat}
BuildRequires: QtCore-devel
%define _sysconfdir /etc/%{name}
%define _localstatedir /var/lib/%{name}
-%define databases %{?with_pgsql:postgresql} %{?with_mysql:mysql} %{?with_sqlite3:sqlite3} %{?with_dbi:dbi}
+# from 'the worst' to 'the best'
+%define databases %{?with_dbi:dbi} %{?with_sqlite3:sqlite3} %{?with_mysql:mysql} %{?with_pgsql:postgresql}
# dependency section is broken. ccache usage is instead to makefiles
%undefine with_ccache
CPPFLAGS="-I/usr/include/ncurses -I%{_includedir}/readline"
-# we wan't the 'base' build built with the first database in the list,
+# we wan't the 'base' build built with the last database in the list,
# to make sure it is full-featured
-base_built="no"
-
for database in %{databases} ; do
WXCONFIG=%{_bindir}/wx-gtk2-unicode-config \
%configure \
--with-mon-sd-password="#FAKE-mon-sd-password#" \
--with-openssl
- if [ "$base_built" = "no" ] ; then
- %if %{with bat}
- cd src/qt-console
- qmake-qt4 bat.pro
- cd ../..
- %endif
-
- %{__make}
-
- base_built="yes"
- else
- %{__make} -C src/cats clean
- %{__make} -C src/cats
- fi
+ # build the database library
+ %{__make} -C src/cats clean
+ %{__make} -C src/cats
- # install the database library in a temporary location
+ # install the database library in a temporary location
install -d libbacsql/$database%{_libdir}
%{__make} -C src/cats libtool-install DESTDIR=$PWD/libbacsql/$database
done
+%if %{with bat}
+cd src/qt-console
+qmake-qt4 bat.pro
+cd ../..
+%endif
+
+%{__make}
+
%if %{with rescue}
cd rescue
%configure \
# install libraries for all the database backends
# ldconfig will add the soname symlinks when one of the packages is installed
for database in %{databases} ; do
- for libfile in libbacsql/$database%{_libdir}/lib*-*.so ; do
- orig_name=`basename $libfile`
- file_prefix="${orig_name%%-*.so}"
- file_suffix="${orig_name#*-}"
- file_name="$file_prefix-$database-$file_suffix"
- install "$libfile" "$RPM_BUILD_ROOT/%{_libdir}/$file_name"
- ln -sf "$file_name" "$RPM_BUILD_ROOT/%{_libdir}/$orig_name"
+ for libfile in libbacsql/$database%{_libdir}/lib*-*.so; do
+ orig_name=${libfile##*/}
+ file_prefix=${orig_name%%-*.so}
+ file_suffix=${orig_name#*-}
+ file_name=$file_prefix-$database-$file_suffix
+ install -p $libfile $RPM_BUILD_ROOT/%{_libdir}/$file_name
+ touch $RPM_BUILD_ROOT/%{_libdir}/$orig_name
done
done
-install %{SOURCE10} $RPM_BUILD_ROOT/etc/rc.d/init.d/bacula-dir
-install %{SOURCE11} $RPM_BUILD_ROOT/etc/rc.d/init.d/bacula-fd
-install %{SOURCE12} $RPM_BUILD_ROOT/etc/rc.d/init.d/bacula-sd
-install %{SOURCE13} $RPM_BUILD_ROOT/etc/logrotate.d/%{name}-dir
-install %{SOURCE14} $RPM_BUILD_ROOT/etc/sysconfig/bacula-dir
-install %{SOURCE15} $RPM_BUILD_ROOT/etc/sysconfig/bacula-fd
-install %{SOURCE16} $RPM_BUILD_ROOT/etc/sysconfig/bacula-sd
+install -p %{SOURCE10} $RPM_BUILD_ROOT/etc/rc.d/init.d/bacula-dir
+install -p %{SOURCE11} $RPM_BUILD_ROOT/etc/rc.d/init.d/bacula-fd
+install -p %{SOURCE12} $RPM_BUILD_ROOT/etc/rc.d/init.d/bacula-sd
+cp -a %{SOURCE13} $RPM_BUILD_ROOT/etc/logrotate.d/%{name}-dir
+cp -a %{SOURCE14} $RPM_BUILD_ROOT/etc/sysconfig/bacula-dir
+cp -a %{SOURCE15} $RPM_BUILD_ROOT/etc/sysconfig/bacula-fd
+cp -a %{SOURCE16} $RPM_BUILD_ROOT/etc/sysconfig/bacula-sd
%if %{with console_wx}
# tray-monitor is for regular users
%endif
%if %{with bat}
-install src/qt-console/.libs/bat $RPM_BUILD_ROOT%{_sbindir}
+install src/qt-console/.libs/bat $RPM_BUILD_ROOT%{_bindir}
install scripts/bat.desktop $RPM_BUILD_ROOT%{_desktopdir}
%endif
%groupadd -P %{name}-common -g 136 -r -f bacula
%useradd -P %{name}-common -u 136 -r -d /var/lib/bacula -s /bin/false -c "Bacula User" -g bacula bacula
+
+%define update_configs \
+echo "Updating bacula passwords and names..." | %banner \
+cd /etc/bacula \
+for f in *-password ; do \
+ if [ ! -s $f ] ; then \
+ openssl rand -base64 33 > $f \
+ fi \
+ p=`cat $f` \
+ for cf in *.conf *.conf.rpmnew ; do \
+ [ -f $cf ] && sed -i -e"s:#FAKE-$f#:$p:" "$cf" || : \
+ done \
+done \
+for cf in *.conf *.conf.rpmnew ; do \
+ [ -f $cf ] && sed -i -e"s:--hostname--:`hostname`:" "$cf" || : \
+done
+
%post common
/sbin/ldconfig
-echo "Updating bacula passwords and names..."
-cd /etc/bacula
-for f in *-password ; do
- if [ ! -s $f ] ; then
- openssl rand -base64 33 > $f
- fi
- p=`cat $f`
- for cf in *.conf *.conf.rpmnew ; do
- [ -f $cf ] && sed -i -e"s:#FAKE-$f#:$p:" "$cf" || :
- done
-done
-for cf in *.conf *.conf.rpmnew ; do
- [ -f $cf ] && sed -i -e"s:--hostname--:`hostname`:" "$cf" || :
-done
+%update_configs
%postun common
/sbin/ldconfig
%groupremove bacula
fi
-%post dir
-umask 077
-
-# XXX: Most of this upgrade procedure is safe for sqlite only. Other databases would require knowledge
-# about currently used version so we can't easily support these :(
-
-%if %{with sqlite3}
-[ -s %{_localstatedir}/bacula.db ] && \
- DB_VER=`echo "select * from Version;" | \
- %{_bindir}/sqlite%{?with_sqlite3:3} %{_localstatedir}/bacula.db | tail -n 1 2>/dev/null`
-
-if [ -z "$DB_VER" ]; then
-# grant privileges and create tables
- %{_libexecdir}/%{name}/grant_bacula_privileges > dev/null
- %{_libexecdir}/%{name}/create_bacula_database > dev/null
- %{_libexecdir}/%{name}/make_bacula_tables > dev/null
-else
- echo "Backing up bacula tables"
- echo ".dump" | sqlite%{?with_sqlite3:3} %{_localstatedir}/bacula.db | bzip2 > %{_localstatedir}/bacula_backup.sql.bz2
-
- db_type="%{database}"
-
- next_ver=$(($DB_VER + 1))
- # support up to version 30; increase this if needed
- for ver in $(seq $next_ver 30); do
- prev_ver=$(($ver - 1))
-
- if [ -x %{_libexecdir}/%{name}/update_${type}_tables_${prev_ver}_to_${ver} ]; then
- echo "Upgrading bacula database: db=${db_type} from ${prev_ver} to ${ver}..."
- %{_libexecdir}/%{name}/update_${type}_tables_${prev_ver}_to_${ver}
- fi
- done
+%triggerpostun dir -- %{name}-dir < 5.0
+%banner bacula-dir -t3 <<EOF
+You have upgraded from an older version of Bacula director.
- %{_libexecdir}/%{name}/update_bacula_tables
- echo "If bacula works correctly you can remove the backup file %{_localstatedir}/bacula_backup.sql.bz2"
-fi
-chown -R bacula:bacula %{_localstatedir}
-chmod -R u+rX,go-rwx %{_localstatedir}/*
-%endif
-
-echo "Updating Bacula passwords and names..."
-cd /etc/bacula
-for f in *-password; do
- p=`cat $f`
- sed -i -e"s:#FAKE-$f#:$p:" *.conf *.conf.rpmnew 2>/dev/null || :
-done
-sed -i -e"s:--hostname--:`hostname`:" *.conf *.conf.rpmnew 2>/dev/null || :
+You will probably need to call %{_libexecdir}/%{name}/update_bacula_tables
+script to upgrade the database.
+EOF
+%post dir
+%update_configs
/sbin/chkconfig --add bacula-dir
%service bacula-dir restart "Bacula Director daemon"
fi
%post fd
-echo "Updating Bacula passwords and names..."
-cd /etc/bacula
-for f in *-password; do
- p=`cat $f`
- sed -i -e"s:#FAKE-$f#:$p:" *.conf *.conf.rpmnew 2>/dev/null || :
-done
-sed -i -e"s:--hostname--:`hostname`:" *.conf *.conf.rpmnew 2>/dev/null || :
-
+%update_configs
/sbin/chkconfig --add bacula-fd
%service bacula-fd restart "Bacula File daemon"
fi
%post sd
-echo "Updating Bacula passwords and names..."
-cd /etc/bacula
-for f in *-password; do
- p=`cat $f`
- sed -i -e"s:#FAKE-$f#:$p:" *.conf *.conf.rpmnew 2>/dev/null || :
-done
-sed -i -e"s:--hostname--:`hostname`:" *.conf *.conf.rpmnew 2>/dev/null || :
-
+%update_configs
/sbin/chkconfig --add bacula-sd
%service bacula-sd restart "Bacula Storage daemon"
fi
%post console
-echo "Updating Bacula passwords and names..."
-cd /etc/bacula
-for f in *-password; do
- p=`cat $f`
- sed -i -e"s:#FAKE-$f#:$p:" *.conf *.conf.rpmnew 2>/dev/null || :
-done
-sed -i -e"s:--hostname--:`hostname`:" *.conf *.conf.rpmnew 2>/dev/null || :
+%update_configs
%post console-wx
-echo "Updating Bacula passwords and names..."
-cd /etc/bacula
-for f in *-password; do
- p=`cat $f`
- sed -i -e"s:#FAKE-$f#:$p:" *.conf *.conf.rpmnew 2>/dev/null || :
-done
-sed -i -e"s:--hostname--:`hostname`:" *.conf *.conf.rpmnew 2>/dev/null || :
+%update_configs
+
+%triggerpostun common -- %{name}-common < 5.0.1-2
+find /etc/bacula/bat.conf* -perm /007 -print0 | xargs -0 -r chmod 600 || :
%post console-qt4
-echo "Updating Bacula passwords and names..."
-cd /etc/bacula
-for f in *-password; do
- p=`cat $f`
- sed -i -e"s:#FAKE-$f#:$p:" *.conf *.conf.rpmnew 2>/dev/null || :
-done
-sed -i -e"s:--hostname--:`hostname`:" *.conf *.conf.rpmnew 2>/dev/null || :
+%update_configs
%post tray-monitor
-echo "Updating Bacula passwords and names..."
-cd /etc/bacula
-for f in *-password; do
- p=`cat $f`
- sed -i -e"s:#FAKE-$f#:$p:" *.conf *.conf.rpmnew 2>/dev/null || :
-done
-sed -i -e"s:--hostname--:`hostname`:" *.conf *.conf.rpmnew 2>/dev/null || :
+%update_configs
%post rescue
# link our current installed conf file to the rescue directory
/sbin/ldconfig \
if [ "$1" = "0" ]; then \
for f in %{_libexecdir}/%{name}/*_bacula_* ; do \
- if [ ! -e "$f" ] ; then \
+ if [ -L "$f" -a ! -e "$f" ] ; then \
rm "$f" \
fi \
done \
# dbi backend is different, as it is not bound with a specific db engine
%post db-dbi
/sbin/ldconfig
+%service bacula-dir restart "Bacula Director daemon"
%postun db-dbi -p /sbin/ldconfig
%doc LICENSE
%{_pixmapsdir}/%{name}.png
%{_desktopdir}/bacula-wx.desktop
-%attr(600,root,root) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/bwx-console.conf
+%attr(640,root,bacula) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/bwx-console.conf
%attr(755,root,root) %{_sbindir}/bwx-console
%{_mandir}/man1/bacula-bwxconsole.1*
%endif
%doc LICENSE
%{_pixmapsdir}/%{name}.png
%{_desktopdir}/bat.desktop
-%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/bat.conf
-%attr(755,root,root) %{_sbindir}/bat
+# Do not make this file world-readable or any user will get full access to the
+# backup system
+%attr(640,root,bacula) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/bat.conf
+%attr(755,root,root) %{_bindir}/bat
%{_mandir}/man1/bat.1*
%{_docdir}/%{name}
%endif