]> git.sur5r.net Git - bacula/bacula/blob - bacula/platforms/rpms/redhat/bacula.spec.in
rpm: Remove dvd-handler script
[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 %endif
813
814
815 %if %{postgresql}
816 %files postgresql
817 %defattr(-,root,root)
818 %attr(755, root, %{daemon_group}) %{script_dir}/create_postgresql_database
819 %attr(755, root, %{daemon_group}) %{script_dir}/drop_postgresql_database
820 %attr(755, root, %{daemon_group}) %{script_dir}/make_postgresql_tables
821 %attr(755, root, %{daemon_group}) %{script_dir}/drop_postgresql_tables
822 %attr(755, root, %{daemon_group}) %{script_dir}/update_postgresql_tables
823 %attr(755, root, %{daemon_group}) %{script_dir}/grant_postgresql_privileges
824 %{_libdir}/libbaccats*
825 %{_libdir}/libbacsql*
826 %endif
827
828 # The rest is DB backend independent
829
830 %if ! %{client_only}
831 %attr(-, root, %{daemon_group}) %dir %{script_dir}
832 %attr(-, root, %{daemon_group}) %dir %{sysconf_dir}
833 %attr(-, root, %{daemon_group}) %{script_dir}/bacula
834 %attr(-, root, %{daemon_group}) %{script_dir}/bacula_config
835 %attr(-, root, %{daemon_group}) %{script_dir}/bconsole
836 %attr(755, root, %{daemon_group}) %{script_dir}/create_bacula_database
837 %attr(755, root, %{daemon_group}) %{script_dir}/drop_bacula_database
838 %attr(755, root, %{daemon_group}) %{script_dir}/grant_bacula_privileges
839 %attr(755, root, %{daemon_group}) %{script_dir}/make_bacula_tables
840 %attr(755, root, %{daemon_group}) %{script_dir}/drop_bacula_tables
841 %attr(755, root, %{daemon_group}) %{script_dir}/update_bacula_tables
842 %attr(-, root, %{daemon_group}) %{script_dir}/make_catalog_backup
843 %attr(-, root, %{daemon_group}) %{script_dir}/make_catalog_backup.pl
844 %attr(-, root, %{daemon_group}) %{script_dir}/delete_catalog_backup
845 %attr(-, root, %{daemon_group}) %{script_dir}/btraceback.dbx
846 %attr(-, root, %{daemon_group}) %{script_dir}/btraceback.gdb
847 %attr(-, root, %{daemon_group}) %{script_dir}/btraceback.mdb
848 %attr(-, root, %{daemon_group}) %{script_dir}/disk-changer
849 %attr(-, root, %{daemon_group}) %{script_dir}/bacula-ctl-dir
850 %attr(-, root, %{daemon_group}) %{script_dir}/bacula-ctl-fd
851 %attr(-, root, %{daemon_group}) %{script_dir}/bacula-ctl-sd
852 %attr(-, root, %{daemon_group}) %{plugin_dir}/bpipe-fd.so
853 %attr(-, root, %{daemon_group}) %{_sbindir}/dbcheck
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