]> git.sur5r.net Git - bacula/bacula/blob - bacula/platforms/rpms/redhat/bacula.spec.in
rpm: Add missing libs bbconsjson, bdirjson and bsdjson
[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: libbaccats-%{version}.so()(64bit)
374 #
375 # The following provides is to work around an 
376 #  auto generated requires from src/scripts/logwatch/applybaculadate
377 #  this is a gross kludge to keep it from being a requirement
378 #
379 Provides: perl(Logwatch)
380 %endif
381 %if %{postgresql}
382 %package postgresql
383 %endif
384
385 Summary: Bacula - The Network Backup Solution
386 Group: System Environment/Daemons
387 Provides: bacula-dir, bacula-sd, bacula-fd, bacula-server
388 Conflicts: bacula-client
389
390 Requires: ncurses, libstdc++, zlib, openssl
391 Requires: glibc, readline, %{name}-libs
392
393 %if %{suse}
394 Conflicts: bacula
395 %endif
396
397 %if %{mysql}
398 Requires: mysql
399 %endif
400
401 %if %{postgresql}
402 Requires: postgresql >= 7
403 %endif
404
405 %if %{mysql}
406 %description mysql
407 %endif
408 %if %{sqlite}
409 %description sqlite
410 %endif
411 %if %{postgresql}
412 %description postgresql
413 %endif
414
415 %{blurb}
416
417 %{blurb2}
418 %{blurb3}
419 %{blurb4}
420 %{blurb5}
421 %{blurb6}
422 %{blurb7}
423 %{blurb8}
424
425 %if %{mysql}
426 This build requires MySQL to be installed separately as the catalog database.
427 %endif
428 %if %{postgresql}
429 This build requires PostgreSQL to be installed separately as the catalog database.
430 %endif
431 %if %{sqlite}
432 This build incorporates sqlite3 as the catalog database, statically compiled.
433 %endif
434 %if %{tcpwrappers}
435 This build includes tcp-wrappers support.
436 %endif
437
438
439
440 #
441 # ===========================================================
442 # Client -- bacula-fd rpm
443 # ===========================================================
444 #
445 %package client
446 Summary: Bacula - The Network Backup Solution
447 Group: System Environment/Daemons
448 Provides: bacula-fd
449 Conflicts: bacula-mysql
450 Conflicts: bacula-sqlite
451 Conflicts: bacula-postgresql
452
453 %if %{suse}
454 Provides: %{product}
455 Provides: %{product}-libs
456 %endif
457
458 Requires: libstdc++, zlib, openssl, bzip2-libs
459 Requires: glibc, readline, %{name}-libs
460
461 %description client
462 %{blurb}
463
464 %{blurb2}
465 %{blurb3}
466 %{blurb4}
467 %{blurb5}
468 %{blurb6}
469 %{blurb7}
470 %{blurb8}
471
472 This is the File daemon (Client) only package. It includes the command line
473 console program.
474 %if %{tcpwrappers}
475 This build includes tcp-wrappers support.
476 %endif
477
478 #
479 # ===========================================================
480 # Generate updatedb rpm
481 # ===========================================================
482 #
483 %if ! %{client_only}
484 %package updatedb
485
486 Summary: Bacula - The Network Backup Solution
487 Group: System Environment/Daemons
488
489 %description updatedb
490 %{blurb}
491
492 %{blurb2}
493 %{blurb3}
494 %{blurb4}
495 %{blurb5}
496 %{blurb6}
497 %{blurb7}
498 %{blurb8}
499
500 This package installs scripts for updating older versions of the bacula
501 database.
502 %endif
503
504 #
505 # ===========================================================
506 # Generate libs rpm
507 # ===========================================================
508 #
509 %package libs
510
511 Summary: Bacula - The Network Backup Solution
512 Group: System Environment/Daemons
513
514 %description libs
515 %{blurb}
516
517 %{blurb2}
518 %{blurb3}
519 %{blurb4}
520 %{blurb5}
521 %{blurb6}
522 %{blurb7}
523 %{blurb8}
524
525 This package installs the shared libraries used by many bacula programs.
526
527 # Must explicitly enable debug pkg on SuSE
528 # but not in opensuse_bs
529 #%if %{suse} && ! 0%{?opensuse_bs}
530 #%debug_package
531 #%endif
532
533 %prep
534 %setup -T    -b 0 -n depkgs
535 %setup -T    -b 1 -n %{product}-%{version}
536 %setup -T -D -b 2 -n %{product}-%{version}
537 # extract depkgs
538
539
540 %build
541
542 %if %{suse}
543 #export LDFLAGS="${LDFLAGS} -L/usr/lib/termcap -L/usr/lib64/termcap"
544 %endif
545
546 # You can use a cache for depkgs
547 # tar xfz depkgs*gz -C ~/
548 # cd ~/depkgs
549 # touch %{depkgs_version}       # depkgs version
550
551 if [ -f $HOME/depkgs/%{depkgs_version} ]; then
552    rm -rf %{depkgs}
553    ln -s $HOME/depkgs %{depkgs}
554 fi
555
556 cwd=${PWD}
557 %if %{sqlite}
558 cd %{depkgs}
559 make sqlite3
560 cd ${cwd}
561 %endif
562
563 cd %{depkgs}
564 make lzo
565 export LDFLAGS="${LDFLAGS} -L${PWD}/lzo/lib"
566 export CPPFLAGS="${CPPFLAGS} -I${PWD}/lzo/include"
567 cd ${cwd}
568
569 # hostname is the build hostname, so use XXX_HOSTNAME_XXX for Address parameter
570 sed -i s/hostname/basename/ src/console/bconsole.conf.in src/dird/bacula-dir.conf.in src/qt-console/bat.conf.in
571
572 %if %{sqlite}
573 # patches for the bundled sqlite scripts
574 sed -i s:.SQLITE_BINDIR.:/opt/bacula/sqlite: src/cats/*_sqlite3_*.in
575
576 # patch the bacula-dir init script to remove sqlite service
577 %if %{suse}
578 sed -i 's/network .DB_TYPE./network/' platforms/suse/bacula-dir.in
579 %endif
580 %endif
581
582 # 64 bit lib location hacks
583 # as of 1.39.18 it should not be necessary to enable x86_64 as configure is
584 # reported to be fixed to properly detect lib locations.
585 %if %{x86_64}
586 export LDFLAGS="${LDFLAGS} -L/usr/lib64"
587 %endif
588 %if %{mysql} && %{x86_64}
589 export LDFLAGS="${LDFLAGS} -L/usr/lib64/mysql"
590 %endif
591
592 export BACULA="Bacula"
593
594 # Main Bacula configuration
595 %configure \
596         --prefix=%{_prefix} \
597         --sbindir=%{_sbindir} \
598         --sysconfdir=%{sysconf_dir} \
599         --mandir=%{_mandir} \
600         --with-scriptdir=%{script_dir} \
601         --with-working-dir=%{working_dir} \
602         --with-plugindir=%{plugin_dir} \
603         --with-logdir=%{log_dir} \
604         --with-pid-dir=%{pid_dir} \
605         --with-subsys-dir=%{_subsysdir} \
606         --enable-smartalloc \
607         --disable-conio \
608         --enable-readline \
609 %if %{mysql}
610         --with-mysql \
611 %endif
612 %if %{postgresql}
613         --with-postgresql \
614 %endif
615         --disable-bat \
616 %if %{client_only}
617         --enable-client-only \
618 %endif
619 %if %{rh7} || %{rh8} || %{rh9}
620         --disable-batch-insert \
621 %endif
622 %if %{usesystemd}
623         --with-systemd=%{systemd_dir} \
624 %endif
625         --with-tcp-wrappers  \
626         --with-dir-user=%{director_daemon_user} \
627         --with-dir-group=%{daemon_group} \
628         --with-sd-user=%{storage_daemon_user} \
629         --with-sd-group=%{storage_daemon_group} \
630         --with-fd-user=%{file_daemon_user} \
631         --with-fd-group=%{daemon_group} \
632         --with-basename="XXX_HOSTNAME_XXX" \
633         --with-hostname="XXX_HOSTNAME_XXX" \
634         --with-dir-password="XXX_REPLACE_WITH_DIRECTOR_PASSWORD_XXX" \
635         --with-fd-password="XXX_REPLACE_WITH_CLIENT_PASSWORD_XXX" \
636         --with-sd-password="XXX_REPLACE_WITH_STORAGE_PASSWORD_XXX" \
637         --with-mon-dir-password="XXX_REPLACE_WITH_DIRECTOR_MONITOR_PASSWORD_XXX" \
638         --with-mon-fd-password="XXX_REPLACE_WITH_CLIENT_MONITOR_PASSWORD_XXX" \
639         --with-mon-sd-password="XXX_REPLACE_WITH_STORAGE_MONITOR_PASSWORD_XXX" \
640         --with-openssl
641
642 make -j3
643
644 %install
645
646 cwd=${PWD}
647 [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT"
648 mkdir -p $RPM_BUILD_ROOT/etc/init.d
649 mkdir -p $RPM_BUILD_ROOT/etc/logrotate.d
650 mkdir -p $RPM_BUILD_ROOT%{logwatch_dir}/conf/logfiles
651 mkdir -p $RPM_BUILD_ROOT%{logwatch_dir}/conf/services
652 mkdir -p $RPM_BUILD_ROOT%{logwatch_dir}/scripts/services
653 mkdir -p $RPM_BUILD_ROOT%{logwatch_dir}/scripts/shared
654 mkdir -p $RPM_BUILD_ROOT%{script_dir}/updatedb
655
656 mkdir -p $RPM_BUILD_ROOT/etc/pam.d
657 mkdir -p $RPM_BUILD_ROOT%{_sbindir}
658
659 %if %{sqlite}
660 mkdir -p $RPM_BUILD_ROOT%{sqlite_bindir}
661 %endif
662
663 make DESTDIR=$RPM_BUILD_ROOT install
664
665 # bsnapshot
666 make DESTDIR=$RPM_BUILD_ROOT -C ../bacula-%{_version}/src/tools/ install-bsnapshot
667
668 %if %{usesystemd}
669 make DESTDIR=$RPM_BUILD_ROOT -C platforms/systemd install-dir install-service
670 %endif
671
672 # Remove docs for programs that are depreciated
673 rm -f $RPM_BUILD_ROOT%{_mandir}/man1/bacula-bgnome-console.1.%{manpage_ext}
674 rm -f $RPM_BUILD_ROOT%{_mandir}/man1/bacula-bwxconsole.1.%{manpage_ext}
675 rm -f $RPM_BUILD_ROOT%{_mandir}/man1/bacula-tray-monitor.1.%{manpage_ext}
676 rm -f $RPM_BUILD_ROOT%{script_dir}/gconsole
677
678 # Remove docs for programs we do not distribute
679 rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bpluginfo.8.%{manpage_ext}
680
681 # Remove storage-ctl packaged in shstore rpm
682 rm -f $RPM_BUILD_ROOT%{script_dir}/storage-ctl
683 rm -f $RPM_BUILD_ROOT%{script_dir}/storage-ctl.conf
684
685 # fixme - make installs the mysql scripts for sqlite build
686 %if %{sqlite}
687 rm -f $RPM_BUILD_ROOT%{script_dir}/startmysql
688 rm -f $RPM_BUILD_ROOT%{script_dir}/stopmysql
689 rm -f $RPM_BUILD_ROOT%{script_dir}/grant_mysql_privileges
690 %endif
691
692 # fixme - make installs the mysql scripts for postgresql build
693 %if %{postgresql}
694 rm -f $RPM_BUILD_ROOT%{script_dir}/startmysql
695 rm -f $RPM_BUILD_ROOT%{script_dir}/stopmysql
696 %endif
697
698 # Remove symlinks
699 #rm -f $RPM_BUILD_ROOT%{_libdir}/libbaccats.so
700 #rm -f $RPM_BUILD_ROOT%{_libdir}/libbaccats-%{version}.so
701
702 # install the init scripts
703 %if !%{usesystemd}
704 %if %{suse}
705 cp -p platforms/suse/bacula-dir $RPM_BUILD_ROOT/etc/init.d/bacula-dir
706 cp -p platforms/suse/bacula-fd $RPM_BUILD_ROOT/etc/init.d/bacula-fd
707 cp -p platforms/suse/bacula-sd $RPM_BUILD_ROOT/etc/init.d/bacula-sd
708 %endif                           # suse
709 %if %{mdk}
710 cp -p platforms/mandrake/bacula-dir $RPM_BUILD_ROOT/etc/init.d/bacula-dir
711 cp -p platforms/mandrake/bacula-fd $RPM_BUILD_ROOT/etc/init.d/bacula-fd
712 cp -p platforms/mandrake/bacula-sd $RPM_BUILD_ROOT/etc/init.d/bacula-sd
713 %endif                           # mdk
714 %if ! %{suse} && ! %{mdk}
715 cp -p platforms/redhat/bacula-dir $RPM_BUILD_ROOT/etc/init.d/bacula-dir
716 cp -p platforms/redhat/bacula-fd $RPM_BUILD_ROOT/etc/init.d/bacula-fd
717 cp -p platforms/redhat/bacula-sd $RPM_BUILD_ROOT/etc/init.d/bacula-sd
718 %endif                           # !suse && !mdk
719 chmod 0754 $RPM_BUILD_ROOT/etc/init.d/*
720 %endif                           # ! usesystemd
721
722 %if %{client_only}
723 rm -f $RPM_BUILD_ROOT/etc/init.d/bacula-dir
724 rm -f $RPM_BUILD_ROOT/etc/init.d/bacula-sd
725 rm -f $RPM_BUILD_ROOT%{script_dir}/breload
726 rm -f $RPM_BUILD_ROOT%{script_dir}/manual_prune.pl
727 rm -f $RPM_BUILD_ROOT%{systemd_dir}/bacula-dir.service
728 rm -f $RPM_BUILD_ROOT%{systemd_dir}/bacula-sd.service
729 %endif
730
731 # install sqlite
732 %if %{sqlite}
733 cp -p %{depkgs}/sqlite3/sqlite3 $RPM_BUILD_ROOT%{sqlite_bindir}/sqlite3
734 cp -p %{depkgs}/sqlite3/sqlite3.h $RPM_BUILD_ROOT%{sqlite_bindir}/sqlite3.h
735 cp -p %{depkgs}/sqlite3/libsqlite3.a $RPM_BUILD_ROOT%{sqlite_bindir}/libsqlite3.a
736 %endif
737
738
739 # install the logrotate file
740 cp -p scripts/logrotate $RPM_BUILD_ROOT/etc/logrotate.d/bacula
741
742 # install the updatedb scripts
743 cp -p updatedb/* $RPM_BUILD_ROOT%{script_dir}/updatedb/
744
745 # install specific scripts
746
747 %if ! %{client_only}
748 # install the sample-query.sql file
749 cp -p examples/sample-query.sql $RPM_BUILD_ROOT%{script_dir}/sample-query.sql
750
751 # install the logwatch scripts
752 cp -p scripts/logwatch/bacula $RPM_BUILD_ROOT%{logwatch_dir}/scripts/services/bacula
753 cp -p scripts/logwatch/applybaculadate $RPM_BUILD_ROOT%{logwatch_dir}/scripts/shared/applybaculadate
754 cp -p scripts/logwatch/logfile.bacula.conf $RPM_BUILD_ROOT%{logwatch_dir}/conf/logfiles/bacula.conf
755 cp -p scripts/logwatch/services.bacula.conf $RPM_BUILD_ROOT%{logwatch_dir}/conf/services/bacula.conf
756 chmod 755 $RPM_BUILD_ROOT%{logwatch_dir}/scripts/services/bacula
757 chmod 755 $RPM_BUILD_ROOT%{logwatch_dir}/scripts/shared/applybaculadate
758 chmod 644 $RPM_BUILD_ROOT%{logwatch_dir}/conf/logfiles/bacula.conf
759 chmod 644 $RPM_BUILD_ROOT%{logwatch_dir}/conf/services/bacula.conf
760 %endif
761
762 # now clean up permissions that are left broken by the install
763 chmod o-rwx $RPM_BUILD_ROOT%{working_dir}
764
765 # fix me - building enable-client-only installs files not included in bacula-client package
766 %if %{client_only}
767 # Program docs not installed on client
768 rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bacula-dir.8.%{manpage_ext}
769 rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bacula-sd.8.%{manpage_ext}
770 rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bcopy.8.%{manpage_ext}
771 rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bextract.8.%{manpage_ext}
772 rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bls.8.%{manpage_ext}
773 rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bscan.8.%{manpage_ext}
774 rm -f $RPM_BUILD_ROOT%{_mandir}/man8/btape.8.%{manpage_ext}
775 rm -f $RPM_BUILD_ROOT%{_mandir}/man8/dbcheck.8.%{manpage_ext}
776 rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bregex.8.%{manpage_ext}
777 rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bwild.8.%{manpage_ext}
778 rm -f $RPM_BUILD_ROOT%{_mandir}/man1/bsmtp.1.%{manpage_ext}
779 rm -f $RPM_BUILD_ROOT%{script_dir}/bacula
780 rm -f $RPM_BUILD_ROOT%{script_dir}/bacula_config
781 rm -f $RPM_BUILD_ROOT%{script_dir}/bacula-ctl-dir
782 rm -f $RPM_BUILD_ROOT%{script_dir}/bacula-ctl-sd
783 rm -f $RPM_BUILD_ROOT%{script_dir}/disk-changer
784 rm -f $RPM_BUILD_ROOT%{script_dir}/dvd-handler
785 rm -f $RPM_BUILD_ROOT%{script_dir}/mtx-changer
786 rm -f $RPM_BUILD_ROOT%{script_dir}/startmysql
787 rm -f $RPM_BUILD_ROOT%{script_dir}/stopmysql
788 rm -rf $RPM_BUILD_ROOT%{script_dir}/updatedb
789 rm -f $RPM_BUILD_ROOT%{script_dir}/bconsole
790 rm -f $RPM_BUILD_ROOT%{script_dir}/mtx-changer.conf
791 rm -f $RPM_BUILD_ROOT%{_sbindir}/bacula
792
793 %endif
794
795 %clean
796 [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT"
797 rm -f $RPM_BUILD_DIR/Release_Notes-%{version}-%{release}.txt
798
799
800 %if %{mysql}
801 # MySQL specific files
802 %files mysql
803 %defattr(-, root, root)
804 %attr(-, root, %{daemon_group}) %{script_dir}/create_mysql_database
805 %attr(-, root, %{daemon_group}) %{script_dir}/drop_mysql_database
806 %attr(-, root, %{daemon_group}) %{script_dir}/make_mysql_tables
807 %attr(-, root, %{daemon_group}) %{script_dir}/drop_mysql_tables
808 %attr(-, root, %{daemon_group}) %{script_dir}/update_mysql_tables
809 %attr(-, root, %{daemon_group}) %{script_dir}/grant_mysql_privileges
810 %{_libdir}/libbaccats*
811 %{_libdir}/libbacsql*
812 %{_libdir}/libbacsd*.so
813 %endif
814
815
816 %if %{postgresql}
817 %files postgresql
818 %defattr(-,root,root)
819 %attr(755, root, %{daemon_group}) %{script_dir}/create_postgresql_database
820 %attr(755, root, %{daemon_group}) %{script_dir}/drop_postgresql_database
821 %attr(755, root, %{daemon_group}) %{script_dir}/make_postgresql_tables
822 %attr(755, root, %{daemon_group}) %{script_dir}/drop_postgresql_tables
823 %attr(755, root, %{daemon_group}) %{script_dir}/update_postgresql_tables
824 %attr(755, root, %{daemon_group}) %{script_dir}/grant_postgresql_privileges
825 %{_libdir}/libbaccats*
826 %{_libdir}/libbacsql*
827 %{_libdir}/libbacsd*.so
828 %endif
829
830 # The rest is DB backend independent
831
832 %if ! %{client_only}
833 %attr(-, root, %{daemon_group}) %dir %{script_dir}
834 %attr(-, root, %{daemon_group}) %dir %{sysconf_dir}
835 %attr(-, root, %{daemon_group}) %{script_dir}/bacula
836 %attr(-, root, %{daemon_group}) %{script_dir}/bacula_config
837 %attr(-, root, %{daemon_group}) %{script_dir}/bconsole
838 %attr(755, root, %{daemon_group}) %{script_dir}/create_bacula_database
839 %attr(755, root, %{daemon_group}) %{script_dir}/drop_bacula_database
840 %attr(755, root, %{daemon_group}) %{script_dir}/grant_bacula_privileges
841 %attr(755, root, %{daemon_group}) %{script_dir}/make_bacula_tables
842 %attr(755, root, %{daemon_group}) %{script_dir}/drop_bacula_tables
843 %attr(755, root, %{daemon_group}) %{script_dir}/update_bacula_tables
844 %attr(-, root, %{daemon_group}) %{script_dir}/make_catalog_backup
845 %attr(-, root, %{daemon_group}) %{script_dir}/make_catalog_backup.pl
846 %attr(-, root, %{daemon_group}) %{script_dir}/delete_catalog_backup
847 %attr(-, root, %{daemon_group}) %{script_dir}/btraceback.dbx
848 %attr(-, root, %{daemon_group}) %{script_dir}/btraceback.gdb
849 %attr(-, root, %{daemon_group}) %{script_dir}/btraceback.mdb
850 %attr(-, root, %{daemon_group}) %{script_dir}/disk-changer
851 %attr(-, root, %{daemon_group}) %{script_dir}/bacula-ctl-dir
852 %attr(-, root, %{daemon_group}) %{script_dir}/bacula-ctl-fd
853 %attr(-, root, %{daemon_group}) %{script_dir}/bacula-ctl-sd
854 %attr(-, root, %{daemon_group}) %{script_dir}/tapealert
855
856 %attr(-, root, %{daemon_group}) %{plugin_dir}/bpipe-fd.so
857 %attr(-, root, %{daemon_group}) %{_sbindir}/dbcheck
858 %attr(-, root, %{storage_daemon_group}) %{script_dir}/mtx-changer
859 %attr(-, root, %{storage_daemon_group}) %config(noreplace) %{script_dir}/mtx-changer.conf
860
861 %if %{usesystemd}
862 %attr(-, root, %{daemon_group}) %{systemd_dir}/bacula-dir.service
863 %attr(-, root, %{daemon_group}) %{systemd_dir}/bacula-fd.service
864 %attr(-, root, %{daemon_group}) %{systemd_dir}/bacula-sd.service
865 %else
866 %attr(-, root, %{daemon_group}) /etc/init.d/bacula-dir
867 %attr(-, root, %{daemon_group}) /etc/init.d/bacula-fd
868 %attr(-, root, %{storage_daemon_group}) /etc/init.d/bacula-sd
869 %endif
870
871 /etc/logrotate.d/bacula
872 %{logwatch_dir}/scripts/services/bacula
873 %{logwatch_dir}/scripts/shared/applybaculadate
874 %attr(-, root, %{daemon_group}) %config(noreplace) %{sysconf_dir}/bacula-dir.conf
875 %attr(-, root, %{daemon_group}) %config(noreplace) %{sysconf_dir}/bacula-fd.conf
876 %attr(-, root, %{storage_daemon_group}) %config(noreplace) %{sysconf_dir}/bacula-sd.conf
877 %attr(-, root, %{daemon_group}) %config(noreplace) %{sysconf_dir}/bconsole.conf
878 %attr(-, root, %{daemon_group}) %config(noreplace) %{logwatch_dir}/conf/logfiles/bacula.conf
879 %attr(-, root, %{daemon_group}) %config(noreplace) %{logwatch_dir}/conf/services/bacula.conf
880 %attr(-, root, %{daemon_group}) %{script_dir}/sample-query.sql
881 %attr(-, root, %{daemon_group}) %{script_dir}/query.sql
882
883 %attr(-, %{storage_daemon_user}, %{daemon_group}) %dir %{working_dir}
884
885 %attr(-, root, %{daemon_group}) %{_sbindir}/bacula-dir
886 %attr(-, root, %{daemon_group}) %{_sbindir}/bacula-sd
887 %attr(-, root, %{daemon_group}) %{_sbindir}/btraceback
888 %attr(-, root, %{daemon_group}) %{_sbindir}/bconsole
889 %attr(-, root, %{daemon_group}) %{_sbindir}/bbconsjson
890 %attr(-, root, %{daemon_group}) %{_sbindir}/bsmtp
891 %attr(-, root, %{daemon_group}) %{_sbindir}/bscan
892 %attr(-, root, %{daemon_group}) %{_sbindir}/btape
893 %attr(-, root, %{daemon_group}) %{_sbindir}/bdirjson
894 %attr(-, root, %{daemon_group}) %{_sbindir}/bsdjson
895
896 %attr(755, root, root) %{_sbindir}/bsnapshot
897 %attr(755, root, root) %{_sbindir}/bfdjson
898
899 %{_sbindir}/bacula-fd
900 %{_sbindir}/bacula
901 %{_sbindir}/bcopy
902 %{_sbindir}/bextract
903 %{_sbindir}/bls
904 %{_sbindir}/bregex
905 %{_sbindir}/bwild
906 %{_mandir}/man8/bacula-fd.8.%{manpage_ext}
907 %{_mandir}/man8/bacula-dir.8.%{manpage_ext}
908 %{_mandir}/man8/bacula-sd.8.%{manpage_ext}
909 %{_mandir}/man8/bacula.8.%{manpage_ext}
910 %{_mandir}/man8/bconsole.8.%{manpage_ext}
911 %{_mandir}/man8/bcopy.8.%{manpage_ext}
912 %{_mandir}/man8/bextract.8.%{manpage_ext}
913 %{_mandir}/man8/bls.8.%{manpage_ext}
914 %{_mandir}/man8/bscan.8.%{manpage_ext}
915 %{_mandir}/man8/btape.8.%{manpage_ext}
916 %{_mandir}/man8/btraceback.8.%{manpage_ext}
917 %{_mandir}/man8/dbcheck.8.%{manpage_ext}
918 %{_mandir}/man8/bregex.8.%{manpage_ext}
919 %{_mandir}/man8/bwild.8.%{manpage_ext}
920 %{_mandir}/man1/bsmtp.1.%{manpage_ext}
921 %{_mandir}/man1/bat.1.%{manpage_ext}
922 %_prefix/share/doc/*
923
924 %doc ../Release_Notes-%{version}-%{release}.txt
925
926 %endif
927
928 %if %{mysql}
929 %pre mysql
930 # test for bacula database older than version 13
931 # note: this ASSUMES no password has been set for bacula database
932 DB_VER=`mysql 2>/dev/null bacula -e 'select * from Version;'|tail -n 1`
933 %endif
934
935 %if %{sqlite}
936 %pre sqlite
937 # are we upgrading from sqlite to sqlite3?
938 if [ -s %{working_dir}/bacula.db ] && [ -s %{sqlite_bindir}/sqlite ];then
939         echo "This version of bacula-sqlite involves an upgrade to sqlite3."
940         echo "Your catalog database file is not compatible with sqlite3, thus"
941         echo "you will need to dump the data, delete the old file, and re-run"
942         echo "this rpm upgrade."
943         echo ""
944         echo "Backing up your current database..."
945         echo ".dump" | %{sqlite_bindir}/sqlite %{working_dir}/bacula.db > %{working_dir}/bacula_backup.sql
946         mv %{working_dir}/bacula.db %{working_dir}/bacula.db.old
947         echo "Your catalog data has been saved in %{working_dir}/bacula_backup.sql and your"
948         echo "catalog file has been renamed %{working_dir}/bacula.db.old."
949         echo ""
950         echo "Please re-run this rpm package upgrade."
951         echo "After the upgrade is complete, restore your catalog"
952         echo "with the following commands:"
953         echo "%{script_dir}/drop_sqlite3_tables"
954         echo "cd %{working_dir}"
955         echo "%{sqlite_bindir}/sqlite3 $* bacula.db < bacula_backup.sql"
956         echo "chown bacula.bacula bacula.db"
957         exit 1
958 fi
959 # test for bacula database older than version 12 and sqlite3
960 if [ -s %{working_dir}/bacula.db ] && [ -s %{sqlite_bindir}/sqlite3 ];then
961         DB_VER=`echo "select * from Version;" | %{sqlite_bindir}/sqlite3 2>/dev/null %{working_dir}/bacula.db | tail -n 1`
962 %endif
963
964 %if %{postgresql}
965 %pre postgresql
966 DB_VER=`echo 'SELECT * FROM Version LIMIT 1;' | su - postgres -c 'psql bacula' 2>/dev/null | tail -3 | head -1`
967 %endif
968
969 %if ! %{client_only}
970 if [ -n "$DB_VER" ] && [ "$DB_VER" -lt "12" ]; then
971     echo "This bacula upgrade will update a bacula database from version 12 to 1014."
972     echo "You appear to be running database version $DB_VER. You must first update"
973     echo "your database to version 12 and then install this upgrade. The alternative"
974     echo "is to use %{script_dir}/drop_%{db_backend}_tables to delete all your your current"
975     echo "catalog information, then do the upgrade. Information on updating a"
976     echo "database older than version 12 can be found in the release notes."
977     exit 1
978 fi
979 %endif
980
981 %if %{sqlite}
982 fi
983 %endif
984
985 %if ! %{client_only}
986 # check for and copy %{sysconf_dir}/console.conf to bconsole.conf
987 if [ -s %{sysconf_dir}/console.conf ];then
988     cp -p %{sysconf_dir}/console.conf %{sysconf_dir}/bconsole.conf
989 fi
990
991 # create the daemon users and groups
992 # first create the groups if they don't exist
993 HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
994 if [ -z "$HAVE_BACULA" ]; then
995         %{groupadd} -r %{daemon_group} > /dev/null 2>&1
996         echo "The group %{daemon_group} has been added to %{group_file}."
997         echo "See the manual chapter \"Running Bacula\" for details."
998 fi
999 HAVE_BACULA=`grep %{storage_daemon_group} %{group_file} 2>/dev/null`
1000 if [ -z "$HAVE_BACULA" ]; then
1001         %{groupadd} -r %{storage_daemon_group} > /dev/null 2>&1
1002         echo "The group %{storage_daemon_group} has been added to %{group_file}."
1003         echo "See the manual chapter \"Running Bacula\" for details."
1004 fi
1005 # now create the users if they do not exist
1006 # we do not use the -g option allowing the primary group to be set to system default
1007 # this will be a unique group on redhat type systems or the group users on some systems
1008 HAVE_BACULA=`grep %{storage_daemon_user} %{user_file} 2>/dev/null`
1009 if [ -z "$HAVE_BACULA" ]; then
1010         %{useradd} -r -c "Bacula" -d %{working_dir} -g %{storage_daemon_group} -M -s /sbin/nologin %{storage_daemon_user} > /dev/null 2>&1
1011         echo "The user %{storage_daemon_user} has been added to %{user_file}."
1012         echo "See the manual chapter \"Running Bacula\" for details."
1013 fi
1014 HAVE_BACULA=`grep %{director_daemon_user} %{user_file} 2>/dev/null`
1015 if [ -z "$HAVE_BACULA" ]; then
1016         %{useradd} -r -c "Bacula" -d %{working_dir} -g %{daemon_group} -M -s /sbin/nologin %{director_daemon_user} > /dev/null 2>&1
1017         echo "The user %{director_daemon_user} has been added to %{user_file}."
1018         echo "See the manual chapter \"Running Bacula\" for details."
1019 fi
1020 HAVE_BACULA=`grep %{file_daemon_user} %{user_file} 2>/dev/null`
1021 if [ -z "$HAVE_BACULA" ]; then
1022         %{useradd} -r -c "Bacula" -d %{working_dir} -g %{daemon_group} -M -s /sbin/nologin %{file_daemon_user} > /dev/null 2>&1
1023         echo "The user %{file_daemon_user} has been added to %{user_file}."
1024         echo "See the manual chapter \"Running Bacula\" for details."
1025 fi
1026 # now we add the supplementary groups, this is ok to call even if the users already exist
1027 # we only do this if the user is NOT root
1028 IS_ROOT=%{director_daemon_user}
1029 if [ "$IS_ROOT" != "root" ]; then
1030 %{usermod} -G %{daemon_group} %{director_daemon_user}
1031 fi
1032 IS_ROOT=%{storage_daemon_user}
1033 if [ "$IS_ROOT" != "root" ]; then
1034 %{usermod} -G %{daemon_group},%{storage_daemon_group} %{storage_daemon_user}
1035 fi
1036 IS_ROOT=%{file_daemon_user}
1037 if [ "$IS_ROOT" != "root" ]; then
1038 %{usermod} -G %{daemon_group} %{file_daemon_user}
1039 fi
1040 %endif
1041
1042 %if %{mysql}
1043 %post mysql
1044 %endif
1045 %if %{sqlite}
1046 %post sqlite
1047 %endif
1048 %if %{postgresql}
1049 %post postgresql
1050 %endif
1051 %if ! %{client_only}
1052 # add our links
1053 if [ "$1" -ge 1 ] ; then
1054 %if %{suse} && %{mysql}
1055   %{service_enable} mysql
1056 %endif
1057 %if %{suse} && %{postgresql}
1058   %{service_enable} postgresql
1059 %endif
1060   %{service_enable} bacula-dir
1061   %{service_enable} bacula-fd
1062   %{service_enable} bacula-sd
1063 fi
1064 %endif
1065
1066 if [ -d %{sysconf_dir} ]; then
1067    cd %{sysconf_dir}
1068    if [ ! -f .rpm.sed ]; then
1069        (umask 0177
1070         echo "# This file is used to ensure that all passwords will" > .rpm.sed
1071         echo "# match between configuration files"                  >> .rpm.sed
1072        )
1073        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
1074            pass=`openssl rand -base64 33`
1075            echo "s@${string}@${pass}@g" >> .rpm.sed
1076        done
1077    fi
1078    host=`hostname -s`
1079    if [ "$host" = "" ]; then
1080        host=localhost
1081    fi
1082    for file in *.conf; do
1083       sed -f .rpm.sed $file > $file.new
1084       sed "s@XXX_HOSTNAME_XXX@${host}@g" $file.new > $file
1085       rm -f $file.new
1086    done
1087 fi
1088
1089
1090 %if %{mysql}
1091
1092 #check, if mysql can be called successfully at all
1093 if mysql 2>/dev/null bacula -e 'select * from Version;' ; then
1094
1095   # test for an existing database
1096   # note: this ASSUMES no password has been set for bacula database
1097   DB_VER=`mysql 2>/dev/null bacula -e 'select * from Version;'|tail -n 1`
1098
1099   # grant privileges and create tables if they do not exist
1100   if [ -z "$DB_VER" ]; then
1101       echo "Hmm, it doesn't look like you have an existing database."
1102       echo "Granting privileges for MySQL user bacula..."
1103       %{script_dir}/grant_mysql_privileges
1104       echo "Creating MySQL bacula database..."
1105       %{script_dir}/create_mysql_database
1106       echo "Creating bacula tables..."
1107       %{script_dir}/make_mysql_tables
1108
1109   elif [ "$DB_VER" -ge "12" -a "$DB_VER" -lt "1015" ]; then
1110       echo "This release requires an upgrade to your bacula database."
1111       echo "Backing up your current database..."
1112       mysqldump -f --opt bacula | bzip2 > %{working_dir}/bacula_backup.sql.bz2
1113       echo "Upgrading bacula database ..."
1114       %{script_dir}/update_mysql_tables
1115       echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2"
1116
1117   fi
1118 fi
1119 %endif
1120
1121 %if %{sqlite}
1122 # test for an existing database
1123 if [ -s %{working_dir}/bacula.db ]; then
1124         DB_VER=`echo "select * from Version;" | %{sqlite_bindir}/sqlite3 2>/dev/null %{working_dir}/bacula.db | tail -n 1`
1125         # check to see if we need to upgrade a 3.x database
1126         if [ "$DB_VER" -le "13" ] && [ "$DB_VER" -ge "12" ]; then
1127                 echo "This release requires an upgrade to your bacula database."
1128                 echo "Backing up your current database..."
1129                 echo ".dump" | %{sqlite_bindir}/sqlite3 %{working_dir}/bacula.db | bzip2 > %{working_dir}/bacula_backup.sql.bz2
1130                 echo "Upgrading bacula database ..."
1131                 %{script_dir}/update_sqlite3_tables
1132                 echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2"
1133         fi
1134 else
1135         # create the database and tables
1136         echo "Hmm, doesn't look like you have an existing database."
1137         echo "Creating SQLite database..."
1138         %{script_dir}/create_sqlite3_database
1139         echo "Creating the SQLite tables..."
1140         %{script_dir}/make_sqlite3_tables
1141         chown %{director_daemon_user}.%{daemon_group} %{working_dir}/bacula.db
1142 fi
1143 %endif
1144
1145 %if %{postgresql}
1146 # check if psql can be called successfully at all
1147 if echo 'select * from Version;' | su - postgres -c 'psql bacula' 2>/dev/null; then
1148
1149   # test for an existing database
1150   # note: this ASSUMES no password has been set for bacula database
1151   DB_VER=`echo 'SELECT * FROM Version LIMIT 1;' | su - postgres -c 'psql bacula' 2>/dev/null | tail -3 | head -1`
1152
1153   # grant privileges and create tables if they do not exist
1154   if [ -z "$DB_VER" ]; then
1155       echo "Hmm, doesn't look like you have an existing database."
1156       echo "Creating PostgreSQL bacula database..."
1157       su - postgres -c %{script_dir}/create_postgresql_database
1158       echo "Creating bacula tables..."
1159       su - postgres -c %{script_dir}/make_postgresql_tables
1160       echo "Granting privileges for PostgreSQL user bacula..."
1161       su - postgres -c %{script_dir}/grant_postgresql_privileges
1162
1163   elif [ "$DB_VER" -ge "12" -a "$DB_VER" -lt "1015" ]; then
1164       echo "This release requires an upgrade to your bacula database."
1165       echo "Backing up your current database..."
1166       su - postgres -c 'pg_dump bacula' | bzip2 > %{working_dir}/bacula_backup.sql.bz2
1167       echo "Upgrading bacula database ..."
1168       su - postgres -c %{script_dir}/update_postgresql_tables
1169       echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2"
1170       echo "Granting privileges for PostgreSQL user bacula..."
1171       su - postgres -c %{script_dir}/grant_postgresql_privileges
1172
1173   fi
1174 fi
1175 %endif
1176
1177 %if ! %{client_only}
1178 if [ -d %{sysconf_dir} ]; then
1179    cd %{sysconf_dir}
1180    if [ ! -f .rpm.sed ]; then
1181        (umask 0177
1182         echo "# This file is used to ensure that all passwords will" > .rpm.sed
1183         echo "# match between configuration files"                  >> .rpm.sed
1184        )
1185        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
1186            pass=`openssl rand -base64 33`
1187            echo "s@${string}@${pass}@g" >> .rpm.sed
1188        done
1189    fi
1190    host=`hostname -s`
1191    if [ "$host" = "" ]; then
1192        host=localhost
1193    fi
1194    for file in *.conf; do
1195       sed -f .rpm.sed $file > $file.new
1196       sed "s@XXX_HOSTNAME_XXX@${host}@g" $file.new > $file
1197       rm -f $file.new
1198    done
1199 fi
1200 %endif
1201
1202
1203 %if %{mysql}
1204 %preun mysql
1205 %endif
1206 %if %{sqlite}
1207 %preun sqlite
1208 %endif
1209 %if %{postgresql}
1210 %preun postgresql
1211 %endif
1212
1213 %if ! %{client_only}
1214 # delete our links
1215 if [ $1 = 0 ]; then
1216   %{service_disable} bacula-dir
1217   %{service_disable} bacula-fd
1218   %{service_disable} bacula-sd
1219 fi
1220 %endif
1221
1222 %files client
1223 %defattr(-,root,root)
1224 %attr(-, root, %{daemon_group}) %dir %{script_dir}
1225 %attr(-, root, %{daemon_group}) %dir %{plugin_dir}
1226 %attr(-, root, %{daemon_group}) %dir %{sysconf_dir}
1227
1228 # SD/DIR might write here
1229 %attr(-, %{storage_daemon_user}, %{daemon_group}) %dir %{log_dir}
1230
1231 %if %{usesystemd}
1232 %attr(-, root, %{daemon_group})  %{systemd_dir}/bacula-fd.service
1233 %else
1234 %{script_dir}/bacula-ctl-fd
1235 /etc/init.d/bacula-fd
1236 %endif
1237
1238 /etc/logrotate.d/bacula
1239
1240 %attr(-, root, %{daemon_group}) %config(noreplace) %{sysconf_dir}/bacula-fd.conf
1241 %attr(-, root, %{daemon_group}) %config(noreplace) %{sysconf_dir}/bconsole.conf
1242 %attr(-, root, %{daemon_group}) %dir %{working_dir}
1243
1244 %{_sbindir}/bacula-fd
1245 %{_sbindir}/btraceback
1246 %attr(-, root, %{daemon_group}) %{script_dir}/btraceback.gdb
1247 %attr(-, root, %{daemon_group}) %{script_dir}/btraceback.dbx
1248 %attr(-, root, %{daemon_group}) %{script_dir}/btraceback.mdb
1249 %attr(-, root, %{daemon_group}) %{plugin_dir}/bpipe-fd.so
1250 %{_sbindir}/bconsole
1251 %{_mandir}/man8/bacula-fd.8.%{manpage_ext}
1252 %{_mandir}/man8/bacula.8.%{manpage_ext}
1253 %{_mandir}/man8/bconsole.8.%{manpage_ext}
1254 %{_mandir}/man8/btraceback.8.%{manpage_ext}
1255 %{_mandir}/man1/bat.1.%{manpage_ext}
1256 %_prefix/share/doc/*
1257
1258 %pre client
1259 # create the daemon group and user
1260 HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
1261 if [ -z "$HAVE_BACULA" ]; then
1262     %{groupadd} -r %{daemon_group} > /dev/null 2>&1
1263     echo "The group %{daemon_group} has been added to %{group_file}."
1264     echo "See the manual chapter \"Running Bacula\" for details."
1265 fi
1266 # we do not use the -g option allowing the primary group to be set to system default
1267 # this will be a unique group on redhat type systems or the group users on some systems
1268 HAVE_BACULA=`grep %{file_daemon_user} %{user_file} 2>/dev/null`
1269 if [ -z "$HAVE_BACULA" ]; then
1270     %{useradd} -r -c "Bacula" -d %{working_dir} -g %{daemon_group} -M -s /sbin/nologin %{file_daemon_user} > /dev/null 2>&1
1271     echo "The user %{file_daemon_user} has been added to %{user_file}."
1272     echo "See the manual chapter \"Running Bacula\" for details."
1273 fi
1274 # now we add the supplementary group, this is ok to call even if the user already exists
1275 # we only do this if the user is NOT root
1276 IS_ROOT=%{file_daemon_user}
1277 if [ "$IS_ROOT" != "root" ]; then
1278 %{usermod} -G %{daemon_group} %{file_daemon_user}
1279 fi
1280
1281 %post client
1282 # add our link
1283 if [ "$1" -ge 1 ] ; then
1284    %{service_enable} bacula-fd
1285 fi
1286
1287 if [ -d %{sysconf_dir} ]; then
1288    cd %{sysconf_dir}
1289    if [ ! -f .rpm.sed ]; then
1290        (umask 0177
1291         echo "# This file is used to ensure that all passwords will" > .rpm.sed
1292         echo "# match between configuration files"                  >> .rpm.sed
1293        )
1294        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
1295            pass=`openssl rand -base64 33`
1296            echo "s@${string}@${pass}@g" >> .rpm.sed
1297        done
1298    fi
1299    host=`hostname -s`
1300    if [ "$host" = "" ]; then
1301        host=localhost
1302    fi
1303    for file in *.conf; do
1304       sed -f .rpm.sed $file > $file.new
1305       sed "s@XXX_HOSTNAME_XXX@${host}@g" $file.new > $file
1306       rm -f $file.new
1307    done
1308 fi
1309
1310 %preun client
1311 # delete our link
1312 if [ $1 = 0 ]; then
1313    %{service_disable} bacula-fd
1314 fi
1315
1316 %files libs
1317 %defattr(-,root,root)
1318 %{_libdir}/libbac-*
1319 %{_libdir}/libbac.*
1320 %{_libdir}/libbaccfg*
1321 %{_libdir}/libbacfind*
1322
1323 %post libs
1324 /sbin/ldconfig
1325 exit 0
1326
1327 %postun libs
1328 /sbin/ldconfig
1329 exit 0
1330
1331 %if ! %{client_only}
1332 %files updatedb
1333 %defattr(-,root,%{daemon_group})
1334 %{script_dir}/updatedb/*
1335
1336 %pre updatedb
1337 # create the daemon group
1338 HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
1339 if [ -z "$HAVE_BACULA" ]; then
1340     %{groupadd} -r %{daemon_group} > /dev/null 2>&1
1341     echo "The group %{daemon_group} has been added to %{group_file}."
1342     echo "See the manual chapter \"Running Bacula\" for details."
1343 fi
1344
1345 %post updatedb
1346 echo "The database update scripts were installed to %{script_dir}/updatedb"
1347 %endif
1348
1349 %changelog