]> git.sur5r.net Git - bacula/bacula/blob - bacula/platforms/rpms/redhat/bacula.spec.in
51f72aedac5e9de2af1d9e17e20ed64bc0f17ccb
[bacula/bacula] / bacula / platforms / rpms / redhat / bacula.spec.in
1 #
2 # Bacula RPM spec file
3 #
4
5 # Platform Build Configuration
6
7 # basic defines for every build
8 %define _release           @RELEASE@
9 %define _version           @VERSION@
10 %define product            bacula
11 %define _packager Kern Sibbald <kern@sibbald.com>
12 %define depkgs_version @DEPKGS_VERSION@
13
14 # Don't strip binaries
15 %define __os_install_post %{nil}
16 %define __debug_install_post %{nil}
17 %define debug_package %{nil}
18
19 %define postgres_version 8
20 %define pgre84 0
21 %{?build_rhel5:%define pgre84 1}
22 %{?build_el5:%define pgre84 1}
23 %if %{pgre84}
24 %define postgres_package postgresql84
25 %define postgres_server_package postgresql84-server
26 %define postgres_devel_package postgresql84-devel
27 %else
28 %define postgres_package postgresql
29 %define postgres_server_package postgresql-server
30 %define postgres_devel_package postgresql-devel
31 %endif
32
33 %define single_dir 1
34 %{?single_dir_install:%define single_dir 1}
35
36 # Installation Directory locations
37 %define _prefix        /opt/bacula
38 %define _sbindir       /opt/bacula/bin
39 %define _bindir        /opt/bacula/bin
40 %define _subsysdir     /opt/bacula/working
41 %define sqlite_bindir  /opt/bacula/sqlite
42 %define _mandir        /usr/share/man
43 %define docs_dir       /opt/bacula/docs
44 %define archive_dir    /opt/bacula/archive
45 %define sysconf_dir    /opt/bacula/etc
46 %define script_dir     /opt/bacula/scripts
47 %define working_dir    /opt/bacula/working
48 %define pid_dir        /opt/bacula/working
49 %define plugin_dir     /opt/bacula/plugins
50 %define lib_dir        /opt/bacula/lib
51 %define log_dir        /opt/bacula/log
52 %define systemd_dir    /lib/systemd/system
53
54 # Daemon user:group Don't change them unless you know what you are doing
55 %define director_daemon_user    bacula
56 %define storage_daemon_user     bacula
57 %define file_daemon_user        root
58 %define daemon_group            bacula
59 # group that has write access to tape devices, usually disk on Linux
60 %define storage_daemon_group    disk
61
62 %define depkgs ../depkgs
63
64 # problems with mandriva build:
65 # nothing provides libbonobo2_0-devel, nothing provides libbonoboui2_0-devel
66
67 #--------------------------------------------------------------------------
68 # it should not be necessary to change anything below here for a release
69 # except for patch macros in the setup section
70 #--------------------------------------------------------------------------
71
72 %define base_package_name %{product}
73
74 %{?contrib_packager:%define _packager %{contrib_packager}}
75
76 Summary: Bacula - The Network Backup Solution
77 Name: %{base_package_name}
78 Version: %{_version}
79 Release: %{_release}
80 Group: System Environment/Daemons
81 License: AGPLv3
82 BuildRoot: %{_tmppath}/%{name}-root
83 URL: http://www.bacula.org/
84 Vendor: The Bacula Team
85 Packager: %{_packager}
86 Prefix: %{_prefix}
87
88 # opensuse build service changes the release itself
89 # what happens if the release is not 1? DSB
90 Source0: http://www.prdownloads.sourceforge.net/bacula/depkgs-%{depkgs_version}.tar.gz
91 Source1: http://www.prdownloads.sourceforge.net/bacula/%{product}-%{version}.tar.gz
92 Source2: Release_Notes-%{version}-%{release}.tar.gz
93
94 # define the basic package description
95 %define blurb Bacula - The Leading Open Source Backup Solution.
96 %define blurb2 Bacula is a set of computer programs that permit you (or the system
97 %define blurb3 administrator) to manage backup, recovery, and verification of computer
98 %define blurb4 data across a network of computers of different kinds. In technical terms,
99 %define blurb5 it is a network client/server based backup program. Bacula is relatively
100 %define blurb6 easy to use and efficient, while offering many advanced storage management
101 %define blurb7 features that make it easy to find and recover lost or damaged files.
102 %define blurb8 Bacula source code has been released under the AGPL version 3 license.
103
104 %define user_file  /etc/passwd
105 %define group_file /etc/group
106
107 # program locations
108 %define useradd  /usr/sbin/useradd
109 %define groupadd /usr/sbin/groupadd
110 %define usermod  /usr/sbin/usermod
111
112 # platform defines - set one below or define the build_xxx on the command line
113 # RedHat builds
114 %define rh7 0
115 %{?build_rh7:%define rh7 1}
116 %define rh8 0
117 %{?build_rh8:%define rh8 1}
118 %define rh9 0
119 %{?build_rh9:%define rh9 1}
120 # Fedora Core build
121 %define fc16 0
122 %{?build_fc16:%define fc16 1}
123 %define fc17 0
124 %{?build_fc17:%define fc17 1}
125 %define fc18 0
126 %{?build_fc18:%define fc18 1}
127 %define fc22 0
128 %{?build_fc22:%define fc22 1}
129 # RedHat Enterprise builds
130 %define rhel3 0
131 %{?build_rhel3:%define rhel3 1}
132 %define rhel4 0
133 %{?build_rhel4:%define rhel4 1}
134 %{?build_rhel4:%define fc3 1}
135 %{?build_el4:%define rhel4 1}
136 %{?build_el4:%define fc3 1}
137 %define rhel5 0
138 %{?build_rhel5:%define rhel5 1}
139 %{?build_rhel5:%define fc6 1}
140 %{?build_el5:%define rhel5 1}
141 %{?build_el5:%define fc6 1}
142 %define rhel6 0
143 %{?build_rhel6:%define rhel6 1}
144 %{?build_el6:%define rhel6 1}
145 %define rhel7 0
146 %{?build_rhel7:%define rhel7 1}
147 %{?build_el7:%define rhel7 1}
148 # CentOS build
149 %define centos3 0
150 %{?build_centos3:%define centos3 1}
151 %define centos4 0
152 %{?build_centos4:%define centos4 1}
153 %{?build_centos4:%define fc3 1}
154 %define centos5 0
155 %{?build_centos5:%define centos5 1}
156 %{?build_centos5:%define fc6 1}
157 %define centos6 0
158 %{?build_centos6:%define centos6 1}
159 %define centos7 0
160 %{?build_centos7:%define centos7 1}
161 # SL build
162 %define sl3 0
163 %{?build_sl3:%define sl3 1}
164 %define sl4 0
165 %{?build_sl4:%define sl4 1}
166 %{?build_sl4:%define fc3 1}
167 %define sl5 0
168 %{?build_sl5:%define sl5 1}
169 %{?build_sl5:%define fc6 1}
170 # SuSE build
171 %define su9 0
172 %{?build_su9:%define su9 1}
173 %define su10 0
174 %{?build_su10:%define su10 1}
175 %define su102 0
176 %{?build_su102:%define su102 1}
177 %define su103 0
178 %{?build_su103:%define su103 1}
179 %define su110 0
180 %{?build_su110:%define su110 1}
181 %define su111 0
182 %{?build_su111:%define su111 1}
183 %define su112 0
184 %{?build_su112:%define su112 1}
185 %define su113 0
186 %{?build_su113:%define su113 1}
187 %define su120 0
188 %{?build_su120:%define su120 1}
189 %define su131 0
190 %{?build_su131:%define su131 1}
191 # Mandrake builds
192 %define mdk 0
193 %{?build_mdk:%define mdk 1}
194 %define mdv 0
195 %{?build_mdv:%define mdv 1}
196 %{?build_mdv:%define mdk 1}
197
198 # client only build
199 %define client_only 0
200 %{?build_client_only:%define client_only 1}
201
202 # if the platform is using systemd
203 %define usesystemd 0
204
205 %if %{rhel7} || %{fc22} || %{centos7}
206 %define usesystemd 1
207 %endif
208
209 # depending if we use systemd or not, we use chkconfig or systemctl
210 %if %{usesystemd}
211 %define service_enable    systemctl enable
212 %define service_disable   systemctl disable
213 %else
214 %define service_enable    /sbin/chkconfig --add
215 %define service_disable   /sbin/chkconfig --del
216 %endif
217
218 # Setup some short cuts
219 %define rhat 0
220 %if %{rh7} || %{rh8} || %{rh9}
221 %define rhat 1
222 %endif
223 %define fed 0
224 %if %{fc16} || %{fc17} || %{fc18} || %{fc22}
225 %define fed 1
226 %endif
227 %define suse 0
228 %if %{su9} || %{su10} || %{su102} || %{su103} || %{su110} || %{su111} || %{su112} || %{su120} || %{su131}
229 %define suse 1
230 %endif
231 %define rhel 0
232 %if %{rhel3} || %{rhel4} || %{rhel5} || %{rhel6} || %{rhel7} || %{centos3} || %{centos4} || %{centos5} || %{centos6} || %{centos7}
233 %define rhel 1
234 %endif
235 %define scil 0
236 %if %{sl3} || %{sl4} || %{sl5}
237 %define scil 1
238 %endif
239
240
241 # test for a platform definition
242 %if !%{rhat} && !%{rhel} && !%{fed} && !%{suse} && !%{mdk} && !%{scil}
243 %{error: You must specify a platform. Please examine the spec file.}
244 exit 1
245 %endif
246
247 # distribution-specific directory for logwatch
248 %if %{rh7} || %{rh8} || %{rh9}
249 %define logwatch_dir /etc/log.d
250 %else
251 %define logwatch_dir /etc/logwatch
252 %endif
253
254 # database defines
255 # set for database support desired or define the build_xxx on the command line
256 %define mysql 0
257 %{?build_mysql:%define mysql 1}
258 %define sqlite 0
259 %{?build_sqlite:%define sqlite 1}
260 %define postgresql 0
261 %{?build_postgresql:%define postgresql 1}
262
263 # test for a database definition
264 %if ! %{mysql} && ! %{sqlite} && ! %{postgresql} && ! %{client_only}
265 %{error: You must specify database support, by passing one of the following to rpmbuild:}
266 %{error:   --define build_postgresql=1}
267 %{error:   --define build_sqlite=1}
268 %{error:   --define build_mysql=1}
269 exit 1
270 %endif
271
272 %if %{mysql}
273 %define db_backend mysql
274 %endif
275 %if %{sqlite}
276 %define db_backend sqlite3
277 %endif
278 %if %{postgresql}
279 %define db_backend postgresql
280 %endif
281
282 # 64 bit support
283 %define x86_64 0
284 %{?build_x86_64:%define x86_64 1}
285
286 # check what distribution we are
287 %if %{fc16} || %{fc17} || %{fc18} || %{fc22}
288 %define _dist %(grep Fedora /etc/redhat-release)
289 %endif
290 %if %{centos7} || %{centos6}
291 %define _dist %(grep CentOS /etc/redhat-release)
292 %endif
293 %if %{centos5} || %{centos4} || %{centos3}
294 %define _dist %(grep CentOS /etc/redhat-release)
295 %endif
296 %if %{sl5} ||%{sl4} || %{sl3}
297 %define _dist %(grep 'Scientific Linux' /etc/redhat-release)
298 %endif
299 %if %{suse}
300 %define _dist %(grep -i SuSE /etc/SuSE-release)
301 %endif
302
303 Distribution: %_dist
304
305 # should we enable tcp wrappers support
306 %define tcpwrappers 1
307 %{?build_tcpwrappers:%define tcpwrappers 1}
308
309 # do we need to patch for old postgresql version?
310 %define old_pgsql 0
311 %{?build_old_pgsql:%define old_pgsql 1}
312
313 # Mandriva somehow forces the manpage file extension to bz2 rather than gz
314 %if %{mdk}
315 %define manpage_ext bz2
316 %else
317 %define manpage_ext gz
318 %endif
319
320 # for client only build
321 %if %{client_only}
322 %define mysql 0
323 %define postgresql 0
324 %define sqlite 0
325 %endif
326
327 BuildRequires: gcc, gcc-c++, make, autoconf
328 BuildRequires: glibc, glibc-devel
329 BuildRequires: ncurses-devel, readline-devel
330 BuildRequires: libstdc++-devel, zlib-devel
331 BuildRequires: openssl-devel
332 BuildRequires: libacl-devel
333 BuildRequires: pkgconfig
334 BuildRequires: bzip2-devel
335 %if ! %{rh7}
336 BuildRequires: libxml2-devel
337 %endif
338
339 %if %{rh7}
340 BuildRequires: libxml-devel
341 %endif
342 %if %{mdk}
343 BuildRequires: libstdc++-static-devel
344 BuildRequires: glibc-static-devel
345 %endif
346
347 %if %{mysql} && ! %{suse}
348 BuildRequires: mysql-devel
349 %endif
350
351 %if %{postgresql}
352 BuildRequires: %{postgres_devel_package} >= %{postgres_version}
353 %endif
354
355 %description
356 %{blurb}
357
358 %{blurb2}
359 %{blurb3}
360 %{blurb4}
361 %{blurb5}
362 %{blurb6}
363 %{blurb7}
364 %{blurb8}
365
366 #
367 # ===========================================================
368 # Generate mysql, sqlite, or postgresql rpm
369 # ===========================================================
370 #
371 %if %{mysql}
372 %package mysql
373 Provides: perl(Logwatch)
374 Provides: libbaccats-%{version}.so
375 Provides: libbaccats-%{version}.so()(64bit)
376 %endif
377 %if %{sqlite}
378 %package sqlite
379 %endif
380 %if %{postgresql}
381 %package postgresql
382 %endif
383
384 Summary: Bacula - The Network Backup Solution
385 Group: System Environment/Daemons
386 Provides: bacula-dir, bacula-sd, bacula-fd, bacula-server
387 Conflicts: bacula-client
388
389 Requires: ncurses, libstdc++, zlib, openssl
390 Requires: glibc, readline, %{name}-libs
391
392 %if %{suse}
393 Conflicts: bacula
394 %endif
395
396 %if %{mysql}
397 Requires: mysql
398 %endif
399
400 %if %{postgresql}
401 Requires: postgresql >= 7
402 %endif
403
404 %if %{mysql}
405 %description mysql
406 %endif
407 %if %{sqlite}
408 %description sqlite
409 %endif
410 %if %{postgresql}
411 %description postgresql
412 %endif
413
414 %{blurb}
415
416 %{blurb2}
417 %{blurb3}
418 %{blurb4}
419 %{blurb5}
420 %{blurb6}
421 %{blurb7}
422 %{blurb8}
423
424 %if %{mysql}
425 This build requires MySQL to be installed separately as the catalog database.
426 %endif
427 %if %{postgresql}
428 This build requires PostgreSQL to be installed separately as the catalog database.
429 %endif
430 %if %{sqlite}
431 This build incorporates sqlite3 as the catalog database, statically compiled.
432 %endif
433 %if %{tcpwrappers}
434 This build includes tcp-wrappers support.
435 %endif
436
437
438
439 #
440 # ===========================================================
441 # Client -- bacula-fd rpm
442 # ===========================================================
443 #
444 %package client
445 Summary: Bacula - The Network Backup Solution
446 Group: System Environment/Daemons
447 Provides: bacula-fd
448 Conflicts: bacula-mysql
449 Conflicts: bacula-sqlite
450 Conflicts: bacula-postgresql
451
452 %if %{suse}
453 Provides: %{product}
454 Provides: %{product}-libs
455 %endif
456
457 Requires: libstdc++, zlib, openssl, bzip2-libs
458 Requires: glibc, readline, %{name}-libs
459
460 %description client
461 %{blurb}
462
463 %{blurb2}
464 %{blurb3}
465 %{blurb4}
466 %{blurb5}
467 %{blurb6}
468 %{blurb7}
469 %{blurb8}
470
471 This is the File daemon (Client) only package. It includes the command line
472 console program.
473 %if %{tcpwrappers}
474 This build includes tcp-wrappers support.
475 %endif
476
477 #
478 # ===========================================================
479 # Generate updatedb rpm
480 # ===========================================================
481 #
482 %if ! %{client_only}
483 %package updatedb
484
485 Summary: Bacula - The Network Backup Solution
486 Group: System Environment/Daemons
487
488 %description updatedb
489 %{blurb}
490
491 %{blurb2}
492 %{blurb3}
493 %{blurb4}
494 %{blurb5}
495 %{blurb6}
496 %{blurb7}
497 %{blurb8}
498
499 This package installs scripts for updating older versions of the bacula
500 database.
501 %endif
502
503 #
504 # ===========================================================
505 # Generate libs rpm
506 # ===========================================================
507 #
508 %package libs
509
510 Summary: Bacula - The Network Backup Solution
511 Group: System Environment/Daemons
512
513 %description libs
514 %{blurb}
515
516 %{blurb2}
517 %{blurb3}
518 %{blurb4}
519 %{blurb5}
520 %{blurb6}
521 %{blurb7}
522 %{blurb8}
523
524 This package installs the shared libraries used by many bacula programs.
525
526 # Must explicitly enable debug pkg on SuSE
527 # but not in opensuse_bs
528 #%if %{suse} && ! 0%{?opensuse_bs}
529 #%debug_package
530 #%endif
531
532 %prep
533 %setup -T    -b 0 -n depkgs
534 %setup -T    -b 1 -n %{product}-%{version}
535 %setup -T -D -b 2 -n %{product}-%{version}
536 # extract depkgs
537
538
539 %build
540
541 %if %{suse}
542 #export LDFLAGS="${LDFLAGS} -L/usr/lib/termcap -L/usr/lib64/termcap"
543 %endif
544
545 # You can use a cache for depkgs
546 # tar xfz depkgs*gz -C ~/
547 # cd ~/depkgs
548 # touch %{depkgs_version}       # depkgs version
549
550 if [ -f $HOME/depkgs/%{depkgs_version} ]; then
551    rm -rf %{depkgs}
552    ln -s $HOME/depkgs %{depkgs}
553 fi
554
555 cwd=${PWD}
556 %if %{sqlite}
557 cd %{depkgs}
558 make sqlite3
559 cd ${cwd}
560 %endif
561
562 cd %{depkgs}
563 make lzo
564 export LDFLAGS="${LDFLAGS} -L${PWD}/lzo/lib"
565 export CPPFLAGS="${CPPFLAGS} -I${PWD}/lzo/include"
566 cd ${cwd}
567
568 # hostname is the build hostname, so use XXX_HOSTNAME_XXX for Address parameter
569 sed -i s/hostname/basename/ src/console/bconsole.conf.in src/dird/bacula-dir.conf.in src/qt-console/bat.conf.in
570
571 %if %{sqlite}
572 # patches for the bundled sqlite scripts
573 sed -i s:.SQLITE_BINDIR.:/opt/bacula/sqlite: src/cats/*_sqlite3_*.in
574
575 # patch the bacula-dir init script to remove sqlite service
576 %if %{suse}
577 sed -i 's/network .DB_TYPE./network/' platforms/suse/bacula-dir.in
578 %endif
579 %endif
580
581 # 64 bit lib location hacks
582 # as of 1.39.18 it should not be necessary to enable x86_64 as configure is
583 # reported to be fixed to properly detect lib locations.
584 %if %{x86_64}
585 export LDFLAGS="${LDFLAGS} -L/usr/lib64"
586 %endif
587 %if %{mysql} && %{x86_64}
588 export LDFLAGS="${LDFLAGS} -L/usr/lib64/mysql"
589 %endif
590
591 export BACULA="Bacula"
592
593 # Main Bacula configuration
594 %configure \
595         --prefix=%{_prefix} \
596         --sbindir=%{_sbindir} \
597         --sysconfdir=%{sysconf_dir} \
598         --mandir=%{_mandir} \
599         --with-scriptdir=%{script_dir} \
600         --with-working-dir=%{working_dir} \
601         --with-plugindir=%{plugin_dir} \
602         --with-logdir=%{log_dir} \
603         --with-pid-dir=%{pid_dir} \
604         --with-subsys-dir=%{_subsysdir} \
605         --enable-smartalloc \
606         --disable-conio \
607         --enable-readline \
608 %if %{mysql}
609         --with-mysql \
610 %endif
611 %if %{postgresql}
612         --with-postgresql \
613 %endif
614         --disable-bat \
615 %if %{client_only}
616         --enable-client-only \
617 %endif
618 %if %{rh7} || %{rh8} || %{rh9}
619         --disable-batch-insert \
620 %endif
621 %if %{usesystemd}
622         --with-systemd=%{systemd_dir} \
623 %endif
624         --with-tcp-wrappers  \
625         --with-dir-user=%{director_daemon_user} \
626         --with-dir-group=%{daemon_group} \
627         --with-sd-user=%{storage_daemon_user} \
628         --with-sd-group=%{storage_daemon_group} \
629         --with-fd-user=%{file_daemon_user} \
630         --with-fd-group=%{daemon_group} \
631         --with-basename="XXX_HOSTNAME_XXX" \
632         --with-hostname="XXX_HOSTNAME_XXX" \
633         --with-dir-password="XXX_REPLACE_WITH_DIRECTOR_PASSWORD_XXX" \
634         --with-fd-password="XXX_REPLACE_WITH_CLIENT_PASSWORD_XXX" \
635         --with-sd-password="XXX_REPLACE_WITH_STORAGE_PASSWORD_XXX" \
636         --with-mon-dir-password="XXX_REPLACE_WITH_DIRECTOR_MONITOR_PASSWORD_XXX" \
637         --with-mon-fd-password="XXX_REPLACE_WITH_CLIENT_MONITOR_PASSWORD_XXX" \
638         --with-mon-sd-password="XXX_REPLACE_WITH_STORAGE_MONITOR_PASSWORD_XXX" \
639         --with-openssl
640
641 make -j3
642
643 %install
644
645 cwd=${PWD}
646 [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT"
647 mkdir -p $RPM_BUILD_ROOT/etc/init.d
648 mkdir -p $RPM_BUILD_ROOT/etc/logrotate.d
649 mkdir -p $RPM_BUILD_ROOT%{logwatch_dir}/conf/logfiles
650 mkdir -p $RPM_BUILD_ROOT%{logwatch_dir}/conf/services
651 mkdir -p $RPM_BUILD_ROOT%{logwatch_dir}/scripts/services
652 mkdir -p $RPM_BUILD_ROOT%{logwatch_dir}/scripts/shared
653 mkdir -p $RPM_BUILD_ROOT%{script_dir}/updatedb
654
655 mkdir -p $RPM_BUILD_ROOT/etc/pam.d
656 mkdir -p $RPM_BUILD_ROOT%{_sbindir}
657
658 %if %{sqlite}
659 mkdir -p $RPM_BUILD_ROOT%{sqlite_bindir}
660 %endif
661
662 make DESTDIR=$RPM_BUILD_ROOT install
663
664 # bsnapshot
665 make DESTDIR=$RPM_BUILD_ROOT -C ../bacula-%{_version}/src/tools/ install-bsnapshot
666
667 %if %{usesystemd}
668 make DESTDIR=$RPM_BUILD_ROOT -C platforms/systemd install-dir install-service
669 %endif
670
671 # Remove docs for programs that are depreciated
672 rm -f $RPM_BUILD_ROOT%{_mandir}/man1/bacula-bgnome-console.1.%{manpage_ext}
673 rm -f $RPM_BUILD_ROOT%{_mandir}/man1/bacula-bwxconsole.1.%{manpage_ext}
674 rm -f $RPM_BUILD_ROOT%{_mandir}/man1/bacula-tray-monitor.1.%{manpage_ext}
675 rm -f $RPM_BUILD_ROOT%{script_dir}/gconsole
676
677 # Remove docs for programs we do not distribute
678 rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bpluginfo.8.%{manpage_ext}
679
680 # Remove storage-ctl packaged in shstore rpm
681 rm -f $RPM_BUILD_ROOT%{script_dir}/storage-ctl
682 rm -f $RPM_BUILD_ROOT%{script_dir}/storage-ctl.conf
683
684 # fixme - make installs the mysql scripts for sqlite build
685 %if %{sqlite}
686 rm -f $RPM_BUILD_ROOT%{script_dir}/startmysql
687 rm -f $RPM_BUILD_ROOT%{script_dir}/stopmysql
688 rm -f $RPM_BUILD_ROOT%{script_dir}/grant_mysql_privileges
689 %endif
690
691 # fixme - make installs the mysql scripts for postgresql build
692 %if %{postgresql}
693 rm -f $RPM_BUILD_ROOT%{script_dir}/startmysql
694 rm -f $RPM_BUILD_ROOT%{script_dir}/stopmysql
695 %endif
696
697 # Remove symlinks
698 rm -f $RPM_BUILD_ROOT%{_libdir}/libbaccats.so
699 rm -f $RPM_BUILD_ROOT%{_libdir}/libbaccats-%{version}.so
700
701 # install the init scripts
702 %if !%{usesystemd}
703 %if %{suse}
704 cp -p platforms/suse/bacula-dir $RPM_BUILD_ROOT/etc/init.d/bacula-dir
705 cp -p platforms/suse/bacula-fd $RPM_BUILD_ROOT/etc/init.d/bacula-fd
706 cp -p platforms/suse/bacula-sd $RPM_BUILD_ROOT/etc/init.d/bacula-sd
707 %endif                           # suse
708 %if %{mdk}
709 cp -p platforms/mandrake/bacula-dir $RPM_BUILD_ROOT/etc/init.d/bacula-dir
710 cp -p platforms/mandrake/bacula-fd $RPM_BUILD_ROOT/etc/init.d/bacula-fd
711 cp -p platforms/mandrake/bacula-sd $RPM_BUILD_ROOT/etc/init.d/bacula-sd
712 %endif                           # mdk
713 %if ! %{suse} && ! %{mdk}
714 cp -p platforms/redhat/bacula-dir $RPM_BUILD_ROOT/etc/init.d/bacula-dir
715 cp -p platforms/redhat/bacula-fd $RPM_BUILD_ROOT/etc/init.d/bacula-fd
716 cp -p platforms/redhat/bacula-sd $RPM_BUILD_ROOT/etc/init.d/bacula-sd
717 %endif                           # !suse && !mdk
718 chmod 0754 $RPM_BUILD_ROOT/etc/init.d/*
719 %endif                           # ! usesystemd
720
721 %if %{client_only}
722 rm -f $RPM_BUILD_ROOT/etc/init.d/bacula-dir
723 rm -f $RPM_BUILD_ROOT/etc/init.d/bacula-sd
724 rm -f $RPM_BUILD_ROOT%{script_dir}/breload
725 rm -f $RPM_BUILD_ROOT%{script_dir}/manual_prune.pl
726 rm -f $RPM_BUILD_ROOT%{systemd_dir}/bacula-dir.service
727 rm -f $RPM_BUILD_ROOT%{systemd_dir}/bacula-sd.service
728 %endif
729
730 # install sqlite
731 %if %{sqlite}
732 cp -p %{depkgs}/sqlite3/sqlite3 $RPM_BUILD_ROOT%{sqlite_bindir}/sqlite3
733 cp -p %{depkgs}/sqlite3/sqlite3.h $RPM_BUILD_ROOT%{sqlite_bindir}/sqlite3.h
734 cp -p %{depkgs}/sqlite3/libsqlite3.a $RPM_BUILD_ROOT%{sqlite_bindir}/libsqlite3.a
735 %endif
736
737
738 # install the logrotate file
739 cp -p scripts/logrotate $RPM_BUILD_ROOT/etc/logrotate.d/bacula
740
741 # install the updatedb scripts
742 cp -p updatedb/* $RPM_BUILD_ROOT%{script_dir}/updatedb/
743
744 # install specific scripts
745
746 %if ! %{client_only}
747 # install the sample-query.sql file
748 cp -p examples/sample-query.sql $RPM_BUILD_ROOT%{script_dir}/sample-query.sql
749
750 # install the logwatch scripts
751 cp -p scripts/logwatch/bacula $RPM_BUILD_ROOT%{logwatch_dir}/scripts/services/bacula
752 cp -p scripts/logwatch/applybaculadate $RPM_BUILD_ROOT%{logwatch_dir}/scripts/shared/applybaculadate
753 cp -p scripts/logwatch/logfile.bacula.conf $RPM_BUILD_ROOT%{logwatch_dir}/conf/logfiles/bacula.conf
754 cp -p scripts/logwatch/services.bacula.conf $RPM_BUILD_ROOT%{logwatch_dir}/conf/services/bacula.conf
755 chmod 755 $RPM_BUILD_ROOT%{logwatch_dir}/scripts/services/bacula
756 chmod 755 $RPM_BUILD_ROOT%{logwatch_dir}/scripts/shared/applybaculadate
757 chmod 644 $RPM_BUILD_ROOT%{logwatch_dir}/conf/logfiles/bacula.conf
758 chmod 644 $RPM_BUILD_ROOT%{logwatch_dir}/conf/services/bacula.conf
759 %endif
760
761 # now clean up permissions that are left broken by the install
762 chmod o-rwx $RPM_BUILD_ROOT%{working_dir}
763
764 # fix me - building enable-client-only installs files not included in bacula-client package
765 %if %{client_only}
766 # Program docs not installed on client
767 rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bacula-dir.8.%{manpage_ext}
768 rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bacula-sd.8.%{manpage_ext}
769 rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bcopy.8.%{manpage_ext}
770 rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bextract.8.%{manpage_ext}
771 rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bls.8.%{manpage_ext}
772 rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bscan.8.%{manpage_ext}
773 rm -f $RPM_BUILD_ROOT%{_mandir}/man8/btape.8.%{manpage_ext}
774 rm -f $RPM_BUILD_ROOT%{_mandir}/man8/dbcheck.8.%{manpage_ext}
775 rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bregex.8.%{manpage_ext}
776 rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bwild.8.%{manpage_ext}
777 rm -f $RPM_BUILD_ROOT%{_mandir}/man1/bsmtp.1.%{manpage_ext}
778 rm -f $RPM_BUILD_ROOT%{script_dir}/bacula
779 rm -f $RPM_BUILD_ROOT%{script_dir}/bacula_config
780 rm -f $RPM_BUILD_ROOT%{script_dir}/bacula-ctl-dir
781 rm -f $RPM_BUILD_ROOT%{script_dir}/bacula-ctl-sd
782 rm -f $RPM_BUILD_ROOT%{script_dir}/disk-changer
783 rm -f $RPM_BUILD_ROOT%{script_dir}/dvd-handler
784 rm -f $RPM_BUILD_ROOT%{script_dir}/mtx-changer
785 rm -f $RPM_BUILD_ROOT%{script_dir}/startmysql
786 rm -f $RPM_BUILD_ROOT%{script_dir}/stopmysql
787 rm -rf $RPM_BUILD_ROOT%{script_dir}/updatedb
788 rm -f $RPM_BUILD_ROOT%{script_dir}/bconsole
789 rm -f $RPM_BUILD_ROOT%{script_dir}/mtx-changer.conf
790 rm -f $RPM_BUILD_ROOT%{_sbindir}/bacula
791
792 %endif
793
794 %clean
795 [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT"
796 rm -f $RPM_BUILD_DIR/Release_Notes-%{version}-%{release}.txt
797
798
799 %if %{mysql}
800 # MySQL specific files
801 %files mysql
802 %defattr(-, root, root)
803 %attr(-, root, %{daemon_group}) %{script_dir}/create_mysql_database
804 %attr(-, root, %{daemon_group}) %{script_dir}/drop_mysql_database
805 %attr(-, root, %{daemon_group}) %{script_dir}/make_mysql_tables
806 %attr(-, root, %{daemon_group}) %{script_dir}/drop_mysql_tables
807 %attr(-, root, %{daemon_group}) %{script_dir}/update_mysql_tables
808 %attr(-, root, %{daemon_group}) %{script_dir}/grant_mysql_privileges
809 %{_libdir}/libbaccats*
810 %{_libdir}/libbacsql*
811 %endif
812
813
814 %if %{postgresql}
815 %files postgresql
816 %defattr(-,root,root)
817 %attr(755, root, %{daemon_group}) %{script_dir}/create_postgresql_database
818 %attr(755, root, %{daemon_group}) %{script_dir}/drop_postgresql_database
819 %attr(755, root, %{daemon_group}) %{script_dir}/make_postgresql_tables
820 %attr(755, root, %{daemon_group}) %{script_dir}/drop_postgresql_tables
821 %attr(755, root, %{daemon_group}) %{script_dir}/update_postgresql_tables
822 %attr(755, root, %{daemon_group}) %{script_dir}/grant_postgresql_privileges
823 %{_libdir}/libbaccats*
824 %{_libdir}/libbacsql*
825 %endif
826
827 # The rest is DB backend independent
828
829 %if ! %{client_only}
830 %attr(-, root, %{daemon_group}) %dir %{script_dir}
831 %attr(-, root, %{daemon_group}) %dir %{sysconf_dir}
832 %attr(-, root, %{daemon_group}) %{script_dir}/bacula
833 %attr(-, root, %{daemon_group}) %{script_dir}/bacula_config
834 %attr(-, root, %{daemon_group}) %{script_dir}/bconsole
835 %attr(755, root, %{daemon_group}) %{script_dir}/create_bacula_database
836 %attr(755, root, %{daemon_group}) %{script_dir}/drop_bacula_database
837 %attr(755, root, %{daemon_group}) %{script_dir}/grant_bacula_privileges
838 %attr(755, root, %{daemon_group}) %{script_dir}/make_bacula_tables
839 %attr(755, root, %{daemon_group}) %{script_dir}/drop_bacula_tables
840 %attr(755, root, %{daemon_group}) %{script_dir}/update_bacula_tables
841 %attr(-, root, %{daemon_group}) %{script_dir}/make_catalog_backup
842 %attr(-, root, %{daemon_group}) %{script_dir}/make_catalog_backup.pl
843 %attr(-, root, %{daemon_group}) %{script_dir}/delete_catalog_backup
844 %attr(-, root, %{daemon_group}) %{script_dir}/btraceback.dbx
845 %attr(-, root, %{daemon_group}) %{script_dir}/btraceback.gdb
846 %attr(-, root, %{daemon_group}) %{script_dir}/btraceback.mdb
847 %attr(-, root, %{daemon_group}) %{script_dir}/disk-changer
848 %attr(-, root, %{daemon_group}) %{script_dir}/bacula-ctl-dir
849 %attr(-, root, %{daemon_group}) %{script_dir}/bacula-ctl-fd
850 %attr(-, root, %{daemon_group}) %{script_dir}/bacula-ctl-sd
851 %attr(-, root, %{daemon_group}) %{plugin_dir}/bpipe-fd.so
852 %attr(-, root, %{daemon_group}) %{_sbindir}/dbcheck
853 %attr(-, root, %{storage_daemon_group}) %{script_dir}/dvd-handler
854 %attr(-, root, %{storage_daemon_group}) %{script_dir}/mtx-changer
855 %attr(-, root, %{storage_daemon_group}) %config(noreplace) %{script_dir}/mtx-changer.conf
856
857 %if %{usesystemd}
858 %attr(-, root, %{daemon_group}) %{systemd_dir}/bacula-dir.service
859 %attr(-, root, %{daemon_group}) %{systemd_dir}/bacula-fd.service
860 %attr(-, root, %{daemon_group}) %{systemd_dir}/bacula-sd.service
861 %else
862 %attr(-, root, %{daemon_group}) /etc/init.d/bacula-dir
863 %attr(-, root, %{daemon_group}) /etc/init.d/bacula-fd
864 %attr(-, root, %{storage_daemon_group}) /etc/init.d/bacula-sd
865 %endif
866
867 /etc/logrotate.d/bacula
868 %{logwatch_dir}/scripts/services/bacula
869 %{logwatch_dir}/scripts/shared/applybaculadate
870 %attr(-, root, %{daemon_group}) %config(noreplace) %{sysconf_dir}/bacula-dir.conf
871 %attr(-, root, %{daemon_group}) %config(noreplace) %{sysconf_dir}/bacula-fd.conf
872 %attr(-, root, %{storage_daemon_group}) %config(noreplace) %{sysconf_dir}/bacula-sd.conf
873 %attr(-, root, %{daemon_group}) %config(noreplace) %{sysconf_dir}/bconsole.conf
874 %attr(-, root, %{daemon_group}) %config(noreplace) %{logwatch_dir}/conf/logfiles/bacula.conf
875 %attr(-, root, %{daemon_group}) %config(noreplace) %{logwatch_dir}/conf/services/bacula.conf
876 %attr(-, root, %{daemon_group}) %{script_dir}/sample-query.sql
877 %attr(-, root, %{daemon_group}) %{script_dir}/query.sql
878
879 %attr(-, %{storage_daemon_user}, %{daemon_group}) %dir %{working_dir}
880
881 %attr(-, root, %{daemon_group}) %{_sbindir}/bacula-dir
882 %attr(-, root, %{daemon_group}) %{_sbindir}/bacula-sd
883 %attr(-, root, %{daemon_group}) %{_sbindir}/btraceback
884 %attr(-, root, %{daemon_group}) %{_sbindir}/bconsole
885 %attr(-, root, %{daemon_group}) %{_sbindir}/bsmtp
886 %attr(-, root, %{daemon_group}) %{_sbindir}/bscan
887 %attr(-, root, %{daemon_group}) %{_sbindir}/btape
888
889 %attr(755, root, root) %{_sbindir}/bsnapshot
890
891 %{_sbindir}/bacula-fd
892 %{_sbindir}/bacula
893 %{_sbindir}/bcopy
894 %{_sbindir}/bextract
895 %{_sbindir}/bls
896 %{_sbindir}/bregex
897 %{_sbindir}/bwild
898 %{_mandir}/man8/bacula-fd.8.%{manpage_ext}
899 %{_mandir}/man8/bacula-dir.8.%{manpage_ext}
900 %{_mandir}/man8/bacula-sd.8.%{manpage_ext}
901 %{_mandir}/man8/bacula.8.%{manpage_ext}
902 %{_mandir}/man8/bconsole.8.%{manpage_ext}
903 %{_mandir}/man8/bcopy.8.%{manpage_ext}
904 %{_mandir}/man8/bextract.8.%{manpage_ext}
905 %{_mandir}/man8/bls.8.%{manpage_ext}
906 %{_mandir}/man8/bscan.8.%{manpage_ext}
907 %{_mandir}/man8/btape.8.%{manpage_ext}
908 %{_mandir}/man8/btraceback.8.%{manpage_ext}
909 %{_mandir}/man8/dbcheck.8.%{manpage_ext}
910 %{_mandir}/man8/bregex.8.%{manpage_ext}
911 %{_mandir}/man8/bwild.8.%{manpage_ext}
912 %{_mandir}/man1/bsmtp.1.%{manpage_ext}
913 %{_mandir}/man1/bat.1.%{manpage_ext}
914 %_prefix/share/doc/*
915
916 %doc ../Release_Notes-%{version}-%{release}.txt
917
918 %endif
919
920 %if %{mysql}
921 %pre mysql
922 # test for bacula database older than version 13
923 # note: this ASSUMES no password has been set for bacula database
924 DB_VER=`mysql 2>/dev/null bacula -e 'select * from Version;'|tail -n 1`
925 %endif
926
927 %if %{sqlite}
928 %pre sqlite
929 # are we upgrading from sqlite to sqlite3?
930 if [ -s %{working_dir}/bacula.db ] && [ -s %{sqlite_bindir}/sqlite ];then
931         echo "This version of bacula-sqlite involves an upgrade to sqlite3."
932         echo "Your catalog database file is not compatible with sqlite3, thus"
933         echo "you will need to dump the data, delete the old file, and re-run"
934         echo "this rpm upgrade."
935         echo ""
936         echo "Backing up your current database..."
937         echo ".dump" | %{sqlite_bindir}/sqlite %{working_dir}/bacula.db > %{working_dir}/bacula_backup.sql
938         mv %{working_dir}/bacula.db %{working_dir}/bacula.db.old
939         echo "Your catalog data has been saved in %{working_dir}/bacula_backup.sql and your"
940         echo "catalog file has been renamed %{working_dir}/bacula.db.old."
941         echo ""
942         echo "Please re-run this rpm package upgrade."
943         echo "After the upgrade is complete, restore your catalog"
944         echo "with the following commands:"
945         echo "%{script_dir}/drop_sqlite3_tables"
946         echo "cd %{working_dir}"
947         echo "%{sqlite_bindir}/sqlite3 $* bacula.db < bacula_backup.sql"
948         echo "chown bacula.bacula bacula.db"
949         exit 1
950 fi
951 # test for bacula database older than version 12 and sqlite3
952 if [ -s %{working_dir}/bacula.db ] && [ -s %{sqlite_bindir}/sqlite3 ];then
953         DB_VER=`echo "select * from Version;" | %{sqlite_bindir}/sqlite3 2>/dev/null %{working_dir}/bacula.db | tail -n 1`
954 %endif
955
956 %if %{postgresql}
957 %pre postgresql
958 DB_VER=`echo 'SELECT * FROM Version LIMIT 1;' | su - postgres -c 'psql bacula' 2>/dev/null | tail -3 | head -1`
959 %endif
960
961 %if ! %{client_only}
962 if [ -n "$DB_VER" ] && [ "$DB_VER" -lt "12" ]; then
963     echo "This bacula upgrade will update a bacula database from version 12 to 1014."
964     echo "You appear to be running database version $DB_VER. You must first update"
965     echo "your database to version 12 and then install this upgrade. The alternative"
966     echo "is to use %{script_dir}/drop_%{db_backend}_tables to delete all your your current"
967     echo "catalog information, then do the upgrade. Information on updating a"
968     echo "database older than version 12 can be found in the release notes."
969     exit 1
970 fi
971 %endif
972
973 %if %{sqlite}
974 fi
975 %endif
976
977 %if ! %{client_only}
978 # check for and copy %{sysconf_dir}/console.conf to bconsole.conf
979 if [ -s %{sysconf_dir}/console.conf ];then
980     cp -p %{sysconf_dir}/console.conf %{sysconf_dir}/bconsole.conf
981 fi
982
983 # create the daemon users and groups
984 # first create the groups if they don't exist
985 HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
986 if [ -z "$HAVE_BACULA" ]; then
987         %{groupadd} -r %{daemon_group} > /dev/null 2>&1
988         echo "The group %{daemon_group} has been added to %{group_file}."
989         echo "See the manual chapter \"Running Bacula\" for details."
990 fi
991 HAVE_BACULA=`grep %{storage_daemon_group} %{group_file} 2>/dev/null`
992 if [ -z "$HAVE_BACULA" ]; then
993         %{groupadd} -r %{storage_daemon_group} > /dev/null 2>&1
994         echo "The group %{storage_daemon_group} has been added to %{group_file}."
995         echo "See the manual chapter \"Running Bacula\" for details."
996 fi
997 # now create the users if they do not exist
998 # we do not use the -g option allowing the primary group to be set to system default
999 # this will be a unique group on redhat type systems or the group users on some systems
1000 HAVE_BACULA=`grep %{storage_daemon_user} %{user_file} 2>/dev/null`
1001 if [ -z "$HAVE_BACULA" ]; then
1002         %{useradd} -r -c "Bacula" -d %{working_dir} -g %{storage_daemon_group} -M -s /sbin/nologin %{storage_daemon_user} > /dev/null 2>&1
1003         echo "The user %{storage_daemon_user} has been added to %{user_file}."
1004         echo "See the manual chapter \"Running Bacula\" for details."
1005 fi
1006 HAVE_BACULA=`grep %{director_daemon_user} %{user_file} 2>/dev/null`
1007 if [ -z "$HAVE_BACULA" ]; then
1008         %{useradd} -r -c "Bacula" -d %{working_dir} -g %{daemon_group} -M -s /sbin/nologin %{director_daemon_user} > /dev/null 2>&1
1009         echo "The user %{director_daemon_user} has been added to %{user_file}."
1010         echo "See the manual chapter \"Running Bacula\" for details."
1011 fi
1012 HAVE_BACULA=`grep %{file_daemon_user} %{user_file} 2>/dev/null`
1013 if [ -z "$HAVE_BACULA" ]; then
1014         %{useradd} -r -c "Bacula" -d %{working_dir} -g %{daemon_group} -M -s /sbin/nologin %{file_daemon_user} > /dev/null 2>&1
1015         echo "The user %{file_daemon_user} has been added to %{user_file}."
1016         echo "See the manual chapter \"Running Bacula\" for details."
1017 fi
1018 # now we add the supplementary groups, this is ok to call even if the users already exist
1019 # we only do this if the user is NOT root
1020 IS_ROOT=%{director_daemon_user}
1021 if [ "$IS_ROOT" != "root" ]; then
1022 %{usermod} -G %{daemon_group} %{director_daemon_user}
1023 fi
1024 IS_ROOT=%{storage_daemon_user}
1025 if [ "$IS_ROOT" != "root" ]; then
1026 %{usermod} -G %{daemon_group},%{storage_daemon_group} %{storage_daemon_user}
1027 fi
1028 IS_ROOT=%{file_daemon_user}
1029 if [ "$IS_ROOT" != "root" ]; then
1030 %{usermod} -G %{daemon_group} %{file_daemon_user}
1031 fi
1032 %endif
1033
1034 %if %{mysql}
1035 %post mysql
1036 %endif
1037 %if %{sqlite}
1038 %post sqlite
1039 %endif
1040 %if %{postgresql}
1041 %post postgresql
1042 %endif
1043 %if ! %{client_only}
1044 # add our links
1045 if [ "$1" -ge 1 ] ; then
1046 %if %{suse} && %{mysql}
1047   %{service_enable} mysql
1048 %endif
1049 %if %{suse} && %{postgresql}
1050   %{service_enable} postgresql
1051 %endif
1052   %{service_enable} bacula-dir
1053   %{service_enable} bacula-fd
1054   %{service_enable} bacula-sd
1055 fi
1056 %endif
1057
1058 if [ -d %{sysconf_dir} ]; then
1059    cd %{sysconf_dir}
1060    if [ ! -f .rpm.sed ]; then
1061        (umask 0177
1062         echo "# This file is used to ensure that all passwords will" > .rpm.sed
1063         echo "# match between configuration files"                  >> .rpm.sed
1064        )
1065        for string in XXX_REPLACE_WITH_DIRECTOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_PASSWORD_XXX XXX_REPLACE_WITH_DIRECTOR_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_MONITOR_PASSWORD_XXX; do
1066            pass=`openssl rand -base64 33`
1067            echo "s@${string}@${pass}@g" >> .rpm.sed
1068        done
1069    fi
1070    host=`hostname -s`
1071    if [ "$host" = "" ]; then
1072        host=localhost
1073    fi
1074    for file in *.conf; do
1075       sed -f .rpm.sed $file > $file.new
1076       sed "s@XXX_HOSTNAME_XXX@${host}@g" $file.new > $file
1077       rm -f $file.new
1078    done
1079 fi
1080
1081
1082 %if %{mysql}
1083
1084 #check, if mysql can be called successfully at all
1085 if mysql 2>/dev/null bacula -e 'select * from Version;' ; then
1086
1087   # test for an existing database
1088   # note: this ASSUMES no password has been set for bacula database
1089   DB_VER=`mysql 2>/dev/null bacula -e 'select * from Version;'|tail -n 1`
1090
1091   # grant privileges and create tables if they do not exist
1092   if [ -z "$DB_VER" ]; then
1093       echo "Hmm, it doesn't look like you have an existing database."
1094       echo "Granting privileges for MySQL user bacula..."
1095       %{script_dir}/grant_mysql_privileges
1096       echo "Creating MySQL bacula database..."
1097       %{script_dir}/create_mysql_database
1098       echo "Creating bacula tables..."
1099       %{script_dir}/make_mysql_tables
1100
1101   elif [ "$DB_VER" -ge "12" -a "$DB_VER" -lt "1015" ]; then
1102       echo "This release requires an upgrade to your bacula database."
1103       echo "Backing up your current database..."
1104       mysqldump -f --opt bacula | bzip2 > %{working_dir}/bacula_backup.sql.bz2
1105       echo "Upgrading bacula database ..."
1106       %{script_dir}/update_mysql_tables
1107       echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2"
1108
1109   fi
1110 fi
1111 %endif
1112
1113 %if %{sqlite}
1114 # test for an existing database
1115 if [ -s %{working_dir}/bacula.db ]; then
1116         DB_VER=`echo "select * from Version;" | %{sqlite_bindir}/sqlite3 2>/dev/null %{working_dir}/bacula.db | tail -n 1`
1117         # check to see if we need to upgrade a 3.x database
1118         if [ "$DB_VER" -le "13" ] && [ "$DB_VER" -ge "12" ]; then
1119                 echo "This release requires an upgrade to your bacula database."
1120                 echo "Backing up your current database..."
1121                 echo ".dump" | %{sqlite_bindir}/sqlite3 %{working_dir}/bacula.db | bzip2 > %{working_dir}/bacula_backup.sql.bz2
1122                 echo "Upgrading bacula database ..."
1123                 %{script_dir}/update_sqlite3_tables
1124                 echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2"
1125         fi
1126 else
1127         # create the database and tables
1128         echo "Hmm, doesn't look like you have an existing database."
1129         echo "Creating SQLite database..."
1130         %{script_dir}/create_sqlite3_database
1131         echo "Creating the SQLite tables..."
1132         %{script_dir}/make_sqlite3_tables
1133         chown %{director_daemon_user}.%{daemon_group} %{working_dir}/bacula.db
1134 fi
1135 %endif
1136
1137 %if %{postgresql}
1138 # check if psql can be called successfully at all
1139 if echo 'select * from Version;' | su - postgres -c 'psql bacula' 2>/dev/null; then
1140
1141   # test for an existing database
1142   # note: this ASSUMES no password has been set for bacula database
1143   DB_VER=`echo 'SELECT * FROM Version LIMIT 1;' | su - postgres -c 'psql bacula' 2>/dev/null | tail -3 | head -1`
1144
1145   # grant privileges and create tables if they do not exist
1146   if [ -z "$DB_VER" ]; then
1147       echo "Hmm, doesn't look like you have an existing database."
1148       echo "Creating PostgreSQL bacula database..."
1149       su - postgres -c %{script_dir}/create_postgresql_database
1150       echo "Creating bacula tables..."
1151       su - postgres -c %{script_dir}/make_postgresql_tables
1152       echo "Granting privileges for PostgreSQL user bacula..."
1153       su - postgres -c %{script_dir}/grant_postgresql_privileges
1154
1155   elif [ "$DB_VER" -ge "12" -a "$DB_VER" -lt "1015" ]; then
1156       echo "This release requires an upgrade to your bacula database."
1157       echo "Backing up your current database..."
1158       su - postgres -c 'pg_dump bacula' | bzip2 > %{working_dir}/bacula_backup.sql.bz2
1159       echo "Upgrading bacula database ..."
1160       su - postgres -c %{script_dir}/update_postgresql_tables
1161       echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2"
1162       echo "Granting privileges for PostgreSQL user bacula..."
1163       su - postgres -c %{script_dir}/grant_postgresql_privileges
1164
1165   fi
1166 fi
1167 %endif
1168
1169 %if ! %{client_only}
1170 if [ -d %{sysconf_dir} ]; then
1171    cd %{sysconf_dir}
1172    if [ ! -f .rpm.sed ]; then
1173        (umask 0177
1174         echo "# This file is used to ensure that all passwords will" > .rpm.sed
1175         echo "# match between configuration files"                  >> .rpm.sed
1176        )
1177        for string in XXX_REPLACE_WITH_DIRECTOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_PASSWORD_XXX XXX_REPLACE_WITH_DIRECTOR_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_MONITOR_PASSWORD_XXX; do
1178            pass=`openssl rand -base64 33`
1179            echo "s@${string}@${pass}@g" >> .rpm.sed
1180        done
1181    fi
1182    host=`hostname -s`
1183    if [ "$host" = "" ]; then
1184        host=localhost
1185    fi
1186    for file in *.conf; do
1187       sed -f .rpm.sed $file > $file.new
1188       sed "s@XXX_HOSTNAME_XXX@${host}@g" $file.new > $file
1189       rm -f $file.new
1190    done
1191 fi
1192 %endif
1193
1194
1195 %if %{mysql}
1196 %preun mysql
1197 %endif
1198 %if %{sqlite}
1199 %preun sqlite
1200 %endif
1201 %if %{postgresql}
1202 %preun postgresql
1203 %endif
1204
1205 %if ! %{client_only}
1206 # delete our links
1207 if [ $1 = 0 ]; then
1208   %{service_disable} bacula-dir
1209   %{service_disable} bacula-fd
1210   %{service_disable} bacula-sd
1211 fi
1212 %endif
1213
1214 %files client
1215 %defattr(-,root,root)
1216 %attr(-, root, %{daemon_group}) %dir %{script_dir}
1217 %attr(-, root, %{daemon_group}) %dir %{plugin_dir}
1218 %attr(-, root, %{daemon_group}) %dir %{sysconf_dir}
1219
1220 # SD/DIR might write here
1221 %attr(-, %{storage_daemon_user}, %{daemon_group}) %dir %{log_dir}
1222
1223 %if %{usesystemd}
1224 %attr(-, root, %{daemon_group})  %{systemd_dir}/bacula-fd.service
1225 %else
1226 %{script_dir}/bacula-ctl-fd
1227 /etc/init.d/bacula-fd
1228 %endif
1229
1230 /etc/logrotate.d/bacula
1231
1232 %attr(-, root, %{daemon_group}) %config(noreplace) %{sysconf_dir}/bacula-fd.conf
1233 %attr(-, root, %{daemon_group}) %config(noreplace) %{sysconf_dir}/bconsole.conf
1234 %attr(-, root, %{daemon_group}) %dir %{working_dir}
1235
1236 %{_sbindir}/bacula-fd
1237 %{_sbindir}/btraceback
1238 %attr(-, root, %{daemon_group}) %{script_dir}/btraceback.gdb
1239 %attr(-, root, %{daemon_group}) %{script_dir}/btraceback.dbx
1240 %attr(-, root, %{daemon_group}) %{script_dir}/btraceback.mdb
1241 %attr(-, root, %{daemon_group}) %{plugin_dir}/bpipe-fd.so
1242 %{_sbindir}/bconsole
1243 %{_mandir}/man8/bacula-fd.8.%{manpage_ext}
1244 %{_mandir}/man8/bacula.8.%{manpage_ext}
1245 %{_mandir}/man8/bconsole.8.%{manpage_ext}
1246 %{_mandir}/man8/btraceback.8.%{manpage_ext}
1247 %{_mandir}/man1/bat.1.%{manpage_ext}
1248 %_prefix/share/doc/*
1249
1250 %pre client
1251 # create the daemon group and user
1252 HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
1253 if [ -z "$HAVE_BACULA" ]; then
1254     %{groupadd} -r %{daemon_group} > /dev/null 2>&1
1255     echo "The group %{daemon_group} has been added to %{group_file}."
1256     echo "See the manual chapter \"Running Bacula\" for details."
1257 fi
1258 # we do not use the -g option allowing the primary group to be set to system default
1259 # this will be a unique group on redhat type systems or the group users on some systems
1260 HAVE_BACULA=`grep %{file_daemon_user} %{user_file} 2>/dev/null`
1261 if [ -z "$HAVE_BACULA" ]; then
1262     %{useradd} -r -c "Bacula" -d %{working_dir} -g %{daemon_group} -M -s /sbin/nologin %{file_daemon_user} > /dev/null 2>&1
1263     echo "The user %{file_daemon_user} has been added to %{user_file}."
1264     echo "See the manual chapter \"Running Bacula\" for details."
1265 fi
1266 # now we add the supplementary group, this is ok to call even if the user already exists
1267 # we only do this if the user is NOT root
1268 IS_ROOT=%{file_daemon_user}
1269 if [ "$IS_ROOT" != "root" ]; then
1270 %{usermod} -G %{daemon_group} %{file_daemon_user}
1271 fi
1272
1273 %post client
1274 # add our link
1275 if [ "$1" -ge 1 ] ; then
1276    %{service_enable} bacula-fd
1277 fi
1278
1279 if [ -d %{sysconf_dir} ]; then
1280    cd %{sysconf_dir}
1281    if [ ! -f .rpm.sed ]; then
1282        (umask 0177
1283         echo "# This file is used to ensure that all passwords will" > .rpm.sed
1284         echo "# match between configuration files"                  >> .rpm.sed
1285        )
1286        for string in XXX_REPLACE_WITH_DIRECTOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_PASSWORD_XXX XXX_REPLACE_WITH_DIRECTOR_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_CLIENT_MONITOR_PASSWORD_XXX XXX_REPLACE_WITH_STORAGE_MONITOR_PASSWORD_XXX; do
1287            pass=`openssl rand -base64 33`
1288            echo "s@${string}@${pass}@g" >> .rpm.sed
1289        done
1290    fi
1291    host=`hostname -s`
1292    if [ "$host" = "" ]; then
1293        host=localhost
1294    fi
1295    for file in *.conf; do
1296       sed -f .rpm.sed $file > $file.new
1297       sed "s@XXX_HOSTNAME_XXX@${host}@g" $file.new > $file
1298       rm -f $file.new
1299    done
1300 fi
1301
1302 %preun client
1303 # delete our link
1304 if [ $1 = 0 ]; then
1305    %{service_disable} bacula-fd
1306 fi
1307
1308 %files libs
1309 %defattr(-,root,root)
1310 %{_libdir}/libbac-*
1311 %{_libdir}/libbac.*
1312 %{_libdir}/libbaccfg*
1313 %{_libdir}/libbacfind*
1314
1315 %post libs
1316 /sbin/ldconfig
1317 exit 0
1318
1319 %postun libs
1320 /sbin/ldconfig
1321 exit 0
1322
1323 %if ! %{client_only}
1324 %files updatedb
1325 %defattr(-,root,%{daemon_group})
1326 %{script_dir}/updatedb/*
1327
1328 %pre updatedb
1329 # create the daemon group
1330 HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
1331 if [ -z "$HAVE_BACULA" ]; then
1332     %{groupadd} -r %{daemon_group} > /dev/null 2>&1
1333     echo "The group %{daemon_group} has been added to %{group_file}."
1334     echo "See the manual chapter \"Running Bacula\" for details."
1335 fi
1336
1337 %post updatedb
1338 echo "The database update scripts were installed to %{script_dir}/updatedb"
1339 %endif
1340
1341 %changelog