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