From: Kern Sibbald Date: Mon, 6 Sep 2004 20:57:39 +0000 (+0000) Subject: Doc updates + fixes to rescue script X-Git-Tag: Release-1.35.3~7 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=01dad5d941c551cd9d6510903010fa9e48d06c30;p=bacula%2Fbacula Doc updates + fixes to rescue script git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@1586 91ce42f0-d328-0410-95d8-f526ca767f89 --- diff --git a/bacula/LICENSE b/bacula/LICENSE index 157d2fd9f4..c7bf85e736 100644 --- a/bacula/LICENSE +++ b/bacula/LICENSE @@ -18,8 +18,12 @@ clause specified in the GPL, this license shall terminate automatically and you may no longer exercise any of the rights granted to you by this license as of the date you commence an action, including a cross-claim or counterclaim, against any -licensor of GPL software alleging that the software infringes a -copyright, an intellectual property right, or a patent. +licensor of GPL software alleging that the software infringes +an intellectual property right or a patent. Special dispensation +from or delay to the execution of this clause may be possible +by applying directly to the license owner of this software. +Such a dispensation or delay is valid only in writing and signed +by the one or more of the license holders. Code falling under the above conditions will be marked as follows: diff --git a/bacula/autoconf/configure.in b/bacula/autoconf/configure.in index 81ae76f89f..23ab0bff2c 100644 --- a/bacula/autoconf/configure.in +++ b/bacula/autoconf/configure.in @@ -64,6 +64,7 @@ AC_PATH_PROG(OPENSSL, openssl, none) AC_PATH_PROG(MTX, mtx, mtx) AC_PATH_PROG(PKGCONFIG, pkg-config, pkg-config) AC_PATH_PROG(WXCONFIG, wx-config, wx-config) +AC_PATH_PROG(CDRECORD, cdrecord) test -n "$ARFLAG" || ARFLAGS="cr" AC_SUBST(ARFLAGS) @@ -487,6 +488,22 @@ AC_CHECK_HEADERS(varargs.h) # End of readline/conio stuff # ----------------------------------------------------------------------- +# ------------------------------------------- +# check for cdrecord writer location +# get scsibus,target,lun +# ------------------------------------------- +CDSTL="3,0,0" +if test ! x$CDRECORD = x ; then + CDSTL=`${CDRECORD} -scanbus 2>/dev/null | grep CD-RW | ${AWK} '{print $1}'` + if test x${CDSTL} = x ; then + CDSTL=`${CDRECORD} -scanbus 2>/dev/null | grep CD+RW | ${AWK} '{print $1}'` + fi + if test x${CDSTL} = x ; then + CDSTL="3,0,0" + fi +fi +AC_SUBST(CDSTL) + # --------------------------------------------------- # Check for GMP support/directory diff --git a/bacula/configure b/bacula/configure index 14daca8e5f..a1b1fd9c64 100755 --- a/bacula/configure +++ b/bacula/configure @@ -308,7 +308,7 @@ ac_includes_default="\ # include #endif" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS BUILD_DIR TRUEPRG FALSEPRG VERSION DATE LSMDATE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX CPP EGREP INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA RANLIB ac_ct_RANLIB MV RM CP SED AWK ECHO CMP TBL AR OPENSSL MTX PKGCONFIG WXCONFIG ARFLAGS MAKE_SHELL LOCAL_LIBS LOCAL_CFLAGS LOCAL_LDFLAGS LOCAL_DEFS build build_cpu build_vendor build_os host host_cpu host_vendor host_os HAVE_SUN_OS_TRUE HAVE_SUN_OS_FALSE HAVE_OSF1_OS_TRUE HAVE_OSF1_OS_FALSE HAVE_AIX_OS_TRUE HAVE_AIX_OS_FALSE HAVE_HPUX_OS_TRUE HAVE_HPUX_OS_FALSE HAVE_LINUX_OS_TRUE HAVE_LINUX_OS_FALSE HAVE_FREEBSD_OS_TRUE HAVE_FREEBSD_OS_FALSE HAVE_NETBSD_OS_TRUE HAVE_NETBSD_OS_FALSE HAVE_OPENBSD_OS_TRUE HAVE_OPENBSD_OS_FALSE HAVE_BSDI_OS_TRUE HAVE_BSDI_OS_FALSE HAVE_SGI_OS_TRUE HAVE_SGI_OS_FALSE HAVE_IRIX_OS_TRUE HAVE_IRIX_OS_FALSE HAVE_DARWIN_OS_TRUE HAVE_DARWIN_OS_FALSE INSIDE_GNOME_COMMON_TRUE INSIDE_GNOME_COMMON_FALSE MSGFMT GNOME_INCLUDEDIR GNOMEUI_LIBS GNOME_LIBDIR GNOME_LIBS GNOMEGNORBA_LIBS GTKXMHTML_LIBS ZVT_LIBS GNOME_CONFIG ORBIT_CONFIG ORBIT_IDL HAVE_ORBIT_TRUE HAVE_ORBIT_FALSE ORBIT_CFLAGS ORBIT_LIBS HAVE_GNORBA_TRUE HAVE_GNORBA_FALSE GNORBA_CFLAGS GNORBA_LIBS GNOME_APPLETS_LIBS GNOME_DOCKLETS_LIBS GNOME_CAPPLET_LIBS GNOME_DIR WXCONS_CPPFLAGS WXCONS_LDFLAGS WX_DIR TRAY_MONITOR_CPPFLAGS TRAY_MONITOR_LDFLAGS TRAY_MONITOR_DIR TTOOL_LDFLAGS STATIC_FD STATIC_SD STATIC_DIR STATIC_CONS STATIC_GNOME_CONS STATIC_WX_CONS ALL_DIRS CONS_INC CONS_OBJ CONS_SRC CONS_LIBS CONS_LDFLAGS READLINE_SRC working_dir scriptdir dump_email job_email smtp_host piddir subsysdir baseport dir_port fd_port sd_port dir_password fd_password sd_password mon_dir_password mon_fd_password mon_sd_password dir_user dir_group sd_user sd_group fd_user fd_group SBINPERM SQL_LFLAGS SQL_INCLUDE SQL_BINDIR cats DB_NAME GETCONF ac_ct_GETCONF X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS LIBOBJS ALLOCA FDLIBS DEBUG DINCLUDE DLIB DB_LIBS WCFLAGS WLDFLAGS OBJLIST hostname TAPEDRIVE PSCMD WIN32 MACOSX DISTNAME DISTVER LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS BUILD_DIR TRUEPRG FALSEPRG VERSION DATE LSMDATE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX CPP EGREP INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA RANLIB ac_ct_RANLIB MV RM CP SED AWK ECHO CMP TBL AR OPENSSL MTX PKGCONFIG WXCONFIG CDRECORD ARFLAGS MAKE_SHELL LOCAL_LIBS LOCAL_CFLAGS LOCAL_LDFLAGS LOCAL_DEFS build build_cpu build_vendor build_os host host_cpu host_vendor host_os HAVE_SUN_OS_TRUE HAVE_SUN_OS_FALSE HAVE_OSF1_OS_TRUE HAVE_OSF1_OS_FALSE HAVE_AIX_OS_TRUE HAVE_AIX_OS_FALSE HAVE_HPUX_OS_TRUE HAVE_HPUX_OS_FALSE HAVE_LINUX_OS_TRUE HAVE_LINUX_OS_FALSE HAVE_FREEBSD_OS_TRUE HAVE_FREEBSD_OS_FALSE HAVE_NETBSD_OS_TRUE HAVE_NETBSD_OS_FALSE HAVE_OPENBSD_OS_TRUE HAVE_OPENBSD_OS_FALSE HAVE_BSDI_OS_TRUE HAVE_BSDI_OS_FALSE HAVE_SGI_OS_TRUE HAVE_SGI_OS_FALSE HAVE_IRIX_OS_TRUE HAVE_IRIX_OS_FALSE HAVE_DARWIN_OS_TRUE HAVE_DARWIN_OS_FALSE INSIDE_GNOME_COMMON_TRUE INSIDE_GNOME_COMMON_FALSE MSGFMT GNOME_INCLUDEDIR GNOMEUI_LIBS GNOME_LIBDIR GNOME_LIBS GNOMEGNORBA_LIBS GTKXMHTML_LIBS ZVT_LIBS GNOME_CONFIG ORBIT_CONFIG ORBIT_IDL HAVE_ORBIT_TRUE HAVE_ORBIT_FALSE ORBIT_CFLAGS ORBIT_LIBS HAVE_GNORBA_TRUE HAVE_GNORBA_FALSE GNORBA_CFLAGS GNORBA_LIBS GNOME_APPLETS_LIBS GNOME_DOCKLETS_LIBS GNOME_CAPPLET_LIBS GNOME_DIR WXCONS_CPPFLAGS WXCONS_LDFLAGS WX_DIR TRAY_MONITOR_CPPFLAGS TRAY_MONITOR_LDFLAGS TRAY_MONITOR_DIR TTOOL_LDFLAGS STATIC_FD STATIC_SD STATIC_DIR STATIC_CONS STATIC_GNOME_CONS STATIC_WX_CONS ALL_DIRS CONS_INC CONS_OBJ CONS_SRC CONS_LIBS CONS_LDFLAGS READLINE_SRC CDSTL working_dir scriptdir dump_email job_email smtp_host piddir subsysdir baseport dir_port fd_port sd_port dir_password fd_password sd_password mon_dir_password mon_fd_password mon_sd_password dir_user dir_group sd_user sd_group fd_user fd_group SBINPERM SQL_LFLAGS SQL_INCLUDE SQL_BINDIR cats DB_NAME GETCONF ac_ct_GETCONF X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS LIBOBJS ALLOCA FDLIBS DEBUG DINCLUDE DLIB DB_LIBS WCFLAGS WLDFLAGS OBJLIST hostname TAPEDRIVE PSCMD WIN32 MACOSX DISTNAME DISTVER LTLIBOBJS' ac_subst_files='MCOMMON' # Initialize some variables set by options. @@ -3735,6 +3735,45 @@ else echo "${ECHO_T}no" >&6 fi +# Extract the first word of "cdrecord", so it can be a program name with args. +set dummy cdrecord; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_CDRECORD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $CDRECORD in + [\\/]* | ?:[\\/]*) + ac_cv_path_CDRECORD="$CDRECORD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CDRECORD="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + ;; +esac +fi +CDRECORD=$ac_cv_path_CDRECORD + +if test -n "$CDRECORD"; then + echo "$as_me:$LINENO: result: $CDRECORD" >&5 +echo "${ECHO_T}$CDRECORD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + test -n "$ARFLAG" || ARFLAGS="cr" @@ -6578,6 +6617,22 @@ done # End of readline/conio stuff # ----------------------------------------------------------------------- +# ------------------------------------------- +# check for cdrecord writer location +# get scsibus,target,lun +# ------------------------------------------- +CDSTL="3,0,0" +if test ! x$CDRECORD = x ; then + CDSTL=`${CDRECORD} -scanbus 2>/dev/null | grep CD-RW | ${AWK} '{print $1}'` + if test x${CDSTL} = x ; then + CDSTL=`${CDRECORD} -scanbus 2>/dev/null | grep CD+RW | ${AWK} '{print $1}'` + fi + if test x${CDSTL} = x ; then + CDSTL="3,0,0" + fi +fi + + # --------------------------------------------------- # Check for GMP support/directory @@ -19626,6 +19681,7 @@ s,@OPENSSL@,$OPENSSL,;t t s,@MTX@,$MTX,;t t s,@PKGCONFIG@,$PKGCONFIG,;t t s,@WXCONFIG@,$WXCONFIG,;t t +s,@CDRECORD@,$CDRECORD,;t t s,@ARFLAGS@,$ARFLAGS,;t t s,@MAKE_SHELL@,$MAKE_SHELL,;t t s,@LOCAL_LIBS@,$LOCAL_LIBS,;t t @@ -19709,6 +19765,7 @@ s,@CONS_SRC@,$CONS_SRC,;t t s,@CONS_LIBS@,$CONS_LIBS,;t t s,@CONS_LDFLAGS@,$CONS_LDFLAGS,;t t s,@READLINE_SRC@,$READLINE_SRC,;t t +s,@CDSTL@,$CDSTL,;t t s,@working_dir@,$working_dir,;t t s,@scriptdir@,$scriptdir,;t t s,@dump_email@,$dump_email,;t t diff --git a/bacula/examples/conf/bacula-defs.m4 b/bacula/examples/conf/bacula-defs.m4 new file mode 100644 index 0000000000..4635efe273 --- /dev/null +++ b/bacula/examples/conf/bacula-defs.m4 @@ -0,0 +1,45 @@ + +define(`CLIENT',` +Job { + Name = "$1" + JobDefs = "$3" + Client = "$1" + FileSet = "$1" + Write Bootstrap = "/var/bacula/working/$1.bsr" +} + +Client { + Name = "$1" + Address = "$2" + FDPort = 9102 + Catalog = MyCatalog + Password = "ilF0PZoICjQ60R3E3dks08Rq36KK8cDGJUAaW" # password for FileDaemon + File Retention = 30 days # 30 days + Job Retention = 6 months # six months + AutoPrune = yes # Prune expired Jobs/Files +} +') + + +define(`STORAGE', ` +Storage { + Name = "$1" + Address = "$3" + SDPort = 9103 + Password = "KLUwcp1ZTeIc0x265UPrpWW28t7d7cRXmhOqyHxRr" + Device = "$1" # must be same as Device in Storage daemon + Media Type = "$2" # must be same as MediaType in Storage daemon +}') + + +define(`POOL', ` +Pool { + Name = "$1" + Pool Type = Backup + Recycle = yes # Bacula can automatically recycle Volumes + AutoPrune = yes # Prune expired volumes + Volume Retention = 365 days # one year + Accept Any Volume = yes # write on any volume in the pool + Cleaning Prefix = "CLN" +}') + diff --git a/bacula/examples/conf/m4.Makefile b/bacula/examples/conf/m4.Makefile new file mode 100644 index 0000000000..38b3f4725e --- /dev/null +++ b/bacula/examples/conf/m4.Makefile @@ -0,0 +1,29 @@ +ETCDIR=/opt/bacula/etc +M4=/usr/ccs/bin/m4 +DIR=/opt/bacula/sbin/bacula-dir +FD=/opt/bacula/sbin/bacula-fd +SD=/opt/bacula/sbin/bacula-sd +BCON=/opt/bacula/sbin/bconsole + +all: $(ETCDIR)/bacula-dir.conf $(ETCDIR)/bacula-sd.conf \ + $(ETCDIR)/bacula-fd.conf $(ETCDIR)/bconsole.conf + +$(ETCDIR)/bacula-dir.conf: bacula-dir.conf bacula-defs.m4 + $(M4) bacula-dir.conf >$(ETCDIR)/bacula-dir.tmp && \ + $(DIR) -t -c $(ETCDIR)/bacula-dir.tmp && \ + mv $(ETCDIR)/bacula-dir.tmp $(ETCDIR)/bacula-dir.conf + +$(ETCDIR)/bacula-sd.conf: bacula-sd.conf bacula-defs.m4 + $(M4) bacula-sd.conf >$(ETCDIR)/bacula-sd.tmp && \ + $(SD) -t -c $(ETCDIR)/bacula-sd.tmp && \ + mv $(ETCDIR)/bacula-sd.tmp $(ETCDIR)/bacula-sd.conf + +$(ETCDIR)/bacula-fd.conf: bacula-fd.conf bacula-defs.m4 + $(M4) bacula-fd.conf >$(ETCDIR)/bacula-fd.tmp && \ + $(FD) -t -c $(ETCDIR)/bacula-fd.tmp && \ + mv $(ETCDIR)/bacula-fd.tmp $(ETCDIR)/bacula-fd.conf + +$(ETCDIR)/bconsole.conf: bconsole.conf bacula-defs.m4 + $(M4) bconsole.conf >$(ETCDIR)/bconsole.tmp && \ + $(BCON) -t -c $(ETCDIR)/bconsole.tmp && \ + mv $(ETCDIR)/bconsole.tmp $(ETCDIR)/bconsole.conf diff --git a/bacula/examples/conf/m4.additions b/bacula/examples/conf/m4.additions new file mode 100644 index 0000000000..e3acdb4e7f --- /dev/null +++ b/bacula/examples/conf/m4.additions @@ -0,0 +1,43 @@ +From: Marc Schoechlin +To: Peter Eriksson +Cc: bacula-users@lists.sourceforge.net +Subject: Re: [Bacula-users] RE: Feature Request : includes for config-files + +Hi ! + +On Fri, May 21, 2004 at 11:24:13AM +0200, Peter Eriksson wrote: + +> > I think that is the 99%-solution for this problem - +> > but I think many users would be happy with a 90%-solution, which +> > allows to store configuration-data in distributed files. +> +> Or you could do as I just did - generate the configuration +> files using a Makefile and the m4 macro processor... That way you +> don't have to reinvent the wheel again inside Bacula but can delegate +> the tasks to external programs. +> +> [See the attached files for details. They can be expanded +> a lot though, it's just a beginning] + +Many thanks for the files! + +I adopted this way now - and it works with good results :-) + +The different client-definitions can now be placed on distributed +locations. + +Look at the make-target below : +-- +$(ETCDIR)/bacula-dir.conf: bacula-dir.conf bacula-defs.m4 + cat bacula-dir.conf > $(ETCDIR)/bacula-dir.conf.tmp && \ + $(FIND) $(CUSTOMERS) -name "*.cfg" -exec cat {} >> $(ETCDIR)/bacula-dir.conf.tmp \; && \ + $(M4) $(ETCDIR)/bacula-dir.conf.tmp >$(ETCDIR)/bacula-dir.tmp && \ + $(DIR) -t -c $(ETCDIR)/bacula-dir.tmp && \ + mv $(ETCDIR)/bacula-dir.tmp $(ETCDIR)/bacula-dir.conf +-- + + +Best regards + +Marc Schoechlin + diff --git a/bacula/examples/conf/m4.bacula-dir.conf b/bacula/examples/conf/m4.bacula-dir.conf new file mode 100644 index 0000000000..14699c8364 --- /dev/null +++ b/bacula/examples/conf/m4.bacula-dir.conf @@ -0,0 +1,364 @@ +# bacula-dir.conf +# +# Default Bacula Director Configuration file +# +# WARNING: +# This file is generated from /opt/lysator/etc/bacula/bacula-dir.conf +# Edit the source file and then run 'make'. +# + +include(bacula-defs.m4) + +Director { # define myself + Name = Baccus + DIRport = 9101 # where we listen for UA connections + QueryFile = "/opt/bacula/etc/query.sql" + WorkingDirectory = "/var/bacula/working" + PidDirectory = "/var/run" + Maximum Concurrent Jobs = 10 + Password = "djUGGqG0ckdbbTp0J0cAnK6FqZC5YX5i6" # Console password + Messages = Standard +} + + +# Generic catalog service +Catalog { + Name = MyCatalog + dbname = bacula; user = bacula; password = "" +} + + + +JobDefs { + Name = "DefaultJob" + Type = Backup + Level = Incremental + Schedule = "WeeklyCycle" + Storage = "DLT-0" + Messages = Standard + Spool Data = yes + Pool = Default + Max Start Delay = 20h + Priority = 10 +} + + + +JobDefs { + Name = "InservitusJob" + Type = Backup + Level = Incremental + Schedule = "WeeklyCycle" + Storage = "DLT-1" + Messages = Standard + Spool Data = yes + Pool = Inservitus + Max Start Delay = 20h + Priority = 10 +} + +JobDefs { + Name = "LysdiskJob" + Type = Backup + Level = Incremental + Schedule = "WeeklyCycle" + Storage = "DLT-2" + Messages = Standard + Spool Data = yes + Pool = Lysdisk + Max Start Delay = 20h + Priority = 10 +} + +JobDefs { + Name = "ShermanJob" + Type = Backup + Level = Incremental + Schedule = "WeeklyCycle" + Storage = "DLT-3" + Messages = Standard + Spool Data = yes + Pool = Sherman + Max Start Delay = 20h + Priority = 10 +} + +# Backup the catalog database (after the nightly save) +Job { + Name = "BackupCatalog" + Client = Baccus + JobDefs = "DefaultJob" + Level = Full + FileSet="Catalog" + Schedule = "WeeklyCycleAfterBackup" + # This creates an ASCII copy of the catalog + RunBeforeJob = "/opt/bacula/etc/make_catalog_backup -u bacula" + # This deletes the copy of the catalog + RunAfterJob = "/opt/bacula/etc/delete_catalog_backup" + Write Bootstrap = "/var/bacula/working/BackupCatalog.bsr" + Priority = 11 # run after main backup +} + +# Standard Restore template, to be changed by Console program +Job { + Name = "Restore" + Type = Restore + Client = Baccus + FileSet="Baccus" + Storage = "DLT-0" + Pool = Default + Messages = Standard + Where = /tmp/bacula-restores +} + + +# Clients to backup -------------------------------------------------- + +#stalingrad +#hanna +#venom +#klorin +#britney +#sherman +#inservitus +#tokaimura +#u137 + +#elfwood +#hal +#sten +#sirius (skippa? Networkerservern...) + + +CLIENT(Baccus, baccus.ifm.liu.se, DefaultJob) +FileSet { + Name = "Baccus" + Include = signature=MD5 { + / + /usr + /var + /opt + } + + Exclude = { + /proc /tmp /var/tmp /devices /etc/mnttab /dev/fd /var/run + /export + } +} + + + +CLIENT(Stalingrad, stalingrad.lysator.liu.se, DefaultJob) +FileSet { + Name = "Stalingrad" + Include = signature=MD5 { + / + /cvsroot + } + Exclude = { + /proc /tmp /var/tmp /etc/mnttab /dev/fd /var/run /dev/shm + } +} + + + +CLIENT(Hanna, hanna.lysator.liu.se, DefaultJob) +FileSet { + Name = "Hanna" + Include = signature=MD5 { + / + /var + /local + /export/hanna + } + Exclude = { + /proc /tmp /var/tmp /devices /etc/mnttab /dev/fd /var/run + /export/hanna/mirror + /export/hanna/ftp/mirror + } +} + + +CLIENT(Venom, venom.lysator.liu.se, DefaultJob) +FileSet { + Name = "Venom" + Include = signature=MD5 { + / + /clone/dsk1 + /clone/dsk2 + /export/dsk1 + /export/dsk2 + } + Exclude = { + /proc /tmp /var/tmp /devices /etc/mnttab /dev/fd /var/run + } +} + + +CLIENT(Klorin, klorin.lysator.liu.se, DefaultJob) +FileSet { + Name = "Klorin" + Include = signature=MD5 { + / + /export/mdsk1 + } + Exclude = { + /proc /tmp /var/tmp /devices /etc/mnttab /dev/fd /var/run + } +} + + +CLIENT(Britney, britney.lysator.liu.se, DefaultJob) +FileSet { + Name = "Britney" + Include = signature=MD5 { + / + /export/dsk1 + /export/oldroot + /export/lysdisk1 + /export/lysdisk3 + /export/lysdisk4 + /export/lysdisk6 + /export/lysdisk7 + /export/lysdisk8 + /export/lysdisk9 + /export/lysdisk11 + } + Exclude = { + /proc /tmp /var/tmp /devices /etc/mnttab /dev/fd /var/run + } +} + + + +CLIENT(Sherman, sherman.lysator.liu.se, DefaultJob) +FileSet { + Name = "Sherman" + Include = signature=MD5 { + / + /web + /boot + /var/opt/mysql + } + Exclude = { + /proc /tmp /var/tmp /etc/mnttab /dev/fd /var/run + } +} + + + +CLIENT(U137, u137.lysator.liu.se, DefaultJob) +FileSet { + Name = "U137" + Include = signature=MD5 { + / + /export/dsk1 + /export/dsk2 + } + Exclude = { + /proc /tmp /var/tmp /etc/mnttab /dev/fd /var/run + } +} + + +CLIENT(Tokaimura, tokaimura.lysator.liu.se, DefaultJob) +FileSet { + Name = "Tokaimura" + Include = signature=MD5 { + / + /usr + /var + /opt + /export/mdsk + } + Exclude = { + /proc /tmp /var/tmp /devices /etc/mnttab /dev/fd /var/run + } +} + + +CLIENT(Inservitus, inservitus.lysator.liu.se, InservitusJob) +FileSet { + Name = "Inservitus" + Include = signature=MD5 { + / + /var + /export + /export/d1 + /export/d2 + /export/d3 + /export/home + } + Exclude = { + /proc /tmp /var/tmp /devices /etc/mnttab /dev/fd /var/run + /export/snapshot + /snapshot + } +} + + + +# +# 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 +} + +# This schedule does the catalog. It starts after the WeeklyCycle +Schedule { + Name = "WeeklyCycleAfterBackup" + Run = Full sun-sat at 1:10 +} + +# This is the backup of the catalog +FileSet { + Name = "Catalog" + Include = signature=MD5 { + /var/bacula/working/bacula.sql + } +} + + +STORAGE(File-0, File, baccus.ifm.liu.se) +STORAGE(DLT-0, DLT7000, baccus.ifm.liu.se) +STORAGE(DLT-1, DLT7000, baccus.ifm.liu.se) +STORAGE(DLT-2, DLT7000, baccus.ifm.liu.se) +STORAGE(DLT-3, DLT7000, baccus.ifm.liu.se) +STORAGE(DLT-4, DLT7000, baccus.ifm.liu.se) +STORAGE(DLT-5, DLT7000, baccus.ifm.liu.se) + + + +# Reasonable message delivery -- send most everything to email address +# and to the console +Messages { + Name = Standard +# +# NOTE! If you send to two email or more email addresses, you will need +# to replace the %r in the from field (-f part) with a single valid +# email address in both the mailcommand and the operatorcommand. +# + mailcommand = "/opt/bacula/sbin/bsmtp -h ifm.liu.se -f \"\(Bacula\) bacula@ifm.liu.se\" -s \"Bacula: %t %e of %c %l\" %r" + operatorcommand = "/opt/bacula/sbin/bsmtp -h ifm.liu.se -f \"\(Bacula\) bacula@ifm.liu.se\" -s \"Bacula: Intervention needed for %j\" %r" + mail = peter@ifm.liu.se,backup-admin@lysator.liu.se = all, !skipped + operator = peter@ifm.liu.se,backup-admin@lysator.liu.se = mount + console = all, !skipped, !saved +# +# 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 they scroll off the console. +# + append = "/var/bacula/working/log" = all, !skipped +} + + +# Define Pools -------------------------------------- +POOL(Default) +POOL(Inservitus) +POOL(Sherman) +POOL(Lysdisk) diff --git a/bacula/examples/conf/m4.bacula-fd.conf b/bacula/examples/conf/m4.bacula-fd.conf new file mode 100644 index 0000000000..070bce5a72 --- /dev/null +++ b/bacula/examples/conf/m4.bacula-fd.conf @@ -0,0 +1,31 @@ +# bacula-fd.conf +# +# Default Bacula File Daemon Configuration file +# +# WARNING: +# This file is generated from /opt/lysator/etc/bacula/bacula-dir.conf +# Edit the source file and then run 'make'. + +# +# List Directors who are permitted to contact this File daemon +# +Director { + Name = Baccus + Password = "ilF0PZoICjQ60R3E3dks08Rq36KK8cDGJUAaW" +} + +# +# "Global" File daemon configuration specifications +# +FileDaemon { # this is me + Name = Baccus + FDport = 9102 # where we listen for the director + WorkingDirectory = /var/bacula/working + Pid Directory = /var/run +} + +# Send all messages except skipped files back to Director +Messages { + Name = Standard + director = Baccus = all, !skipped +} diff --git a/bacula/examples/conf/m4.bacula-sd.conf b/bacula/examples/conf/m4.bacula-sd.conf new file mode 100644 index 0000000000..57e65ec416 --- /dev/null +++ b/bacula/examples/conf/m4.bacula-sd.conf @@ -0,0 +1,152 @@ +# bacula-sd.conf +# +# Default Bacula Storage Daemon Configuration file +# +# WARNING: +# This file is generated from /opt/lysator/etc/bacula/bacula-dir.conf +# Edit the source file and then run 'make'. +# + +Storage { # definition of myself + Name = Baccus + SDPort = 9103 # Director's port + WorkingDirectory = "/var/bacula/working" + Pid Directory = "/var/run" + Maximum Concurrent Jobs = 20 +} + +# +# List Directors who are permitted to contact Storage daemon +# +Director { + Name = Baccus + Password = "KLUwcp1ZTeIc0x265UPrpWW28t7d7cRXmhOqyHxRr" +} + +# +# Devices supported by this Storage daemon +# To connect, the Director's bacula-dir.conf must have the +# same Name and MediaType. +# + +Device { + Name = File-0 + Media Type = File + Archive Device = /var/bacula/storage/file-0 + LabelMedia = yes; # lets Bacula label unlabeled media + Random Access = Yes; + AutomaticMount = yes; # when device opened, read it + RemovableMedia = no; + AlwaysOpen = no; +} + +Device { + Name = DLT-0 + Media Type = DLT7000 + Archive Device = /dev/rmt/0cbn + AutomaticMount = yes; # when device opened, read it + AlwaysOpen = yes; + RemovableMedia = yes; + RandomAccess = no; + Autochanger = yes; + Changer Device = /dev/scsi/changer/c1t0d0 + Changer Command = "/opt/bacula/etc/mtx-changer %c %o %S %a %d" + Drive Index = 0 + Maximum Spool Size = 4gb + Maximum Job Spool Size = 1gb + Spool Directory = /var/bacula/spool/dlt-0 +} + +Device { + Name = DLT-1 + Media Type = DLT7000 + Archive Device = /dev/rmt/1cbn + AutomaticMount = yes; # when device opened, read it + AlwaysOpen = yes; + RemovableMedia = yes; + RandomAccess = no; + Autochanger = yes; + Changer Device = /dev/scsi/changer/c1t0d0 + Changer Command = "/opt/bacula/etc/mtx-changer %c %o %S %a %d" + Drive Index = 1 + Maximum Spool Size = 2gb + Maximum Job Spool Size = 1gb + Spool Directory = /var/bacula/spool/dlt-1 +} + +Device { + Name = DLT-2 + Media Type = DLT7000 + Archive Device = /dev/rmt/2cbn + AutomaticMount = yes; # when device opened, read it + AlwaysOpen = yes; + RemovableMedia = yes; + RandomAccess = no; + Autochanger = yes; + Changer Device = /dev/scsi/changer/c1t0d0 + Changer Command = "/opt/bacula/etc/mtx-changer %c %o %S %a %d" + Drive Index = 2 + Maximum Spool Size = 2gb + Maximum Job Spool Size = 1gb + Spool Directory = /var/bacula/spool/dlt-2 +} + +Device { + Name = DLT-3 + Media Type = DLT7000 + Archive Device = /dev/rmt/3cbn + AutomaticMount = yes; # when device opened, read it + AlwaysOpen = yes; + RemovableMedia = yes; + RandomAccess = no; + Autochanger = yes; + Changer Device = /dev/scsi/changer/c1t0d0 + Changer Command = "/opt/bacula/etc/mtx-changer %c %o %S %a %d" + Drive Index = 3 + Maximum Spool Size = 2gb + Maximum Job Spool Size = 1gb + Spool Directory = /var/bacula/spool/dlt-3 +} + +Device { + Name = DLT-4 + Media Type = DLT7000 + Archive Device = /dev/rmt/4cbn + AutomaticMount = yes; # when device opened, read it + AlwaysOpen = yes; + RemovableMedia = yes; + RandomAccess = no; + Autochanger = yes; + Changer Device = /dev/scsi/changer/c1t0d0 + Changer Command = "/opt/bacula/etc/mtx-changer %c %o %S %a %d" + Drive Index = 4 + Maximum Spool Size = 2gb + Maximum Job Spool Size = 1gb + Spool Directory = /var/bacula/spool/dlt-4 +} + +Device { + Name = DLT-5 + Media Type = DLT7000 + Archive Device = /dev/rmt/5cbn + AutomaticMount = yes; # when device opened, read it + AlwaysOpen = yes; + RemovableMedia = yes; + RandomAccess = no; + Autochanger = yes; + Changer Device = /dev/scsi/changer/c1t0d0 + Changer Command = "/opt/bacula/etc/mtx-changer %c %o %S %a %d" + Drive Index = 5 + Maximum Spool Size = 2gb + Maximum Job Spool Size = 1gb + Spool Directory = /var/bacula/spool/dlt-5 +} + +# +# Send all messages to the Director, +# mount messages also are sent to the email address +# +Messages { + Name = Standard + director = Baccus = all +} diff --git a/bacula/examples/conf/m4.email b/bacula/examples/conf/m4.email new file mode 100644 index 0000000000..7e8d5804f7 --- /dev/null +++ b/bacula/examples/conf/m4.email @@ -0,0 +1,28 @@ +From: Peter Eriksson +Reply-To: Peter Eriksson +Subject: Re: [Bacula-users] RE: Feature Request : includes for config-files +To: bacula-users@lists.sourceforge.net + +Marc Schoechlin writes: + +> I think that is the 99%-solution for this problem - +> but I think many users would be happy with a 90%-solution, which +> allows to store configuration-data in distributed files. + +Or you could do as I just did - generate the configuration +files using a Makefile and the m4 macro processor... That way you +don't have to reinvent the wheel again inside Bacula but can delegate +the tasks to external programs. + +[See the attached files for details. They can be expanded +a lot though, it's just a beginning] + +-- +Peter Eriksson Phone: +46 13 28 2786 +Computer Systems Manager/BOFH Cell/GSM: +46 705 18 2786 +Physics Department, Linköping University Room: Building F, F203 +SE-581 83 Linköping, Sweden http://www.ifm.liu.se/~peter + +See the files bacula-defs.m4 m4.bacula-dir.conf m4.bacula-fd.conf and +m4.bacula-sd.conf in this directory for the attachments to this +email. diff --git a/bacula/kernstodo b/bacula/kernstodo index 2b3a1cc32d..c134fdafa0 100644 --- a/bacula/kernstodo +++ b/bacula/kernstodo @@ -11,6 +11,7 @@ Version 1.35 Kern (see below) ======================================================== 1.35 Items to do for release: +- Improve error message if old/new FileSet syntax mixed. - Restore c: with a prefix into /prefix/c/ to prevent c: and d: files with the same name from overwritting each other. - Add new DCR calling sequences everywhere in SD. This will permit @@ -33,6 +34,7 @@ Version 1.35 Kern (see below) - Doc -p option in stored - Doc Phil's new delete job jobid scanning code. - Document that console commands can be abbreviated. +- Document add "/dev/null 2>&1" to the bacula-fd command line - New IP address specification is used as follows: [sdaddresses|diraddresses|fdaddresses] = { [[ip|ipv4|ipv6] = { [[addr|port] = [^ ]+[\n;]+] }] } @@ -951,6 +953,105 @@ Ideas from Jerry Scharf: - Store info on each file system type (probably in the job header on tape. This could be the output of df; or perhaps some sort of /etc/mtab record. +========= ideas =============== +From: "Jerry K. Schieffer" +To: +Subject: RE: [Bacula-users] future large programming jobs +Date: Thu, 26 Feb 2004 11:34:54 -0600 + +I noticed the subject thread and thought I would offer the following +merely as sources of ideas, i.e. something to think about, not even as +strong as a request. In my former life (before retiring) I often +dealt with backups and storage management issues/products as a +developer and as a consultant. I am currently migrating my personal +network from amanda to bacula specifically because of the ability to +cross media boundaries during storing backups. +Are you familiar with the commercial product called ADSM (I think IBM +now sells it under the Tivoli label)? It has a couple of interesting +ideas that may apply to the following topics. + +1. Migration: Consider that when you need to restore a system, there +may be pressure to hurry. If all the information for a single client +can eventually end up on the same media (and in chronological order), +the restore is facillitated by not having to search past information +from other clients. ADSM has the concept of "client affinity" that +may be associated with it's storage pools. It seems to me that this +concept (as an optional feature) might fit in your architecture for +migration. + +ADSM also has the concept of defining one or more storage pools as +"copy pools" (almost mirrors, but only in the sense of contents). +These pools provide the ability to have duplicte data stored both +onsite and offsite. The copy process can be scheduled to be handled +by their storage manager during periods when there is no backup +activity. Again, the migration process might be a place to consider +implementing something like this. + +> +> It strikes me that it would be very nice to be able to do things +like +> have the Job(s) backing up the machines run, and once they have all +> completed, start a migration job to copy the data from disks Volumes +to +> a tape library and then to offsite storage. Maybe this can already +be +> done with some careful scheduling and Job prioritzation; the events +> mechanism described below would probably make it very easy. + +This is the goal. In the first step (before events), you simply +schedule +the Migration to tape later. + +2. Base jobs: In ADSM, each copy of each stored file is tracked in +the database. Once a file (unique by path and metadata such as dates, +size, ownership, etc.) is in a copy pool, no more copies are made. In +other words, when you start ADSM, it begins like your concept of a +base job. After that it is in the "incremental" mode. You can +configure the number of "generations" of files to be retained, plus a +retention date after which even old generations are purged. The +database tracks the contents of media and projects the percentage of +each volume that is valid. When the valid content of a volume drops +below a configured percentage, the valid data are migrated to another +volume and the old volume is marked as empty. Note, this requires +ADSM to have an idea of the contents of a client, i.e. marking the +database when an existing file was deleted, but this would solve your +issue of restoring a client without restoring deleted files. + +This is pretty far from what bacula now does, but if you are going to +rip things up for Base jobs,..... +Also, the benefits of this are huge for very large shops, especially +with media robots, but are a pain for shops with manual media +mounting. + +> +> Base jobs sound pretty useful, but I'm not dying for them. + +Nobody is dying for them, but when you see what it does, you will die +without it. + +3. Restoring deleted files: Since I think my comments in (2) above +have low probability of implementation, I'll also suggest that you +could approach the issue of deleted files by a mechanism of having the +fd report to the dir, a list of all files on the client for every +backup job. The dir could note in the database entry for each file +the date that the file was seen. Then if a restore as of date X takes +place, only files that exist from before X until after X would be +restored. Probably the major cost here is the extra date container in +each row of the files table. + +Thanks for "listening". I hope some of this helps. If you want to +contact me, please send me an email - I read some but not all of the +mailing list traffic and might miss a reply there. + +Please accept my compliments for bacula. It is doing a great job for +me!! I sympathize with you in the need to wrestle with excelence in +execution vs. excelence in feature inclusion. + +Regards, +Jerry Schieffer + +============================== + Longer term to do: - Design at hierarchial storage for Bacula. Migration and Clone. - Implement FSM (File System Modules). diff --git a/bacula/src/version.h b/bacula/src/version.h index f65709e3fa..fbc1fe30db 100644 --- a/bacula/src/version.h +++ b/bacula/src/version.h @@ -1,8 +1,8 @@ /* */ #undef VERSION #define VERSION "1.35.3" -#define BDATE "05 September 2004" -#define LSMDATE "05Sep04" +#define BDATE "06 September 2004" +#define LSMDATE "06Sep04" /* Debug flags */ #undef DEBUG