- Bacula Regression
- Kern Sibbald
- December 2003
+ Bacula Regression
+ Kern Sibbald
-This is Bacula's regression script directory. At this time
-(December 2003), it is still in development, so all the tests are
-not complete.
+This is Bacula's regression script directory.
To set it up, create your personal configuration file, by
copying prototype.conf to xxx.conf or simply editing prototype.conf
To avoid re-doing a make setup if you have made a change to the
conf files, and you do not need a new copy of the source, you can simply do:
- scripts/do-sed <your-email-address>
+ make sed
Debugging failed tests:
The simplest thing to do is to edit tests/xxxx where xxxx is the name of
# The device name of your tape drive if you have one
#
TAPE_DRIVE=/dev/nst0
+TAPE_DRIVE1=/dev/null
#
# if you don't have an autochanger set AUTOCHANGER to /dev/null
# This must be the path to the autochanger including its name
#
AUTOCHANGER_PATH=/bin/mtx
+
+# Set your database here
+WHICHDB?="--with-sqlite=${SQLITE_DIR}"
+#WHICHDB="--with-mysql=${HOME}/mysql"
+
+# Set this to "--with-tcp-wrappers" or "--without-tcp-wrappers"
+TCPWRAPPERS="--with-tcp-wrappers"
+
--- /dev/null
+#
+# Default Bacula Director Configuration file
+#
+# The only thing that MUST be changed is to add one or more
+# file or directory names in the Include directive of the
+# FileSet resource.
+#
+# For Bacula release 1.33
+#
+# You might also want to change the default email address
+# from root to your address. See the "mail" and "operator"
+# directives in the Messages resource.
+#
+
+Director { # define myself
+ Name = roxie-dir
+ DIRport = 8101 # where we listen for UA connections
+ QueryFile = "/home/kern/bacula/regress/bin/query.sql"
+ WorkingDirectory = "/home/kern/bacula/regress/working"
+ PidDirectory = "/home/kern/bacula/regress/working"
+ Maximum Concurrent Jobs = 4
+ Password = "pNvX1WiXnwv2C/F7E52LGvw6rKjbbPvu2kyuPa9pVaL3"
+ Messages = Daemon
+}
+
+#
+# Define the main nightly save backup job
+# By default, this job will back up to disk in /tmp
+Job {
+ Name = "NightlySave"
+ Type = Backup
+ Client=Tibs
+ FileSet="Full Set"
+ Storage = DDS-4
+ Messages = Standard
+ Pool = Default
+ Write Bootstrap = "/home/kern/bacula/regress/working/NightlySave.bsr"
+ Maximum Concurrent Jobs = 4
+ SpoolData = yes
+}
+
+
+# Standard Restore template, to be changed by Console program
+Job {
+ Name = "RestoreFiles"
+ Type = Restore
+ Client=Tibs
+ FileSet="Full Set"
+ Storage = DDS-4
+ Messages = Standard
+ Pool = Default
+ Where = /tmp/bacula-restores
+}
+
+
+# List of files to be backed up
+FileSet {
+ Name = "Full Set"
+ Enable VSS = yes
+ Include { Options { signature=MD5 }
+ File = "c:"
+ }
+}
+
+
+#
+# When to do the backups, full backup on first sunday of the month,
+# differential (i.e. incremental since full) every other sunday,
+# and incremental backups other days
+Schedule {
+ Name = "WeeklyCycle"
+ Run = Full 1st sun at 1:05
+ Run = Differential 2nd-5th sun at 1:05
+ Run = Incremental mon-sat at 1:05
+}
+
+# Client (File Services) to backup
+Client {
+ Name = Tibs
+ Address = tibs
+ FDPort = 9102
+ Catalog = MyCatalog
+ Password = "xBzFq+a9llZyGyfMaNO9e3outP86/1AUAT8P34RoT62G"
+ File Retention = 30d # 30 days
+ Job Retention = 180d # six months
+ AutoPrune = yes # Prune expired Jobs/Files
+ Maximum Concurrent Jobs = 4
+}
+
+# Definition of DDS tape storage device
+Storage {
+ Name = DDS-4
+ Address = 192.168.68.112 # N.B. Use a fully qualified name here
+ SDPort = 8103
+ Password = "ccV3lVTsQRsdIUGyab0N4sMDavui2hOBkmpBU0aQKOr9" # password for Storage daemon
+ Device = DDS-4 # must be same as Device in Storage daemon
+ Media Type = DDS-4 # must be same as MediaType in Storage daemon
+ AutoChanger = yes
+ Maximum Concurrent Jobs = 4
+}
+
+
+# Generic catalog service
+Catalog {
+ Name = MyCatalog
+ dbname = bacula; user = bacula; password = ""
+}
+
+# Reasonable message delivery -- send most everything to email address
+# and to the console
+Messages {
+ Name = Standard
+ mailcommand = "/home/kern/bacula/regress/bin/bsmtp -h localhost -f \"\(Bacula Regression\) %r\" -s \"Bacula: %t %e of %c %l\" %r"
+ operatorcommand = "/home/kern/bacula/regress/bin/bsmtp -h localhost -f \"\(Bacula Regression\) %r\" -s \"Bacula: Intervention needed for %j\" %r"
+ MailOnError = kern@sibbald.com = all, !terminate
+ operator = kern@sibbald.com = mount
+ console = all, !skipped, !terminate, !restored
+#
+# WARNING! the following will create a file that you must cycle from
+# time to time as it will grow indefinitely. However, it will
+# also keep all your messages if the scroll off the console.
+#
+ append = "/home/kern/bacula/regress/working/log" = all, !skipped
+}
+
+#
+# Message delivery for daemon messages (no job).
+Messages {
+ Name = Daemon
+ mailcommand = "/home/kern/bacula/regress/bin/bsmtp -h @smtp_host@ -f \"\(Bacula\) %r\" -s \"Bacula daemon message\" %r"
+ mail = kern@sibbald.com = all, !skipped
+ console = all, !skipped, !saved
+ append = "/home/kern/bacula/regress/working/log" = all, !skipped
+}
+
+
+# Default pool definition
+Pool {
+ Name = Default
+ Pool Type = Backup
+ Recycle = yes # Bacula can automatically recycle Volumes
+ AutoPrune = yes # Prune expired volumes
+ Volume Retention = 365d # one year
+ Accept Any Volume = yes # write on any volume in the pool
+}
--- /dev/null
+#
+# Default Bacula Storage Daemon Configuration file
+#
+# For Bacula release 1.33
+#
+# You may need to change the name of your tape drive
+# on the "Archive Device" directive in the Device
+# resource. If you change the Name and/or the
+# "Media Type" in the Device resource, please ensure
+# that dird.conf has corresponding changes.
+#
+
+Storage { # definition of myself
+ Name = @hostname@-sd
+ SDPort = 8103 # Director's port
+ WorkingDirectory = "@working_dir@"
+ Pid Directory = "@piddir@"
+ Subsys Directory = "@subsysdir@"
+}
+
+#
+# List Directors who are permitted to contact Storage daemon
+#
+Director {
+ Name = @hostname@-dir
+ Password = "ccV3lVTsQRsdIUGyab0N4sMDavui2hOBkmpBU0aQKOr9"
+}
+
+#
+# Devices supported by this Storage daemon
+# To connect, the Director's bacula-dir.conf must have the
+# same Name and MediaType.
+#
+Autochanger {
+ Name = DDS-4
+ Changer Device = @autochanger@
+ Changer Command ="@scriptdir@/mtx-changer %c %o %S %a"
+ Device = Drive-0, Drive-1
+}
+
+Device {
+ Name = Drive-0
+ Media Type = DDS-4
+ Archive Device = @tape_drive@
+ AutomaticMount = yes; # when device opened, read it
+ Autochanger = yes
+ Drive Index = 0
+ AlwaysOpen = yes;
+ RemovableMedia = yes;
+ @@sbindir@/tape_options
+# Maximum File Size = 1000000
+}
+
+Device {
+ Name = Drive-1
+ Media Type = DDS-4
+ Archive Device = @tape_drive1@
+ AutomaticMount = yes; # when device opened, read it
+ Autochanger = yes
+ Drive Index = 0
+ AlwaysOpen = yes;
+ RemovableMedia = yes;
+ @@sbindir@/tape_options
+# Maximum File Size = 1000000
+}
+
+
+#
+# Send all messages to the Director,
+# mount messages also are sent to the email address
+#
+Messages {
+ Name = Standard
+ director = @hostname@-dir = all, !terminate
+}
Name = DDS-4
Changer Device = @autochanger@
Changer Command ="@scriptdir@/mtx-changer %c %o %S %a"
- Device = DDS-4-1
+ Device = Drive-0
}
Device {
- Name = DDS-4-1 #
+ Name = Drive-0 #
Media Type = DDS-4
Archive Device = @tape_drive@
AutomaticMount = yes; # when device opened, read it
--- /dev/null
+#!/bin/sh
+/bin/cp -f scripts/bacula-dir-tape.conf bin/bacula-dir.conf
+/bin/cp -f scripts/bacula-sd-2drive.conf bin/bacula-sd.conf
+/bin/cp -f scripts/test-bacula-fd.conf bin/bacula-fd.conf
+/bin/cp -f scripts/test-console.conf bin/bconsole.conf
+touch bin/tape_options
#!/bin/sh
#
-if test $# != 4 ; then
+if test $# != 5 ; then
echo "First arg must be email name"
echo " and the second must be a tape drive"
echo " and the third must be a tape control name or /dev/null"
echo " and the fourth must be the full path to the mtx program"
+ echo " and the fifth must be tape drive 1 or /dev/null"
exit 1
fi
out="/tmp/sed_tmp"
echo "s%@tmpdir@%${cwd}/tmp%g" >>${out}
echo "s%@hostname@%${host}%g" >>${out}
echo "s%@changer_path@%${4}%g" >>${out}
+echo "s%@tape_drive1@%${5}%g" >>${out}
# process .in files with sed script
sed -f ${out} ${cwd}/scripts/test-bacula-dir.conf.in >${cwd}/scripts/test-bacula-dir.conf
sed -f ${out} ${cwd}/scripts/bacula-dir-win32-tape.conf.in >${cwd}/scripts/bacula-dir-win32-tape.conf
sed -f ${out} ${cwd}/scripts/bacula-sd-tape.conf.in >${cwd}/scripts/bacula-sd-tape.conf
sed -f ${out} ${cwd}/scripts/bacula-sd-2tape.conf.in >${cwd}/scripts/bacula-sd-2tape.conf
+sed -f ${out} ${cwd}/scripts/bacula-sd-2drive.conf.in >${cwd}/scripts/bacula-sd-2drive.conf
sed -f ${out} ${cwd}/scripts/cleanup-tape.in >${cwd}/scripts/cleanup-tape
sed -f ${out} ${cwd}/scripts/cleanup-2tape.in >${cwd}/scripts/cleanup-2tape
sed -f ${out} ${cwd}/scripts/prepare-two-tapes.in >${cwd}/scripts/prepare-two-tapes
echo " "
bin/bacula start 2>&1 >/dev/null
-bin/bconsole -c bin/bconsole.conf <<END_OF_DATA 2>&1 >/dev/null
-@output /dev/null
+#bin/bconsole -c bin/bconsole.conf <<END_OF_DATA 2>&1 >/dev/null
+bin/bconsole -c bin/bconsole.conf <<END_OF_DATA
+@tee /dev/null
messages
-@output tmp/log1.out
+@tee tmp/log1.out
label storage=File1 volume=TestVolume001
label storage=File1 volume=TestVolume002
update Volume=TestVolume001 MaxVolBytes=3000000
@#
@# now do a restore
@#
-@output tmp/log2.out
+@tee tmp/log2.out
restore bootstrap=${cwd}/working/restore.bsr where=${cwd}/tmp/bacula-restores select storage=File1
unmark *
cd ${cwd}/build/src/cats
yes
wait
messages
-@output
+@tee
quit
END_OF_DATA
scripts/check_for_zombie_jobs storage=File1