]> git.sur5r.net Git - bacula/bacula/commitdiff
- Fix seg fault if user labels a drive directory bug #513
authorKern Sibbald <kern@sibbald.com>
Sat, 17 Dec 2005 19:47:58 +0000 (19:47 +0000)
committerKern Sibbald <kern@sibbald.com>
Sat, 17 Dec 2005 19:47:58 +0000 (19:47 +0000)
- Remove quotes around Version as it breaks things.
16Dec05
- Merge in Aleksandar Milivojevic's mods to the spec file.
- Apply sparse code fix for raw drives and fifos. Bug 506
- Thorsten fixed Unicode cd problem with wx-console bug 505.

git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@2686 91ce42f0-d328-0410-95d8-f526ca767f89

21 files changed:
bacula/ReleaseNotes
bacula/examples/report.pl [new file with mode: 0644]
bacula/examples/ssh-tunnel-README.txt [new file with mode: 0644]
bacula/examples/ssh-tunnel.sh
bacula/kes-1.38
bacula/kes-1.39
bacula/platforms/mandrake/bacula.spec.in
bacula/platforms/redhat/bacula.spec.in
bacula/platforms/suse/bacula.spec.in
bacula/projects
bacula/src/baconfig.h
bacula/src/console/conio.c
bacula/src/lib/message.c
bacula/src/lib/util.c
bacula/src/stored/autochanger.c
bacula/src/stored/btape.c
bacula/src/stored/dev.c
bacula/src/stored/dircmd.c
bacula/src/stored/reserve.c
bacula/src/stored/wait.c
bacula/src/version.h

index 363546204e67eec96d3a4fee1f05930a02a7b4d9..8ed4df38272d4e1d8c06e896056e1a8eda63f939 100644 (file)
@@ -1,9 +1,71 @@
 
-          Release Notes for Bacula 1.38.2
+          Release Notes for Bacula 1.38.3
 
-  Bacula code: Total files = 420 Total lines = 138,440 (*.h *.c *.in)
+  Bacula code: Total files = 424 Total lines = 140,955 (*.h *.c *.in)
       20,440 additional lines of code since version 1.36.3
 
+Changes to 1.38.3:
+- This is mainly a bug release fix. In addition, the multiple drive
+  reservation algorithm has been rewritten.
+- Simplify the O_NONBLOCK open() code for tape drives,
+  and always open nonblocking.
+- Do not wait for open() if EIO returned (shouldn't happen).
+- Eliminate 3 argument to tape open().
+- Correct the slot # edited in the 3995 Bad autochanger unload
+  message.
+- With -S on bscan (show progress) do not divide by zero.
+- Make cancel pthread_cond_signal() pthread_cond_broadcast().
+- When dcr is freed, also broadcast dev->wait_next_vol signal.
+- Remove unused code in wait_for_device.  
+- Make wait_for_device() always return after 60 seconds of wait.
+- Use localhost if no network configured
+- Eliminated duplicate MaxVolBytes in cat update -- bug 509.
+- Update specs to include mysql4 define.
+- Return rec->FileIndex in dcr->VolLastIndex for normal
+  and partial records in read_record().  This allows bscan
+  to get FileIndex at EOT correct.
+- Fix butil.c to correctly set dcr -- fixes seg fault in bls.
+- Apply patch supplied by user (slightly modified) to fix
+  correct detection of holes in block devices and FIFOs. 
+  Bug # 506.
+- Apply patch supplied by user (slightly modified) 
+  to fix SD hang with multiple pools and bad client
+  IP. Fixes bug # 508.
+- Add nagios plugin to the examples directory. Submitted by
+  Christian Masopust.
+- Remove warning message about multiple saves of hardlinked files
+  from find_one.c as it can generate too many warning messages.
+- Reset timeout values before select() per patch from 
+  Frank Sweetser for problems with non-blocking sockets.
+- Unlink the state file if either reading or writing it gets
+  errors.  Hopefully this will fix Win32 exit problems.
+- Get next volume from Scratch pool before creating a volume.
+- Set new Pool defaults in Vol when moved from Scratch Pool.
+- Remove argument from create_bacula_database for SQLite as it
+  caused an error.
+- Fix reservation so that mutexes are properly applied.
+- Rework reservation algorithm so that two drives can be used
+  at the same time.
+- Apply days keyword patch from Alexander.Bergolth at wu-wien.ac.at 
+  If this patch is applied, the number of days can be specified with
+  "list nextvol days=xx"
+  or
+  "status dir days=xx"
+  My use case is to be able to preview the next scheduled job (and the 
+  next tape to be used) on fridays if there are no scheduled jobs during 
+  the weekend.
+- Fix font code in gnome2 console user patch. Fixes bug #501.
+- Fix malformatted bnet error message that caused seg fault
+  fixes bug 502
+- Applied user patch to improve README.vc8 in src/win32.
+- Ensure that StorageId is stored in Media record when ever possible.
+- Remove old code from winservice.cpp
+- Break on error in scan.
+- Fix typo in signal.c
+- Separate read/write DCR in SD.  Add jcr->read_dcr.
+- Cleanup how find_device() works.
+- Remove abs() in bfile.c so that it compiles on Solaris. Bug #491.
+
 Changes to 1.38.2:
 - Fix crash in tray-monitor when daemon disconnects. Bug #479.
 - Fix bnet-server bug found on OpenBSD. Bug #486
diff --git a/bacula/examples/report.pl b/bacula/examples/report.pl
new file mode 100644 (file)
index 0000000..7859d8f
--- /dev/null
@@ -0,0 +1,116 @@
+#!/usr/bin/perl
+#
+# A bacula job report generator.
+# It require MySQL 4.1.x or later
+#
+# If you have any comments question feel free to contact me, jb@soe.se
+#
+# /Jonas Björklund
+#
+
+use DBI;
+
+$db_host        = "localhost";
+$database       = "bacula";
+$db_username    = "bacula";
+$db_password    = "bacula";
+$email                 = "$ARGV[0]";
+$from          = "backup\@example.net";
+$when          = "$ARGV[1]";
+
+if (!@ARGV) {
+       print "\n report.pl email@hostname.com (TODAY|YESTERDAY|WEEK|MONTH)\n\n";
+       exit;
+}
+
+
+if ($when eq "MONTH") {
+       $where          = "StartTime > DATE_FORMAT(now() - INTERVAL 1 MONTH, '%Y-%m-%d')";
+       $order          = "ORDER BY StartTime DESC";
+} elsif ($when eq "WEEK") {
+       $where          = "StartTime > DATE_FORMAT(now() - INTERVAL 7 DAY, '%Y-%m-%d')";
+       $order          = "ORDER BY StartTime DESC";
+} elsif ($when eq "YESTERDAY") {
+       $where          = "StartTime > DATE_FORMAT(now() - INTERVAL 1 DAY, '%Y-%m-%d') AND StartTime < DATE_FORMAT(now(), '%Y-%m-%d')";
+       $order          = "ORDER BY JobStatus,Time DESC";
+} else {
+       $when = "TODAY";
+       $where          = "StartTime > curdate()";
+       $order          = "ORDER BY JobStatus,Time DESC";
+}
+
+$sqlquery      = "SELECT JobStatus,Name,Level,JobBytes,JobFiles,DATE_FORMAT(StartTime, '%Y-%m-%d %H:%i') AS Start, TIMEDIFF(EndTime,StartTime) AS Time,PoolId
+       FROM Job WHERE 
+       $where
+       $order";
+
+$dbh = DBI->connect("DBI:mysql:database=$database:host=$db_host", $db_username,$db_password) or die;
+        
+my $sth = $dbh->prepare("$sqlquery"); $sth->execute() or die "Can't execute SQL statement : $dbh->errstr";
+while(($jobstatus,$name,$level,$jobbytes,$jobfiles,$start,$time,$poolid) = $sth->fetchrow_array()) {
+       my $sth2 = $dbh->prepare("SELECT Name FROM Pool WHERE PoolId = $poolid"); $sth2->execute() or die "Can't execute SQL statement : $dbh->errstr";
+       ($poolname) = $sth2->fetchrow_array();
+       ($hours,$minutes,$seconds) = split(":", $time);
+       $seconds = sprintf("%.1f", $seconds + ($minutes * 60) + ($hours * 60 * 60));
+       $time = sprintf("%.1f", ($seconds + ($minutes * 60) + ($hours * 60 * 60)) / 60);
+       $bytesANDfiles = sprintf "%7.0f/%d", $jobbytes/1024/1024,$jobfiles;
+       $kbs = 0;
+       if ($jobbytes != 0) {
+               $kbs = ($jobbytes/$seconds)/1024;
+       }
+       
+       $text .= sprintf "%s %18.18s %1s %14s %16s %5sm %4.0f %9.9s\n", $jobstatus,$name,$level,$bytesANDfiles,$start,$time,$kbs,$poolname;
+       $totalfiles = $totalfiles + $jobfiles;
+       $totalbytes = $totalbytes + $jobbytes;
+}
+$totalbytes = sprintf("%.1f",$totalbytes / 1024 / 1024 / 1024);
+
+my $sth = $dbh->prepare("SELECT count(*) FROM Job WHERE $where"); $sth->execute() or die "Can't execute SQL statement : $dbh->errstr";
+($count_total) = $sth->fetchrow_array();
+my $sth = $dbh->prepare("SELECT count(*) FROM Job WHERE $where AND JobStatus = 'T'"); $sth->execute() or die "Can't execute SQL statement : $dbh->errstr";
+($count_ok) = $sth->fetchrow_array();
+$count_fail = $count_total - $count_ok;
+$counts = sprintf("%.1f", 100- (($count_fail/$count_total)*100)); 
+
+       
+open(MAIL,"|/usr/lib/sendmail -f$from -t");
+print MAIL "From: $from\n";
+print MAIL "To: $email\n";
+print MAIL "Subject: Backup ($when) $counts% OK - Total $count_total jobs, $count_fail failed\n";
+print MAIL "\n";
+print MAIL "Total $count_total jobs - $count_ok jobs are OK.\n";
+print MAIL "Total $totalbytes GB / $totalfiles files\n";
+print MAIL "\n";
+
+print MAIL "Status       JobName Lvl MBytes/Files            Start   Time KB/s      Pool\n";
+print MAIL "============================================================================\n";
+print MAIL $text;
+
+print MAIL "============================================================================\n";
+print MAIL <<EOF;
+
+
+Status codes:
+
+  T    Terminated normally
+  E    Terminated in Error
+  A    Canceled by the user
+  C    Created but not yet running
+  R    Running
+  B    Blocked
+  e    Non-fatal error
+  f    Fatal error
+  D    Verify Differences
+  F    Waiting on the File daemon
+  S    Waiting on the Storage daemon
+  m    Waiting for a new Volume to be mounted
+  M    Waiting for a Mount
+  s    Waiting for Storage resource
+  j    Waiting for Job resource
+  c    Waiting for Client resource
+  d    Wating for Maximum jobs
+  t    Waiting for Start Time
+  p    Waiting for higher priority job to finish
+       
+EOF
+close(MAIL);
diff --git a/bacula/examples/ssh-tunnel-README.txt b/bacula/examples/ssh-tunnel-README.txt
new file mode 100644 (file)
index 0000000..6da6250
--- /dev/null
@@ -0,0 +1,112 @@
+From: Joshua Kugler <joshua.kugler@uaf.edu>
+To: bacula-users@lists.sourceforge.net
+Subject: [Bacula-users] SSH tunneling mini-howto
+Date: Tue, 13 Dec 2005 16:59:47 -0900
+
+Here is an outline of the steps I took to get ssh tunneling to work for me.
+
+NOTES:
+I modified to ssh-tunnel.sh file from CVS because:
+1) I didn't need director->client communications encrypted.  My main reason
+for using SSH tunneling was so the clients in the DMZ could get back through
+the firewall to connect to the storage server.
+2) There was a bug in the method it used to get the PID of the tunnel.
+It used 'cut -d" " -f1'  The problem was that ps sometimes has a leading space
+in front of the PID if PID < 10,000, so cut would return a blank PID. 
+Instead I used awk '{ print $1 }' and that worked even with leading spaces.
+3) I also took out ssh's 'v' option for production work
+4) I added '> /dev/null 2> /dev/null' because for some reason ssh wasn't fully
+disconnecting from the terminal, thus the ssh-tunnel script would actually
+hang the job
+5) I changed it to exit with the status of the SSH command, so the job would
+fail right away if the tunnel didn't go up.
+6) The $CLIENT is now specified on the command line so it can be specified in
+the Run Before Job directive.  As a result, you must specify the client when
+you start *and* stop the tunnel.
+
+OK, on to the how to:
+
+1. I placed the attached script in /usr/local/bacula/scripts
+
+2. I modified bacula-dir.conf to have a second Storage directive entry that
+referenced the same storage resource in bacula-sd.conf. (Based on a recent 
+e-mail, might this be dangerous?  Testing will tell.)
+
+The modified Storage entry looked like this:
+
+Storage {
+  Name = herodotus-sd-ops
+  Address = localhost
+  SDPort = 9103
+  Password = "Apassword"
+  Device = AdicFastStor22
+  Media Type = DLT8000
+  Autochanger = yes
+  Maximum Concurrent Jobs = 30
+}
+
+The Address is set to localhost, because when the tunnel is up, the client
+will connect to localhost:9103 in order to connect to the Storage director.
+
+3. In the client configuration, each client that uses this configuration has
+these lines added:
+
+Run Before Job =3D "/usr/local/bacula/scripts/ssh-tunnel start FQDN"
+Run After Job =3D "/usr/local/bacula/scripts/ssh-tunnel stop FQDN"
+
+=46QDN =3D fully qualifed domain name (i.e. full host name)
+
+And their storage is set to "herodotus-sd-ops" (in our case, OPS is the name
+of our DMZ).
+
+4. Now, ssh keys must be created in order for all this to go on unattended.
+
+At the prompt, type:
+
+ssh -b 2048 -t dsa
+
+(if you want less bit strength, you can use a number less than 2048)
+
+When asked where to save the key, specify a location, or accept the default
+Just remember the location, because you will have to put it in the script
+(replace "/usr/local/bacula/ssh/id_dsa" with your file's location).  Make
+sure the user as which bacula runs can read the file.
+
+When asked for a password, leave that blank also as this will be running
+unattended.
+
+After it generates the key, it will save a file called id_dsa, and in that
+same directory, there will be a file called id_dsa.pub, which is your public
+SSH key.
+
+On your backup client, create a user ('bacula' is probably a good choice).  
+In that user's home directory, create a directory named '.ssh' (note the
+leading dot).  In that directory, copy the id_dsa.pub file you create
+earlier.  Once that file is in that user's directory copy it to a file name
+"authorized_keys" in that same directory.  If you're not doing this as the
+user, make sure the directory and files a owned by that user.  And for good
+measure make sure only the user can read them.
+
+5.  Now, the test.  Your keys are generated.  They are in place on the client. 
+You've pointed your script to your private key's file (id_dsa).  Now, at the
+prompt on your server type:
+
+location_of_script/ssh-tunnel start client.host.name
+
+then type
+
+echo $?
+
+That should be 0, which will mean everything went well.
+
+If you need to debug, remove the redirection on the ssh command and add 'v' to
+the switches for verbose output.
+
+If the test went well, reload your modified config, and try running a job.  If
+all goes well, the job report will look like it always does, save notices at
+the top and bottom letting you know that the tunnel went up and down.
+
+I've also gotten this to work on a Windows box using CopSSH (and OpenSSH
+server for Windows), so this isn't a Unix-only solution.
+
+The script is in <bacula-source>/examples/ssh-tunnel.sh
index d1b1a7e7e7e8776804d550dd4eb18fc873ca2326..2e084448665a3450b419e16f402ba302117b21a0 100755 (executable)
@@ -1,47 +1,41 @@
 #!/bin/sh
 # script for creating / stopping a ssh-tunnel to a backupclient
 # Stephan Holl<sholl@gmx.net>
+# Modified by Joshua Kugler <joshua.kugler@uaf.edu>
 #
 #
 
 # variables
-USER=xxxx
-CLIENT=domain.com
-CLIENT_PORT=9112
-LOCAL=192.168.2.4
-LOCAL_PORT=$CLIENT_PORT
+USER=bacula
+CLIENT=$2
+LOCAL=your.backup.server.host.name
 SSH=/usr/bin/ssh
 
-
 case "$1" in
  start)
     # create ssh-tunnel 
-
-    echo "Start SSH-tunnel to $CLIENT..."
-    $SSH -vfnCNg2 -o PreferredAuthentications=publickey -i /var/lib/bacula/.ssh/id_dsa -l $USER -L $CLIENT_PORT:$CLIENT:$LOCAL_PORT -R 9101:$LOCAL:9101 -R 9103:$LOCAL:9103 $CLIENT  
-    exit 0
-    ;;
+        echo "Starting SSH-tunnel to $CLIENT..."
+        $SSH -fnCN2 -o PreferredAuthentications=publickey -i /usr/local/bacula/ssh/id_dsa -l $USER -R 9101:$LOCAL:9101 -R 9103:$LOCAL:9103 $CLIENT > /dev/null 2> /dev/null
+        exit $?
+        ;;
 
  stop)
-    # remove tunnel 
-    echo "Stop SSH-tunnel to $CLIENT..."
-
-    # find PID killem
-    PID=`ps ax|grep "/usr/bin/ssh -vfnCNg2 -o PreferredAuthentications=publickey -i /var/lib/bacula/.ssh/id_dsa -l $USER -L $CLIENT_PORT:$CLIENT:$LOCAL_PORT -R 9101:$LOCAL:9101 -R 9103:$LOCAL:9103 $CLIENT &"|cut -d" " -f1`
-    kill $PID
-    exit 0
-    ;;
+        # remove tunnel 
+        echo "Stopping SSH-tunnel to $CLIENT..."
+        # find PID killem
+        PID=`ps ax | grep "ssh -fnCN2 -o PreferredAuthentications=publickey -i /usr/local/bacula/ssh/id_dsa" | grep "$CLIENT" | awk '{ print $1 }'`
+        kill $PID
+        exit $?
+        ;;
  *)
-    #  usage:
-    echo "             "
-    echo "      Start SSH-tunnel to client-host"
-    echo "      to bacula-director and storage-daemon"
-    echo "            "
-    echo "      USAGE:"
-    echo "      ssh-tunnel.sh {start|stop}"
-    echo "                            "
-    exit 1
-    ;;
+        #  usage:
+        echo "             "
+        echo "      Start SSH-tunnel to client-host"
+        echo "      to bacula-director and storage-daemon"
+        echo "            "
+        echo "      USAGE:"
+        echo "      ssh-tunnel.sh {start|stop} client.fqdn"
+        echo ""
+        exit 1
+        ;;
 esac
-
-        
index a0ee8848d4becc6d64cf328540055e5889d59622..183dc4faabf3e6bfd5729e8642443cf222187c69 100644 (file)
@@ -4,12 +4,43 @@
 General:
 
 Changes to 1.38.3:
+17Dec05
+- Fix seg fault if user labels a drive directory bug #513
+- Remove quotes around Version as it breaks things.
+16Dec05
+- Merge in Aleksandar Milivojevic's mods to the spec file.
+- Apply sparse code fix for raw drives and fifos. Bug 506
+- Thorsten fixed Unicode cd problem with wx-console bug 505.
+Beta release 14Dec05:
+14Dec05
+- Correct reservation system to do a last ditch try
+  for any mounted volume, then anyone anywhere.
+- Add quotes around table Version because of
+  error in MySQL 4.1.15 -- bug report submitted.
+- Correct some minor problems with btape in the fill
+  command.
+- Updates to ssh-tunnel from Joshua Kugler.
+- Added a report.pl program from Jonas Bjorklund.            
+- Simplify the O_NONBLOCK open() code for tape drives,
+  and always open nonblocking.
+- Do not wait for open() if EIO returned (shouldn't happen).
+- Eliminate 3 argument to tape open().
+- Correct the slot # edited in the 3995 Bad autochanger unload
+  message.
+- With -S on bscan (show progress) do not divide by zero.
+  Bug #510
+13Dec05
+- Make cancel pthread_cond_signal() pthread_cond_broadcast().
+- When dcr is freed, also broadcast dev->wait_next_vol signal.
+- Remove unused code in wait_for_device.  
+- Make wait_for_device() always return after 60 seconds of wait.
 12Dec05
 - Use localhost if no network configured
 11Dec05
 - Eliminated duplicate MaxVolBytes in cat update -- bug 509.
 - Remove debug print.
 - Add bail_out in error during state file reading.
+Beta release 10Dec05:
 09Dec05
 - Merge updates into 1.38 branch
 - Update specs to include mysql4 define.
@@ -58,7 +89,6 @@ Changes to 1.38.3:
   My use case is to be able to preview the next scheduled job (and the 
   next tape to be used) on fridays if there are no scheduled jobs during 
   the weekend.
-Changes to 1.39.1:
 03Dec05
 - Fix font code in gnome2 console user patch. Fixes bug #501.
 - Fix malformatted bnet error message that caused seg fault
index bc566c4aa3afc3335d5752dc85534e340fd44d90..9a613d77b17af6d76a1a38039462191cd6b6907f 100644 (file)
@@ -3,6 +3,36 @@
 
 General:
 
+Changes to 1.39.3:
+17Dec05
+- Fix seg fault if user labels a drive directory bug #513
+- Remove quotes around Version as it breaks things.
+16Dec05
+- Merge in Aleksandar Milivojevic's mods to the spec file.
+- Apply sparse code fix for raw drives and fifos. Bug 506
+- Thorsten fixed Unicode cd problem with wx-console bug 505.
+14Dec05
+- Correct reservation system to do a last ditch try
+  for any mounted volume, then anyone anywhere.
+- Add quotes around table Version because of
+  error in MySQL 4.1.15 -- bug report submitted.
+- Correct some minor problems with btape in the fill
+  command.
+- Updates to ssh-tunnel from Joshua Kugler.
+- Added a report.pl program from Jonas Bjorklund.            
+- Simplify the O_NONBLOCK open() code for tape drives,
+  and always open nonblocking.
+- Do not wait for open() if EIO returned (shouldn't happen).
+- Eliminate 3 argument to tape open().
+- Correct the slot # edited in the 3995 Bad autochanger unload
+  message.
+- With -S on bscan (show progress) do not divide by zero.
+13Dec05
+- Make cancel pthread_cond_signal() pthread_cond_broadcast().
+- When dcr is freed, also broadcast dev->wait_next_vol signal.
+- Remove unused code in wait_for_device.  
+- Make wait_for_device() always return after 60 seconds of wait.
+
 Changes to 1.39.2:
 13Dec05
 - Add stubs for non-crypto build.
index a98955c6930067518c0665a3feb40a517cf26371..c65223bc0907f37be0e01a7552fe7b342ad6a066 100644 (file)
@@ -8,9 +8,15 @@
 %define depkgs_version 22Jun05
 %define sqlite_bindir /usr/lib/bacula/sqlite
 %define working_dir /var/bacula
-%define daemon_user root
+%define director_daemon_user bacula
+%define storage_daemon_user bacula
+%define file_daemon_user root
 %define daemon_group bacula
+# group that has write access to tape devices, usually disk on Linux
+%define device_group disk
+%define user_file /etc/passwd
 %define group_file /etc/group
+%define useradd /usr/sbin/useradd
 %define groupadd /usr/sbin/groupadd
 %define _rescuever 1.8.1
 
@@ -28,7 +34,7 @@
 %define fc3 0
 %{?build_fc3:%define fc3 1}
 %define fc4 0
-%{?build_fc4:%define fc4 1}
+%{?build_fc4:%define fc3 1}
 # Whitebox Enterprise build
 %define wb3 0
 %{?build_wb3:%define wb3 1}
 %{?build_rhel3:%define wb3 1}
 %define rhel4 0
 %{?build_rhel4:%define rhel4 1}
-%{?build_rhel4:%define fc4 1}
+%{?build_rhel4:%define fc3 1}
 # CentOS build
 %define centos4 0
 %{?build_centos4:%define centos4 1}
-%{?build_centos4:%define fc4 1}
+%{?build_centos4:%define fc3 1}
 # SuSE build
 %define su9 0
 %{?build_su9:%define su9 1}
@@ -51,7 +57,7 @@
 %{?build_mdk:%define mdk 1}
 
 # test for a platform definition
-%if ! %{rh7} && ! %{rh8} && ! %{rh9} && ! %{fc1} && ! %{fc3} && ! %{fc4} && ! %{wb3} && ! %{su9} && ! %{mdk}
+%if ! %{rh7} && ! %{rh8} && ! %{rh9} && ! %{fc1} && ! %{fc3} && ! %{wb3} && ! %{su9} && ! %{mdk}
 %{error: You must specify a platform. Please examine the spec file.}
 exit 1
 %endif
@@ -71,11 +77,21 @@ exit 1
 %{?build_postgresql:%define postgresql 1}
 
 # test for a database definition
-%if ! %{mysql} && ! %{sqlite} && ! %{postgresql} && ! %{mysql4}
+%if ! %{mysql} && ! %{sqlite} && ! %{postgresql}
 %{error: You must specify database support. Please examine the spec file.}
 exit 1
 %endif
 
+%if %{mysql}
+%define db_backend mysql
+%endif
+%if %{sqlite}
+%define db_backend sqlite
+%endif
+%if %{postgresql}
+%define db_backend postgresql
+%endif
+
 # 64 bit support
 %define x86_64 0
 %{?build_x86_64:%define x86_64 1}
@@ -90,23 +106,30 @@ exit 1
 %if %{centos4}
 %define _dist %(grep CentOS /etc/redhat-release)
 %endif
-%if %{fc3} || %{fc4} && ! %{rhel4} && ! %{centos4}
+%if %{fc3} && ! %{rhel4} && ! %{centos4}
 %define _dist %(grep Fedora /etc/redhat-release)
 %endif
 %if %{wb3} && ! %{rhel3}
 %define _dist %(grep White /etc/whitebox-release)
 %endif
 %if %{su9}
-%define _dist %(grep -i SuSE /etc/SuSE-release)
+%define _dist %(grep SuSE /etc/SuSE-release)
 %endif
 %if %{mdk}
 %define _dist %(grep Mandrake /etc/mandrake-release)
 %endif
 
+# Should we build gconsole, possible only if gnome >= 2.0 available
+%if %{rh7}
+%define gconsole 0
+%else
+%define gconsole 1
+%endif
+
 Summary: Bacula - The Network Backup Solution
 Name: bacula
 Version: @VERSION@
-Release: 2
+Release: 1
 Group: System Environment/Daemons
 License: GPL v2
 Source0:http://www.prdownloads.sourceforge.net/bacula/%{name}-%{version}.tar.gz
@@ -125,15 +148,11 @@ Packager: D. Scott Barninger <barninger@fairfieldcomputers.com>
 
 BuildRequires: atk-devel, ncurses-devel, pango-devel, perl
 BuildRequires: libstdc++-devel, libxml2-devel, zlib-devel, pkgconfig
+BuildRequires: openssl-devel
 %if %{rh7}
 BuildRequires: libtermcap-devel
-BuildRequires: gtk+-devel >= 1.2
-BuildRequires: gnome-libs-devel >= 1.4
 BuildRequires: glibc-devel >= 2.2
 BuildRequires: ORBit-devel
-BuildRequires: bonobo-devel
-BuildRequires: GConf-devel
-BuildRequires: freetype-devel
 %endif
 %if %{su9}
 BuildRequires: termcap
@@ -165,7 +184,7 @@ BuildRequires: libstdc++-static-devel
 BuildRequires: glibc-static-devel
 BuildRequires: freetype2-devel
 %endif
-%if %{fc3} || %{fc4}
+%if %{fc3}
 BuildRequires: libtermcap-devel
 BuildRequires: gtk2-devel >= 2.4
 BuildRequires: libgnomeui-devel >= 2.8
@@ -178,7 +197,7 @@ BuildRequires: bonobo-activation-devel
 BuildRequires: GConf2-devel
 BuildRequires: freetype-devel
 %endif
-%if ! %{rh7} && ! %{su9} && ! %{mdk} && ! %{fc3} && !%{fc4}
+%if ! %{rh7} && ! %{su9} && ! %{mdk} && ! %{fc3}
 BuildRequires: libtermcap-devel
 BuildRequires: gtk2-devel >= 2.0
 BuildRequires: libgnomeui-devel >= 2.0
@@ -235,7 +254,7 @@ Group: System Environment/Daemons
 Provides: bacula-dir, bacula-sd, bacula-fd, bacula-server
 Conflicts: bacula-client
 Obsoletes: bacula-rescue
-Requires: ncurses, libstdc++, zlib
+Requires: ncurses, libstdc++, zlib, openssl, mtx
 
 %if %{rh7}
 Requires: glibc >= 2.2
@@ -316,12 +335,24 @@ This build requires PostgreSQL to be installed separately as the catalog databas
 This build incorporates sqlite as the catalog database, statically compiled.
 %endif
 
+%package mtx
+Summary: Bacula - The Network Backup Solution
+Group: System Environment/Daemons
+Provides: mtx
+
+%description mtx
+This is Bacula's version of mtx tape utilities for Linux distributions that
+do not provide their own mtx package
+
 %package client
 Summary: Bacula - The Network Backup Solution
 Group: System Environment/Daemons
 Provides: bacula-fd
+Conflicts: bacula-mysql
+Conflicts: bacula-sqlite
+Conflicts: bacula-postgresql
 Obsoletes: bacula-rescue
-Requires: libstdc++, zlib
+Requires: libstdc++, zlib, openssl
 
 %if %{rh7}
 Requires: glibc >= 2.2
@@ -369,21 +400,15 @@ Bacula source code has been released under the GPL version 2 license.
 This package installs scripts for updating older versions of the bacula
 database.
 
+%if %{gconsole}
 %package gconsole
 Summary: Bacula - The Network Backup Solution
 Group: System Environment/Daemons
 Requires: atk, libstdc++, zlib, pango, libxml2, bacula-fd
-
-%if %{rh7}
-Requires: gtk+ >= 1.2
-Requires: gnome-libs >= 1.4
-Requires: glibc >= 2.2
-Requires: ORBit
-Requires: bonobo
-Requires: GConf
-Requires: freetype
+Requires: usermode, openssl
 %endif
-%if %{su9}
+
+%if %{gconsole} && %{su9}
 Requires: gtk2 >= 2.0
 Requires: libgnome >= 2.0
 Requires: libgnomeui >= 2.0
@@ -397,7 +422,7 @@ Requires: gconf2
 Requires: linc
 Requires: freetype2
 %endif
-%if %{mdk}
+%if %{gconsole} && %{mdk}
 Requires: gtk2 >= 2.0
 Requires: libgnomeui2
 Requires: glibc >= 2.3
@@ -408,7 +433,7 @@ Requires: libbonoboui >= 2.0
 Requires: GConf2
 Requires: freetype2
 %endif
-%if %{fc3} || %{fc4}
+%if %{gconsole} && %{fc3}  
 Requires: gtk2 >= 2.4
 Requires: libgnomeui >= 2.8
 Requires: glibc >= 2.3
@@ -420,7 +445,7 @@ Requires: bonobo-activation
 Requires: GConf2
 Requires: freetype
 %endif
-%if ! %{rh7} && ! %{su9} && ! %{mdk} && ! %{fc3} && ! %{fc4}
+%if %{gconsole} && ! %{su9} && ! %{mdk} && ! %{fc3}
 Requires: gtk2 >= 2.0
 Requires: libgnomeui >= 2.0
 Requires: glibc >= 2.3
@@ -433,12 +458,11 @@ Requires: GConf2
 Requires: linc
 Requires: freetype
 %endif
-%if %{su9}
+%if %{gconsole} && %{su9}
 Requires: xsu
-%else
-Requires: usermode
 %endif
 
+%if %{gconsole}
 %description gconsole
 Bacula - It comes by night and sucks the vital essence from your computers.
 
@@ -452,6 +476,7 @@ Bacula source code has been released under the GPL version 2 license.
 
 This is the Gnome Console package. It is an add-on to the client or
 server packages.
+%endif
 
 %prep
 
@@ -510,8 +535,10 @@ export LDFLAGS=-L/usr/lib64/mysql
         --sysconfdir=/etc/bacula \
         --with-scriptdir=/etc/bacula \
         --enable-smartalloc \
+%if %{gconsole}
         --enable-gnome \
-%if ! %{rh7} && ! %{rh8}
+%endif
+%if %{gconsole} && ! %{rh8}
         --enable-tray-monitor \
 %endif
 %if %{mysql}
@@ -526,12 +553,20 @@ export LDFLAGS=-L/usr/lib64/mysql
         --with-working-dir=%{working_dir} \
         --with-pid-dir=/var/run \
         --with-subsys-dir=/var/lock/subsys \
-        --with-dir-user=%{daemon_user} \
+        --with-dir-user=%{director_daemon_user} \
         --with-dir-group=%{daemon_group} \
-        --with-sd-user=%{daemon_user} \
+        --with-sd-user=%{storage_daemon_user} \
         --with-sd-group=%{daemon_group} \
-        --with-fd-user=%{daemon_user} \
-        --with-fd-group=%{daemon_group}
+        --with-fd-user=%{file_daemon_user} \
+        --with-fd-group=%{daemon_group} \
+        --with-dir-password="XXX_REPLACE_WITH_DIRECTOR_PASSWORD_XXX" \
+        --with-fd-password="XXX_REPLACE_WITH_CLIENT_PASSWORD_XXX" \
+        --with-sd-password="XXX_REPLACE_WITH_STORAGE_PASSWORD_XXX" \
+        --with-mon-dir-password="XXX_REPLACE_WITH_DIRECTOR_MONITOR_PASSWORD_XXX" \
+        --with-mon-fd-password="XXX_REPLACE_WITH_CLIENT_MONITOR_PASSWORD_XXX" \
+        --with-mon-sd-password="XXX_REPLACE_WITH_STORAGE_MONITOR_PASSWORD_XXX" \
+        --with-openssl
+
 make
 
 %install
@@ -544,13 +579,11 @@ mkdir -p $RPM_BUILD_ROOT/etc/log.d/conf/logfiles
 mkdir -p $RPM_BUILD_ROOT/etc/log.d/conf/services
 mkdir -p $RPM_BUILD_ROOT/etc/log.d/scripts/services
 mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps
-%if %{rh7}
-mkdir -p $RPM_BUILD_ROOT/usr/share/gnome/apps/System
-%else
+%if %{gconsole}
 mkdir -p $RPM_BUILD_ROOT/usr/share/applications
 %endif
 mkdir -p $RPM_BUILD_ROOT/etc/bacula/updatedb
-%if ! %{su9}
+%if %{gconsole} && ! %{su9}
 mkdir -p $RPM_BUILD_ROOT/etc/pam.d
 mkdir -p $RPM_BUILD_ROOT/etc/security/console.apps
 mkdir -p $RPM_BUILD_ROOT/usr/bin
@@ -610,27 +643,25 @@ cp -p platforms/redhat/bacula-sd $RPM_BUILD_ROOT/etc/init.d/bacula-sd
 chmod 0754 $RPM_BUILD_ROOT/etc/init.d/*
 
 # install the menu stuff
-%if %{su9}
+%if %{gconsole} && %{su9}
 cp -p scripts/bacula.png $RPM_BUILD_ROOT/usr/share/pixmaps/bacula.png
 cp -p scripts/bacula.desktop.gnome2.xsu $RPM_BUILD_ROOT/usr/share/applications/bacula.desktop
 cp -p src/tray-monitor/generic.xpm $RPM_BUILD_ROOT/usr/share/pixmaps/bacula-tray-monitor.xpm
 cp -p scripts/bacula-tray-monitor.desktop $RPM_BUILD_ROOT/usr/share/applications/bacula-tray-monitor.desktop
 %endif
-%if %{rh7}
-cp -p scripts/bacula.png $RPM_BUILD_ROOT/usr/share/pixmaps/bacula.png
-cp -p scripts/bacula.desktop.gnome1.consolehelper $RPM_BUILD_ROOT/usr/share/gnome/apps/System/bacula.desktop
-cp -p scripts/gnome-console.console_apps $RPM_BUILD_ROOT/etc/security/console.apps/gnome-console
-cp -p scripts/gnome-console.pamd $RPM_BUILD_ROOT/etc/pam.d/gnome-console
-ln -sf consolehelper $RPM_BUILD_ROOT/usr/bin/gnome-console
+%if %{rh8} || %{rh9} || %{wb3} || %{fc1} || %{fc3} || %{mdk}
+%define iftrick 1
+%else
+%define iftrick 0
 %endif
-%if %{rh8} || %{rh9} || %{wb3} || %{fc1} || %{fc3} || %{fc4} || %{mdk}
+%if %{gconsole} && %{iftrick}
 cp -p scripts/bacula.png $RPM_BUILD_ROOT/usr/share/pixmaps/bacula.png
 cp -p scripts/bacula.desktop.gnome2.consolehelper $RPM_BUILD_ROOT/usr/share/applications/bacula.desktop
 cp -p scripts/gnome-console.console_apps $RPM_BUILD_ROOT/etc/security/console.apps/gnome-console
 cp -p scripts/gnome-console.pamd $RPM_BUILD_ROOT/etc/pam.d/gnome-console
 ln -sf consolehelper $RPM_BUILD_ROOT/usr/bin/gnome-console
 %endif
-%if ! %{rh7} && ! %{rh8}
+%if %{gconsole} && ! %{rh8}
 cp -p src/tray-monitor/generic.xpm $RPM_BUILD_ROOT/usr/share/pixmaps/bacula-tray-monitor.xpm
 cp -p scripts/bacula-tray-monitor.desktop $RPM_BUILD_ROOT/usr/share/applications/bacula-tray-monitor.desktop
 %endif
@@ -668,7 +699,7 @@ cp -pr %{_rescuesrc}/autoconf $RPM_BUILD_ROOT/etc/bacula/rescue/
 # now clean up permissions that are left broken by the install
 chmod o-r $RPM_BUILD_ROOT/etc/bacula/query.sql
 chmod o-rwx $RPM_BUILD_ROOT/var/bacula
-%if ! %{rh7} && ! %{rh8}
+%if %{gconsole} && ! %{rh8}
 chmod 755 $RPM_BUILD_ROOT/usr/sbin/bacula-tray-monitor
 chmod 644 $RPM_BUILD_ROOT/etc/bacula/tray-monitor.conf
 %endif
@@ -676,54 +707,82 @@ chmod 644 $RPM_BUILD_ROOT/etc/bacula/tray-monitor.conf
 %clean
 [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT"
 
-%if %{mysql}
 
+%if %{mysql}
+# MySQL specific files
 %files mysql
+%defattr(-, root, root)
+%attr(0750, root, %{daemon_group}) /etc/bacula/create_mysql_database
+%attr(0750, root, %{daemon_group}) /etc/bacula/drop_mysql_database
+%attr(0750, root, %{daemon_group}) /etc/bacula/make_mysql_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/drop_mysql_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/update_mysql_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/grant_mysql_privileges
+%attr(0750, root, %{daemon_group}) /etc/bacula/startmysql
+%attr(0750, root, %{daemon_group}) /etc/bacula/stopmysql
+%endif
+
+%if %{sqlite}
+%files sqlite
 %defattr(-,root,root)
+%attr(0750, root, %{daemon_group}) /etc/bacula/create_sqlite_database
+%attr(0750, root, %{daemon_group}) /etc/bacula/drop_sqlite_database
+%attr(0750, root, %{daemon_group}) /etc/bacula/grant_sqlite_privileges
+%attr(0750, root, %{daemon_group}) /etc/bacula/make_sqlite_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/drop_sqlite_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/update_sqlite_tables
+%{sqlite_bindir}/libsqlite.a
+%{sqlite_bindir}/sqlite.h
+%{sqlite_bindir}/sqlite
+%endif
 
-/etc/bacula/bacula
-/etc/bacula/bconsole
-/etc/bacula/create_mysql_database
-/etc/bacula/drop_mysql_database
-/etc/bacula/make_mysql_tables
-/etc/bacula/drop_mysql_tables
-/etc/bacula/update_mysql_tables
-/etc/bacula/grant_mysql_privileges
-/etc/bacula/create_bacula_database
-/etc/bacula/drop_bacula_database
-/etc/bacula/grant_bacula_privileges
-/etc/bacula/make_bacula_tables
-/etc/bacula/drop_bacula_tables
-/etc/bacula/update_bacula_tables
-/etc/bacula/make_catalog_backup
-/etc/bacula/delete_catalog_backup
-/etc/bacula/startmysql
-/etc/bacula/stopmysql
-/etc/bacula/mtx-changer
-/etc/bacula/btraceback.dbx
-/etc/bacula/btraceback.gdb
-#/etc/bacula/dvd-freespace
-#/etc/bacula/dvd-writepart
-/etc/bacula/dvd-handler
-/etc/init.d/bacula-dir
-/etc/init.d/bacula-fd
-/etc/init.d/bacula-sd
-/etc/bacula/rescue
+%if %{postgresql}
+%files postgresql
+%defattr(-,root,root)
+%attr(0750, root, %{daemon_group}) /etc/bacula/create_postgresql_database
+%attr(0750, root, %{daemon_group}) /etc/bacula/drop_postgresql_database
+%attr(0750, root, %{daemon_group}) /etc/bacula/make_postgresql_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/drop_postgresql_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/update_postgresql_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/grant_postgresql_privileges
+%endif
+
+# The rest is DB backend independent
+%attr(0750, root, %{daemon_group}) %dir /etc/bacula
+%attr(0750, root, %{daemon_group}) /etc/bacula/bacula
+%attr(0750, root, %{daemon_group}) /etc/bacula/bconsole
+%attr(0750, root, %{daemon_group}) /etc/bacula/create_bacula_database
+%attr(0750, root, %{daemon_group}) /etc/bacula/drop_bacula_database
+%attr(0750, root, %{daemon_group}) /etc/bacula/grant_bacula_privileges
+%attr(0750, root, %{daemon_group}) /etc/bacula/make_bacula_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/drop_bacula_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/update_bacula_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/make_catalog_backup
+%attr(0750, root, %{daemon_group}) /etc/bacula/delete_catalog_backup
+%attr(0750, root, %{daemon_group}) /etc/bacula/mtx-changer
+%attr(0640, root, %{daemon_group}) /etc/bacula/btraceback.dbx
+%attr(0640, root, %{daemon_group}) /etc/bacula/btraceback.gdb
+#%attr(0750, root, %{daemon_group}) /etc/bacula/dvd-freespace
+#%attr(0750, root, %{daemon_group}) /etc/bacula/dvd-writepart
+%attr(0750, root, %{daemon_group}) /etc/bacula/dvd-handler
+%attr(0750, root, %{daemon_group}) /etc/init.d/bacula-dir
+%attr(0750, root, %{daemon_group}) /etc/init.d/bacula-fd
+%attr(0750, root, %{daemon_group}) /etc/init.d/bacula-sd
+%attr(0750, root, %{daemon_group}) /etc/bacula/rescue
 
 %doc COPYING ChangeLog ReleaseNotes VERIFYING kernstodo 
 %doc %{_docsrc}/manual/bacula.pdf %{_docsrc}/developers/developers.pdf %{_docsrc}/manual/bacula ../Release_Notes-%{version}-%{release}.txt
-/usr/man/man1/*
 
 /etc/logrotate.d/bacula
 /etc/log.d/scripts/services/bacula
-%config(noreplace) /etc/bacula/bacula-dir.conf
-%config(noreplace) /etc/bacula/bacula-fd.conf
-%config(noreplace) /etc/bacula/bacula-sd.conf
-%config(noreplace) /etc/bacula/bconsole.conf
-%config(noreplace) /etc/log.d/conf/logfiles/bacula.conf
-%config(noreplace) /etc/log.d/conf/services/bacula.conf
-/etc/bacula/query.sql
-%dir %{working_dir}
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/bacula/bacula-dir.conf
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/bacula/bacula-fd.conf
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/bacula/bacula-sd.conf
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/bacula/bconsole.conf
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/log.d/conf/logfiles/bacula.conf
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/log.d/conf/services/bacula.conf
+%attr(0640, root, %{daemon_group}) /etc/bacula/query.sql
+%attr(0770, root, %{daemon_group}) %dir %{working_dir}
 
 /usr/sbin/bacula-dir
 /usr/sbin/bacula-fd
@@ -736,32 +795,81 @@ chmod 644 $RPM_BUILD_ROOT/etc/bacula/tray-monitor.conf
 /usr/sbin/btraceback
 /usr/sbin/bconsole
 /usr/sbin/dbcheck
-/usr/sbin/loaderinfo
-/usr/sbin/mtx
-/usr/sbin/scsitape
 /usr/sbin/bsmtp
-/usr/sbin/tapeinfo
 
+%if %{mysql}
 %pre mysql
 # test for bacula database older than version 8
 # note: this ASSUMES no password has been set for bacula database
 DB_VER=`mysql 2>/dev/null bacula -e 'select * from Version;'|tail -n 1`
+%endif
+
+%if %{sqlite}
+%pre sqlite
+# test for bacula database older than version 8
+if [ -s %{working_dir}/bacula.db ] && [ -s %{sqlite_bindir}/sqlite ];then
+        DB_VER=`echo "select * from Version;" | %{sqlite_bindir}/sqlite 2>/dev/null %{working_dir}/bacula.db | tail -n 1`
+%endif
+
+%if %{postgresql}
+%pre postgresql
+DB_VER=`echo 'select * from Version;' | psql bacula 2>/dev/null | tail -3 | head -1`
+%endif
 
 if [ -n "$DB_VER" ] && [ "$DB_VER" -lt "8" ]; then
         echo "This bacula upgrade will update a bacula database from version 8 to 9."
         echo "You appear to be running database version $DB_VER. You must first update"
         echo "your database to version 8 and then install this upgrade. The alternative"
-        echo "is to use /etc/bacula/drop_mysql_tables to delete all your your current"
+        echo "is to use /etc/bacula/drop_%{db_backend}_tables to delete all your your current"
         echo "catalog information, then do the upgrade. Information on updating a"
         echo "database older than version 8 can be found in the release notes."
         exit 1
 fi
+
+%if %{sqlite}
+fi
+%endif
+
 # check for and copy /etc/bacula/console.conf to bconsole.conf
 if [ -s /etc/bacula/console.conf ];then
         cp -p /etc/bacula/console.conf /etc/bacula/bconsole.conf
 fi
 
+# create the daemon user and group
+HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
+if [ -z "$HAVE_BACULA" ]; then
+        %{groupadd} -r %{daemon_group} > /dev/null 2>&1
+        echo "The group %{daemon_group} has been added to %{group_file}."
+        echo "See the manual chapter \"Running Bacula\" for details."
+fi
+HAVE_BACULA=`grep %{storage_daemon_user} %{user_file} 2>/dev/null`
+if [ -z "$HAVE_BACULA" ]; then
+        %{useradd} -r -c "Bacula" -d %{working_dir} -g %{daemon_group} -G %{device_group} -M -n -s /sbin/nologin %{storage_daemon_user} > /dev/null 2>&1
+        echo "The user %{storage_daemon_user} has been added to %{user_file}."
+        echo "See the manual chapter \"Running Bacula\" for details."
+fi
+HAVE_BACULA=`grep %{director_daemon_user} %{user_file} 2>/dev/null`
+if [ -z "$HAVE_BACULA" ]; then
+        %{useradd} -r -c "Bacula" -d %{working_dir} -g %{daemon_group} -M -n -s /sbin/nologin %{director_daemon_user} > /dev/null 2>&1
+        echo "The user %{director_daemon_user} has been added to %{user_file}."
+        echo "See the manual chapter \"Running Bacula\" for details."
+fi
+HAVE_BACULA=`grep %{file_daemon_user} %{user_file} 2>/dev/null`
+if [ -z "$HAVE_BACULA" ]; then
+        %{useradd} -r -c "Bacula" -d %{working_dir} -g %{daemon_group} -M -n -s /sbin/nologin %{file_daemon_user} > /dev/null 2>&1
+        echo "The user %{file_daemon_user} has been added to %{user_file}."
+        echo "See the manual chapter \"Running Bacula\" for details."
+fi
+
+%if %{mysql}
 %post mysql
+%endif
+%if %{sqlite}
+%post sqlite
+%endif
+%if %{postgresql}
+%post postgresql
+%endif
 
 # add our links
 if [ "$1" -ge 1 ] ; then
@@ -770,6 +878,7 @@ if [ "$1" -ge 1 ] ; then
 /sbin/chkconfig --add bacula-sd
 fi
 
+%if %{mysql}
 # test for an existing database
 # note: this ASSUMES no password has been set for bacula database
 DB_VER=`mysql 2>/dev/null bacula -e 'select * from Version;'|tail -n 1`
@@ -794,133 +903,13 @@ elif [ "$DB_VER" -lt "9" ]; then
         echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2"
 
 fi
-
-# create the daemon group
-HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
-if [ -z $HAVE_BACULA ]; then
-        %{groupadd} -r %{daemon_group} > /dev/null 2>&1
-        echo "The group %{daemon_group} has been added to %{group_file}."
-        echo "See the manual chapter Running Bacula for details."
-fi
-
-%preun mysql
-# delete our links
-if [ $1 = 0 ]; then
-/sbin/chkconfig --del bacula-dir
-/sbin/chkconfig --del bacula-fd
-/sbin/chkconfig --del bacula-sd
-fi
-
 %endif
 
 %if %{sqlite}
-
-%files sqlite
-%defattr(-,root,root)
-
-/etc/bacula/bacula
-/etc/bacula/bconsole
-/etc/bacula/create_bacula_database
-/etc/bacula/drop_bacula_database
-/etc/bacula/grant_bacula_privileges
-/etc/bacula/make_bacula_tables
-/etc/bacula/drop_bacula_tables
-/etc/bacula/update_bacula_tables
-/etc/bacula/create_sqlite_database
-/etc/bacula/drop_sqlite_database
-/etc/bacula/grant_sqlite_privileges
-/etc/bacula/make_sqlite_tables
-/etc/bacula/drop_sqlite_tables
-/etc/bacula/update_sqlite_tables
-/etc/bacula/make_catalog_backup
-/etc/bacula/delete_catalog_backup
-/etc/bacula/mtx-changer
-/etc/bacula/btraceback.dbx
-/etc/bacula/btraceback.gdb
-#/etc/bacula/dvd-freespace
-#/etc/bacula/dvd-writepart
-/etc/bacula/dvd-handler
-/etc/init.d/bacula-dir
-/etc/init.d/bacula-fd
-/etc/init.d/bacula-sd
-/etc/bacula/rescue
-
-%doc COPYING ChangeLog ReleaseNotes VERIFYING kernstodo 
-%doc %{_docsrc}/manual/bacula.pdf %{_docsrc}/developers/developers.pdf %{_docsrc}/manual/bacula ../Release_Notes-%{version}-%{release}.txt
-/usr/man/man1/*
-
-/etc/logrotate.d/bacula
-/etc/log.d/scripts/services/bacula
-%config(noreplace) /etc/bacula/bacula-dir.conf
-%config(noreplace) /etc/bacula/bacula-fd.conf
-%config(noreplace) /etc/bacula/bacula-sd.conf
-%config(noreplace) /etc/bacula/bconsole.conf
-%config(noreplace) /etc/log.d/conf/logfiles/bacula.conf
-%config(noreplace) /etc/log.d/conf/services/bacula.conf
-/etc/bacula/query.sql
-%{sqlite_bindir}/libsqlite.a
-%{sqlite_bindir}/sqlite.h
-%dir %{working_dir}
-
-/usr/sbin/bacula-dir
-/usr/sbin/bacula-fd
-/usr/sbin/bacula-sd
-/usr/sbin/bcopy
-/usr/sbin/bextract
-/usr/sbin/bls
-/usr/sbin/bscan
-/usr/sbin/btape
-/usr/sbin/btraceback
-/usr/sbin/bconsole
-/usr/sbin/dbcheck
-/usr/sbin/loaderinfo
-/usr/sbin/mtx
-/usr/sbin/scsitape
-/usr/sbin/bsmtp
-/usr/sbin/tapeinfo
-%{sqlite_bindir}/sqlite
-
-
-%pre sqlite
-# test for bacula database older than version 8
-if [ -s %{working_dir}/bacula.db ] && [ -s %{sqlite_bindir}/sqlite ];then
-        DB_VER=`echo "select * from Version;" | %{sqlite_bindir}/sqlite 2>/dev/null %{working_dir}/bacula.db | tail -n 1`
-        if [ -n "$DB_VER" ] && [ "$DB_VER" -lt "8" ]; then
-                echo "This bacula upgrade will update a bacula database from version 8 to 9."
-                echo "You appear to be running database version $DB_VER. You must first update"
-                echo "your database to version 8 and then install this upgrade. The alternative"
-                echo "is to use /etc/bacula/drop_sqlite_tables to delete all your your current"
-                echo "catalog information, then do the upgrade. Information on updating a"
-                echo "database older than version 8 can be found in the release notes."
-                exit 1
-        fi
-fi
-# check for and copy /etc/bacula/console.conf to bconsole.conf
-if [ -s /etc/bacula/console.conf ];then
-        cp -p /etc/bacula/console.conf /etc/bacula/bconsole.conf
-fi
-
-%post sqlite
-# add our links
-if [ "$1" -ge 1 ] ; then
-/sbin/chkconfig --add bacula-dir
-/sbin/chkconfig --add bacula-fd
-/sbin/chkconfig --add bacula-sd
-fi
-
 # test for an existing database
 if [ -s %{working_dir}/bacula.db ]; then
         DB_VER=`echo "select * from Version;" | %{sqlite_bindir}/sqlite 2>/dev/null %{working_dir}/bacula.db | tail -n 1`
         # check to see if we need to upgrade a 1.36 or lower database
-        if [ "$DB_VER" -lt "8" ]; then
-                echo "This bacula upgrade requires a database update to version 9. You appear to"
-                echo "be running database version $DB_VER. You must update your database using the"
-                echo "upgrade scripts in the bacula-updatedb package. The alternative"
-                echo "is to use /etc/bacula/drop_sqlite_tables to delete all your your current"
-                echo "catalog information, then /etc/bacula/make_sqlite_tables. Information on updating a"
-                echo "database older than version 8 can be found in the release notes."
-        fi      
-        
         if [ "$DB_VER" -lt "9" ] && [ "$DB_VER" -ge "8" ]; then
                 echo "This release requires an upgrade to your bacula database."
                 echo "Backing up your current database..."
@@ -937,112 +926,9 @@ else
         echo "Creating the SQLite tables..."
         /etc/bacula/make_sqlite_tables
 fi
-
-# create the daemon group
-HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
-if [ -z $HAVE_BACULA ]; then
-        %{groupadd} -r %{daemon_group} > /dev/null 2>&1
-        echo "The group %{daemon_group} has been added to %{group_file}."
-        echo "See the manual chapter Running Bacula for details."
-fi
-
-%preun sqlite
-# delete our links
-if [ $1 = 0 ]; then
-/sbin/chkconfig --del bacula-dir
-/sbin/chkconfig --del bacula-fd
-/sbin/chkconfig --del bacula-sd
-fi
-
 %endif
 
 %if %{postgresql}
-
-%files postgresql
-%defattr(-,root,root)
-
-/etc/bacula/bacula
-/etc/bacula/bconsole
-/etc/bacula/create_postgresql_database
-/etc/bacula/drop_postgresql_database
-/etc/bacula/make_postgresql_tables
-/etc/bacula/drop_postgresql_tables
-/etc/bacula/update_postgresql_tables
-/etc/bacula/grant_postgresql_privileges
-/etc/bacula/create_bacula_database
-/etc/bacula/drop_bacula_database
-/etc/bacula/grant_bacula_privileges
-/etc/bacula/make_bacula_tables
-/etc/bacula/drop_bacula_tables
-/etc/bacula/update_bacula_tables
-/etc/bacula/make_catalog_backup
-/etc/bacula/delete_catalog_backup
-/etc/bacula/mtx-changer
-/etc/bacula/btraceback.dbx
-/etc/bacula/btraceback.gdb
-#/etc/bacula/dvd-freespace
-#/etc/bacula/dvd-writepart
-/etc/bacula/dvd-handler
-/etc/init.d/bacula-dir
-/etc/init.d/bacula-fd
-/etc/init.d/bacula-sd
-/etc/bacula/rescue
-
-%doc COPYING ChangeLog ReleaseNotes VERIFYING kernstodo 
-%doc %{_docsrc}/manual/bacula.pdf %{_docsrc}/developers/developers.pdf %{_docsrc}/manual/bacula ../Release_Notes-%{version}-%{release}.txt
-/usr/man/man1/*
-
-/etc/logrotate.d/bacula
-/etc/log.d/scripts/services/bacula
-%config(noreplace) /etc/bacula/bacula-dir.conf
-%config(noreplace) /etc/bacula/bacula-fd.conf
-%config(noreplace) /etc/bacula/bacula-sd.conf
-%config(noreplace) /etc/bacula/bconsole.conf
-%config(noreplace) /etc/log.d/conf/logfiles/bacula.conf
-%config(noreplace) /etc/log.d/conf/services/bacula.conf
-/etc/bacula/query.sql
-%dir %{working_dir}
-
-/usr/sbin/bacula-dir
-/usr/sbin/bacula-fd
-/usr/sbin/bacula-sd
-/usr/sbin/bcopy
-/usr/sbin/bextract
-/usr/sbin/bls
-/usr/sbin/bscan
-/usr/sbin/btape
-/usr/sbin/btraceback
-/usr/sbin/bconsole
-/usr/sbin/dbcheck
-/usr/sbin/loaderinfo
-/usr/sbin/mtx
-/usr/sbin/scsitape
-/usr/sbin/bsmtp
-/usr/sbin/tapeinfo
-
-%pre postgresql
-# test for bacula database older than version 8
-# note: this ASSUMES no password has been set for bacula database
-DB_VER=`echo 'select * from Version;' | psql bacula 2>/dev/null | tail -3 | head -1`
-
-if [ -n "$DB_VER" ] && [ "$DB_VER" -lt "8" ]; then
-        echo "This bacula upgrade will update a bacula database from version 8 to 9."
-        echo "You appear to be running database version $DB_VER. You must first update"
-        echo "your database to version 8 and then install this upgrade. The alternative"
-        echo "is to use /etc/bacula/drop_postgresql_tables to delete all your your current"
-        echo "catalog information, then do the upgrade. Information on updating a"
-        echo "database older than version 8 can be found in the release notes."
-        exit 1
-fi
-
-%post postgresql
-# add our links
-if [ "$1" -ge 1 ] ; then
-/sbin/chkconfig --add bacula-dir
-/sbin/chkconfig --add bacula-fd
-/sbin/chkconfig --add bacula-sd
-fi
-
 # test for an existing database
 # note: this ASSUMES no password has been set for bacula database
 DB_VER=`echo 'select * from Version;' | psql bacula 2>/dev/null | tail -3 | head -1`
@@ -1067,17 +953,33 @@ elif [ "$DB_VER" -lt "9" ]; then
         echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2"
         
 fi
+%endif
 
-# create the daemon group
-HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
-if [ -z $HAVE_BACULA ]; then
-        %{groupadd} -r %{daemon_group} > /dev/null 2>&1
-        echo "The group %{daemon_group} has been added to %{groupfile}."
-        echo "See the manual chapter Running Bacula for details."
+# generate passwords if needed
+if [ -d /etc/bacula ]; then
+        cd /etc/bacula
+        for file in *.conf; do
+                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
+                        need_password=`grep $string $file 2>/dev/null`
+                        if [ -n "$need_password" ]; then
+                                pass=`openssl rand -base64 33`
+                                sed "s-$string-$pass-g" $file > $file.new
+                                cp -f $file.new $file; rm -f $file.new
+                        fi
+                done
+        done
 fi
-        
 
+%if %{mysql}
+%preun mysql
+%endif
+%if %{sqlite}
+%preun sqlite
+%endif
+%if %{postgresql}
 %preun postgresql
+%endif
+
 # delete our links
 if [ $1 = 0 ]; then
 /sbin/chkconfig --del bacula-dir
@@ -1085,44 +987,73 @@ if [ $1 = 0 ]; then
 /sbin/chkconfig --del bacula-sd
 fi
 
-%endif
+
+%files mtx
+/usr/sbin/loaderinfo
+/usr/sbin/mtx
+/usr/sbin/scsitape
+/usr/sbin/tapeinfo
+/usr/man/man1/*
+
 
 %files client
 %defattr(-,root,root)
-
-/etc/bacula/bconsole
+%attr(0750, root, %{daemon_group}) %dir /etc/bacula
+%attr(0750, root, %{daemon_group}) /etc/bacula/bconsole
 /etc/init.d/bacula-fd
-/etc/bacula/rescue
+%attr(0750, root, %{daemon_group}) /etc/bacula/rescue
 
 %doc COPYING ChangeLog ReleaseNotes VERIFYING kernstodo 
 %doc %{_docsrc}/manual/bacula.pdf %{_docsrc}/developers/developers.pdf %{_docsrc}/manual/bacula ../Release_Notes-%{version}-%{release}.txt
 
 /etc/logrotate.d/bacula
 
-%config(noreplace) /etc/bacula/bacula-fd.conf
-%config(noreplace) /etc/bacula/bconsole.conf
-%dir %{working_dir}
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/bacula/bacula-fd.conf
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/bacula/bconsole.conf
+%attr(0770, root, %{daemon_group}) %dir %{working_dir}
 
 /usr/sbin/bacula-fd
 /usr/sbin/btraceback
-/etc/bacula/btraceback.gdb
-/etc/bacula/btraceback.dbx
+%attr(0640, root, %{daemon_group}) /etc/bacula/btraceback.gdb
+%attr(0640, root, %{daemon_group}) /etc/bacula/btraceback.dbx
 /usr/sbin/bsmtp
 /usr/sbin/bconsole
 
 
+%pre client
+# create the daemon group and user
+HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
+if [ -z "$HAVE_BACULA" ]; then
+        %{groupadd} -r %{daemon_group} > /dev/null 2>&1
+        echo "The group %{daemon_group} has been added to %{group_file}."
+        echo "See the manual chapter \"Running Bacula\" for details."
+fi
+HAVE_BACULA=`grep %{file_daemon_user} %{user_file} 2>/dev/null`
+if [ -z "$HAVE_BACULA" ]; then
+        %{useradd} -r -c "Bacula" -d %{working_dir} -g %{daemon_group} -M -n -s /sbin/nologin %{file_daemon_user} > /dev/null 2>&1
+        echo "The user %{file_daemon_user} has been added to %{user_file}."
+        echo "See the manual chapter \"Running Bacula\" for details."
+fi
+
 %post client
 # add our link
 if [ "$1" -ge 1 ] ; then
 /sbin/chkconfig --add bacula-fd
 fi
 
-# create the daemon group
-HAVE_BACULA=`cat %{group_file} | grep %{daemon_group} 2>/dev/null`
-if [ -z $HAVE_BACULA ]; then
-        %{groupadd} -r %{daemon_group} > /dev/null 2>&1
-        echo "The group %{daemon_group} has been added to %{group_file}."
-        echo "See the manual chapter Running Bacula for details."
+# generate passwords if needed
+if [ -d /etc/bacula ]; then
+        cd /etc/bacula
+        for file in *.conf; do
+                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
+                        need_password=`grep $string $file 2>/dev/null`
+                        if [ -n "$need_password" ]; then
+                                pass=`openssl rand -base64 33`
+                                sed "s-$string-$pass-g" $file > $file.new
+                                cp -f $file.new $file; rm -f $file.new
+                        fi
+                done
+        done
 fi
 
 %preun client
@@ -1132,41 +1063,86 @@ if [ $1 = 0 ]; then
 fi
 
 %files updatedb
-%defattr(-,root,root)
+%defattr(-,root,%{daemon_group})
 /etc/bacula/updatedb/*
 
+%pre updatedb
+# create the daemon group
+HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
+if [ -z "$HAVE_BACULA" ]; then
+        %{groupadd} -r %{daemon_group} > /dev/null 2>&1
+        echo "The group %{daemon_group} has been added to %{group_file}."
+        echo "See the manual chapter \"Running Bacula\" for details."
+fi
+
 %post updatedb
 echo "The database update scripts were installed to /etc/bacula/updatedb"
 
+%if %{gconsole}
 %files gconsole
 %defattr(-,root,root)
 /usr/sbin/gnome-console
-/etc/bacula/gconsole
-%config(noreplace) /etc/bacula/gnome-console.conf
+%attr(0750, root, %{daemon_group}) %dir /etc/bacula
+%attr(075, root, %{daemon_group}) /etc/bacula/gconsole
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/bacula/gnome-console.conf
 /usr/share/pixmaps/bacula.png
+%endif
 
-%if %{rh7}
-/usr/share/gnome/apps/System/bacula.desktop
-%else
+%if %{gconsole}
 /usr/share/applications/bacula.desktop
 %endif
 
-%if ! %{rh7} && ! %{rh8}
+%if %{gconsole} && ! %{rh8}
 /usr/sbin/bacula-tray-monitor
 %config(noreplace) /etc/bacula/tray-monitor.conf
 /usr/share/pixmaps/bacula-tray-monitor.xpm
 /usr/share/applications/bacula-tray-monitor.desktop
 %endif
 
-%if ! %{su9} 
+%if %{gconsole} && ! %{su9}
 # add the console helper files
 %config(noreplace,missingok) /etc/pam.d/gnome-console
 %config(noreplace,missingok) /etc/security/console.apps/gnome-console
 /usr/bin/gnome-console
 %endif
 
+%if %{gconsole}
+%pre gconsole
+# create the daemon group
+HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
+if [ -z "$HAVE_BACULA" ]; then
+        %{groupadd} -r %{daemon_group} > /dev/null 2>&1
+        echo "The group %{daemon_group} has been added to %{group_file}."
+        echo "See the manual chapter \"Running Bacula\" for details."
+fi
+
+%post gconsole
+# generate passwords if needed
+if [ -d /etc/bacula ]; then
+        cd /etc/bacula
+        for file in *.conf; do
+                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
+                        need_password=`grep $string $file 2>/dev/null`
+                        if [ -n "$need_password" ]; then
+                                pass=`openssl rand -base64 33`
+                                sed "s-$string-$pass-g" $file > $file.new
+                                cp -f $file.new $file; rm -f $file.new
+                        fi
+                done
+        done
+fi
+%endif
 
 %changelog
+* Wed Dec 14 2005 Aleksandar Milivojevic <alex@milivojevic.org>
+- 1.38.2 release
+- Reorganize files and pre/post sections to remove repetitions
+- Always build separate mtx package
+- Fix file ownerships for /etc/bacula and Bacula's working dir
+* Wed Nov 23 2005 Aleksandar Milivojevic <alex@milivojevic.org>
+- Disable GNOME on RH7
+* Fri Nov 18 2005 Aleksandar Milivojevic <alex@milivojevic.org>
+- Red Hat and look alikes have mtx RPM, do not build/package our version
 * Sun Nov 13 2005 D. Scott Barninger <barninger@fairfieldcomputers.com>
 - minor edit to _dist for SLES9 compatibility
 * Sat Nov 05 2005 D. Scott Barninger <barninger@fairfieldcomputers.com>
index a98955c6930067518c0665a3feb40a517cf26371..c65223bc0907f37be0e01a7552fe7b342ad6a066 100644 (file)
@@ -8,9 +8,15 @@
 %define depkgs_version 22Jun05
 %define sqlite_bindir /usr/lib/bacula/sqlite
 %define working_dir /var/bacula
-%define daemon_user root
+%define director_daemon_user bacula
+%define storage_daemon_user bacula
+%define file_daemon_user root
 %define daemon_group bacula
+# group that has write access to tape devices, usually disk on Linux
+%define device_group disk
+%define user_file /etc/passwd
 %define group_file /etc/group
+%define useradd /usr/sbin/useradd
 %define groupadd /usr/sbin/groupadd
 %define _rescuever 1.8.1
 
@@ -28,7 +34,7 @@
 %define fc3 0
 %{?build_fc3:%define fc3 1}
 %define fc4 0
-%{?build_fc4:%define fc4 1}
+%{?build_fc4:%define fc3 1}
 # Whitebox Enterprise build
 %define wb3 0
 %{?build_wb3:%define wb3 1}
 %{?build_rhel3:%define wb3 1}
 %define rhel4 0
 %{?build_rhel4:%define rhel4 1}
-%{?build_rhel4:%define fc4 1}
+%{?build_rhel4:%define fc3 1}
 # CentOS build
 %define centos4 0
 %{?build_centos4:%define centos4 1}
-%{?build_centos4:%define fc4 1}
+%{?build_centos4:%define fc3 1}
 # SuSE build
 %define su9 0
 %{?build_su9:%define su9 1}
@@ -51,7 +57,7 @@
 %{?build_mdk:%define mdk 1}
 
 # test for a platform definition
-%if ! %{rh7} && ! %{rh8} && ! %{rh9} && ! %{fc1} && ! %{fc3} && ! %{fc4} && ! %{wb3} && ! %{su9} && ! %{mdk}
+%if ! %{rh7} && ! %{rh8} && ! %{rh9} && ! %{fc1} && ! %{fc3} && ! %{wb3} && ! %{su9} && ! %{mdk}
 %{error: You must specify a platform. Please examine the spec file.}
 exit 1
 %endif
@@ -71,11 +77,21 @@ exit 1
 %{?build_postgresql:%define postgresql 1}
 
 # test for a database definition
-%if ! %{mysql} && ! %{sqlite} && ! %{postgresql} && ! %{mysql4}
+%if ! %{mysql} && ! %{sqlite} && ! %{postgresql}
 %{error: You must specify database support. Please examine the spec file.}
 exit 1
 %endif
 
+%if %{mysql}
+%define db_backend mysql
+%endif
+%if %{sqlite}
+%define db_backend sqlite
+%endif
+%if %{postgresql}
+%define db_backend postgresql
+%endif
+
 # 64 bit support
 %define x86_64 0
 %{?build_x86_64:%define x86_64 1}
@@ -90,23 +106,30 @@ exit 1
 %if %{centos4}
 %define _dist %(grep CentOS /etc/redhat-release)
 %endif
-%if %{fc3} || %{fc4} && ! %{rhel4} && ! %{centos4}
+%if %{fc3} && ! %{rhel4} && ! %{centos4}
 %define _dist %(grep Fedora /etc/redhat-release)
 %endif
 %if %{wb3} && ! %{rhel3}
 %define _dist %(grep White /etc/whitebox-release)
 %endif
 %if %{su9}
-%define _dist %(grep -i SuSE /etc/SuSE-release)
+%define _dist %(grep SuSE /etc/SuSE-release)
 %endif
 %if %{mdk}
 %define _dist %(grep Mandrake /etc/mandrake-release)
 %endif
 
+# Should we build gconsole, possible only if gnome >= 2.0 available
+%if %{rh7}
+%define gconsole 0
+%else
+%define gconsole 1
+%endif
+
 Summary: Bacula - The Network Backup Solution
 Name: bacula
 Version: @VERSION@
-Release: 2
+Release: 1
 Group: System Environment/Daemons
 License: GPL v2
 Source0:http://www.prdownloads.sourceforge.net/bacula/%{name}-%{version}.tar.gz
@@ -125,15 +148,11 @@ Packager: D. Scott Barninger <barninger@fairfieldcomputers.com>
 
 BuildRequires: atk-devel, ncurses-devel, pango-devel, perl
 BuildRequires: libstdc++-devel, libxml2-devel, zlib-devel, pkgconfig
+BuildRequires: openssl-devel
 %if %{rh7}
 BuildRequires: libtermcap-devel
-BuildRequires: gtk+-devel >= 1.2
-BuildRequires: gnome-libs-devel >= 1.4
 BuildRequires: glibc-devel >= 2.2
 BuildRequires: ORBit-devel
-BuildRequires: bonobo-devel
-BuildRequires: GConf-devel
-BuildRequires: freetype-devel
 %endif
 %if %{su9}
 BuildRequires: termcap
@@ -165,7 +184,7 @@ BuildRequires: libstdc++-static-devel
 BuildRequires: glibc-static-devel
 BuildRequires: freetype2-devel
 %endif
-%if %{fc3} || %{fc4}
+%if %{fc3}
 BuildRequires: libtermcap-devel
 BuildRequires: gtk2-devel >= 2.4
 BuildRequires: libgnomeui-devel >= 2.8
@@ -178,7 +197,7 @@ BuildRequires: bonobo-activation-devel
 BuildRequires: GConf2-devel
 BuildRequires: freetype-devel
 %endif
-%if ! %{rh7} && ! %{su9} && ! %{mdk} && ! %{fc3} && !%{fc4}
+%if ! %{rh7} && ! %{su9} && ! %{mdk} && ! %{fc3}
 BuildRequires: libtermcap-devel
 BuildRequires: gtk2-devel >= 2.0
 BuildRequires: libgnomeui-devel >= 2.0
@@ -235,7 +254,7 @@ Group: System Environment/Daemons
 Provides: bacula-dir, bacula-sd, bacula-fd, bacula-server
 Conflicts: bacula-client
 Obsoletes: bacula-rescue
-Requires: ncurses, libstdc++, zlib
+Requires: ncurses, libstdc++, zlib, openssl, mtx
 
 %if %{rh7}
 Requires: glibc >= 2.2
@@ -316,12 +335,24 @@ This build requires PostgreSQL to be installed separately as the catalog databas
 This build incorporates sqlite as the catalog database, statically compiled.
 %endif
 
+%package mtx
+Summary: Bacula - The Network Backup Solution
+Group: System Environment/Daemons
+Provides: mtx
+
+%description mtx
+This is Bacula's version of mtx tape utilities for Linux distributions that
+do not provide their own mtx package
+
 %package client
 Summary: Bacula - The Network Backup Solution
 Group: System Environment/Daemons
 Provides: bacula-fd
+Conflicts: bacula-mysql
+Conflicts: bacula-sqlite
+Conflicts: bacula-postgresql
 Obsoletes: bacula-rescue
-Requires: libstdc++, zlib
+Requires: libstdc++, zlib, openssl
 
 %if %{rh7}
 Requires: glibc >= 2.2
@@ -369,21 +400,15 @@ Bacula source code has been released under the GPL version 2 license.
 This package installs scripts for updating older versions of the bacula
 database.
 
+%if %{gconsole}
 %package gconsole
 Summary: Bacula - The Network Backup Solution
 Group: System Environment/Daemons
 Requires: atk, libstdc++, zlib, pango, libxml2, bacula-fd
-
-%if %{rh7}
-Requires: gtk+ >= 1.2
-Requires: gnome-libs >= 1.4
-Requires: glibc >= 2.2
-Requires: ORBit
-Requires: bonobo
-Requires: GConf
-Requires: freetype
+Requires: usermode, openssl
 %endif
-%if %{su9}
+
+%if %{gconsole} && %{su9}
 Requires: gtk2 >= 2.0
 Requires: libgnome >= 2.0
 Requires: libgnomeui >= 2.0
@@ -397,7 +422,7 @@ Requires: gconf2
 Requires: linc
 Requires: freetype2
 %endif
-%if %{mdk}
+%if %{gconsole} && %{mdk}
 Requires: gtk2 >= 2.0
 Requires: libgnomeui2
 Requires: glibc >= 2.3
@@ -408,7 +433,7 @@ Requires: libbonoboui >= 2.0
 Requires: GConf2
 Requires: freetype2
 %endif
-%if %{fc3} || %{fc4}
+%if %{gconsole} && %{fc3}  
 Requires: gtk2 >= 2.4
 Requires: libgnomeui >= 2.8
 Requires: glibc >= 2.3
@@ -420,7 +445,7 @@ Requires: bonobo-activation
 Requires: GConf2
 Requires: freetype
 %endif
-%if ! %{rh7} && ! %{su9} && ! %{mdk} && ! %{fc3} && ! %{fc4}
+%if %{gconsole} && ! %{su9} && ! %{mdk} && ! %{fc3}
 Requires: gtk2 >= 2.0
 Requires: libgnomeui >= 2.0
 Requires: glibc >= 2.3
@@ -433,12 +458,11 @@ Requires: GConf2
 Requires: linc
 Requires: freetype
 %endif
-%if %{su9}
+%if %{gconsole} && %{su9}
 Requires: xsu
-%else
-Requires: usermode
 %endif
 
+%if %{gconsole}
 %description gconsole
 Bacula - It comes by night and sucks the vital essence from your computers.
 
@@ -452,6 +476,7 @@ Bacula source code has been released under the GPL version 2 license.
 
 This is the Gnome Console package. It is an add-on to the client or
 server packages.
+%endif
 
 %prep
 
@@ -510,8 +535,10 @@ export LDFLAGS=-L/usr/lib64/mysql
         --sysconfdir=/etc/bacula \
         --with-scriptdir=/etc/bacula \
         --enable-smartalloc \
+%if %{gconsole}
         --enable-gnome \
-%if ! %{rh7} && ! %{rh8}
+%endif
+%if %{gconsole} && ! %{rh8}
         --enable-tray-monitor \
 %endif
 %if %{mysql}
@@ -526,12 +553,20 @@ export LDFLAGS=-L/usr/lib64/mysql
         --with-working-dir=%{working_dir} \
         --with-pid-dir=/var/run \
         --with-subsys-dir=/var/lock/subsys \
-        --with-dir-user=%{daemon_user} \
+        --with-dir-user=%{director_daemon_user} \
         --with-dir-group=%{daemon_group} \
-        --with-sd-user=%{daemon_user} \
+        --with-sd-user=%{storage_daemon_user} \
         --with-sd-group=%{daemon_group} \
-        --with-fd-user=%{daemon_user} \
-        --with-fd-group=%{daemon_group}
+        --with-fd-user=%{file_daemon_user} \
+        --with-fd-group=%{daemon_group} \
+        --with-dir-password="XXX_REPLACE_WITH_DIRECTOR_PASSWORD_XXX" \
+        --with-fd-password="XXX_REPLACE_WITH_CLIENT_PASSWORD_XXX" \
+        --with-sd-password="XXX_REPLACE_WITH_STORAGE_PASSWORD_XXX" \
+        --with-mon-dir-password="XXX_REPLACE_WITH_DIRECTOR_MONITOR_PASSWORD_XXX" \
+        --with-mon-fd-password="XXX_REPLACE_WITH_CLIENT_MONITOR_PASSWORD_XXX" \
+        --with-mon-sd-password="XXX_REPLACE_WITH_STORAGE_MONITOR_PASSWORD_XXX" \
+        --with-openssl
+
 make
 
 %install
@@ -544,13 +579,11 @@ mkdir -p $RPM_BUILD_ROOT/etc/log.d/conf/logfiles
 mkdir -p $RPM_BUILD_ROOT/etc/log.d/conf/services
 mkdir -p $RPM_BUILD_ROOT/etc/log.d/scripts/services
 mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps
-%if %{rh7}
-mkdir -p $RPM_BUILD_ROOT/usr/share/gnome/apps/System
-%else
+%if %{gconsole}
 mkdir -p $RPM_BUILD_ROOT/usr/share/applications
 %endif
 mkdir -p $RPM_BUILD_ROOT/etc/bacula/updatedb
-%if ! %{su9}
+%if %{gconsole} && ! %{su9}
 mkdir -p $RPM_BUILD_ROOT/etc/pam.d
 mkdir -p $RPM_BUILD_ROOT/etc/security/console.apps
 mkdir -p $RPM_BUILD_ROOT/usr/bin
@@ -610,27 +643,25 @@ cp -p platforms/redhat/bacula-sd $RPM_BUILD_ROOT/etc/init.d/bacula-sd
 chmod 0754 $RPM_BUILD_ROOT/etc/init.d/*
 
 # install the menu stuff
-%if %{su9}
+%if %{gconsole} && %{su9}
 cp -p scripts/bacula.png $RPM_BUILD_ROOT/usr/share/pixmaps/bacula.png
 cp -p scripts/bacula.desktop.gnome2.xsu $RPM_BUILD_ROOT/usr/share/applications/bacula.desktop
 cp -p src/tray-monitor/generic.xpm $RPM_BUILD_ROOT/usr/share/pixmaps/bacula-tray-monitor.xpm
 cp -p scripts/bacula-tray-monitor.desktop $RPM_BUILD_ROOT/usr/share/applications/bacula-tray-monitor.desktop
 %endif
-%if %{rh7}
-cp -p scripts/bacula.png $RPM_BUILD_ROOT/usr/share/pixmaps/bacula.png
-cp -p scripts/bacula.desktop.gnome1.consolehelper $RPM_BUILD_ROOT/usr/share/gnome/apps/System/bacula.desktop
-cp -p scripts/gnome-console.console_apps $RPM_BUILD_ROOT/etc/security/console.apps/gnome-console
-cp -p scripts/gnome-console.pamd $RPM_BUILD_ROOT/etc/pam.d/gnome-console
-ln -sf consolehelper $RPM_BUILD_ROOT/usr/bin/gnome-console
+%if %{rh8} || %{rh9} || %{wb3} || %{fc1} || %{fc3} || %{mdk}
+%define iftrick 1
+%else
+%define iftrick 0
 %endif
-%if %{rh8} || %{rh9} || %{wb3} || %{fc1} || %{fc3} || %{fc4} || %{mdk}
+%if %{gconsole} && %{iftrick}
 cp -p scripts/bacula.png $RPM_BUILD_ROOT/usr/share/pixmaps/bacula.png
 cp -p scripts/bacula.desktop.gnome2.consolehelper $RPM_BUILD_ROOT/usr/share/applications/bacula.desktop
 cp -p scripts/gnome-console.console_apps $RPM_BUILD_ROOT/etc/security/console.apps/gnome-console
 cp -p scripts/gnome-console.pamd $RPM_BUILD_ROOT/etc/pam.d/gnome-console
 ln -sf consolehelper $RPM_BUILD_ROOT/usr/bin/gnome-console
 %endif
-%if ! %{rh7} && ! %{rh8}
+%if %{gconsole} && ! %{rh8}
 cp -p src/tray-monitor/generic.xpm $RPM_BUILD_ROOT/usr/share/pixmaps/bacula-tray-monitor.xpm
 cp -p scripts/bacula-tray-monitor.desktop $RPM_BUILD_ROOT/usr/share/applications/bacula-tray-monitor.desktop
 %endif
@@ -668,7 +699,7 @@ cp -pr %{_rescuesrc}/autoconf $RPM_BUILD_ROOT/etc/bacula/rescue/
 # now clean up permissions that are left broken by the install
 chmod o-r $RPM_BUILD_ROOT/etc/bacula/query.sql
 chmod o-rwx $RPM_BUILD_ROOT/var/bacula
-%if ! %{rh7} && ! %{rh8}
+%if %{gconsole} && ! %{rh8}
 chmod 755 $RPM_BUILD_ROOT/usr/sbin/bacula-tray-monitor
 chmod 644 $RPM_BUILD_ROOT/etc/bacula/tray-monitor.conf
 %endif
@@ -676,54 +707,82 @@ chmod 644 $RPM_BUILD_ROOT/etc/bacula/tray-monitor.conf
 %clean
 [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT"
 
-%if %{mysql}
 
+%if %{mysql}
+# MySQL specific files
 %files mysql
+%defattr(-, root, root)
+%attr(0750, root, %{daemon_group}) /etc/bacula/create_mysql_database
+%attr(0750, root, %{daemon_group}) /etc/bacula/drop_mysql_database
+%attr(0750, root, %{daemon_group}) /etc/bacula/make_mysql_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/drop_mysql_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/update_mysql_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/grant_mysql_privileges
+%attr(0750, root, %{daemon_group}) /etc/bacula/startmysql
+%attr(0750, root, %{daemon_group}) /etc/bacula/stopmysql
+%endif
+
+%if %{sqlite}
+%files sqlite
 %defattr(-,root,root)
+%attr(0750, root, %{daemon_group}) /etc/bacula/create_sqlite_database
+%attr(0750, root, %{daemon_group}) /etc/bacula/drop_sqlite_database
+%attr(0750, root, %{daemon_group}) /etc/bacula/grant_sqlite_privileges
+%attr(0750, root, %{daemon_group}) /etc/bacula/make_sqlite_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/drop_sqlite_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/update_sqlite_tables
+%{sqlite_bindir}/libsqlite.a
+%{sqlite_bindir}/sqlite.h
+%{sqlite_bindir}/sqlite
+%endif
 
-/etc/bacula/bacula
-/etc/bacula/bconsole
-/etc/bacula/create_mysql_database
-/etc/bacula/drop_mysql_database
-/etc/bacula/make_mysql_tables
-/etc/bacula/drop_mysql_tables
-/etc/bacula/update_mysql_tables
-/etc/bacula/grant_mysql_privileges
-/etc/bacula/create_bacula_database
-/etc/bacula/drop_bacula_database
-/etc/bacula/grant_bacula_privileges
-/etc/bacula/make_bacula_tables
-/etc/bacula/drop_bacula_tables
-/etc/bacula/update_bacula_tables
-/etc/bacula/make_catalog_backup
-/etc/bacula/delete_catalog_backup
-/etc/bacula/startmysql
-/etc/bacula/stopmysql
-/etc/bacula/mtx-changer
-/etc/bacula/btraceback.dbx
-/etc/bacula/btraceback.gdb
-#/etc/bacula/dvd-freespace
-#/etc/bacula/dvd-writepart
-/etc/bacula/dvd-handler
-/etc/init.d/bacula-dir
-/etc/init.d/bacula-fd
-/etc/init.d/bacula-sd
-/etc/bacula/rescue
+%if %{postgresql}
+%files postgresql
+%defattr(-,root,root)
+%attr(0750, root, %{daemon_group}) /etc/bacula/create_postgresql_database
+%attr(0750, root, %{daemon_group}) /etc/bacula/drop_postgresql_database
+%attr(0750, root, %{daemon_group}) /etc/bacula/make_postgresql_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/drop_postgresql_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/update_postgresql_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/grant_postgresql_privileges
+%endif
+
+# The rest is DB backend independent
+%attr(0750, root, %{daemon_group}) %dir /etc/bacula
+%attr(0750, root, %{daemon_group}) /etc/bacula/bacula
+%attr(0750, root, %{daemon_group}) /etc/bacula/bconsole
+%attr(0750, root, %{daemon_group}) /etc/bacula/create_bacula_database
+%attr(0750, root, %{daemon_group}) /etc/bacula/drop_bacula_database
+%attr(0750, root, %{daemon_group}) /etc/bacula/grant_bacula_privileges
+%attr(0750, root, %{daemon_group}) /etc/bacula/make_bacula_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/drop_bacula_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/update_bacula_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/make_catalog_backup
+%attr(0750, root, %{daemon_group}) /etc/bacula/delete_catalog_backup
+%attr(0750, root, %{daemon_group}) /etc/bacula/mtx-changer
+%attr(0640, root, %{daemon_group}) /etc/bacula/btraceback.dbx
+%attr(0640, root, %{daemon_group}) /etc/bacula/btraceback.gdb
+#%attr(0750, root, %{daemon_group}) /etc/bacula/dvd-freespace
+#%attr(0750, root, %{daemon_group}) /etc/bacula/dvd-writepart
+%attr(0750, root, %{daemon_group}) /etc/bacula/dvd-handler
+%attr(0750, root, %{daemon_group}) /etc/init.d/bacula-dir
+%attr(0750, root, %{daemon_group}) /etc/init.d/bacula-fd
+%attr(0750, root, %{daemon_group}) /etc/init.d/bacula-sd
+%attr(0750, root, %{daemon_group}) /etc/bacula/rescue
 
 %doc COPYING ChangeLog ReleaseNotes VERIFYING kernstodo 
 %doc %{_docsrc}/manual/bacula.pdf %{_docsrc}/developers/developers.pdf %{_docsrc}/manual/bacula ../Release_Notes-%{version}-%{release}.txt
-/usr/man/man1/*
 
 /etc/logrotate.d/bacula
 /etc/log.d/scripts/services/bacula
-%config(noreplace) /etc/bacula/bacula-dir.conf
-%config(noreplace) /etc/bacula/bacula-fd.conf
-%config(noreplace) /etc/bacula/bacula-sd.conf
-%config(noreplace) /etc/bacula/bconsole.conf
-%config(noreplace) /etc/log.d/conf/logfiles/bacula.conf
-%config(noreplace) /etc/log.d/conf/services/bacula.conf
-/etc/bacula/query.sql
-%dir %{working_dir}
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/bacula/bacula-dir.conf
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/bacula/bacula-fd.conf
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/bacula/bacula-sd.conf
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/bacula/bconsole.conf
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/log.d/conf/logfiles/bacula.conf
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/log.d/conf/services/bacula.conf
+%attr(0640, root, %{daemon_group}) /etc/bacula/query.sql
+%attr(0770, root, %{daemon_group}) %dir %{working_dir}
 
 /usr/sbin/bacula-dir
 /usr/sbin/bacula-fd
@@ -736,32 +795,81 @@ chmod 644 $RPM_BUILD_ROOT/etc/bacula/tray-monitor.conf
 /usr/sbin/btraceback
 /usr/sbin/bconsole
 /usr/sbin/dbcheck
-/usr/sbin/loaderinfo
-/usr/sbin/mtx
-/usr/sbin/scsitape
 /usr/sbin/bsmtp
-/usr/sbin/tapeinfo
 
+%if %{mysql}
 %pre mysql
 # test for bacula database older than version 8
 # note: this ASSUMES no password has been set for bacula database
 DB_VER=`mysql 2>/dev/null bacula -e 'select * from Version;'|tail -n 1`
+%endif
+
+%if %{sqlite}
+%pre sqlite
+# test for bacula database older than version 8
+if [ -s %{working_dir}/bacula.db ] && [ -s %{sqlite_bindir}/sqlite ];then
+        DB_VER=`echo "select * from Version;" | %{sqlite_bindir}/sqlite 2>/dev/null %{working_dir}/bacula.db | tail -n 1`
+%endif
+
+%if %{postgresql}
+%pre postgresql
+DB_VER=`echo 'select * from Version;' | psql bacula 2>/dev/null | tail -3 | head -1`
+%endif
 
 if [ -n "$DB_VER" ] && [ "$DB_VER" -lt "8" ]; then
         echo "This bacula upgrade will update a bacula database from version 8 to 9."
         echo "You appear to be running database version $DB_VER. You must first update"
         echo "your database to version 8 and then install this upgrade. The alternative"
-        echo "is to use /etc/bacula/drop_mysql_tables to delete all your your current"
+        echo "is to use /etc/bacula/drop_%{db_backend}_tables to delete all your your current"
         echo "catalog information, then do the upgrade. Information on updating a"
         echo "database older than version 8 can be found in the release notes."
         exit 1
 fi
+
+%if %{sqlite}
+fi
+%endif
+
 # check for and copy /etc/bacula/console.conf to bconsole.conf
 if [ -s /etc/bacula/console.conf ];then
         cp -p /etc/bacula/console.conf /etc/bacula/bconsole.conf
 fi
 
+# create the daemon user and group
+HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
+if [ -z "$HAVE_BACULA" ]; then
+        %{groupadd} -r %{daemon_group} > /dev/null 2>&1
+        echo "The group %{daemon_group} has been added to %{group_file}."
+        echo "See the manual chapter \"Running Bacula\" for details."
+fi
+HAVE_BACULA=`grep %{storage_daemon_user} %{user_file} 2>/dev/null`
+if [ -z "$HAVE_BACULA" ]; then
+        %{useradd} -r -c "Bacula" -d %{working_dir} -g %{daemon_group} -G %{device_group} -M -n -s /sbin/nologin %{storage_daemon_user} > /dev/null 2>&1
+        echo "The user %{storage_daemon_user} has been added to %{user_file}."
+        echo "See the manual chapter \"Running Bacula\" for details."
+fi
+HAVE_BACULA=`grep %{director_daemon_user} %{user_file} 2>/dev/null`
+if [ -z "$HAVE_BACULA" ]; then
+        %{useradd} -r -c "Bacula" -d %{working_dir} -g %{daemon_group} -M -n -s /sbin/nologin %{director_daemon_user} > /dev/null 2>&1
+        echo "The user %{director_daemon_user} has been added to %{user_file}."
+        echo "See the manual chapter \"Running Bacula\" for details."
+fi
+HAVE_BACULA=`grep %{file_daemon_user} %{user_file} 2>/dev/null`
+if [ -z "$HAVE_BACULA" ]; then
+        %{useradd} -r -c "Bacula" -d %{working_dir} -g %{daemon_group} -M -n -s /sbin/nologin %{file_daemon_user} > /dev/null 2>&1
+        echo "The user %{file_daemon_user} has been added to %{user_file}."
+        echo "See the manual chapter \"Running Bacula\" for details."
+fi
+
+%if %{mysql}
 %post mysql
+%endif
+%if %{sqlite}
+%post sqlite
+%endif
+%if %{postgresql}
+%post postgresql
+%endif
 
 # add our links
 if [ "$1" -ge 1 ] ; then
@@ -770,6 +878,7 @@ if [ "$1" -ge 1 ] ; then
 /sbin/chkconfig --add bacula-sd
 fi
 
+%if %{mysql}
 # test for an existing database
 # note: this ASSUMES no password has been set for bacula database
 DB_VER=`mysql 2>/dev/null bacula -e 'select * from Version;'|tail -n 1`
@@ -794,133 +903,13 @@ elif [ "$DB_VER" -lt "9" ]; then
         echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2"
 
 fi
-
-# create the daemon group
-HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
-if [ -z $HAVE_BACULA ]; then
-        %{groupadd} -r %{daemon_group} > /dev/null 2>&1
-        echo "The group %{daemon_group} has been added to %{group_file}."
-        echo "See the manual chapter Running Bacula for details."
-fi
-
-%preun mysql
-# delete our links
-if [ $1 = 0 ]; then
-/sbin/chkconfig --del bacula-dir
-/sbin/chkconfig --del bacula-fd
-/sbin/chkconfig --del bacula-sd
-fi
-
 %endif
 
 %if %{sqlite}
-
-%files sqlite
-%defattr(-,root,root)
-
-/etc/bacula/bacula
-/etc/bacula/bconsole
-/etc/bacula/create_bacula_database
-/etc/bacula/drop_bacula_database
-/etc/bacula/grant_bacula_privileges
-/etc/bacula/make_bacula_tables
-/etc/bacula/drop_bacula_tables
-/etc/bacula/update_bacula_tables
-/etc/bacula/create_sqlite_database
-/etc/bacula/drop_sqlite_database
-/etc/bacula/grant_sqlite_privileges
-/etc/bacula/make_sqlite_tables
-/etc/bacula/drop_sqlite_tables
-/etc/bacula/update_sqlite_tables
-/etc/bacula/make_catalog_backup
-/etc/bacula/delete_catalog_backup
-/etc/bacula/mtx-changer
-/etc/bacula/btraceback.dbx
-/etc/bacula/btraceback.gdb
-#/etc/bacula/dvd-freespace
-#/etc/bacula/dvd-writepart
-/etc/bacula/dvd-handler
-/etc/init.d/bacula-dir
-/etc/init.d/bacula-fd
-/etc/init.d/bacula-sd
-/etc/bacula/rescue
-
-%doc COPYING ChangeLog ReleaseNotes VERIFYING kernstodo 
-%doc %{_docsrc}/manual/bacula.pdf %{_docsrc}/developers/developers.pdf %{_docsrc}/manual/bacula ../Release_Notes-%{version}-%{release}.txt
-/usr/man/man1/*
-
-/etc/logrotate.d/bacula
-/etc/log.d/scripts/services/bacula
-%config(noreplace) /etc/bacula/bacula-dir.conf
-%config(noreplace) /etc/bacula/bacula-fd.conf
-%config(noreplace) /etc/bacula/bacula-sd.conf
-%config(noreplace) /etc/bacula/bconsole.conf
-%config(noreplace) /etc/log.d/conf/logfiles/bacula.conf
-%config(noreplace) /etc/log.d/conf/services/bacula.conf
-/etc/bacula/query.sql
-%{sqlite_bindir}/libsqlite.a
-%{sqlite_bindir}/sqlite.h
-%dir %{working_dir}
-
-/usr/sbin/bacula-dir
-/usr/sbin/bacula-fd
-/usr/sbin/bacula-sd
-/usr/sbin/bcopy
-/usr/sbin/bextract
-/usr/sbin/bls
-/usr/sbin/bscan
-/usr/sbin/btape
-/usr/sbin/btraceback
-/usr/sbin/bconsole
-/usr/sbin/dbcheck
-/usr/sbin/loaderinfo
-/usr/sbin/mtx
-/usr/sbin/scsitape
-/usr/sbin/bsmtp
-/usr/sbin/tapeinfo
-%{sqlite_bindir}/sqlite
-
-
-%pre sqlite
-# test for bacula database older than version 8
-if [ -s %{working_dir}/bacula.db ] && [ -s %{sqlite_bindir}/sqlite ];then
-        DB_VER=`echo "select * from Version;" | %{sqlite_bindir}/sqlite 2>/dev/null %{working_dir}/bacula.db | tail -n 1`
-        if [ -n "$DB_VER" ] && [ "$DB_VER" -lt "8" ]; then
-                echo "This bacula upgrade will update a bacula database from version 8 to 9."
-                echo "You appear to be running database version $DB_VER. You must first update"
-                echo "your database to version 8 and then install this upgrade. The alternative"
-                echo "is to use /etc/bacula/drop_sqlite_tables to delete all your your current"
-                echo "catalog information, then do the upgrade. Information on updating a"
-                echo "database older than version 8 can be found in the release notes."
-                exit 1
-        fi
-fi
-# check for and copy /etc/bacula/console.conf to bconsole.conf
-if [ -s /etc/bacula/console.conf ];then
-        cp -p /etc/bacula/console.conf /etc/bacula/bconsole.conf
-fi
-
-%post sqlite
-# add our links
-if [ "$1" -ge 1 ] ; then
-/sbin/chkconfig --add bacula-dir
-/sbin/chkconfig --add bacula-fd
-/sbin/chkconfig --add bacula-sd
-fi
-
 # test for an existing database
 if [ -s %{working_dir}/bacula.db ]; then
         DB_VER=`echo "select * from Version;" | %{sqlite_bindir}/sqlite 2>/dev/null %{working_dir}/bacula.db | tail -n 1`
         # check to see if we need to upgrade a 1.36 or lower database
-        if [ "$DB_VER" -lt "8" ]; then
-                echo "This bacula upgrade requires a database update to version 9. You appear to"
-                echo "be running database version $DB_VER. You must update your database using the"
-                echo "upgrade scripts in the bacula-updatedb package. The alternative"
-                echo "is to use /etc/bacula/drop_sqlite_tables to delete all your your current"
-                echo "catalog information, then /etc/bacula/make_sqlite_tables. Information on updating a"
-                echo "database older than version 8 can be found in the release notes."
-        fi      
-        
         if [ "$DB_VER" -lt "9" ] && [ "$DB_VER" -ge "8" ]; then
                 echo "This release requires an upgrade to your bacula database."
                 echo "Backing up your current database..."
@@ -937,112 +926,9 @@ else
         echo "Creating the SQLite tables..."
         /etc/bacula/make_sqlite_tables
 fi
-
-# create the daemon group
-HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
-if [ -z $HAVE_BACULA ]; then
-        %{groupadd} -r %{daemon_group} > /dev/null 2>&1
-        echo "The group %{daemon_group} has been added to %{group_file}."
-        echo "See the manual chapter Running Bacula for details."
-fi
-
-%preun sqlite
-# delete our links
-if [ $1 = 0 ]; then
-/sbin/chkconfig --del bacula-dir
-/sbin/chkconfig --del bacula-fd
-/sbin/chkconfig --del bacula-sd
-fi
-
 %endif
 
 %if %{postgresql}
-
-%files postgresql
-%defattr(-,root,root)
-
-/etc/bacula/bacula
-/etc/bacula/bconsole
-/etc/bacula/create_postgresql_database
-/etc/bacula/drop_postgresql_database
-/etc/bacula/make_postgresql_tables
-/etc/bacula/drop_postgresql_tables
-/etc/bacula/update_postgresql_tables
-/etc/bacula/grant_postgresql_privileges
-/etc/bacula/create_bacula_database
-/etc/bacula/drop_bacula_database
-/etc/bacula/grant_bacula_privileges
-/etc/bacula/make_bacula_tables
-/etc/bacula/drop_bacula_tables
-/etc/bacula/update_bacula_tables
-/etc/bacula/make_catalog_backup
-/etc/bacula/delete_catalog_backup
-/etc/bacula/mtx-changer
-/etc/bacula/btraceback.dbx
-/etc/bacula/btraceback.gdb
-#/etc/bacula/dvd-freespace
-#/etc/bacula/dvd-writepart
-/etc/bacula/dvd-handler
-/etc/init.d/bacula-dir
-/etc/init.d/bacula-fd
-/etc/init.d/bacula-sd
-/etc/bacula/rescue
-
-%doc COPYING ChangeLog ReleaseNotes VERIFYING kernstodo 
-%doc %{_docsrc}/manual/bacula.pdf %{_docsrc}/developers/developers.pdf %{_docsrc}/manual/bacula ../Release_Notes-%{version}-%{release}.txt
-/usr/man/man1/*
-
-/etc/logrotate.d/bacula
-/etc/log.d/scripts/services/bacula
-%config(noreplace) /etc/bacula/bacula-dir.conf
-%config(noreplace) /etc/bacula/bacula-fd.conf
-%config(noreplace) /etc/bacula/bacula-sd.conf
-%config(noreplace) /etc/bacula/bconsole.conf
-%config(noreplace) /etc/log.d/conf/logfiles/bacula.conf
-%config(noreplace) /etc/log.d/conf/services/bacula.conf
-/etc/bacula/query.sql
-%dir %{working_dir}
-
-/usr/sbin/bacula-dir
-/usr/sbin/bacula-fd
-/usr/sbin/bacula-sd
-/usr/sbin/bcopy
-/usr/sbin/bextract
-/usr/sbin/bls
-/usr/sbin/bscan
-/usr/sbin/btape
-/usr/sbin/btraceback
-/usr/sbin/bconsole
-/usr/sbin/dbcheck
-/usr/sbin/loaderinfo
-/usr/sbin/mtx
-/usr/sbin/scsitape
-/usr/sbin/bsmtp
-/usr/sbin/tapeinfo
-
-%pre postgresql
-# test for bacula database older than version 8
-# note: this ASSUMES no password has been set for bacula database
-DB_VER=`echo 'select * from Version;' | psql bacula 2>/dev/null | tail -3 | head -1`
-
-if [ -n "$DB_VER" ] && [ "$DB_VER" -lt "8" ]; then
-        echo "This bacula upgrade will update a bacula database from version 8 to 9."
-        echo "You appear to be running database version $DB_VER. You must first update"
-        echo "your database to version 8 and then install this upgrade. The alternative"
-        echo "is to use /etc/bacula/drop_postgresql_tables to delete all your your current"
-        echo "catalog information, then do the upgrade. Information on updating a"
-        echo "database older than version 8 can be found in the release notes."
-        exit 1
-fi
-
-%post postgresql
-# add our links
-if [ "$1" -ge 1 ] ; then
-/sbin/chkconfig --add bacula-dir
-/sbin/chkconfig --add bacula-fd
-/sbin/chkconfig --add bacula-sd
-fi
-
 # test for an existing database
 # note: this ASSUMES no password has been set for bacula database
 DB_VER=`echo 'select * from Version;' | psql bacula 2>/dev/null | tail -3 | head -1`
@@ -1067,17 +953,33 @@ elif [ "$DB_VER" -lt "9" ]; then
         echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2"
         
 fi
+%endif
 
-# create the daemon group
-HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
-if [ -z $HAVE_BACULA ]; then
-        %{groupadd} -r %{daemon_group} > /dev/null 2>&1
-        echo "The group %{daemon_group} has been added to %{groupfile}."
-        echo "See the manual chapter Running Bacula for details."
+# generate passwords if needed
+if [ -d /etc/bacula ]; then
+        cd /etc/bacula
+        for file in *.conf; do
+                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
+                        need_password=`grep $string $file 2>/dev/null`
+                        if [ -n "$need_password" ]; then
+                                pass=`openssl rand -base64 33`
+                                sed "s-$string-$pass-g" $file > $file.new
+                                cp -f $file.new $file; rm -f $file.new
+                        fi
+                done
+        done
 fi
-        
 
+%if %{mysql}
+%preun mysql
+%endif
+%if %{sqlite}
+%preun sqlite
+%endif
+%if %{postgresql}
 %preun postgresql
+%endif
+
 # delete our links
 if [ $1 = 0 ]; then
 /sbin/chkconfig --del bacula-dir
@@ -1085,44 +987,73 @@ if [ $1 = 0 ]; then
 /sbin/chkconfig --del bacula-sd
 fi
 
-%endif
+
+%files mtx
+/usr/sbin/loaderinfo
+/usr/sbin/mtx
+/usr/sbin/scsitape
+/usr/sbin/tapeinfo
+/usr/man/man1/*
+
 
 %files client
 %defattr(-,root,root)
-
-/etc/bacula/bconsole
+%attr(0750, root, %{daemon_group}) %dir /etc/bacula
+%attr(0750, root, %{daemon_group}) /etc/bacula/bconsole
 /etc/init.d/bacula-fd
-/etc/bacula/rescue
+%attr(0750, root, %{daemon_group}) /etc/bacula/rescue
 
 %doc COPYING ChangeLog ReleaseNotes VERIFYING kernstodo 
 %doc %{_docsrc}/manual/bacula.pdf %{_docsrc}/developers/developers.pdf %{_docsrc}/manual/bacula ../Release_Notes-%{version}-%{release}.txt
 
 /etc/logrotate.d/bacula
 
-%config(noreplace) /etc/bacula/bacula-fd.conf
-%config(noreplace) /etc/bacula/bconsole.conf
-%dir %{working_dir}
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/bacula/bacula-fd.conf
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/bacula/bconsole.conf
+%attr(0770, root, %{daemon_group}) %dir %{working_dir}
 
 /usr/sbin/bacula-fd
 /usr/sbin/btraceback
-/etc/bacula/btraceback.gdb
-/etc/bacula/btraceback.dbx
+%attr(0640, root, %{daemon_group}) /etc/bacula/btraceback.gdb
+%attr(0640, root, %{daemon_group}) /etc/bacula/btraceback.dbx
 /usr/sbin/bsmtp
 /usr/sbin/bconsole
 
 
+%pre client
+# create the daemon group and user
+HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
+if [ -z "$HAVE_BACULA" ]; then
+        %{groupadd} -r %{daemon_group} > /dev/null 2>&1
+        echo "The group %{daemon_group} has been added to %{group_file}."
+        echo "See the manual chapter \"Running Bacula\" for details."
+fi
+HAVE_BACULA=`grep %{file_daemon_user} %{user_file} 2>/dev/null`
+if [ -z "$HAVE_BACULA" ]; then
+        %{useradd} -r -c "Bacula" -d %{working_dir} -g %{daemon_group} -M -n -s /sbin/nologin %{file_daemon_user} > /dev/null 2>&1
+        echo "The user %{file_daemon_user} has been added to %{user_file}."
+        echo "See the manual chapter \"Running Bacula\" for details."
+fi
+
 %post client
 # add our link
 if [ "$1" -ge 1 ] ; then
 /sbin/chkconfig --add bacula-fd
 fi
 
-# create the daemon group
-HAVE_BACULA=`cat %{group_file} | grep %{daemon_group} 2>/dev/null`
-if [ -z $HAVE_BACULA ]; then
-        %{groupadd} -r %{daemon_group} > /dev/null 2>&1
-        echo "The group %{daemon_group} has been added to %{group_file}."
-        echo "See the manual chapter Running Bacula for details."
+# generate passwords if needed
+if [ -d /etc/bacula ]; then
+        cd /etc/bacula
+        for file in *.conf; do
+                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
+                        need_password=`grep $string $file 2>/dev/null`
+                        if [ -n "$need_password" ]; then
+                                pass=`openssl rand -base64 33`
+                                sed "s-$string-$pass-g" $file > $file.new
+                                cp -f $file.new $file; rm -f $file.new
+                        fi
+                done
+        done
 fi
 
 %preun client
@@ -1132,41 +1063,86 @@ if [ $1 = 0 ]; then
 fi
 
 %files updatedb
-%defattr(-,root,root)
+%defattr(-,root,%{daemon_group})
 /etc/bacula/updatedb/*
 
+%pre updatedb
+# create the daemon group
+HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
+if [ -z "$HAVE_BACULA" ]; then
+        %{groupadd} -r %{daemon_group} > /dev/null 2>&1
+        echo "The group %{daemon_group} has been added to %{group_file}."
+        echo "See the manual chapter \"Running Bacula\" for details."
+fi
+
 %post updatedb
 echo "The database update scripts were installed to /etc/bacula/updatedb"
 
+%if %{gconsole}
 %files gconsole
 %defattr(-,root,root)
 /usr/sbin/gnome-console
-/etc/bacula/gconsole
-%config(noreplace) /etc/bacula/gnome-console.conf
+%attr(0750, root, %{daemon_group}) %dir /etc/bacula
+%attr(075, root, %{daemon_group}) /etc/bacula/gconsole
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/bacula/gnome-console.conf
 /usr/share/pixmaps/bacula.png
+%endif
 
-%if %{rh7}
-/usr/share/gnome/apps/System/bacula.desktop
-%else
+%if %{gconsole}
 /usr/share/applications/bacula.desktop
 %endif
 
-%if ! %{rh7} && ! %{rh8}
+%if %{gconsole} && ! %{rh8}
 /usr/sbin/bacula-tray-monitor
 %config(noreplace) /etc/bacula/tray-monitor.conf
 /usr/share/pixmaps/bacula-tray-monitor.xpm
 /usr/share/applications/bacula-tray-monitor.desktop
 %endif
 
-%if ! %{su9} 
+%if %{gconsole} && ! %{su9}
 # add the console helper files
 %config(noreplace,missingok) /etc/pam.d/gnome-console
 %config(noreplace,missingok) /etc/security/console.apps/gnome-console
 /usr/bin/gnome-console
 %endif
 
+%if %{gconsole}
+%pre gconsole
+# create the daemon group
+HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
+if [ -z "$HAVE_BACULA" ]; then
+        %{groupadd} -r %{daemon_group} > /dev/null 2>&1
+        echo "The group %{daemon_group} has been added to %{group_file}."
+        echo "See the manual chapter \"Running Bacula\" for details."
+fi
+
+%post gconsole
+# generate passwords if needed
+if [ -d /etc/bacula ]; then
+        cd /etc/bacula
+        for file in *.conf; do
+                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
+                        need_password=`grep $string $file 2>/dev/null`
+                        if [ -n "$need_password" ]; then
+                                pass=`openssl rand -base64 33`
+                                sed "s-$string-$pass-g" $file > $file.new
+                                cp -f $file.new $file; rm -f $file.new
+                        fi
+                done
+        done
+fi
+%endif
 
 %changelog
+* Wed Dec 14 2005 Aleksandar Milivojevic <alex@milivojevic.org>
+- 1.38.2 release
+- Reorganize files and pre/post sections to remove repetitions
+- Always build separate mtx package
+- Fix file ownerships for /etc/bacula and Bacula's working dir
+* Wed Nov 23 2005 Aleksandar Milivojevic <alex@milivojevic.org>
+- Disable GNOME on RH7
+* Fri Nov 18 2005 Aleksandar Milivojevic <alex@milivojevic.org>
+- Red Hat and look alikes have mtx RPM, do not build/package our version
 * Sun Nov 13 2005 D. Scott Barninger <barninger@fairfieldcomputers.com>
 - minor edit to _dist for SLES9 compatibility
 * Sat Nov 05 2005 D. Scott Barninger <barninger@fairfieldcomputers.com>
index a98955c6930067518c0665a3feb40a517cf26371..c65223bc0907f37be0e01a7552fe7b342ad6a066 100644 (file)
@@ -8,9 +8,15 @@
 %define depkgs_version 22Jun05
 %define sqlite_bindir /usr/lib/bacula/sqlite
 %define working_dir /var/bacula
-%define daemon_user root
+%define director_daemon_user bacula
+%define storage_daemon_user bacula
+%define file_daemon_user root
 %define daemon_group bacula
+# group that has write access to tape devices, usually disk on Linux
+%define device_group disk
+%define user_file /etc/passwd
 %define group_file /etc/group
+%define useradd /usr/sbin/useradd
 %define groupadd /usr/sbin/groupadd
 %define _rescuever 1.8.1
 
@@ -28,7 +34,7 @@
 %define fc3 0
 %{?build_fc3:%define fc3 1}
 %define fc4 0
-%{?build_fc4:%define fc4 1}
+%{?build_fc4:%define fc3 1}
 # Whitebox Enterprise build
 %define wb3 0
 %{?build_wb3:%define wb3 1}
 %{?build_rhel3:%define wb3 1}
 %define rhel4 0
 %{?build_rhel4:%define rhel4 1}
-%{?build_rhel4:%define fc4 1}
+%{?build_rhel4:%define fc3 1}
 # CentOS build
 %define centos4 0
 %{?build_centos4:%define centos4 1}
-%{?build_centos4:%define fc4 1}
+%{?build_centos4:%define fc3 1}
 # SuSE build
 %define su9 0
 %{?build_su9:%define su9 1}
@@ -51,7 +57,7 @@
 %{?build_mdk:%define mdk 1}
 
 # test for a platform definition
-%if ! %{rh7} && ! %{rh8} && ! %{rh9} && ! %{fc1} && ! %{fc3} && ! %{fc4} && ! %{wb3} && ! %{su9} && ! %{mdk}
+%if ! %{rh7} && ! %{rh8} && ! %{rh9} && ! %{fc1} && ! %{fc3} && ! %{wb3} && ! %{su9} && ! %{mdk}
 %{error: You must specify a platform. Please examine the spec file.}
 exit 1
 %endif
@@ -71,11 +77,21 @@ exit 1
 %{?build_postgresql:%define postgresql 1}
 
 # test for a database definition
-%if ! %{mysql} && ! %{sqlite} && ! %{postgresql} && ! %{mysql4}
+%if ! %{mysql} && ! %{sqlite} && ! %{postgresql}
 %{error: You must specify database support. Please examine the spec file.}
 exit 1
 %endif
 
+%if %{mysql}
+%define db_backend mysql
+%endif
+%if %{sqlite}
+%define db_backend sqlite
+%endif
+%if %{postgresql}
+%define db_backend postgresql
+%endif
+
 # 64 bit support
 %define x86_64 0
 %{?build_x86_64:%define x86_64 1}
@@ -90,23 +106,30 @@ exit 1
 %if %{centos4}
 %define _dist %(grep CentOS /etc/redhat-release)
 %endif
-%if %{fc3} || %{fc4} && ! %{rhel4} && ! %{centos4}
+%if %{fc3} && ! %{rhel4} && ! %{centos4}
 %define _dist %(grep Fedora /etc/redhat-release)
 %endif
 %if %{wb3} && ! %{rhel3}
 %define _dist %(grep White /etc/whitebox-release)
 %endif
 %if %{su9}
-%define _dist %(grep -i SuSE /etc/SuSE-release)
+%define _dist %(grep SuSE /etc/SuSE-release)
 %endif
 %if %{mdk}
 %define _dist %(grep Mandrake /etc/mandrake-release)
 %endif
 
+# Should we build gconsole, possible only if gnome >= 2.0 available
+%if %{rh7}
+%define gconsole 0
+%else
+%define gconsole 1
+%endif
+
 Summary: Bacula - The Network Backup Solution
 Name: bacula
 Version: @VERSION@
-Release: 2
+Release: 1
 Group: System Environment/Daemons
 License: GPL v2
 Source0:http://www.prdownloads.sourceforge.net/bacula/%{name}-%{version}.tar.gz
@@ -125,15 +148,11 @@ Packager: D. Scott Barninger <barninger@fairfieldcomputers.com>
 
 BuildRequires: atk-devel, ncurses-devel, pango-devel, perl
 BuildRequires: libstdc++-devel, libxml2-devel, zlib-devel, pkgconfig
+BuildRequires: openssl-devel
 %if %{rh7}
 BuildRequires: libtermcap-devel
-BuildRequires: gtk+-devel >= 1.2
-BuildRequires: gnome-libs-devel >= 1.4
 BuildRequires: glibc-devel >= 2.2
 BuildRequires: ORBit-devel
-BuildRequires: bonobo-devel
-BuildRequires: GConf-devel
-BuildRequires: freetype-devel
 %endif
 %if %{su9}
 BuildRequires: termcap
@@ -165,7 +184,7 @@ BuildRequires: libstdc++-static-devel
 BuildRequires: glibc-static-devel
 BuildRequires: freetype2-devel
 %endif
-%if %{fc3} || %{fc4}
+%if %{fc3}
 BuildRequires: libtermcap-devel
 BuildRequires: gtk2-devel >= 2.4
 BuildRequires: libgnomeui-devel >= 2.8
@@ -178,7 +197,7 @@ BuildRequires: bonobo-activation-devel
 BuildRequires: GConf2-devel
 BuildRequires: freetype-devel
 %endif
-%if ! %{rh7} && ! %{su9} && ! %{mdk} && ! %{fc3} && !%{fc4}
+%if ! %{rh7} && ! %{su9} && ! %{mdk} && ! %{fc3}
 BuildRequires: libtermcap-devel
 BuildRequires: gtk2-devel >= 2.0
 BuildRequires: libgnomeui-devel >= 2.0
@@ -235,7 +254,7 @@ Group: System Environment/Daemons
 Provides: bacula-dir, bacula-sd, bacula-fd, bacula-server
 Conflicts: bacula-client
 Obsoletes: bacula-rescue
-Requires: ncurses, libstdc++, zlib
+Requires: ncurses, libstdc++, zlib, openssl, mtx
 
 %if %{rh7}
 Requires: glibc >= 2.2
@@ -316,12 +335,24 @@ This build requires PostgreSQL to be installed separately as the catalog databas
 This build incorporates sqlite as the catalog database, statically compiled.
 %endif
 
+%package mtx
+Summary: Bacula - The Network Backup Solution
+Group: System Environment/Daemons
+Provides: mtx
+
+%description mtx
+This is Bacula's version of mtx tape utilities for Linux distributions that
+do not provide their own mtx package
+
 %package client
 Summary: Bacula - The Network Backup Solution
 Group: System Environment/Daemons
 Provides: bacula-fd
+Conflicts: bacula-mysql
+Conflicts: bacula-sqlite
+Conflicts: bacula-postgresql
 Obsoletes: bacula-rescue
-Requires: libstdc++, zlib
+Requires: libstdc++, zlib, openssl
 
 %if %{rh7}
 Requires: glibc >= 2.2
@@ -369,21 +400,15 @@ Bacula source code has been released under the GPL version 2 license.
 This package installs scripts for updating older versions of the bacula
 database.
 
+%if %{gconsole}
 %package gconsole
 Summary: Bacula - The Network Backup Solution
 Group: System Environment/Daemons
 Requires: atk, libstdc++, zlib, pango, libxml2, bacula-fd
-
-%if %{rh7}
-Requires: gtk+ >= 1.2
-Requires: gnome-libs >= 1.4
-Requires: glibc >= 2.2
-Requires: ORBit
-Requires: bonobo
-Requires: GConf
-Requires: freetype
+Requires: usermode, openssl
 %endif
-%if %{su9}
+
+%if %{gconsole} && %{su9}
 Requires: gtk2 >= 2.0
 Requires: libgnome >= 2.0
 Requires: libgnomeui >= 2.0
@@ -397,7 +422,7 @@ Requires: gconf2
 Requires: linc
 Requires: freetype2
 %endif
-%if %{mdk}
+%if %{gconsole} && %{mdk}
 Requires: gtk2 >= 2.0
 Requires: libgnomeui2
 Requires: glibc >= 2.3
@@ -408,7 +433,7 @@ Requires: libbonoboui >= 2.0
 Requires: GConf2
 Requires: freetype2
 %endif
-%if %{fc3} || %{fc4}
+%if %{gconsole} && %{fc3}  
 Requires: gtk2 >= 2.4
 Requires: libgnomeui >= 2.8
 Requires: glibc >= 2.3
@@ -420,7 +445,7 @@ Requires: bonobo-activation
 Requires: GConf2
 Requires: freetype
 %endif
-%if ! %{rh7} && ! %{su9} && ! %{mdk} && ! %{fc3} && ! %{fc4}
+%if %{gconsole} && ! %{su9} && ! %{mdk} && ! %{fc3}
 Requires: gtk2 >= 2.0
 Requires: libgnomeui >= 2.0
 Requires: glibc >= 2.3
@@ -433,12 +458,11 @@ Requires: GConf2
 Requires: linc
 Requires: freetype
 %endif
-%if %{su9}
+%if %{gconsole} && %{su9}
 Requires: xsu
-%else
-Requires: usermode
 %endif
 
+%if %{gconsole}
 %description gconsole
 Bacula - It comes by night and sucks the vital essence from your computers.
 
@@ -452,6 +476,7 @@ Bacula source code has been released under the GPL version 2 license.
 
 This is the Gnome Console package. It is an add-on to the client or
 server packages.
+%endif
 
 %prep
 
@@ -510,8 +535,10 @@ export LDFLAGS=-L/usr/lib64/mysql
         --sysconfdir=/etc/bacula \
         --with-scriptdir=/etc/bacula \
         --enable-smartalloc \
+%if %{gconsole}
         --enable-gnome \
-%if ! %{rh7} && ! %{rh8}
+%endif
+%if %{gconsole} && ! %{rh8}
         --enable-tray-monitor \
 %endif
 %if %{mysql}
@@ -526,12 +553,20 @@ export LDFLAGS=-L/usr/lib64/mysql
         --with-working-dir=%{working_dir} \
         --with-pid-dir=/var/run \
         --with-subsys-dir=/var/lock/subsys \
-        --with-dir-user=%{daemon_user} \
+        --with-dir-user=%{director_daemon_user} \
         --with-dir-group=%{daemon_group} \
-        --with-sd-user=%{daemon_user} \
+        --with-sd-user=%{storage_daemon_user} \
         --with-sd-group=%{daemon_group} \
-        --with-fd-user=%{daemon_user} \
-        --with-fd-group=%{daemon_group}
+        --with-fd-user=%{file_daemon_user} \
+        --with-fd-group=%{daemon_group} \
+        --with-dir-password="XXX_REPLACE_WITH_DIRECTOR_PASSWORD_XXX" \
+        --with-fd-password="XXX_REPLACE_WITH_CLIENT_PASSWORD_XXX" \
+        --with-sd-password="XXX_REPLACE_WITH_STORAGE_PASSWORD_XXX" \
+        --with-mon-dir-password="XXX_REPLACE_WITH_DIRECTOR_MONITOR_PASSWORD_XXX" \
+        --with-mon-fd-password="XXX_REPLACE_WITH_CLIENT_MONITOR_PASSWORD_XXX" \
+        --with-mon-sd-password="XXX_REPLACE_WITH_STORAGE_MONITOR_PASSWORD_XXX" \
+        --with-openssl
+
 make
 
 %install
@@ -544,13 +579,11 @@ mkdir -p $RPM_BUILD_ROOT/etc/log.d/conf/logfiles
 mkdir -p $RPM_BUILD_ROOT/etc/log.d/conf/services
 mkdir -p $RPM_BUILD_ROOT/etc/log.d/scripts/services
 mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps
-%if %{rh7}
-mkdir -p $RPM_BUILD_ROOT/usr/share/gnome/apps/System
-%else
+%if %{gconsole}
 mkdir -p $RPM_BUILD_ROOT/usr/share/applications
 %endif
 mkdir -p $RPM_BUILD_ROOT/etc/bacula/updatedb
-%if ! %{su9}
+%if %{gconsole} && ! %{su9}
 mkdir -p $RPM_BUILD_ROOT/etc/pam.d
 mkdir -p $RPM_BUILD_ROOT/etc/security/console.apps
 mkdir -p $RPM_BUILD_ROOT/usr/bin
@@ -610,27 +643,25 @@ cp -p platforms/redhat/bacula-sd $RPM_BUILD_ROOT/etc/init.d/bacula-sd
 chmod 0754 $RPM_BUILD_ROOT/etc/init.d/*
 
 # install the menu stuff
-%if %{su9}
+%if %{gconsole} && %{su9}
 cp -p scripts/bacula.png $RPM_BUILD_ROOT/usr/share/pixmaps/bacula.png
 cp -p scripts/bacula.desktop.gnome2.xsu $RPM_BUILD_ROOT/usr/share/applications/bacula.desktop
 cp -p src/tray-monitor/generic.xpm $RPM_BUILD_ROOT/usr/share/pixmaps/bacula-tray-monitor.xpm
 cp -p scripts/bacula-tray-monitor.desktop $RPM_BUILD_ROOT/usr/share/applications/bacula-tray-monitor.desktop
 %endif
-%if %{rh7}
-cp -p scripts/bacula.png $RPM_BUILD_ROOT/usr/share/pixmaps/bacula.png
-cp -p scripts/bacula.desktop.gnome1.consolehelper $RPM_BUILD_ROOT/usr/share/gnome/apps/System/bacula.desktop
-cp -p scripts/gnome-console.console_apps $RPM_BUILD_ROOT/etc/security/console.apps/gnome-console
-cp -p scripts/gnome-console.pamd $RPM_BUILD_ROOT/etc/pam.d/gnome-console
-ln -sf consolehelper $RPM_BUILD_ROOT/usr/bin/gnome-console
+%if %{rh8} || %{rh9} || %{wb3} || %{fc1} || %{fc3} || %{mdk}
+%define iftrick 1
+%else
+%define iftrick 0
 %endif
-%if %{rh8} || %{rh9} || %{wb3} || %{fc1} || %{fc3} || %{fc4} || %{mdk}
+%if %{gconsole} && %{iftrick}
 cp -p scripts/bacula.png $RPM_BUILD_ROOT/usr/share/pixmaps/bacula.png
 cp -p scripts/bacula.desktop.gnome2.consolehelper $RPM_BUILD_ROOT/usr/share/applications/bacula.desktop
 cp -p scripts/gnome-console.console_apps $RPM_BUILD_ROOT/etc/security/console.apps/gnome-console
 cp -p scripts/gnome-console.pamd $RPM_BUILD_ROOT/etc/pam.d/gnome-console
 ln -sf consolehelper $RPM_BUILD_ROOT/usr/bin/gnome-console
 %endif
-%if ! %{rh7} && ! %{rh8}
+%if %{gconsole} && ! %{rh8}
 cp -p src/tray-monitor/generic.xpm $RPM_BUILD_ROOT/usr/share/pixmaps/bacula-tray-monitor.xpm
 cp -p scripts/bacula-tray-monitor.desktop $RPM_BUILD_ROOT/usr/share/applications/bacula-tray-monitor.desktop
 %endif
@@ -668,7 +699,7 @@ cp -pr %{_rescuesrc}/autoconf $RPM_BUILD_ROOT/etc/bacula/rescue/
 # now clean up permissions that are left broken by the install
 chmod o-r $RPM_BUILD_ROOT/etc/bacula/query.sql
 chmod o-rwx $RPM_BUILD_ROOT/var/bacula
-%if ! %{rh7} && ! %{rh8}
+%if %{gconsole} && ! %{rh8}
 chmod 755 $RPM_BUILD_ROOT/usr/sbin/bacula-tray-monitor
 chmod 644 $RPM_BUILD_ROOT/etc/bacula/tray-monitor.conf
 %endif
@@ -676,54 +707,82 @@ chmod 644 $RPM_BUILD_ROOT/etc/bacula/tray-monitor.conf
 %clean
 [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT"
 
-%if %{mysql}
 
+%if %{mysql}
+# MySQL specific files
 %files mysql
+%defattr(-, root, root)
+%attr(0750, root, %{daemon_group}) /etc/bacula/create_mysql_database
+%attr(0750, root, %{daemon_group}) /etc/bacula/drop_mysql_database
+%attr(0750, root, %{daemon_group}) /etc/bacula/make_mysql_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/drop_mysql_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/update_mysql_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/grant_mysql_privileges
+%attr(0750, root, %{daemon_group}) /etc/bacula/startmysql
+%attr(0750, root, %{daemon_group}) /etc/bacula/stopmysql
+%endif
+
+%if %{sqlite}
+%files sqlite
 %defattr(-,root,root)
+%attr(0750, root, %{daemon_group}) /etc/bacula/create_sqlite_database
+%attr(0750, root, %{daemon_group}) /etc/bacula/drop_sqlite_database
+%attr(0750, root, %{daemon_group}) /etc/bacula/grant_sqlite_privileges
+%attr(0750, root, %{daemon_group}) /etc/bacula/make_sqlite_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/drop_sqlite_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/update_sqlite_tables
+%{sqlite_bindir}/libsqlite.a
+%{sqlite_bindir}/sqlite.h
+%{sqlite_bindir}/sqlite
+%endif
 
-/etc/bacula/bacula
-/etc/bacula/bconsole
-/etc/bacula/create_mysql_database
-/etc/bacula/drop_mysql_database
-/etc/bacula/make_mysql_tables
-/etc/bacula/drop_mysql_tables
-/etc/bacula/update_mysql_tables
-/etc/bacula/grant_mysql_privileges
-/etc/bacula/create_bacula_database
-/etc/bacula/drop_bacula_database
-/etc/bacula/grant_bacula_privileges
-/etc/bacula/make_bacula_tables
-/etc/bacula/drop_bacula_tables
-/etc/bacula/update_bacula_tables
-/etc/bacula/make_catalog_backup
-/etc/bacula/delete_catalog_backup
-/etc/bacula/startmysql
-/etc/bacula/stopmysql
-/etc/bacula/mtx-changer
-/etc/bacula/btraceback.dbx
-/etc/bacula/btraceback.gdb
-#/etc/bacula/dvd-freespace
-#/etc/bacula/dvd-writepart
-/etc/bacula/dvd-handler
-/etc/init.d/bacula-dir
-/etc/init.d/bacula-fd
-/etc/init.d/bacula-sd
-/etc/bacula/rescue
+%if %{postgresql}
+%files postgresql
+%defattr(-,root,root)
+%attr(0750, root, %{daemon_group}) /etc/bacula/create_postgresql_database
+%attr(0750, root, %{daemon_group}) /etc/bacula/drop_postgresql_database
+%attr(0750, root, %{daemon_group}) /etc/bacula/make_postgresql_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/drop_postgresql_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/update_postgresql_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/grant_postgresql_privileges
+%endif
+
+# The rest is DB backend independent
+%attr(0750, root, %{daemon_group}) %dir /etc/bacula
+%attr(0750, root, %{daemon_group}) /etc/bacula/bacula
+%attr(0750, root, %{daemon_group}) /etc/bacula/bconsole
+%attr(0750, root, %{daemon_group}) /etc/bacula/create_bacula_database
+%attr(0750, root, %{daemon_group}) /etc/bacula/drop_bacula_database
+%attr(0750, root, %{daemon_group}) /etc/bacula/grant_bacula_privileges
+%attr(0750, root, %{daemon_group}) /etc/bacula/make_bacula_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/drop_bacula_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/update_bacula_tables
+%attr(0750, root, %{daemon_group}) /etc/bacula/make_catalog_backup
+%attr(0750, root, %{daemon_group}) /etc/bacula/delete_catalog_backup
+%attr(0750, root, %{daemon_group}) /etc/bacula/mtx-changer
+%attr(0640, root, %{daemon_group}) /etc/bacula/btraceback.dbx
+%attr(0640, root, %{daemon_group}) /etc/bacula/btraceback.gdb
+#%attr(0750, root, %{daemon_group}) /etc/bacula/dvd-freespace
+#%attr(0750, root, %{daemon_group}) /etc/bacula/dvd-writepart
+%attr(0750, root, %{daemon_group}) /etc/bacula/dvd-handler
+%attr(0750, root, %{daemon_group}) /etc/init.d/bacula-dir
+%attr(0750, root, %{daemon_group}) /etc/init.d/bacula-fd
+%attr(0750, root, %{daemon_group}) /etc/init.d/bacula-sd
+%attr(0750, root, %{daemon_group}) /etc/bacula/rescue
 
 %doc COPYING ChangeLog ReleaseNotes VERIFYING kernstodo 
 %doc %{_docsrc}/manual/bacula.pdf %{_docsrc}/developers/developers.pdf %{_docsrc}/manual/bacula ../Release_Notes-%{version}-%{release}.txt
-/usr/man/man1/*
 
 /etc/logrotate.d/bacula
 /etc/log.d/scripts/services/bacula
-%config(noreplace) /etc/bacula/bacula-dir.conf
-%config(noreplace) /etc/bacula/bacula-fd.conf
-%config(noreplace) /etc/bacula/bacula-sd.conf
-%config(noreplace) /etc/bacula/bconsole.conf
-%config(noreplace) /etc/log.d/conf/logfiles/bacula.conf
-%config(noreplace) /etc/log.d/conf/services/bacula.conf
-/etc/bacula/query.sql
-%dir %{working_dir}
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/bacula/bacula-dir.conf
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/bacula/bacula-fd.conf
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/bacula/bacula-sd.conf
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/bacula/bconsole.conf
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/log.d/conf/logfiles/bacula.conf
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/log.d/conf/services/bacula.conf
+%attr(0640, root, %{daemon_group}) /etc/bacula/query.sql
+%attr(0770, root, %{daemon_group}) %dir %{working_dir}
 
 /usr/sbin/bacula-dir
 /usr/sbin/bacula-fd
@@ -736,32 +795,81 @@ chmod 644 $RPM_BUILD_ROOT/etc/bacula/tray-monitor.conf
 /usr/sbin/btraceback
 /usr/sbin/bconsole
 /usr/sbin/dbcheck
-/usr/sbin/loaderinfo
-/usr/sbin/mtx
-/usr/sbin/scsitape
 /usr/sbin/bsmtp
-/usr/sbin/tapeinfo
 
+%if %{mysql}
 %pre mysql
 # test for bacula database older than version 8
 # note: this ASSUMES no password has been set for bacula database
 DB_VER=`mysql 2>/dev/null bacula -e 'select * from Version;'|tail -n 1`
+%endif
+
+%if %{sqlite}
+%pre sqlite
+# test for bacula database older than version 8
+if [ -s %{working_dir}/bacula.db ] && [ -s %{sqlite_bindir}/sqlite ];then
+        DB_VER=`echo "select * from Version;" | %{sqlite_bindir}/sqlite 2>/dev/null %{working_dir}/bacula.db | tail -n 1`
+%endif
+
+%if %{postgresql}
+%pre postgresql
+DB_VER=`echo 'select * from Version;' | psql bacula 2>/dev/null | tail -3 | head -1`
+%endif
 
 if [ -n "$DB_VER" ] && [ "$DB_VER" -lt "8" ]; then
         echo "This bacula upgrade will update a bacula database from version 8 to 9."
         echo "You appear to be running database version $DB_VER. You must first update"
         echo "your database to version 8 and then install this upgrade. The alternative"
-        echo "is to use /etc/bacula/drop_mysql_tables to delete all your your current"
+        echo "is to use /etc/bacula/drop_%{db_backend}_tables to delete all your your current"
         echo "catalog information, then do the upgrade. Information on updating a"
         echo "database older than version 8 can be found in the release notes."
         exit 1
 fi
+
+%if %{sqlite}
+fi
+%endif
+
 # check for and copy /etc/bacula/console.conf to bconsole.conf
 if [ -s /etc/bacula/console.conf ];then
         cp -p /etc/bacula/console.conf /etc/bacula/bconsole.conf
 fi
 
+# create the daemon user and group
+HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
+if [ -z "$HAVE_BACULA" ]; then
+        %{groupadd} -r %{daemon_group} > /dev/null 2>&1
+        echo "The group %{daemon_group} has been added to %{group_file}."
+        echo "See the manual chapter \"Running Bacula\" for details."
+fi
+HAVE_BACULA=`grep %{storage_daemon_user} %{user_file} 2>/dev/null`
+if [ -z "$HAVE_BACULA" ]; then
+        %{useradd} -r -c "Bacula" -d %{working_dir} -g %{daemon_group} -G %{device_group} -M -n -s /sbin/nologin %{storage_daemon_user} > /dev/null 2>&1
+        echo "The user %{storage_daemon_user} has been added to %{user_file}."
+        echo "See the manual chapter \"Running Bacula\" for details."
+fi
+HAVE_BACULA=`grep %{director_daemon_user} %{user_file} 2>/dev/null`
+if [ -z "$HAVE_BACULA" ]; then
+        %{useradd} -r -c "Bacula" -d %{working_dir} -g %{daemon_group} -M -n -s /sbin/nologin %{director_daemon_user} > /dev/null 2>&1
+        echo "The user %{director_daemon_user} has been added to %{user_file}."
+        echo "See the manual chapter \"Running Bacula\" for details."
+fi
+HAVE_BACULA=`grep %{file_daemon_user} %{user_file} 2>/dev/null`
+if [ -z "$HAVE_BACULA" ]; then
+        %{useradd} -r -c "Bacula" -d %{working_dir} -g %{daemon_group} -M -n -s /sbin/nologin %{file_daemon_user} > /dev/null 2>&1
+        echo "The user %{file_daemon_user} has been added to %{user_file}."
+        echo "See the manual chapter \"Running Bacula\" for details."
+fi
+
+%if %{mysql}
 %post mysql
+%endif
+%if %{sqlite}
+%post sqlite
+%endif
+%if %{postgresql}
+%post postgresql
+%endif
 
 # add our links
 if [ "$1" -ge 1 ] ; then
@@ -770,6 +878,7 @@ if [ "$1" -ge 1 ] ; then
 /sbin/chkconfig --add bacula-sd
 fi
 
+%if %{mysql}
 # test for an existing database
 # note: this ASSUMES no password has been set for bacula database
 DB_VER=`mysql 2>/dev/null bacula -e 'select * from Version;'|tail -n 1`
@@ -794,133 +903,13 @@ elif [ "$DB_VER" -lt "9" ]; then
         echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2"
 
 fi
-
-# create the daemon group
-HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
-if [ -z $HAVE_BACULA ]; then
-        %{groupadd} -r %{daemon_group} > /dev/null 2>&1
-        echo "The group %{daemon_group} has been added to %{group_file}."
-        echo "See the manual chapter Running Bacula for details."
-fi
-
-%preun mysql
-# delete our links
-if [ $1 = 0 ]; then
-/sbin/chkconfig --del bacula-dir
-/sbin/chkconfig --del bacula-fd
-/sbin/chkconfig --del bacula-sd
-fi
-
 %endif
 
 %if %{sqlite}
-
-%files sqlite
-%defattr(-,root,root)
-
-/etc/bacula/bacula
-/etc/bacula/bconsole
-/etc/bacula/create_bacula_database
-/etc/bacula/drop_bacula_database
-/etc/bacula/grant_bacula_privileges
-/etc/bacula/make_bacula_tables
-/etc/bacula/drop_bacula_tables
-/etc/bacula/update_bacula_tables
-/etc/bacula/create_sqlite_database
-/etc/bacula/drop_sqlite_database
-/etc/bacula/grant_sqlite_privileges
-/etc/bacula/make_sqlite_tables
-/etc/bacula/drop_sqlite_tables
-/etc/bacula/update_sqlite_tables
-/etc/bacula/make_catalog_backup
-/etc/bacula/delete_catalog_backup
-/etc/bacula/mtx-changer
-/etc/bacula/btraceback.dbx
-/etc/bacula/btraceback.gdb
-#/etc/bacula/dvd-freespace
-#/etc/bacula/dvd-writepart
-/etc/bacula/dvd-handler
-/etc/init.d/bacula-dir
-/etc/init.d/bacula-fd
-/etc/init.d/bacula-sd
-/etc/bacula/rescue
-
-%doc COPYING ChangeLog ReleaseNotes VERIFYING kernstodo 
-%doc %{_docsrc}/manual/bacula.pdf %{_docsrc}/developers/developers.pdf %{_docsrc}/manual/bacula ../Release_Notes-%{version}-%{release}.txt
-/usr/man/man1/*
-
-/etc/logrotate.d/bacula
-/etc/log.d/scripts/services/bacula
-%config(noreplace) /etc/bacula/bacula-dir.conf
-%config(noreplace) /etc/bacula/bacula-fd.conf
-%config(noreplace) /etc/bacula/bacula-sd.conf
-%config(noreplace) /etc/bacula/bconsole.conf
-%config(noreplace) /etc/log.d/conf/logfiles/bacula.conf
-%config(noreplace) /etc/log.d/conf/services/bacula.conf
-/etc/bacula/query.sql
-%{sqlite_bindir}/libsqlite.a
-%{sqlite_bindir}/sqlite.h
-%dir %{working_dir}
-
-/usr/sbin/bacula-dir
-/usr/sbin/bacula-fd
-/usr/sbin/bacula-sd
-/usr/sbin/bcopy
-/usr/sbin/bextract
-/usr/sbin/bls
-/usr/sbin/bscan
-/usr/sbin/btape
-/usr/sbin/btraceback
-/usr/sbin/bconsole
-/usr/sbin/dbcheck
-/usr/sbin/loaderinfo
-/usr/sbin/mtx
-/usr/sbin/scsitape
-/usr/sbin/bsmtp
-/usr/sbin/tapeinfo
-%{sqlite_bindir}/sqlite
-
-
-%pre sqlite
-# test for bacula database older than version 8
-if [ -s %{working_dir}/bacula.db ] && [ -s %{sqlite_bindir}/sqlite ];then
-        DB_VER=`echo "select * from Version;" | %{sqlite_bindir}/sqlite 2>/dev/null %{working_dir}/bacula.db | tail -n 1`
-        if [ -n "$DB_VER" ] && [ "$DB_VER" -lt "8" ]; then
-                echo "This bacula upgrade will update a bacula database from version 8 to 9."
-                echo "You appear to be running database version $DB_VER. You must first update"
-                echo "your database to version 8 and then install this upgrade. The alternative"
-                echo "is to use /etc/bacula/drop_sqlite_tables to delete all your your current"
-                echo "catalog information, then do the upgrade. Information on updating a"
-                echo "database older than version 8 can be found in the release notes."
-                exit 1
-        fi
-fi
-# check for and copy /etc/bacula/console.conf to bconsole.conf
-if [ -s /etc/bacula/console.conf ];then
-        cp -p /etc/bacula/console.conf /etc/bacula/bconsole.conf
-fi
-
-%post sqlite
-# add our links
-if [ "$1" -ge 1 ] ; then
-/sbin/chkconfig --add bacula-dir
-/sbin/chkconfig --add bacula-fd
-/sbin/chkconfig --add bacula-sd
-fi
-
 # test for an existing database
 if [ -s %{working_dir}/bacula.db ]; then
         DB_VER=`echo "select * from Version;" | %{sqlite_bindir}/sqlite 2>/dev/null %{working_dir}/bacula.db | tail -n 1`
         # check to see if we need to upgrade a 1.36 or lower database
-        if [ "$DB_VER" -lt "8" ]; then
-                echo "This bacula upgrade requires a database update to version 9. You appear to"
-                echo "be running database version $DB_VER. You must update your database using the"
-                echo "upgrade scripts in the bacula-updatedb package. The alternative"
-                echo "is to use /etc/bacula/drop_sqlite_tables to delete all your your current"
-                echo "catalog information, then /etc/bacula/make_sqlite_tables. Information on updating a"
-                echo "database older than version 8 can be found in the release notes."
-        fi      
-        
         if [ "$DB_VER" -lt "9" ] && [ "$DB_VER" -ge "8" ]; then
                 echo "This release requires an upgrade to your bacula database."
                 echo "Backing up your current database..."
@@ -937,112 +926,9 @@ else
         echo "Creating the SQLite tables..."
         /etc/bacula/make_sqlite_tables
 fi
-
-# create the daemon group
-HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
-if [ -z $HAVE_BACULA ]; then
-        %{groupadd} -r %{daemon_group} > /dev/null 2>&1
-        echo "The group %{daemon_group} has been added to %{group_file}."
-        echo "See the manual chapter Running Bacula for details."
-fi
-
-%preun sqlite
-# delete our links
-if [ $1 = 0 ]; then
-/sbin/chkconfig --del bacula-dir
-/sbin/chkconfig --del bacula-fd
-/sbin/chkconfig --del bacula-sd
-fi
-
 %endif
 
 %if %{postgresql}
-
-%files postgresql
-%defattr(-,root,root)
-
-/etc/bacula/bacula
-/etc/bacula/bconsole
-/etc/bacula/create_postgresql_database
-/etc/bacula/drop_postgresql_database
-/etc/bacula/make_postgresql_tables
-/etc/bacula/drop_postgresql_tables
-/etc/bacula/update_postgresql_tables
-/etc/bacula/grant_postgresql_privileges
-/etc/bacula/create_bacula_database
-/etc/bacula/drop_bacula_database
-/etc/bacula/grant_bacula_privileges
-/etc/bacula/make_bacula_tables
-/etc/bacula/drop_bacula_tables
-/etc/bacula/update_bacula_tables
-/etc/bacula/make_catalog_backup
-/etc/bacula/delete_catalog_backup
-/etc/bacula/mtx-changer
-/etc/bacula/btraceback.dbx
-/etc/bacula/btraceback.gdb
-#/etc/bacula/dvd-freespace
-#/etc/bacula/dvd-writepart
-/etc/bacula/dvd-handler
-/etc/init.d/bacula-dir
-/etc/init.d/bacula-fd
-/etc/init.d/bacula-sd
-/etc/bacula/rescue
-
-%doc COPYING ChangeLog ReleaseNotes VERIFYING kernstodo 
-%doc %{_docsrc}/manual/bacula.pdf %{_docsrc}/developers/developers.pdf %{_docsrc}/manual/bacula ../Release_Notes-%{version}-%{release}.txt
-/usr/man/man1/*
-
-/etc/logrotate.d/bacula
-/etc/log.d/scripts/services/bacula
-%config(noreplace) /etc/bacula/bacula-dir.conf
-%config(noreplace) /etc/bacula/bacula-fd.conf
-%config(noreplace) /etc/bacula/bacula-sd.conf
-%config(noreplace) /etc/bacula/bconsole.conf
-%config(noreplace) /etc/log.d/conf/logfiles/bacula.conf
-%config(noreplace) /etc/log.d/conf/services/bacula.conf
-/etc/bacula/query.sql
-%dir %{working_dir}
-
-/usr/sbin/bacula-dir
-/usr/sbin/bacula-fd
-/usr/sbin/bacula-sd
-/usr/sbin/bcopy
-/usr/sbin/bextract
-/usr/sbin/bls
-/usr/sbin/bscan
-/usr/sbin/btape
-/usr/sbin/btraceback
-/usr/sbin/bconsole
-/usr/sbin/dbcheck
-/usr/sbin/loaderinfo
-/usr/sbin/mtx
-/usr/sbin/scsitape
-/usr/sbin/bsmtp
-/usr/sbin/tapeinfo
-
-%pre postgresql
-# test for bacula database older than version 8
-# note: this ASSUMES no password has been set for bacula database
-DB_VER=`echo 'select * from Version;' | psql bacula 2>/dev/null | tail -3 | head -1`
-
-if [ -n "$DB_VER" ] && [ "$DB_VER" -lt "8" ]; then
-        echo "This bacula upgrade will update a bacula database from version 8 to 9."
-        echo "You appear to be running database version $DB_VER. You must first update"
-        echo "your database to version 8 and then install this upgrade. The alternative"
-        echo "is to use /etc/bacula/drop_postgresql_tables to delete all your your current"
-        echo "catalog information, then do the upgrade. Information on updating a"
-        echo "database older than version 8 can be found in the release notes."
-        exit 1
-fi
-
-%post postgresql
-# add our links
-if [ "$1" -ge 1 ] ; then
-/sbin/chkconfig --add bacula-dir
-/sbin/chkconfig --add bacula-fd
-/sbin/chkconfig --add bacula-sd
-fi
-
 # test for an existing database
 # note: this ASSUMES no password has been set for bacula database
 DB_VER=`echo 'select * from Version;' | psql bacula 2>/dev/null | tail -3 | head -1`
@@ -1067,17 +953,33 @@ elif [ "$DB_VER" -lt "9" ]; then
         echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2"
         
 fi
+%endif
 
-# create the daemon group
-HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
-if [ -z $HAVE_BACULA ]; then
-        %{groupadd} -r %{daemon_group} > /dev/null 2>&1
-        echo "The group %{daemon_group} has been added to %{groupfile}."
-        echo "See the manual chapter Running Bacula for details."
+# generate passwords if needed
+if [ -d /etc/bacula ]; then
+        cd /etc/bacula
+        for file in *.conf; do
+                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
+                        need_password=`grep $string $file 2>/dev/null`
+                        if [ -n "$need_password" ]; then
+                                pass=`openssl rand -base64 33`
+                                sed "s-$string-$pass-g" $file > $file.new
+                                cp -f $file.new $file; rm -f $file.new
+                        fi
+                done
+        done
 fi
-        
 
+%if %{mysql}
+%preun mysql
+%endif
+%if %{sqlite}
+%preun sqlite
+%endif
+%if %{postgresql}
 %preun postgresql
+%endif
+
 # delete our links
 if [ $1 = 0 ]; then
 /sbin/chkconfig --del bacula-dir
@@ -1085,44 +987,73 @@ if [ $1 = 0 ]; then
 /sbin/chkconfig --del bacula-sd
 fi
 
-%endif
+
+%files mtx
+/usr/sbin/loaderinfo
+/usr/sbin/mtx
+/usr/sbin/scsitape
+/usr/sbin/tapeinfo
+/usr/man/man1/*
+
 
 %files client
 %defattr(-,root,root)
-
-/etc/bacula/bconsole
+%attr(0750, root, %{daemon_group}) %dir /etc/bacula
+%attr(0750, root, %{daemon_group}) /etc/bacula/bconsole
 /etc/init.d/bacula-fd
-/etc/bacula/rescue
+%attr(0750, root, %{daemon_group}) /etc/bacula/rescue
 
 %doc COPYING ChangeLog ReleaseNotes VERIFYING kernstodo 
 %doc %{_docsrc}/manual/bacula.pdf %{_docsrc}/developers/developers.pdf %{_docsrc}/manual/bacula ../Release_Notes-%{version}-%{release}.txt
 
 /etc/logrotate.d/bacula
 
-%config(noreplace) /etc/bacula/bacula-fd.conf
-%config(noreplace) /etc/bacula/bconsole.conf
-%dir %{working_dir}
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/bacula/bacula-fd.conf
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/bacula/bconsole.conf
+%attr(0770, root, %{daemon_group}) %dir %{working_dir}
 
 /usr/sbin/bacula-fd
 /usr/sbin/btraceback
-/etc/bacula/btraceback.gdb
-/etc/bacula/btraceback.dbx
+%attr(0640, root, %{daemon_group}) /etc/bacula/btraceback.gdb
+%attr(0640, root, %{daemon_group}) /etc/bacula/btraceback.dbx
 /usr/sbin/bsmtp
 /usr/sbin/bconsole
 
 
+%pre client
+# create the daemon group and user
+HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
+if [ -z "$HAVE_BACULA" ]; then
+        %{groupadd} -r %{daemon_group} > /dev/null 2>&1
+        echo "The group %{daemon_group} has been added to %{group_file}."
+        echo "See the manual chapter \"Running Bacula\" for details."
+fi
+HAVE_BACULA=`grep %{file_daemon_user} %{user_file} 2>/dev/null`
+if [ -z "$HAVE_BACULA" ]; then
+        %{useradd} -r -c "Bacula" -d %{working_dir} -g %{daemon_group} -M -n -s /sbin/nologin %{file_daemon_user} > /dev/null 2>&1
+        echo "The user %{file_daemon_user} has been added to %{user_file}."
+        echo "See the manual chapter \"Running Bacula\" for details."
+fi
+
 %post client
 # add our link
 if [ "$1" -ge 1 ] ; then
 /sbin/chkconfig --add bacula-fd
 fi
 
-# create the daemon group
-HAVE_BACULA=`cat %{group_file} | grep %{daemon_group} 2>/dev/null`
-if [ -z $HAVE_BACULA ]; then
-        %{groupadd} -r %{daemon_group} > /dev/null 2>&1
-        echo "The group %{daemon_group} has been added to %{group_file}."
-        echo "See the manual chapter Running Bacula for details."
+# generate passwords if needed
+if [ -d /etc/bacula ]; then
+        cd /etc/bacula
+        for file in *.conf; do
+                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
+                        need_password=`grep $string $file 2>/dev/null`
+                        if [ -n "$need_password" ]; then
+                                pass=`openssl rand -base64 33`
+                                sed "s-$string-$pass-g" $file > $file.new
+                                cp -f $file.new $file; rm -f $file.new
+                        fi
+                done
+        done
 fi
 
 %preun client
@@ -1132,41 +1063,86 @@ if [ $1 = 0 ]; then
 fi
 
 %files updatedb
-%defattr(-,root,root)
+%defattr(-,root,%{daemon_group})
 /etc/bacula/updatedb/*
 
+%pre updatedb
+# create the daemon group
+HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
+if [ -z "$HAVE_BACULA" ]; then
+        %{groupadd} -r %{daemon_group} > /dev/null 2>&1
+        echo "The group %{daemon_group} has been added to %{group_file}."
+        echo "See the manual chapter \"Running Bacula\" for details."
+fi
+
 %post updatedb
 echo "The database update scripts were installed to /etc/bacula/updatedb"
 
+%if %{gconsole}
 %files gconsole
 %defattr(-,root,root)
 /usr/sbin/gnome-console
-/etc/bacula/gconsole
-%config(noreplace) /etc/bacula/gnome-console.conf
+%attr(0750, root, %{daemon_group}) %dir /etc/bacula
+%attr(075, root, %{daemon_group}) /etc/bacula/gconsole
+%attr(0640, root, %{daemon_group}) %config(noreplace) /etc/bacula/gnome-console.conf
 /usr/share/pixmaps/bacula.png
+%endif
 
-%if %{rh7}
-/usr/share/gnome/apps/System/bacula.desktop
-%else
+%if %{gconsole}
 /usr/share/applications/bacula.desktop
 %endif
 
-%if ! %{rh7} && ! %{rh8}
+%if %{gconsole} && ! %{rh8}
 /usr/sbin/bacula-tray-monitor
 %config(noreplace) /etc/bacula/tray-monitor.conf
 /usr/share/pixmaps/bacula-tray-monitor.xpm
 /usr/share/applications/bacula-tray-monitor.desktop
 %endif
 
-%if ! %{su9} 
+%if %{gconsole} && ! %{su9}
 # add the console helper files
 %config(noreplace,missingok) /etc/pam.d/gnome-console
 %config(noreplace,missingok) /etc/security/console.apps/gnome-console
 /usr/bin/gnome-console
 %endif
 
+%if %{gconsole}
+%pre gconsole
+# create the daemon group
+HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
+if [ -z "$HAVE_BACULA" ]; then
+        %{groupadd} -r %{daemon_group} > /dev/null 2>&1
+        echo "The group %{daemon_group} has been added to %{group_file}."
+        echo "See the manual chapter \"Running Bacula\" for details."
+fi
+
+%post gconsole
+# generate passwords if needed
+if [ -d /etc/bacula ]; then
+        cd /etc/bacula
+        for file in *.conf; do
+                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
+                        need_password=`grep $string $file 2>/dev/null`
+                        if [ -n "$need_password" ]; then
+                                pass=`openssl rand -base64 33`
+                                sed "s-$string-$pass-g" $file > $file.new
+                                cp -f $file.new $file; rm -f $file.new
+                        fi
+                done
+        done
+fi
+%endif
 
 %changelog
+* Wed Dec 14 2005 Aleksandar Milivojevic <alex@milivojevic.org>
+- 1.38.2 release
+- Reorganize files and pre/post sections to remove repetitions
+- Always build separate mtx package
+- Fix file ownerships for /etc/bacula and Bacula's working dir
+* Wed Nov 23 2005 Aleksandar Milivojevic <alex@milivojevic.org>
+- Disable GNOME on RH7
+* Fri Nov 18 2005 Aleksandar Milivojevic <alex@milivojevic.org>
+- Red Hat and look alikes have mtx RPM, do not build/package our version
 * Sun Nov 13 2005 D. Scott Barninger <barninger@fairfieldcomputers.com>
 - minor edit to _dist for SLES9 compatibility
 * Sat Nov 05 2005 D. Scott Barninger <barninger@fairfieldcomputers.com>
index 312a3b65019db9aa23d49ea3699c5c41c8a0e9fe..f4baa75f6816bf207ca96268ec15794091b886fb 100644 (file)
@@ -102,6 +102,12 @@ Item  3:  Accurate restoration of renamed/deleted files from
           but one additional database record must be written, which does 
           not need any database change.
 
+          Kern: see if we can correct restoration of directories if
+          replace=ifnewer is set.  Currently, if the directory does not
+          exist, a "dummy" directory is created, then when all the files
+          are updated, the dummy directory is newer so the real values
+          are not updated.
+
 Item 4:   Implement a Bacula GUI/management tool using Python.
   Origin: Kern
   Date:   28 October 2005
index e1139b5c1b45e50e5437fbd6507996163786e475..749b7ac782a537e0387a0751410a0cc105421d07 100644 (file)
 /*
  * Default network buffer size
  */
-#define DEFAULT_NETWORK_BUFFER_SIZE (32 * 1024)
+#define DEFAULT_NETWORK_BUFFER_SIZE (64 * 1024)
 
 /*
  * Stream definitions.  Once defined these must NEVER
index 147fdaba5449ffac99ae4565b5d25f530c720191..3a9dfe14aa8ef21b02ecc9c342c0e4d6e67a597e 100755 (executable)
@@ -1085,7 +1085,7 @@ t_send(const char *msg)
 void
 t_char(char c)
 {
-   write(1, &c, 1);
+   (void)write(1, &c, 1);
 }
 
 
index d4810b710a157ffa47cd72ccdc06a195b52d2210..b5d5990b05cb3a2616d4ef26e7cdb9900f85f52b 100755 (executable)
@@ -612,16 +612,16 @@ void dispatch_message(JCR *jcr, int type, time_t mtime, char *msg)
                    Pw(con_lock);      /* get write lock on console message file */
                    errno = 0;
                    if (dtlen) {
-                      fwrite(dt, dtlen, 1, con_fd);
+                      (void)fwrite(dt, dtlen, 1, con_fd);
                    }
                    len = strlen(msg);
                    if (len > 0) {
-                      fwrite(msg, len, 1, con_fd);
+                      (void)fwrite(msg, len, 1, con_fd);
                       if (msg[len-1] != '\n') {
-                         fwrite("\n", 2, 1, con_fd);
+                         (void)fwrite("\n", 2, 1, con_fd);
                       }
                    } else {
-                      fwrite("\n", 2, 1, con_fd);
+                      (void)fwrite("\n", 2, 1, con_fd);
                    }
                    fflush(con_fd);
                    console_msg_pending = TRUE;
index 35cbb4a7e3ed531a96bd1a996bc2fcb9fbaff5d0..cd91f7bed4c7ee160fcb8f0558a77617826fc825 100644 (file)
@@ -460,7 +460,7 @@ void make_session_key(char *key, char *seed, int mode)
 
      sprintf(s + strlen(s), "%lu", (unsigned long)getpid());
      sprintf(s + strlen(s), "%lu", (unsigned long)getppid());
-     getcwd(s + strlen(s), 256);
+     (void)getcwd(s + strlen(s), 256);
      sprintf(s + strlen(s), "%lu", (unsigned long)clock());
      sprintf(s + strlen(s), "%lu", (unsigned long)time(NULL));
 #ifdef Solaris
index 805aa2e871e1682c20fab0ea6f08a50b256b2633..a1ad4c1fdd40f7bfcd9d316bbbcd0d3385127eaf 100644 (file)
@@ -428,8 +428,12 @@ bool autochanger_cmd(DCR *dcr, BSOCK *dir, const char *cmd)
    }
    if (strcmp(cmd, "drives") == 0) {
       AUTOCHANGER *changer_res = dcr->device->changer_res;
-      bnet_fsend(dir, "drives=%d\n", changer_res->device->size());
-      Dmsg1(100, "drives=%d\n", changer_res->device->size());
+      int drives = 1;
+      if (changer_res) {
+         drives = changer_res->device->size();
+      }
+      bnet_fsend(dir, "drives=%d\n", drives);
+      Dmsg1(100, "drives=%d\n", drives);
       return true;
    }
 
index 251f4488879975394ccfa390a84dd634770b7a7e..7d745662d9ced46ba949605ac8fca052fdb58861 100644 (file)
@@ -2119,11 +2119,13 @@ static void do_unfill()
     * Note, re-reading last block may have caused us to
     *   loose track of where we are (block number unknown).
     */
+   Pmsg0(-1, _("Rewinding.\n"));
    if (!rewind_dev(dev)) {                /* get to a known place on tape */
       goto bail_out;
    }
    /* Read the first 10000 records */
-   Pmsg0(-1, _("Reading the first 10000 records.\n"));
+   Pmsg2(-1, _("Reading the first 10000 records from %u:%u.\n"),
+      dev->file, dev->block_num);
    quickie_count = 0;
    read_records(dcr, quickie_cb, my_mount_next_read_volume);
    Pmsg4(-1, _("Reposition from %u:%u to %u:%u\n"), dev->file, dev->block_num,
@@ -2218,14 +2220,9 @@ bail_out:
 static bool quickie_cb(DCR *dcr, DEV_RECORD *rec)
 {
    DEVICE *dev = dcr->dev;
-   if (dev->file != 0) {
-      Pmsg3(-1, _("ERROR! device at %d:%d count=%d\n"), dev->file, dev->block_num,
-         quickie_count);
-      return false;
-   }
    quickie_count++;
    if (quickie_count == 10000) {
-      Pmsg2(-1, _("1000 records read now at %d:%d\n"), dev->file, dev->block_num);
+      Pmsg2(-1, _("10000 records read now at %d:%d\n"), dev->file, dev->block_num);
    }
    return quickie_count < 10000;
 }
index 30a54538b29a6e18f13aafc79dd05f2b826300cb..86dbca7dd2138d2b6eeead78283959d05c6800ab 100644 (file)
@@ -328,10 +328,9 @@ void DEVICE::set_mode(int new_mode)
  */
 void DEVICE::open_tape_device(DCR *dcr, int omode) 
 {
-   int nonblocking = 0;
    file_size = 0;
    int timeout;
-   int ioerrcnt = 10;
+   int nonblocking = O_NONBLOCK;
    Dmsg0(29, "open dev: device is tape\n");
 
    if (is_tape() && is_autochanger()) {
@@ -341,14 +340,6 @@ void DEVICE::open_tape_device(DCR *dcr, int omode)
    set_mode(omode);
    timeout = max_open_wait;
    errno = 0;
-#ifdef HAVE_LINUX_OS
-   if (open_nowait) {
-       /* Set wait counters to zero for no wait */
-       timeout = ioerrcnt = 0;
-       /* Open drive in non-block mode */
-       nonblocking = O_NONBLOCK;
-   }
-#endif
    if (is_fifo() && timeout) {
       /* Set open timer */
       tid = start_thread_timer(pthread_self(), timeout);
@@ -357,7 +348,7 @@ void DEVICE::open_tape_device(DCR *dcr, int omode)
    Dmsg3(100, "Try open %s mode=%s nonblocking=%d\n", print_name(),
       mode_to_str(omode), nonblocking);
    /* Use system open() */
-   while ((fd = ::open(dev_name, mode+nonblocking, MODE_RW)) < 0) {
+   while ((fd = ::open(dev_name, mode+nonblocking)) < 0) {
       berrno be;
       dev_errno = errno;
       Dmsg5(050, "Open omode=%d mode=%x nonblock=%d error errno=%d ERR=%s\n", 
@@ -372,12 +363,6 @@ void DEVICE::open_tape_device(DCR *dcr, int omode)
          bmicrosleep(1, 0);
          continue;
       }
-      /* IO error (no volume) try 10 times every 6 seconds */
-      if (dev_errno == EIO && ioerrcnt-- > 0) {
-         bmicrosleep(5, 0);
-         Dmsg0(100, "Continue open\n");
-         continue;
-      }
       Mmsg2(errmsg, _("Unable to open device %s: ERR=%s\n"),
             print_name(), be.strerror(dev_errno));
       /* Stop any open timer we set */
@@ -389,12 +374,9 @@ void DEVICE::open_tape_device(DCR *dcr, int omode)
       break;
    }
 
-   if (nonblocking) {
-      set_blocking();
-   }
-
    if (fd >= 0) {
       openmode = omode;              /* save open mode */
+      set_blocking();   
       Dmsg2(100, "openmode=%d %s\n", openmode, mode_to_str(openmode));
       dev_errno = 0;
       set_opened();
@@ -415,13 +397,19 @@ void DEVICE::set_blocking()
 {
    int oflags;
    /* Try to reset blocking */
+#ifdef xxx
    if ((oflags = fcntl(fd, F_GETFL, 0)) < 0 ||
        fcntl(fd, F_SETFL, oflags & ~O_NONBLOCK) < 0) {
       berrno be;
       ::close(fd);                   /* use system close() */
-      fd = ::open(dev_name, mode, MODE_RW);       
+      fd = ::open(dev_name, mode);       
       Dmsg2(100, "fcntl error. ERR=%s. Close-reopen fd=%d\n", be.strerror(), fd);
    }
+#endif
+   oflags = fcntl(fd, F_GETFL, 0);       
+   if (oflags > 0 && (oflags & O_NONBLOCK)) {
+      fcntl(fd, F_SETFL, oflags & ~O_NONBLOCK);
+   }
 }
 
 /*
index 71c9bb959c55145ad78aecfd609c33b7874a03f1..6d7f826abcac66c9ee74a85f61405b8b93081921 100644 (file)
@@ -273,11 +273,11 @@ static bool cancel_cmd(JCR *cjcr)
          }
          /* If thread waiting on mount, wake him */
          if (jcr->dcr && jcr->dcr->dev && jcr->dcr->dev->waiting_for_mount()) {
-             pthread_cond_signal(&jcr->dcr->dev->wait_next_vol);
+             pthread_cond_broadcast(&jcr->dcr->dev->wait_next_vol);
              pthread_cond_broadcast(&wait_device_release);
          }
          if (jcr->read_dcr && jcr->read_dcr->dev && jcr->read_dcr->dev->waiting_for_mount()) {
-             pthread_cond_signal(&jcr->read_dcr->dev->wait_next_vol);
+             pthread_cond_broadcast(&jcr->read_dcr->dev->wait_next_vol);
              pthread_cond_broadcast(&wait_device_release);
          }
          bnet_fsend(dir, _("3000 Job %s marked to be canceled.\n"), jcr->Job);
index 84d40360331e580e1ca67a75bdc65cad5d778d77..eba33ae08c7db5696b366dd3fded18c6170043ed 100644 (file)
@@ -425,7 +425,13 @@ static bool use_storage_cmd(JCR *jcr)
       if ((ok = find_suitable_device_for_job(jcr, rctx))) {
          goto done;
       }
+      /* Look for any mounted drive */
+      rctx.exact_match = false;
+      if ((ok = find_suitable_device_for_job(jcr, rctx))) {
+         goto done;
+      }
       /* Wait for any drive anywhere */
+      rctx.PreferMountedVols = false;
       rctx.exact_match = false;
       rctx.do_not_wait = false;
       if ((ok = find_suitable_device_for_job(jcr, rctx))) {
@@ -784,19 +790,19 @@ static int can_reserve_drive(DCR *dcr, RCTX &rctx)
       Dmsg1(100, "!prefMnt && busy. JobId=%d\n", jcr->JobId);
       return 0;
    }
-   Dmsg3(100, "prefmnt=%d busy=%d res=%d\n", rctx.PreferMountedVols, 
+   Dmsg3(100, "can_reserve_drive: prefmnt=%d busy=%d res=%d\n", rctx.PreferMountedVols, 
       dev->is_busy(), dev->reserved_device);
 
    /* Check for prefer mounted volumes */
    if (rctx.PreferMountedVols && !dev->VolHdr.VolumeName[0] && dev->is_tape()) {
-      Dmsg1(100, "want mounted -- no vol JobId=%d\n", jcr->JobId);
+      Dmsg1(100, "failed: want mounted -- no vol JobId=%d\n", jcr->JobId);
       return 0;                 /* No volume mounted */
    }
 
    /* Check for exact Volume name match */
    if (rctx.exact_match && rctx.have_volume &&
        strcmp(dev->VolHdr.VolumeName, rctx.VolumeName) != 0) {
-      Dmsg2(100, "Not exact match have=%s want=%s\n",
+      Dmsg2(100, "failed: Not exact match have=%s want=%s\n",
             dev->VolHdr.VolumeName, rctx.VolumeName);
       return 0;
    }
@@ -805,7 +811,7 @@ static int can_reserve_drive(DCR *dcr, RCTX &rctx)
    if (rctx.available_autochanger && dev->num_writers == 0 &&
        dev->VolHdr.VolumeName[0] == 0) {
       /* Device is available but not yet reserved, reserve it for us */
-      Dmsg2(100, "Res Unused autochanger %s JobId=%d.\n",
+      Dmsg2(100, "OK Res Unused autochanger %s JobId=%d.\n",
          dev->print_name(), jcr->JobId);
       bstrncpy(dev->pool_name, dcr->pool_name, sizeof(dev->pool_name));
       bstrncpy(dev->pool_type, dcr->pool_type, sizeof(dev->pool_type));
@@ -822,12 +828,12 @@ static int can_reserve_drive(DCR *dcr, RCTX &rctx)
          if (strcmp(dev->pool_name, dcr->pool_name) == 0 &&
              strcmp(dev->pool_type, dcr->pool_type) == 0) {
             /* OK, compatible device */
-            Dmsg2(100, "got dev: %s num_writers=0, reserved, pool matches JobId=%d\n",
+            Dmsg2(100, "OK got dev: %s num_writers=0, reserved, pool matches JobId=%d\n",
                dev->print_name(), jcr->JobId);
             return 1;
          } else {
             /* Drive not suitable for us */
-            Dmsg2(100, "busy: num_writers=0, reserved, pool=%s wanted=%s\n",
+            Dmsg2(100, "failed: busy num_writers=0, reserved, pool=%s wanted=%s\n",
                dev->pool_name, dcr->pool_name);
             return 0;                 /* wait */
          }
@@ -835,7 +841,7 @@ static int can_reserve_drive(DCR *dcr, RCTX &rctx)
          /* Device in append mode, check if changing pool */
          if (strcmp(dev->pool_name, dcr->pool_name) == 0 &&
              strcmp(dev->pool_type, dcr->pool_type) == 0) {
-            Dmsg2(100, "got dev: %s num_writers=0, can_append, pool matches. JobId=%d\n",
+            Dmsg2(100, "OK got dev: %s num_writers=0, can_append, pool matches. JobId=%d\n",
                dev->print_name(), jcr->JobId);
             /* OK, compatible device */
             return 1;
@@ -846,7 +852,7 @@ static int can_reserve_drive(DCR *dcr, RCTX &rctx)
          }
       }
       /* Device is available but not yet reserved, reserve it for us */
-      Dmsg2(100, "Dev avail reserved %s JobId=%d\n", dev->print_name(),
+      Dmsg2(100, "OK Dev avail reserved %s JobId=%d\n", dev->print_name(),
          jcr->JobId);
       bstrncpy(dev->pool_name, dcr->pool_name, sizeof(dev->pool_name));
       bstrncpy(dev->pool_type, dcr->pool_type, sizeof(dev->pool_type));
@@ -861,13 +867,13 @@ static int can_reserve_drive(DCR *dcr, RCTX &rctx)
       /* Yes, now check if we want the same Pool and pool type */
       if (strcmp(dev->pool_name, dcr->pool_name) == 0 &&
           strcmp(dev->pool_type, dcr->pool_type) == 0) {
-         Dmsg2(100, "got dev: %s num_writers>=0, can_append, pool matches. JobId=%d\n",
+         Dmsg2(100, "OK got dev: %s num_writers>=0, can_append, pool matches. JobId=%d\n",
             dev->print_name(), jcr->JobId);
          /* OK, compatible device */
          return 1;
       } else {
          /* Drive not suitable for us */
-         Dmsg2(100, "busy: num_writers>0, can_append, pool=%s wanted=%s\n",
+         Dmsg2(100, "failed: busy num_writers>0, can_append, pool=%s wanted=%s\n",
             dev->pool_name, dcr->pool_name);
          return 0;                    /* wait */
       }
@@ -876,6 +882,6 @@ static int can_reserve_drive(DCR *dcr, RCTX &rctx)
       Jmsg0(jcr, M_FATAL, 0, _("Logic error!!!! Should not get here.\n"));
       return -1;                      /* error, should not get here */
    }
-   Dmsg2(100, "No reserve %s JobId=%d\n", dev->print_name(), jcr->JobId);
+   Dmsg2(100, "failed: No reserve %s JobId=%d\n", dev->print_name(), jcr->JobId);
    return 0;
 }
index 39aad6a97de7ef342412b21d4b1de75177c63357..b08e80f46e562c0e6ea9bf002096e17813b3406c 100644 (file)
@@ -26,7 +26,7 @@
 #include "bacula.h"                   /* pull in global headers */
 #include "stored.h"                   /* pull in Storage Deamon headers */
 
-static bool double_jcr_wait_time(JCR *jcr);
+//static bool double_jcr_wait_time(JCR *jcr);
 
 
 /*
@@ -166,10 +166,8 @@ bool wait_for_device(JCR *jcr, bool first)
    struct timeval tv;
    struct timezone tz;
    struct timespec timeout;
-// time_t last_heartbeat = 0;
    int stat = 0;
-   int add_wait;
-   bool ok = false;
+   bool ok = true;
 
    Dmsg0(100, "Enter wait_for_device\n");
    P(device_release_mutex);
@@ -178,78 +176,23 @@ bool wait_for_device(JCR *jcr, bool first)
       Jmsg(jcr, M_MOUNT, 0, _("Job %s waiting to reserve a device.\n"), jcr->Job);
    }
 
-   /*
-    * Wait requested time (dev->rem_wait_sec).  However, we also wake up every
-    *    HB_TIME seconds and send a heartbeat to the FD and the Director
-    *    to keep stateful firewalls from closing them down while waiting
-    *    for the operator.
-    */
-   add_wait = jcr->rem_wait_sec;
-   if (me->heartbeat_interval && add_wait > me->heartbeat_interval) {
-      add_wait = me->heartbeat_interval;
-   }
+   gettimeofday(&tv, &tz);
+   timeout.tv_nsec = tv.tv_usec * 1000;
+   timeout.tv_sec = tv.tv_sec + 120;
 
-   for ( ; !job_canceled(jcr); ) {
-      time_t now, start;
+   Dmsg0(100, "I'm going to wait for a device.\n");
 
-      gettimeofday(&tv, &tz);
-      timeout.tv_nsec = tv.tv_usec * 1000;
-      timeout.tv_sec = tv.tv_sec + add_wait;
-
-      Dmsg3(100, "I'm going to wait for a device. HB=%d wait=%d remwait=%d\n", 
-         (int)me->heartbeat_interval, jcr->wait_sec, jcr->rem_wait_sec);
-      start = time(NULL);
-      /* Wait required time */
-      stat = pthread_cond_timedwait(&wait_device_release, &device_release_mutex, &timeout);
-      Dmsg1(100, "Wokeup from sleep on device stat=%d\n", stat);
+   /* Wait required time */
+   stat = pthread_cond_timedwait(&wait_device_release, &device_release_mutex, &timeout);
+   Dmsg1(100, "Wokeup from sleep on device stat=%d\n", stat);
 
-      now = time(NULL);
-      jcr->rem_wait_sec -= (now - start);
-
-/* Not turned on yet */
-#ifdef needed
-      /* Note, this always triggers the first time. We want that. */
-      if (me->heartbeat_interval) {
-         if (now - last_heartbeat >= me->heartbeat_interval) {
-            /* send heartbeats */
-            if (jcr->file_bsock) {
-               bnet_sig(jcr->file_bsock, BNET_HEARTBEAT);
-               Dmsg0(400, "Send heartbeat to FD.\n");
-            }
-            if (jcr->dir_bsock) {
-               bnet_sig(jcr->dir_bsock, BNET_HEARTBEAT);
-            }
-            last_heartbeat = now;
-         }
-      }
-#endif
-
-      if (stat != ETIMEDOUT) {     /* if someone woke us up */
-         ok = true;
-         break;                    /* allow caller to examine device */
-      }
-      if (jcr->rem_wait_sec <= 0) {  /* on exceeding wait time return */
-         Dmsg0(400, "Exceed wait time.\n");
-         if (!double_jcr_wait_time(jcr)) {
-            break;                 /* give up */
-         }
-         Jmsg(jcr, M_MOUNT, 0, _("Job %s waiting to reserve a device.\n"), jcr->Job);
-      }
-
-      add_wait = jcr->wait_sec - (now - start);
-      if (add_wait < 0) {
-         add_wait = 0;
-      }
-      if (me->heartbeat_interval && add_wait > me->heartbeat_interval) {
-         add_wait = me->heartbeat_interval;
-      }
-   }
 
    V(device_release_mutex);
    Dmsg1(100, "Return from wait_device ok=%d\n", ok);
    return ok;
 }
 
+#ifdef xxx
 /*
  * The jcr timers are used for waiting on any device *
  * Returns: true if time doubled
@@ -268,3 +211,4 @@ static bool double_jcr_wait_time(JCR *jcr)
    }
    return true;
 }
+#endif
index 3b10b17bcb86d07eb72f8bcde57e5098990e31fb..05a053421fdc155716486c36b3bcdf00b29eede7 100644 (file)
@@ -3,9 +3,9 @@
  */
 
 #undef  VERSION
-#define VERSION "1.39.2"
-#define BDATE   "13 December 2005"
-#define LSMDATE "13Dec05"
+#define VERSION "1.39.3"
+#define BDATE   "17 December 2005"
+#define LSMDATE "17Dec05"
 
 /* Debug flags */
 #undef  DEBUG