diff --git a/2.0.3-ampm.patch b/2.0.3-ampm.patch new file mode 100644 index 0000000..d811507 --- /dev/null +++ b/2.0.3-ampm.patch @@ -0,0 +1,86 @@ +This patch should resolve some problems with handling of am/pm +in schedules as reported by bug #808. + +According to the NIST (US National Institute of Standards and Technology), +12am and 12pm are ambiguous and can be defined to anything. However, +12:01am is the same as 00:01 and 12:01pm is the same as 12:01, so Bacula +defines 12am as 00:00 (midnight) and 12pm as 12:00 (noon). You can avoid +this abiguity (confusion) by using 24 hour time specifications (i.e. no +am/pm). This is the definition in Bacula version 2.0.3 and later. + +Apply it to version 2.0.3 with: + + cd + patch -p0 <2.0.3-ampm.patch + make + ... + make install + +Index: src/dird/run_conf.c +=================================================================== +--- src/dird/run_conf.c (revision 4349) ++++ src/dird/run_conf.c (working copy) +@@ -339,6 +339,7 @@ + for ( ; token != T_EOL; (token = lex_get_token(lc, T_ALL))) { + int len; + bool pm = false; ++ bool am = false; + switch (token) { + case T_NUMBER: + state = s_mday; +@@ -434,6 +435,7 @@ + if (!have_hour) { + clear_bits(0, 23, lrun.hour); + } ++// Dmsg1(000, "s_time=%s\n", lc->str); + p = strchr(lc->str, ':'); + if (!p) { + scan_err0(lc, _("Time logic error.\n")); +@@ -441,20 +443,19 @@ + } + *p++ = 0; /* separate two halves */ + code = atoi(lc->str); /* pick up hour */ ++ code2 = atoi(p); /* pick up minutes */ + len = strlen(p); +- if (len > 2 && p[len-1] == 'm') { +- if (p[len-2] == 'a') { +- pm = false; +- } else if (p[len-2] == 'p') { +- pm = true; +- } else { +- scan_err0(lc, _("Bad time specification.")); +- /* NOT REACHED */ +- } +- } else { +- pm = false; ++ if (len >= 2) { ++ p += 2; + } +- code2 = atoi(p); /* pick up minutes */ ++ if (strcasecmp(p, "pm") == 0) { ++ pm = true; ++ } else if (strcasecmp(p, "am") == 0) { ++ am = true; ++ } else if (len != 2) { ++ scan_err0(lc, _("Bad time specification.")); ++ /* NOT REACHED */ ++ } + /* + * Note, according to NIST, 12am and 12pm are ambiguous and + * can be defined to anything. However, 12:01am is the same +@@ -467,13 +468,14 @@ + code += 12; + } + /* am */ +- } else if (code == 12) { ++ } else if (am && code == 12) { + code -= 12; + } + if (code < 0 || code > 23 || code2 < 0 || code2 > 59) { + scan_err0(lc, _("Bad time specification.")); + /* NOT REACHED */ + } ++// Dmsg2(000, "hour=%d min=%d\n", code, code2); + set_bit(code, lrun.hour); + lrun.minute = code2; + have_hour = true; diff --git a/2.0.3-maxbyteslist.patch b/2.0.3-maxbyteslist.patch new file mode 100644 index 0000000..ecb97b2 --- /dev/null +++ b/2.0.3-maxbyteslist.patch @@ -0,0 +1,32 @@ + + This patch adds the MaxVolBytes to the output of a "show pools" command. + It fixes bug #814. Apply it to Bacula version 2.0.3 with: + + cd + patch -p0 <2.0.3-maxbyteslist.patch + make + ... + make install + + +Index: src/dird/dird_conf.c +=================================================================== +--- src/dird/dird_conf.c (revision 4349) ++++ src/dird/dird_conf.c (working copy) +@@ -844,10 +844,13 @@ + NPRT(res->res_pool.label_format)); + sendit(sock, _(" CleaningPrefix=%s LabelType=%d\n"), + NPRT(res->res_pool.cleaning_prefix), res->res_pool.LabelType); +- sendit(sock, _(" RecyleOldest=%d PurgeOldest=%d MaxVolJobs=%d MaxVolFiles=%d\n"), ++ sendit(sock, _(" RecyleOldest=%d PurgeOldest=%d\n"), + res->res_pool.recycle_oldest_volume, +- res->res_pool.purge_oldest_volume, +- res->res_pool.MaxVolJobs, res->res_pool.MaxVolFiles); ++ res->res_pool.purge_oldest_volume); ++ sendit(sock, _(" MaxVolJobs=%d MaxVolFiles=%d MaxVolBytes=%s\n"), ++ res->res_pool.MaxVolJobs, ++ res->res_pool.MaxVolFiles, ++ edit_uint64(res->res_pool.MaxVolFiles, ed1)); + sendit(sock, _(" MigTime=%s MigHiBytes=%s MigLoBytes=%s\n"), + edit_utime(res->res_pool.MigrationTime, ed1, sizeof(ed1)), + edit_uint64(res->res_pool.MigrationHighBytes, ed2), diff --git a/2.0.3-maxwaittime.patch b/2.0.3-maxwaittime.patch new file mode 100644 index 0000000..5ed6b29 --- /dev/null +++ b/2.0.3-maxwaittime.patch @@ -0,0 +1,137 @@ + +This patch should fix the logic error in checking for the MaxWaitTime of +a job in src/dird/job.c. It fixes bug #802. + +Apply it to Bacula version 2.0.3 with: + + cd + patch -p0 <2.0.3-maxwaittime.patch + make + ... + make install + + + +Index: src/dird/job.c +=================================================================== +--- src/dird/job.c (revision 4349) ++++ src/dird/job.c (working copy) +@@ -481,7 +481,6 @@ + static bool job_check_maxwaittime(JCR *control_jcr, JCR *jcr) + { + bool cancel = false; +- bool ok_to_cancel = false; + JOB *job = jcr->job; + + if (job_canceled(jcr)) { +@@ -493,69 +492,18 @@ + } + if (jcr->JobLevel == L_FULL && job->FullMaxWaitTime != 0 && + (watchdog_time - jcr->start_time) >= job->FullMaxWaitTime) { +- ok_to_cancel = true; ++ cancel = true; + } else if (jcr->JobLevel == L_DIFFERENTIAL && job->DiffMaxWaitTime != 0 && + (watchdog_time - jcr->start_time) >= job->DiffMaxWaitTime) { +- ok_to_cancel = true; ++ cancel = true; + } else if (jcr->JobLevel == L_INCREMENTAL && job->IncMaxWaitTime != 0 && + (watchdog_time - jcr->start_time) >= job->IncMaxWaitTime) { +- ok_to_cancel = true; ++ cancel = true; + } else if (job->MaxWaitTime != 0 && + (watchdog_time - jcr->start_time) >= job->MaxWaitTime) { +- ok_to_cancel = true; +- } +- if (!ok_to_cancel) { +- return false; +- } +- +-/* +- * I don't see the need for all this -- kes 17Dec06 +- */ +-#ifdef xxx +- Dmsg3(800, "Job %d (%s): MaxWaitTime of %d seconds exceeded, " +- "checking status\n", +- jcr->JobId, jcr->Job, job->MaxWaitTime); +- switch (jcr->JobStatus) { +- case JS_Created: +- case JS_Blocked: +- case JS_WaitFD: +- case JS_WaitSD: +- case JS_WaitStoreRes: +- case JS_WaitClientRes: +- case JS_WaitJobRes: +- case JS_WaitPriority: +- case JS_WaitMaxJobs: +- case JS_WaitStartTime: + cancel = true; +- Dmsg0(200, "JCR blocked in #1\n"); +- break; +- case JS_Running: +- Dmsg0(800, "JCR running, checking SD status\n"); +- switch (jcr->SDJobStatus) { +- case JS_WaitMount: +- case JS_WaitMedia: +- case JS_WaitFD: +- cancel = true; +- Dmsg0(800, "JCR blocked in #2\n"); +- break; +- default: +- Dmsg0(800, "JCR not blocked in #2\n"); +- break; +- } +- break; +- case JS_Terminated: +- case JS_ErrorTerminated: +- case JS_Canceled: +- case JS_FatalError: +- Dmsg0(800, "JCR already dead in #3\n"); +- break; +- default: +- Jmsg1(jcr, M_ERROR, 0, _("Unhandled job status code %d\n"), +- jcr->JobStatus); + } +- Dmsg3(800, "MaxWaitTime result: %scancel JCR %p (%s)\n", +- cancel ? "" : "do not ", jcr, jcr->Job); +-#endif ++ + return cancel; + } + +@@ -574,36 +522,6 @@ + return false; + } + +-#ifdef xxx +- switch (jcr->JobStatus) { +- case JS_Created: +- case JS_Running: +- case JS_Blocked: +- case JS_WaitFD: +- case JS_WaitSD: +- case JS_WaitStoreRes: +- case JS_WaitClientRes: +- case JS_WaitJobRes: +- case JS_WaitPriority: +- case JS_WaitMaxJobs: +- case JS_WaitStartTime: +- case JS_Differences: +- cancel = true; +- break; +- case JS_Terminated: +- case JS_ErrorTerminated: +- case JS_Canceled: +- case JS_FatalError: +- cancel = false; +- break; +- default: +- Jmsg1(jcr, M_ERROR, 0, _("Unhandled job status code %d\n"), +- jcr->JobStatus); +- } +- +- Dmsg3(200, "MaxRunTime result: %scancel JCR %p (%s)\n", +- cancel ? "" : "do not ", jcr, jcr->Job); +-#endif + return true; + } + diff --git a/2.0.3-scheduler-next-hour.patch b/2.0.3-scheduler-next-hour.patch new file mode 100644 index 0000000..115e86b --- /dev/null +++ b/2.0.3-scheduler-next-hour.patch @@ -0,0 +1,88 @@ + + This patch should fix bug #812 where the DST time shift was + incorrectly handled. This patch was submitted by Martin Simmons. + Apply it to Bacula version 2.0.3 with: + + cd + patch -p0 <2.0.3-scheduler-next-hour.patch + make + ... + make install + +Index: src/dird/scheduler.c +=================================================================== +--- src/dird/scheduler.c (revision 4445) ++++ src/dird/scheduler.c (working copy) +@@ -175,11 +175,11 @@ + } + /* Recheck at least once per minute */ + bmicrosleep((next_check_secs < twait)?next_check_secs:twait, 0); +- /* Attempt to handle clock shift from/to daylight savings time ++ /* Attempt to handle clock shift (but not daylight savings time changes) + * we allow a skew of 10 seconds before invalidating everything. + */ + now = time(NULL); +- if (now < prev+10 || now > (prev+next_check_secs+10)) { ++ if (now < prev-10 || now > (prev+next_check_secs+10)) { + schedules_invalidated = true; + } + } +@@ -284,6 +284,9 @@ + wom = mday / 7; + woy = tm_woy(now); /* get week of year */ + ++ Dmsg7(dbglvl, "now = %x: h=%d m=%d md=%d wd=%d wom=%d woy=%d\n", ++ now, hour, month, mday, wday, wom, woy); ++ + /* + * Compute values for next hour from now. + * We do this to be sure we don't miss a job while +@@ -299,6 +302,9 @@ + nh_wom = nh_mday / 7; + nh_woy = tm_woy(now); /* get week of year */ + ++ Dmsg7(dbglvl, "nh = %x: h=%d m=%d md=%d wd=%d wom=%d woy=%d\n", ++ next_hour, nh_hour, nh_month, nh_mday, nh_wday, nh_wom, nh_woy); ++ + /* Loop through all jobs */ + LockRes(); + foreach_res(job, R_JOB) { +@@ -351,24 +357,20 @@ + + Dmsg3(dbglvl, "run@%p: run_now=%d run_nh=%d\n", run, run_now, run_nh); + +- /* find time (time_t) job is to be run */ +- (void)localtime_r(&now, &tm); /* reset tm structure */ +- tm.tm_min = run->minute; /* set run minute */ +- tm.tm_sec = 0; /* zero secs */ +- if (run_now) { +- runtime = mktime(&tm); +- add_job(job, run, now, runtime); +- } +- /* If job is to be run in the next hour schedule it */ +- if (run_nh) { +- /* Set correct values */ +- tm.tm_hour = nh_hour; +- tm.tm_mday = nh_mday + 1; /* fixup because we biased for tests above */ +- tm.tm_mon = nh_month; +- tm.tm_year = nh_year; +- runtime = mktime(&tm); +- add_job(job, run, now, runtime); +- } ++ if (run_now || run_nh) { ++ /* find time (time_t) job is to be run */ ++ (void)localtime_r(&now, &tm); /* reset tm structure */ ++ tm.tm_min = run->minute; /* set run minute */ ++ tm.tm_sec = 0; /* zero secs */ ++ runtime = mktime(&tm); ++ if (run_now) { ++ add_job(job, run, now, runtime); ++ } ++ /* If job is to be run in the next hour schedule it */ ++ if (run_nh) { ++ add_job(job, run, now, runtime + 3600); ++ } ++ } + } + } + UnlockRes(); diff --git a/2.0.3-tls-disconnect.patch b/2.0.3-tls-disconnect.patch new file mode 100644 index 0000000..e634cb0 --- /dev/null +++ b/2.0.3-tls-disconnect.patch @@ -0,0 +1,50 @@ + +This patch should fix the spurious connection drops that fail jobs +as reported in bug #888. +Apply it to version 2.0.3 (possibly earlier versions of 2.0) with: + + cd + patch -p0 <2.0.3-tls-disconnect.patch + make + ... + make install + +Index: src/lib/tls.c +=================================================================== +--- src/lib/tls.c (revision 4668) ++++ src/lib/tls.c (working copy) +@@ -540,14 +540,6 @@ + * The first time to initiate the shutdown handshake, and the second to + * receive the peer's reply. + * +- * However, it is valid to close the SSL connection after the initial +- * shutdown notification is sent to the peer, without waiting for the +- * peer's reply, as long as you do not plan to re-use that particular +- * SSL connection object. +- * +- * Because we do not re-use SSL connection objects, I do not bother +- * calling SSL_shutdown a second time. +- * + * In addition, if the underlying socket is blocking, SSL_shutdown() + * will not return until the current stage of the shutdown process has + * completed or an error has occured. By setting the socket blocking +@@ -560,6 +552,10 @@ + flags = bnet_set_blocking(bsock); + + err = SSL_shutdown(bsock->tls->openssl); ++ if (err == 0) { ++ /* Finish up the closing */ ++ err = SSL_shutdown(bsock->tls->openssl); ++ } + + switch (SSL_get_error(bsock->tls->openssl, err)) { + case SSL_ERROR_NONE: +@@ -574,8 +570,6 @@ + break; + } + +- /* Restore saved flags */ +- bnet_restore_blocking(bsock, flags); + } + + /* Does all the manual labor for tls_bsock_readn() and tls_bsock_writen() */ diff --git a/2.0.3-verify.patch b/2.0.3-verify.patch new file mode 100644 index 0000000..8dc7100 --- /dev/null +++ b/2.0.3-verify.patch @@ -0,0 +1,117 @@ +This patch should fix the problem reported in bug #803 where a Verify +job select the JobId to verified at schedule time rather than at runtime. +This makes it difficult or impossible to schedule a verify just after +a backup. + +Apply this patch to Bacula version 2.0.3 (probably 2.0.2 as well) with: + + cd + patch -p0 <2.0.3-verify.patch + make + ... + make install + +Index: src/dird/verify.c +=================================================================== +--- src/dird/verify.c (revision 4353) ++++ src/dird/verify.c (working copy) +@@ -40,6 +25,21 @@ + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ftf@fsfeurope.org. + */ ++/* ++ * ++ * Bacula Director -- verify.c -- responsible for running file verification ++ * ++ * Kern Sibbald, October MM ++ * ++ * Basic tasks done here: ++ * Open DB ++ * Open connection with File daemon and pass him commands ++ * to do the verify. ++ * When the File daemon sends the attributes, compare them to ++ * what is in the DB. ++ * ++ * Version $Id: 2.0.3-verify.patch,v 1.1 2007/07/24 20:22:20 ixs Exp $ ++ */ + + + #include "bacula.h" +@@ -66,6 +66,22 @@ + */ + bool do_verify_init(JCR *jcr) + { ++ return true; ++} ++ ++ ++/* ++ * Do a verification of the specified files against the Catlaog ++ * ++ * Returns: false on failure ++ * true on success ++ */ ++bool do_verify(JCR *jcr) ++{ ++ const char *level; ++ BSOCK *fd; ++ int stat; ++ char ed1[100]; + JOB_DBR jr; + JobId_t verify_jobid = 0; + const char *Name; +@@ -74,12 +90,16 @@ + + memset(&jcr->previous_jr, 0, sizeof(jcr->previous_jr)); + +- Dmsg1(9, "bdird: created client %s record\n", jcr->client->hdr.name); +- + /* +- * Find JobId of last job that ran. E.g. +- * for VERIFY_CATALOG we want the JobId of the last INIT. +- * for VERIFY_VOLUME_TO_CATALOG, we want the JobId of the ++ * Find JobId of last job that ran. Note, we do this when ++ * the job actually starts running, not at schedule time, ++ * so that we find the last job that terminated before ++ * this job runs rather than before it is scheduled. This ++ * permits scheduling a Backup and Verify at the same time, ++ * but with the Verify at a lower priority. ++ * ++ * For VERIFY_CATALOG we want the JobId of the last INIT. ++ * For VERIFY_VOLUME_TO_CATALOG, we want the JobId of the + * last backup Job. + */ + if (jcr->JobLevel == L_VERIFY_CATALOG || +@@ -89,7 +109,7 @@ + if (jcr->verify_job && + (jcr->JobLevel == L_VERIFY_VOLUME_TO_CATALOG || + jcr->JobLevel == L_VERIFY_DISK_TO_CATALOG)) { +- Name = jcr->verify_job->hdr.name; ++ Name = jcr->verify_job->name(); + } else { + Name = NULL; + } +@@ -149,23 +169,7 @@ + jcr->fileset = jcr->verify_job->fileset; + } + Dmsg2(100, "ClientId=%u JobLevel=%c\n", jcr->previous_jr.ClientId, jcr->JobLevel); +- return true; +-} + +- +-/* +- * Do a verification of the specified files against the Catlaog +- * +- * Returns: false on failure +- * true on success +- */ +-bool do_verify(JCR *jcr) +-{ +- const char *level; +- BSOCK *fd; +- int stat; +- char ed1[100]; +- + if (!db_update_job_start_record(jcr, jcr->db, &jcr->jr)) { + Jmsg(jcr, M_FATAL, 0, "%s", db_strerror(jcr->db)); + return false; diff --git a/bacula-config.patch b/bacula-config.patch new file mode 100644 index 0000000..d51d792 --- /dev/null +++ b/bacula-config.patch @@ -0,0 +1,256 @@ +--- bacula-2.0.2/src/gnome2-console/gnome-console.conf.in.orig 2007-02-06 13:35:12.000000000 +0100 ++++ bacula-2.0.2/src/gnome2-console/gnome-console.conf.in 2007-02-06 13:35:25.000000000 +0100 +@@ -3,9 +3,9 @@ + # + + Director { +- Name = @hostname@-dir ++ Name = bacula-dir + DIRport = @dir_port@ +- address = @hostname@ ++ address = server.example.com + Password = "@dir_password@" + } + +--- bacula-2.0.2/src/dird/bacula-dir.conf.in.orig 2007-02-06 13:33:19.000000000 +0100 ++++ bacula-2.0.2/src/dird/bacula-dir.conf.in 2007-02-06 13:34:49.000000000 +0100 +@@ -13,7 +13,7 @@ + # + + Director { # define myself +- Name = @hostname@-dir ++ Name = bacula-dir + DIRport = @dir_port@ # where we listen for UA connections + QueryFile = "@scriptdir@/query.sql" + WorkingDirectory = "@working_dir@" +@@ -27,7 +27,7 @@ + Name = "DefaultJob" + Type = Backup + Level = Incremental +- Client = @hostname@-fd ++ Client = bacula-fd + FileSet = "Full Set" + Schedule = "WeeklyCycle" + Storage = File +@@ -48,7 +48,7 @@ + + #Job { + # Name = "Client2" +-# Client = @hostname@2-fd ++# Client = bacula2-fd + # JobDefs = "DefaultJob" + # Write Bootstrap = "@working_dir@/Client2.bsr" + #} +@@ -75,7 +75,7 @@ + Job { + Name = "RestoreFiles" + Type = Restore +- Client=@hostname@-fd ++ Client=bacula-fd + FileSet="Full Set" + Storage = File + Pool = Default +@@ -149,8 +149,8 @@ + + # Client (File Services) to backup + Client { +- Name = @hostname@-fd +- Address = @hostname@ ++ Name = bacula-fd ++ Address = client.example.com + FDPort = @fd_port@ + Catalog = MyCatalog + Password = "@fd_password@" # password for FileDaemon +@@ -164,8 +164,8 @@ + # You should change Name, Address, and Password before using + # + #Client { +-# Name = @hostname@2-fd +-# Address = @hostname@2 ++# Name = bacula2-fd ++# Address = client2.example.com + # FDPort = @fd_port@ + # Catalog = MyCatalog + # Password = "@fd_password@2" # password for FileDaemon 2 +@@ -179,7 +179,7 @@ + Storage { + Name = File + # Do not use "localhost" here +- Address = @hostname@ # N.B. Use a fully qualified name here ++ Address = storage.example.com # N.B. Use a fully qualified name here + SDPort = @sd_port@ + Password = "@sd_password@" + Device = FileStorage +@@ -192,7 +192,7 @@ + #Storage { + # Name = DDS-4 + # Do not use "localhost" here +-# Address = @hostname@ # N.B. Use a fully qualified name here ++# Address = storage.example.com # N.B. Use a fully qualified name here + # SDPort = @sd_port@ + # Password = "@sd_password@" # password for Storage daemon + # Device = DDS-4 # must be same as Device in Storage daemon +@@ -204,7 +204,7 @@ + #Storage { + # Name = "8mmDrive" + # Do not use "localhost" here +-# Address = @hostname@ # N.B. Use a fully qualified name here ++# Address = storage.example.com # N.B. Use a fully qualified name here + # SDPort = @sd_port@ + # Password = "@sd_password@" + # Device = "Exabyte 8mm" +@@ -215,7 +215,7 @@ + #Storage { + # Name = "DVD" + # Do not use "localhost" here +-# Address = @hostname@ # N.B. Use a fully qualified name here ++# Address = storage.example.com # N.B. Use a fully qualified name here + # SDPort = @sd_port@ + # Password = "@sd_password@" + # Device = "DVD Writer" +@@ -285,7 +285,7 @@ + # Restricted console used by tray-monitor to get the status of the director + # + Console { +- Name = @hostname@-mon ++ Name = bacula-mon + Password = "@mon_dir_password@" + CommandACL = status, .status + } +--- bacula-2.0.2/src/filed/bacula-fd.conf.in.orig 2007-02-06 13:30:59.000000000 +0100 ++++ bacula-2.0.2/src/filed/bacula-fd.conf.in 2007-02-06 13:31:25.000000000 +0100 +@@ -11,7 +11,7 @@ + # List Directors who are permitted to contact this File daemon + # + Director { +- Name = @hostname@-dir ++ Name = bacula-dir + Password = "@fd_password@" + } + +@@ -20,7 +20,7 @@ + # status of the file daemon + # + Director { +- Name = @hostname@-mon ++ Name = bacula-mon + Password = "@mon_fd_password@" + Monitor = yes + } +@@ -29,7 +29,7 @@ + # "Global" File daemon configuration specifications + # + FileDaemon { # this is me +- Name = @hostname@-fd ++ Name = bacula-fd + FDport = @fd_port@ # where we listen for the director + WorkingDirectory = @working_dir@ + Pid Directory = @piddir@ +@@ -39,5 +39,5 @@ + # Send all messages except skipped files back to Director + Messages { + Name = Standard +- director = @hostname@-dir = all, !skipped, !restored ++ director = bacula-dir = all, !skipped, !restored + } +--- bacula-2.0.2/src/console/bconsole.conf.in.orig 2007-02-06 13:32:30.000000000 +0100 ++++ bacula-2.0.2/src/console/bconsole.conf.in 2007-02-06 13:33:06.000000000 +0100 +@@ -3,8 +3,8 @@ + # + + Director { +- Name = @hostname@-dir ++ Name = bacula-dir + DIRport = @dir_port@ +- address = @hostname@ ++ address = server.example.com + Password = "@dir_password@" + } +--- bacula-2.0.2/src/stored/bacula-sd.conf.in.orig 2007-02-06 13:31:56.000000000 +0100 ++++ bacula-2.0.2/src/stored/bacula-sd.conf.in 2007-02-06 13:32:15.000000000 +0100 +@@ -11,7 +11,7 @@ + # + + Storage { # definition of myself +- Name = @hostname@-sd ++ Name = bacula-sd + SDPort = @sd_port@ # Director's port + WorkingDirectory = "@working_dir@" + Pid Directory = "@piddir@" +@@ -22,7 +22,7 @@ + # List Directors who are permitted to contact Storage daemon + # + Director { +- Name = @hostname@-dir ++ Name = bacula-dir + Password = "@sd_password@" + } + +@@ -31,7 +31,7 @@ + # status of the storage daemon + # + Director { +- Name = @hostname@-mon ++ Name = bacula-mon + Password = "@mon_sd_password@" + Monitor = yes + } +@@ -204,5 +204,5 @@ + # + Messages { + Name = Standard +- director = @hostname@-dir = all ++ director = bacula-dir = all + } +--- bacula-2.0.2/src/wx-console/wx-console.conf.in.orig 2007-02-06 13:37:12.000000000 +0100 ++++ bacula-2.0.2/src/wx-console/wx-console.conf.in 2007-02-06 13:47:02.000000000 +0100 +@@ -3,8 +3,8 @@ + # + + Director { +- Name = @hostname@-dir ++ Name = bacula-dir + DIRport = @dir_port@ +- address = @hostname@ ++ address = server.example.com + Password = "@dir_password@" + } +--- bacula-2.0.2/src/tray-monitor/tray-monitor.conf.in.orig 2007-02-06 13:47:13.000000000 +0100 ++++ bacula-2.0.2/src/tray-monitor/tray-monitor.conf.in 2007-02-06 13:47:55.000000000 +0100 +@@ -3,27 +3,27 @@ + # + + Monitor { +- Name = @hostname@-mon ++ Name = bacula-mon + Password = "@mon_dir_password@" # password for the Directors + RefreshInterval = 5 seconds + } + + Client { +- Name = @hostname@-fd +- Address = @hostname@ ++ Name = bacula-fd ++ Address = client.example.com + FDPort = @fd_port@ + Password = "@mon_fd_password@" # password for FileDaemon + } + + Storage { +- Name = @hostname@-sd +- Address = @hostname@ ++ Name = bacula-sd ++ Address = storage.example.com + SDPort = @sd_port@ + Password = "@mon_sd_password@" # password for StorageDaemon + } + + Director { +- Name = @hostname@-dir ++ Name = bacula-dir + DIRport = @dir_port@ +- address = @hostname@ +-} +\ No newline at end of file ++ address = server.example.com ++} diff --git a/bacula-dir.init b/bacula-dir.init new file mode 100644 index 0000000..c77c521 --- /dev/null +++ b/bacula-dir.init @@ -0,0 +1,128 @@ +#!/bin/bash +# +# bacula-dir This shell script takes care of starting and stopping +# the bacula-dir daemon, the backup director controling +# the backup jobs. +# +# chkconfig: - 80 20 +# description: Bacula-dir is the Backup-server, which is the program \ +# that schedules backups and controls the bacula-client and \ +# the bacula-storage daemons. +# processname: bacula-dir +# config: /etc/bacula/bacula-dir.conf +# pidfile: /var/run/bacula-dir.9101.pid + +# Source function library. +. /etc/init.d/functions + +# Source configuration. +if [ -f /etc/sysconfig/bacula-dir ] ; then + . /etc/sysconfig/bacula-dir +fi + +RETVAL=0 +prog="bacula-dir" +CONFIG="/etc/bacula/bacula-dir.conf" +OPTS="-c $CONFIG" + +checkconf() { + # Check if we still have our @@PLACEHOLDERS@@ in the config. + # If yes, refuse to start, the user has never touched the config. + grep -q '^[^#].*_PASSWORD@@' $CONFIG + if [ $? -eq 0 ]; then + echo -n "Error: Not been configured" + echo_failure + echo + exit 1 + fi +} + + +checkdatabase() { + # First, get the currently selected database backend from the + # alternatives system. + DB=$(LANG=C alternatives --display bacula-dir | grep 'link currently points to' | awk -F. '{ print $2 }') + case "$DB" in + sqlite) + # No check needed to see if the Database is running + ;; + mysql) + # Check if mysqld is running + service mysqld status > /dev/null 2>&1 + if [ $? -ne 0 ]; then + echo -n "Error: MySQL not running" + echo_failure + echo + exit 1 + fi + ;; + postgresql) + # Check if postgresql is running + service postgresql status > /dev/null 2>&1 + if [ $? -ne 0 ]; then + echo -n "Error: PostgreSQL not running" + echo_failure + echo + exit 1 + fi + ;; + *) + echo -n "Error: Unknown database backend" + echo_failure + echo + exit 1 + ;; + esac +} + +start() { + echo -n "Starting $prog: " + checkconf +# Removed for now, as the db might not be on localhost +# checkdatabase + daemon $prog $OPTS + RETVAL=$? + echo + [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog + return $RETVAL +} + +stop() { + echo -n "Shutting down $prog: " + killproc $prog + RETVAL=$? + echo + [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog + return $RETVAL +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + status) + status $prog + ;; + restart) + stop + start + RETVAL=$? + ;; + reload) + ;; + condrestart) + if [ -f /var/lock/subsys/$prog ]; then + stop + start + RETVAL=$? + fi + ;; + *) + echo "Usage: $prog {start|stop|status|reload|restart}" + exit 1 + ;; +esac +exit $? diff --git a/bacula-director-configuration.patch b/bacula-director-configuration.patch new file mode 100644 index 0000000..4e843a7 --- /dev/null +++ b/bacula-director-configuration.patch @@ -0,0 +1,34 @@ +--- bacula-1.38.11/src/dird/bacula-dir.conf.in.orig 2006-09-03 03:13:26.000000000 +0200 ++++ bacula-1.38.11/src/dird/bacula-dir.conf.in 2006-09-03 03:14:46.000000000 +0200 +@@ -15,7 +15,7 @@ + Director { # define myself + Name = @hostname@-dir + DIRport = @dir_port@ # where we listen for UA connections +- QueryFile = "@scriptdir@/query.sql" ++ QueryFile = "/etc/bacula/query.sql" + WorkingDirectory = "@working_dir@" + PidDirectory = "@piddir@" + Maximum Concurrent Jobs = 1 +@@ -101,11 +101,10 @@ + # if you have other partitons such as /usr or /home + # you will probably want to add them too. + # +-# By default this is defined to point to the Bacula build +-# directory to give a reasonable FileSet to backup to +-# disk storage during initial testing. ++# This File-directive would backup your whole filesystem. ++# It is disabled by default + # +- File = @BUILD_DIR@ ++# File = / + } + + # +@@ -266,7 +266,7 @@ + mailcommand = "@sbindir@/bsmtp -h @smtp_host@ -f \"\(Bacula\) %r\" -s \"Bacula daemon message\" %r" + mail = @job_email@ = all, !skipped + console = all, !skipped, !saved +- append = "@working_dir@/log" = all, !skipped ++ append = "/var/log/bacula.log" = all, !skipped + } + diff --git a/bacula-fd.init b/bacula-fd.init new file mode 100644 index 0000000..3374e6f --- /dev/null +++ b/bacula-fd.init @@ -0,0 +1,89 @@ +#!/bin/bash +# +# bacula-fd This shell script takes care of starting and stopping +# the bacula-fd daemon, the backup client enabling bacula +# to backup the local machine. +# +# chkconfig: - 80 20 +# description: Bacula-fd is a Backup-client, which is the program \ +# that enables the bacula-server to backup the local \ +# machine. +# processname: bacula-fd +# config: /etc/bacula/bacula-fd.conf +# pidfile: /var/run/bacula-fd.9102.pid + +# Source function library. +. /etc/init.d/functions + +# Source configuration. +if [ -f /etc/sysconfig/bacula-fd ] ; then + . /etc/sysconfig/bacula-fd +fi + +RETVAL=0 +prog="bacula-fd" +CONFIG="/etc/bacula/bacula-fd.conf" +OPTS="-c $CONFIG" + +checkconf() { + # Check if we still have our @@PLACEHOLDERS@@ in the config. + # If yes, refuse to start, the user has never touched the config. + grep -q '_PASSWORD@@' $CONFIG + if [ $? -eq 0 ]; then + echo -n "Error: Not been configured" + echo_failure + echo + exit 1 + fi +} + + +start() { + echo -n "Starting $prog: " + checkconf + daemon $prog $OPTS + RETVAL=$? + echo + [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog + return $RETVAL +} + +stop() { + echo -n "Shutting down $prog: " + killproc $prog + RETVAL=$? + echo + [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog + return $RETVAL +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + status) + status $prog + ;; + restart) + stop + start + RETVAL=$? + ;; + reload) + ;; + condrestart) + if [ -f /var/lock/subsys/$prog ]; then + stop + start + RETVAL=$? + fi + ;; + *) + echo "Usage: $prog {start|stop|status|reload|restart}" + exit 1 + ;; +esac +exit $? diff --git a/bacula-gconsole.desktop b/bacula-gconsole.desktop new file mode 100644 index 0000000..835d9f5 --- /dev/null +++ b/bacula-gconsole.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Version=1.0 +Encoding=UTF-8 +Name=Bacula Console +GenericName=Backup Management Console +Comment=Control your Bacula Server +Exec=gnome-console -c /etc/bacula/wxconsole.conf +Icon=bacula.png +Terminal=false +Type=Application +Categories=System;Application;Utility + diff --git a/bacula-pamd.patch b/bacula-pamd.patch new file mode 100644 index 0000000..5d1dcad --- /dev/null +++ b/bacula-pamd.patch @@ -0,0 +1,23 @@ +--- bacula-2.0.3/scripts/wxconsole.pamd.orig 2007-07-11 18:43:10.000000000 +0200 ++++ bacula-2.0.3/scripts/wxconsole.pamd 2007-07-11 18:43:23.000000000 +0200 +@@ -1,7 +1,7 @@ + #%PAM-1.0 + auth sufficient pam_rootok.so + auth sufficient pam_timestamp.so +-auth required pam_stack.so service=system-auth ++auth include system-auth + session optional pam_xauth.so + session optional pam_timestamp.so + account required pam_permit.so +--- bacula-2.0.3/scripts/gnome-console.pamd.orig 2007-07-11 18:42:33.000000000 +0200 ++++ bacula-2.0.3/scripts/gnome-console.pamd 2007-07-11 18:42:57.000000000 +0200 +@@ -1,7 +1,7 @@ + #%PAM-1.0 + auth sufficient pam_rootok.so + auth sufficient pam_timestamp.so +-auth required pam_stack.so service=system-auth ++auth include system-auth + session optional pam_xauth.so + session optional pam_timestamp.so + account required pam_permit.so + diff --git a/bacula-sd.init b/bacula-sd.init new file mode 100644 index 0000000..14e3255 --- /dev/null +++ b/bacula-sd.init @@ -0,0 +1,127 @@ +#!/bin/bash +# +# bacula-sd This shell script takes care of starting and stopping +# the bacula-sd daemon, the storage daemon responsible +# for accessing the backup storage device. +# +# chkconfig: - 80 20 +# description: Bacula-sd is the storage-server, which is the program \ +# that accesses the storage device. +# processname: bacula-sd +# config: /etc/bacula/bacula-sd.conf +# pidfile: /var/run/bacula-dir.9103.pid + +# Source function library. +. /etc/init.d/functions + +# Source configuration. +if [ -f /etc/sysconfig/bacula-sd ] ; then + . /etc/sysconfig/bacula-sd +fi + +RETVAL=0 +prog="bacula-sd" +CONFIG="/etc/bacula/bacula-sd.conf" +OPTS="-c $CONFIG" + +checkconf() { + # Check if we still have our @@PLACEHOLDERS@@ in the config. + # If yes, refuse to start, the user has never touched the config. + grep -q '^[^#].*_PASSWORD@@' $CONFIG + if [ $? -eq 0 ]; then + echo -n "Error: Not been configured" + echo_failure + echo + exit 1 + fi +} + + +checkdatabase() { + # First, get the currently selected database backend from the + # alternatives system. + DB=$(LANG=C alternatives --display bacula-sd | grep 'link currently points to' | awk -F. '{ print $2 }') + case "$DB" in + sqlite) + # No check needed to see if the Database is running + ;; + mysql) + # Check if mysqld is running + service mysqld status > /dev/null 2>&1 + if [ $? -ne 0 ]; then + echo -n "Error: MySQL not running" + echo_failure + echo + exit 1 + fi + ;; + postgresql) + # Check if postgresql is running + service postgresql status > /dev/null 2>&1 + if [ $? -ne 0 ]; then + echo -n "Error: PostgreSQL not running" + echo_failure + echo + exit 1 + fi + ;; + *) + echo -n "Error: Unknown database backend" + echo_failure + echo + exit 1 + ;; + esac +} + +start() { + echo -n "Starting $prog: " + checkconf +# Disabled, the DB does not necessarily run on the same machine +# checkdatabase + daemon $prog $OPTS + RETVAL=$? + echo + [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog + return $RETVAL +} + +stop() { + echo -n "Shutting down $prog: " + killproc $prog + RETVAL=$? + echo + [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog + return $RETVAL +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + status) + status $prog + ;; + restart) + stop + start + RETVAL=$? + ;; + reload) + ;; + condrestart) + if [ -f /var/lock/subsys/$prog ]; then + stop + start + RETVAL=$? + fi + ;; + *) + echo "Usage: $prog {start|stop|status|reload|restart}" + exit 1 + ;; +esac +exit $? diff --git a/bacula-traymonitor.desktop b/bacula-traymonitor.desktop new file mode 100644 index 0000000..51f4d9a --- /dev/null +++ b/bacula-traymonitor.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Version=1.0 +Encoding=UTF-8 +Name=Bacula Monitor +GenericName=Bacula Tray Monitor +Comment=Monitor your Bacula Backup server +Exec=bacula-tray-monitor -c /etc/bacula/tray-monitor.conf +Icon=bacula-tray-monitor.xpm +Terminal=false +Type=Application +Categories=System;Application;Utility diff --git a/bacula-wxconsole.desktop b/bacula-wxconsole.desktop new file mode 100644 index 0000000..840332b --- /dev/null +++ b/bacula-wxconsole.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Version=1.0 +Encoding=UTF-8 +Name=Bacula WX Console +GenericName=Backup Management Console +Comment=Control your Bacula Server +Exec=wxconsole -c /etc/bacula/wxconsole.conf +Icon=wxwin16x16.xpm +Terminal=false +Type=Application +Categories=System;Application;Utility diff --git a/bacula-wxconsole.patch b/bacula-wxconsole.patch new file mode 100644 index 0000000..ece6386 --- /dev/null +++ b/bacula-wxconsole.patch @@ -0,0 +1,10 @@ +--- bacula-2.0.2/src/wx-console/wxbrestorepanel.cpp.orig 2007-02-06 21:32:02.000000000 +0100 ++++ bacula-2.0.2/src/wx-console/wxbrestorepanel.cpp 2007-02-06 21:32:20.000000000 +0100 +@@ -80,6 +80,7 @@ + #include "unmarked.xpm" + #include "marked.xpm" + #include "partmarked.xpm" ++#include + #include + + /* A macro named Yield is defined under MinGW */ diff --git a/bacula.logrotate b/bacula.logrotate new file mode 100644 index 0000000..c14fede --- /dev/null +++ b/bacula.logrotate @@ -0,0 +1,9 @@ +# Bacula logrotate script + +/var/log/bacula/*.log { + monthly + rotate 4 + notifempty + missingok +} + diff --git a/bacula.spec b/bacula.spec new file mode 100644 index 0000000..ce65d3f --- /dev/null +++ b/bacula.spec @@ -0,0 +1,968 @@ +%define working_dir /var/spool/bacula +%define script_dir /usr/libexec/bacula +#%define rescue_version 2.0.0 +%define docs_version %{version} +%define gui_version %{version} +%define config_dir %{_sysconfdir}/bacula + +Summary: Cross platform network backup for Linux, Unix, Mac and Windows +Name: bacula +Version: 2.0.3 +Release: 8%{?dist} +License: GPL +Group: System Environment/Daemons +Source0: http://download.sourceforge.net/bacula/bacula-%{version}.tar.gz +Source1: http://download.sourceforge.net/bacula/bacula-docs-%{docs_version}.tar.gz +#Source2: http://download.sourceforge.net/bacula/bacula-rescue-%{rescue_version}.tar.gz +Source3: bacula-gconsole.desktop +Source4: bacula-wxconsole.desktop +Source5: bacula-traymonitor.desktop +Source6: bacula.logrotate +Source7: bacula-fd.init +Source8: bacula-dir.init +Source9: bacula-sd.init +#Source10: http://download.sourceforge.net/bacula/bacula-gui-%{gui_version}.tar.gz +#Source11: bacula-web.apache +Patch0: bacula-director-configuration.patch +Patch1: bacula-config.patch +Patch2: bacula-wxconsole.patch +Patch3: bacula-pamd.patch +Patch4: 2.0.3-ampm.patch +Patch5: 2.0.3-maxbyteslist.patch +Patch6: 2.0.3-maxwaittime.patch +Patch7: 2.0.3-scheduler-next-hour.patch +Patch8: 2.0.3-verify.patch +Patch9: 2.0.3-tls-disconnect.patch +#Patch10: bacula-web-smarty.patch +URL: http://www.bacula.org +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +BuildRequires: openssl-devel, atk-devel, ncurses-devel, pango-devel, perl +BuildRequires: libstdc++-devel, libxml2-devel, zlib-devel, pkgconfig +BuildRequires: libtermcap-devel, gtk2-devel, libgnomeui-devel, GConf2-devel +BuildRequires: glibc-devel, ORBit2-devel, libart_lgpl-devel, freetype-devel +BuildRequires: libbonobo-devel, libbonoboui-devel, bonobo-activation-devel +BuildRequires: mysql-devel, cdrecord, postgresql-devel, wxGTK-devel +BuildRequires: desktop-file-utils, python-devel, sqlite-devel, sed, +BuildRequires: libacl-devel, latex2html, tetex-latex, tetex, ghostscript + +%if "%{fedora}" >= "7" +BuildRequires: tcp_wrappers-devel +%else +BuildRequires: tcp_wrappers +%endif + +%description +Bacula is a set of programs that allow you to manage the backup, +recovery, and verification of computer data across a network of +different computers. It is based on a client/server architecture and is +efficient and relatively easy to use, while offering many advanced +storage management features that make it easy to find and recover lost +or damaged files. + + +%package director-mysql +Summary: Bacula Director with MySQL database support +Group: System Environment/Daemons +Provides: bacula-director = %{version}-%{release} +Requires: bacula-director-common = %{version}-%{release} +Requires: bacula-common = %{version}-%{release} +Requires: mysql-server + +%description director-mysql +Bacula is a set of programs that allow you to manage the backup, +recovery, and verification of computer data across a network of +different computers. It is based on a client/server architecture. + +This package contains the bacula director, the server which controls +your backup run. +This director has support for the MySQL database. + + +%package director-sqlite +Summary: Bacula Director with sqlite database support +Group: System Environment/Daemons +Provides: bacula-director = %{version}-%{release} +Requires: bacula-director-common = %{version}-%{release} +Requires: bacula-common = %{version}-%{release} + +%description director-sqlite +Bacula is a set of programs that allow you to manage the backup, +recovery, and verification of computer data across a network of +different computers. It is based on a client/server architecture. + +This package contains the bacula director, the server which controls +your backup run. +This director has support for the sqlite database. + + +%package director-postgresql +Summary: Bacula Director with PostgresSQL database support +Group: System Environment/Daemons +Provides: bacula-director = %{version}-%{release} +Requires: bacula-director-common = %{version}-%{release} +Requires: bacula-common = %{version}-%{release} +Requires: postgresql-server + +%description director-postgresql +Bacula is a set of programs that allow you to manage the backup, +recovery, and verification of computer data across a network of +different computers. It is based on a client/server architecture. + +This package contains the bacula director, the server which controls +your backup run. +This director has support for the PostgresSQL database. + + +%package director-common +Summary: Common Bacula Director files +Group: System Environment/Daemons +Requires: bacula-director = %{version}-%{release} +Requires: bacula-common = %{version}-%{release} +Requires(pre): fedora-usermgmt +Requires(postun): fedora-usermgmt + +%description director-common +Bacula is a set of programs that allow you to manage the backup, +recovery, and verification of computer data across a network of +different computers. It is based on a client/server architecture. + +This package contains the common director files, which are shared +between all database backends. You have to select a possible +database backend though, which provides the needed bacula-director +dependency. Please choose from bacula-director-mysql, +bacula-director-sqlite or bacula-director-postgresql. + + +%package client +Summary: Bacula backup client +Group: System Environment/Daemons +Requires: bacula-common = %{version}-%{release} +Requires(post): /sbin/chkconfig +Requires(preun): /sbin/chkconfig +Requires(preun): /sbin/service +Requires(postun): /sbin/service + +%description client +Bacula is a set of programs that allow you to manage the backup, +recovery, and verification of computer data across a network of +different computers. It is based on a client/server architecture. + +This package contains the bacula client, the daemon running on the +system to be backed up. + + +%package storage-common +Summary: Common Bacula storage daemon files +Group: System Environment/Daemons +Requires: bacula-storage = %{version}-%{release} +Requires: bacula-common = %{version}-%{release} + +%description storage-common +Bacula is a set of programs that allow you to manage the backup, +recovery, and verification of computer data across a network of +different computers. It is based on a client/server architecture. + +This package contains the storage daemon, the daemon responsible for +writing the data received from the clients onto tape drives or other +mass storage devices. + + +%package storage-mysql +Summary: MySQL Bacula storage daemon files +Group: System Environment/Daemons +Provides: bacula-storage = %{version}-%{release} +Requires: bacula-storage-common = %{version}-%{release} +Requires: bacula-common = %{version}-%{release} +Requires: mysql-server + +%description storage-mysql +Bacula is a set of programs that allow you to manage the backup, +recovery, and verification of computer data across a network of +different computers. It is based on a client/server architecture. + +This package contains the storage daemon, the daemon responsible for +writing the data received from the clients onto tape drives or other +mass storage devices. + + +%package storage-sqlite +Summary: SQLite Bacula storage daemon files +Group: System Environment/Daemons +Provides: bacula-storage = %{version}-%{release} +Requires: bacula-storage-common = %{version}-%{release} +Requires: bacula-common = %{version}-%{release} + +%description storage-sqlite +Bacula is a set of programs that allow you to manage the backup, +recovery, and verification of computer data across a network of +different computers. It is based on a client/server architecture. + +This package contains the storage daemon, the daemon responsible for +writing the data received from the clients onto tape drives or other +mass storage devices. + + +%package storage-postgresql +Summary: Common Bacula storage daemon files +Group: System Environment/Daemons +Provides: bacula-storage = %{version}-%{release} +Requires: bacula-storage-common = %{version}-%{release} +Requires: bacula-common = %{version}-%{release} +Requires: postgresql-server + +%description storage-postgresql +Bacula is a set of programs that allow you to manage the backup, +recovery, and verification of computer data across a network of +different computers. It is based on a client/server architecture. + +This package contains the storage daemon, the daemon responsible for +writing the data received from the clients onto tape drives or other +mass storage devices. + + +%package common +Summary: Common Bacula utilities +Group: System Environment/Daemons +Requires(pre): fedora-usermgmt +Requires(postun): fedora-usermgmt + +%description common +Bacula is a set of programs that allow you to manage the backup, +recovery, and verification of computer data across a network of +different computers. It is based on a client/server architecture. + + +%package console +Summary: Bacula management console +Group: System Environment/Daemons + +%description console +Bacula is a set of programs that allow you to manage the backup, +recovery, and verification of computer data across a network of +different computers. It is based on a client/server architecture. + +This package contains the command-line management console for the bacula +backup system. + + +%package console-gnome +Summary: Bacula console for the Gnome desktop environment +Group: System Environment/Daemons +Requires: usermode + +%description console-gnome +Bacula is a set of programs that allow you to manage the backup, +recovery, and verification of computer data across a network of +different computers. It is based on a client/server architecture. + +This package contains the gnome version of the bacula management console + + +%package console-wxwidgets +Summary: Bacula console using the wx widgets toolkit +Group: System Environment/Daemons +Requires: usermode + +%description console-wxwidgets +Bacula is a set of programs that allow you to manage the backup, +recovery, and verification of computer data across a network of +different computers. It is based on a client/server architecture. + +This package contains the wxWidgets version of the bacula management +console. + + +%package traymonitor +Summary: Bacula monitor for the Gnome and KDE system tray +Group: System Environment/Daemons + +%description traymonitor +Bacula is a set of programs that allow you to manage the backup, +recovery, and verification of computer data across a network of +different computers. It is based on a client/server architecture. + +This package contains the Gnome- and KDE-compatible tray monitor to +monitor your bacula server. + + +#%package web +#Summary: Bacula Web Interface for monitoring the Backup status +#Group: System Environment/Daemons +#Conflicts: bacula-storage-sqlite +#Requires: php, webserver, php-pear-DB, php-gd, php-Smarty + +#%description web +#Bacula is a set of programs that allow you to manage the backup, +#recovery, and verification of computer data across a network of +#different computers. It is based on a client/server architecture. + +#This package contains the bacula-web PHP application, which is +#a management level tool for reporting Backup job status. + + +%package docs +Summary: Bacula documentation +Group: Documentation + +%description docs +Bacula is a set of programs that allow you to manage the backup, +recovery, and verification of computer data across a network of +different computers. It is based on a client/server architecture. + +This package contains the documentation for most of the bacula-packages. + + +%prep +%setup -q -c -n bacula-%{version} +%setup -q -a 1 -D -T +#%setup -q -a 2 -D -T +#%setup -q -a 10 -D -T + +# Patching and other source preparation +pushd bacula-%{version} +%patch0 -p1 +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p0 +%patch5 -p0 +%patch6 -p0 +%patch7 -p0 +%patch8 -p0 +%patch9 -p0 + +# Remove execution permissions from files we're packaging as docs later on +find examples -type f | xargs chmod -x +find updatedb -type f | xargs chmod -x +popd + +# Remove cvs left-overs +find -name '.cvsignore' | xargs rm -f + +# Fix perms of c files to silent rpmlint +find -type f -name '*.c' | xargs chmod -x +find -type f -name '*.h' | xargs chmod -x + +# GUI Stuff is postponed for later +#pushd bacula-gui-%{gui_version} +#%patch10 -p0 +#popd + +# We are building the source several times, each with a different storage backend +mkdir bacula-mysql bacula-postgresql bacula-sqlite + +%build +# Shell function to configure and build a Bacula tree +build() { +cp -rl ../bacula-%{version}/* . +%configure \ + --sysconfdir=%{_sysconfdir}/bacula \ + --with-dir-user=bacula \ + --with-dir-group=bacula \ + --with-sd-user=bacula \ + --with-sd-group=bacula \ + --with-fd-user=root \ + --with-fd-group=root \ + --with-dir-password=@@DIR_PASSWORD@@ \ + --with-fd-password=@@FD_PASSWORD@@ \ + --with-sd-password=@@SD_PASSWORD@@ \ + --with-mon-dir-password=@@MON_DIR_PASSWORD@@ \ + --with-mon-fd-password=@@MON_FD_PASSWORD@@ \ + --with-mon-sd-password=@@MON_SD_PASSWORD@@ \ + --with-working-dir=%{working_dir} \ + --with-scriptdir=%{script_dir} \ + --with-smtp-host=localhost \ + --with-subsys-dir=%{_localstatedir}/lock/subsys \ + --with-pid-dir=%{_localstatedir}/run \ + --enable-conio \ + --enable-largefile \ + --enable-gnome \ + --enable-wx-console \ + --enable-tray-monitor \ + --enable-build-dird \ + --enable-build-stored \ + --with-openssl \ + --with-tcp-wrappers \ + --with-python \ + --enable-smartalloc \ + --with-x \ + $* +# Scratch this, it is trouble +# --with-readline \ + +if test $? != 0; then + tail -500 config.log + : configure failed + exit 1 +fi + +%{__make} %{?_smp_mflags} + +} + +# Build sqlite director +pushd bacula-sqlite +%if 0%{?fedora}%{?rhel} + %if 0%{?fedora} + %if "%{fedora}" >= "5" + %define sqlite_suffix 3 + build --with-sqlite3 + %else + build --with-sqlite + %endif + %endif + %if 0%{?rhel} + %if "%{rhel}" >= "5" + %define sqlite_suffix 3 + build --with-sqlite3 + %else + build --with-sqlite + %endif + %endif +%else + echo 'Neither %%{fedora} nor %%{rhel} are defined.' + echo 'Please call rpmbuild with at least --define "fedora 7" or --define "rhel 5"' + echo 'depending on your release version you are building on.' + exit 1 +%endif +popd + +# Build MySQL director +pushd bacula-mysql + build --with-mysql +popd + +# Build PostgreSQL director +pushd bacula-postgresql + build --with-postgresql +popd + +# Build the docs +pushd bacula-docs-%{docs_version} + %configure --with-bacula=%{_builddir}/bacula-%{version}/bacula-%{version} + make +popd + +%install +rm -rf %{buildroot} + +pushd bacula-sqlite + make install DESTDIR=%{buildroot} + mv %{buildroot}%{_sbindir}/bacula-dir %{buildroot}%{_sbindir}/bacula-dir.sqlite + mv %{buildroot}%{_sbindir}/dbcheck %{buildroot}%{_sbindir}/dbcheck.sqlite + mv %{buildroot}%{_sbindir}/bcopy %{buildroot}%{_sbindir}/bcopy.sqlite + mv %{buildroot}%{_sbindir}/bscan %{buildroot}%{_sbindir}/bscan.sqlite + + for script in create_bacula_database drop_bacula_database drop_bacula_tables \ + grant_bacula_privileges make_bacula_tables make_catalog_backup \ + update_bacula_tables; do + mv %{buildroot}%{_libexecdir}/bacula/${script} %{buildroot}%{_libexecdir}/bacula/${script}.sqlite + done +popd + +pushd bacula-mysql + make install DESTDIR=%{buildroot} + mv %{buildroot}%{_sbindir}/bacula-dir %{buildroot}%{_sbindir}/bacula-dir.mysql + mv %{buildroot}%{_sbindir}/dbcheck %{buildroot}%{_sbindir}/dbcheck.mysql + mv %{buildroot}%{_sbindir}/bcopy %{buildroot}%{_sbindir}/bcopy.mysql + mv %{buildroot}%{_sbindir}/bscan %{buildroot}%{_sbindir}/bscan.mysql + + for script in create_bacula_database drop_bacula_database drop_bacula_tables \ + grant_bacula_privileges make_bacula_tables make_catalog_backup \ + update_bacula_tables; do + mv %{buildroot}%{_libexecdir}/bacula/${script} %{buildroot}%{_libexecdir}/bacula/${script}.mysql + done +popd + +pushd bacula-postgresql + make install DESTDIR=%{buildroot} + mv %{buildroot}%{_sbindir}/bacula-dir %{buildroot}%{_sbindir}/bacula-dir.postgresql + mv %{buildroot}%{_sbindir}/dbcheck %{buildroot}%{_sbindir}/dbcheck.postgresql + mv %{buildroot}%{_sbindir}/bcopy %{buildroot}%{_sbindir}/bcopy.postgresql + mv %{buildroot}%{_sbindir}/bscan %{buildroot}%{_sbindir}/bscan.postgresql + + for script in create_bacula_database drop_bacula_database drop_bacula_tables \ + grant_bacula_privileges make_bacula_tables make_catalog_backup \ + update_bacula_tables; do + mv %{buildroot}%{_libexecdir}/bacula/${script} %{buildroot}%{_libexecdir}/bacula/${script}.postgresql + done +popd + +pushd bacula-docs-%{docs_version} + # No install target anymore, we'll include the stuff directly in the %%files section + # make install DESTDIR=%{buildroot} +popd + +# GUI is not being packaged yet +#pushd bacula-gui-%{gui_version}/bacula-web +# mkdir -p %{buildroot}%{_datadir}/bacula-web +# cp -r -p * %{buildroot}%{_datadir}/bacula-web +# for f in ChangeLog CONTACT COPYING README TODO; do +# rm -f %{buildroot}%{_datadir}/bacula-web/$f +# done +# rm -f %{buildroot}%{_datadir}/bacula-web/tsmarty2c.php +# rm -rf %{buildroot}%{_datadir}/bacula-web/external_packages/smarty +# mv %{buildroot}%{_datadir}/bacula-web/configs/bacula.conf %{buildroot}%{_sysconfdir}/bacula/bacula-web.conf +# ln -sf /etc/bacula/bacula-web.conf %{buildroot}%{_datadir}/bacula-web/configs/bacula.conf +# install -D -m 644 %{SOURCE11} %{buildroot}%{_sysconfdir}/httpd/conf.d/bacula-web.conf +# mkdir -p %{buildroot}%{_localstatedir}/cache/bacula +#popd + + +# Rename some manpages +# Not needed right-now +#mv %{buildroot}%{_mandir}/man1/bacula-tray-monitor.1 %{buildroot}%{_mandir}/man1/tray-monitor.1 + + +# Fix some wrapper braindeadness +rm -f %{buildroot}%{_libexecdir}/bacula/bconsole +rm -f %{buildroot}%{_libexecdir}/bacula/gconsole +mv %{buildroot}%{_sbindir}/wx-console %{buildroot}%{_sbindir}/wxconsole +mv %{buildroot}%{_sysconfdir}/bacula/wx-console.conf %{buildroot}%{_sysconfdir}/bacula/wxconsole.conf + + +# Desktop Integration for the console apps and the traymonitor +mkdir -p %{buildroot}%{_bindir} +install -m 644 -D bacula-sqlite/scripts/bacula.png %{buildroot}%{_datadir}/pixmaps/bacula.png +install -m 644 -D bacula-sqlite/scripts/gnome-console.pamd %{buildroot}%{_sysconfdir}/pam.d/gnome-console +install -m 644 -D bacula-sqlite/scripts/gnome-console.console_apps %{buildroot}%{_sysconfdir}/security/console.apps/gnome-console +install -m 644 -D bacula-sqlite/src/wx-console/wxwin16x16.xpm %{buildroot}%{_datadir}/pixmaps/wxwin16x16.xpm +install -m 644 -D bacula-sqlite/scripts/wxconsole.pamd %{buildroot}%{_sysconfdir}/pam.d/wxconsole +install -m 644 -D bacula-sqlite/scripts/wxconsole.desktop.consolehelper %{buildroot}%{_sysconfdir}/security/console.apps/wxconsole +install -m 644 -D bacula-sqlite/src/tray-monitor/generic.xpm %{buildroot}%{_datadir}/pixmaps/bacula-tray-monitor.xpm + +ln -sf consolehelper %{buildroot}%{_bindir}/gnome-console +ln -sf consolehelper %{buildroot}%{_bindir}/wxconsole + +desktop-file-install --vendor="fedora" --dir=%{buildroot}%{_datadir}/applications %{SOURCE3} +desktop-file-install --vendor="fedora" --dir=%{buildroot}%{_datadir}/applications %{SOURCE4} +desktop-file-install --vendor="fedora" --dir=%{buildroot}%{_datadir}/applications %{SOURCE5} + + +# logrotate +mkdir -p %{buildroot}%{_localstatedir}/log/bacula +install -m 644 -D %{SOURCE6} %{buildroot}%{_sysconfdir}/logrotate.d/bacula + + +# And logwatch +install -m 755 -D bacula-sqlite/scripts/logwatch/bacula %{buildroot}%{_sysconfdir}/logwatch/scripts/services/bacula +install -m 644 -D bacula-sqlite/scripts/logwatch/logfile.bacula.conf %{buildroot}%{_sysconfdir}/logwatch/conf/logfiles/bacula.conf +install -m 644 -D bacula-sqlite/scripts/logwatch/services.bacula.conf %{buildroot}%{_sysconfdir}/logwatch/conf/services/bacula.conf + + +# Initscripts +install -m 755 -D %{SOURCE7} %{buildroot}%{_initrddir}/bacula-fd +install -m 755 -D %{SOURCE8} %{buildroot}%{_initrddir}/bacula-dir +install -m 755 -D %{SOURCE9} %{buildroot}%{_initrddir}/bacula-sd + + +# Wipe backup files from the multiple make install calls +rm -vf %{buildroot}%{_sysconfdir}/bacula/*.{new,old} +rm -vf %{buildroot}%{_libexecdir}/bacula/*.{new,old} + + +# Create the spooling +mkdir -p %{buildroot}%{_localstatedir}/spool/bacula + + +# Move some files around +mv %{buildroot}%{_libexecdir}/bacula/query.sql %{buildroot}%{_sysconfdir}/bacula/query.sql + + +# Nuke the scripts we do not need +rm -vf %{buildroot}%{_libexecdir}/bacula/{bacula,bacula-ctl-*,startmysql,stopmysql} + + +# Fix up some perms so rpmlint does not complain too much +chmod 755 %{buildroot}%{_sbindir}/* +chmod 755 %{buildroot}%{_libexecdir}/bacula/* +chmod 644 %{buildroot}%{_libexecdir}/bacula/btraceback.* + +%clean +rm -rf %{buildroot} + + +%post director-mysql +/usr/sbin/alternatives --install /usr/sbin/bacula-dir bacula-dir /usr/sbin/bacula-dir.mysql 50 \ + --slave /usr/sbin/dbcheck bacula-dbcheck /usr/sbin/dbcheck.mysql \ + --slave /usr/libexec/bacula/create_bacula_database /usr/libexec/bacula/create_bacula_database.mysql \ + --slave /usr/libexec/bacula/drop_bacula_database /usr/libexec/bacula/drop_bacula_database.mysql \ + --slave /usr/libexec/bacula/drop_bacula_tables /usr/libexec/bacula/drop_bacula_tables.mysql \ + --slave /usr/libexec/bacula/grant_bacula_privileges /usr/libexec/bacula/grant_bacula_privileges.mysql \ + --slave /usr/libexec/bacula/make_bacula_tables /usr/libexec/bacula/make_bacula_tables.mysql \ + --slave /usr/libexec/bacula/make_catalog_backup /usr/libexec/bacula/make_catalog_backup.mysql \ + --slave /usr/libexec/bacula/update_bacula_tables /usr/libexec/bacula/update_bacula_tables.mysql + + +%post director-sqlite +/usr/sbin/alternatives --install /usr/sbin/bacula-dir bacula-dir /usr/sbin/bacula-dir.sqlite 40 \ + --slave /usr/sbin/dbcheck bacula-dbcheck /usr/sbin/dbcheck.sqlite \ + --slave /usr/libexec/bacula/create_bacula_database /usr/libexec/bacula/create_bacula_database.sqlite \ + --slave /usr/libexec/bacula/drop_bacula_database /usr/libexec/bacula/drop_bacula_database.sqlite \ + --slave /usr/libexec/bacula/drop_bacula_tables /usr/libexec/bacula/drop_bacula_tables.sqlite \ + --slave /usr/libexec/bacula/grant_bacula_privileges /usr/libexec/bacula/grant_bacula_privileges.sqlite \ + --slave /usr/libexec/bacula/make_bacula_tables /usr/libexec/bacula/make_bacula_tables.sqlite \ + --slave /usr/libexec/bacula/make_catalog_backup /usr/libexec/bacula/make_catalog_backup.sqlite \ + --slave /usr/libexec/bacula/update_bacula_tables /usr/libexec/bacula/update_bacula_tables.sqlite + + +%post director-postgresql +/usr/sbin/alternatives --install /usr/sbin/bacula-dir bacula-dir /usr/sbin/bacula-dir.postgresql 60 \ + --slave /usr/sbin/dbcheck bacula-dbcheck /usr/sbin/dbcheck.postgresql \ + --slave /usr/libexec/bacula/create_bacula_database /usr/libexec/bacula/create_bacula_database.postgresql \ + --slave /usr/libexec/bacula/drop_bacula_database /usr/libexec/bacula/drop_bacula_database.postgresql \ + --slave /usr/libexec/bacula/drop_bacula_tables /usr/libexec/bacula/drop_bacula_tables.postgresql \ + --slave /usr/libexec/bacula/grant_bacula_privileges /usr/libexec/bacula/grant_bacula_privileges.postgresql \ + --slave /usr/libexec/bacula/make_bacula_tables /usr/libexec/bacula/make_bacula_tables.postgresql \ + --slave /usr/libexec/bacula/make_catalog_backup /usr/libexec/bacula/make_catalog_backup.postgresql \ + --slave /usr/libexec/bacula/update_bacula_tables /usr/libexec/bacula/update_bacula_tables.postgresql + + +%preun director-mysql +/usr/sbin/alternatives --remove bacula-dir /usr/sbin/bacula-dir.mysql + + +%preun director-sqlite +/usr/sbin/alternatives --remove bacula-dir /usr/sbin/bacula-dir.sqlite + + +%preun director-postgresql +/usr/sbin/alternatives --remove bacula-dir /usr/sbin/bacula-dir.postgresql + + +%pre common +/usr/sbin/fedora-groupadd 33 -r bacula &>/dev/null || : +/usr/sbin/fedora-useradd 33 -r -s /sbin/nologin -d /var/spool/bacula -M \ + -c 'Bacula Backup System' -g bacula bacula &>/dev/null || : + + +%postun common +test "$1" != 0 || /usr/sbin/fedora-userdel bacula &>/dev/null || : +test "$1" != 0 || /usr/sbin/fedora-groupdel bacula &>/dev/null || : + + +%post storage-mysql +/usr/sbin/alternatives --install /usr/sbin/bcopy bacula-sd /usr/sbin/bcopy.mysql 50 \ + --slave /usr/sbin/dbcheck bacula-bscan /usr/sbin/bscan.mysql + + +%post storage-sqlite +/usr/sbin/alternatives --install /usr/sbin/bcopy bacula-sd /usr/sbin/bcopy.sqlite 40 \ + --slave /usr/sbin/dbcheck bacula-bscan /usr/sbin/bscan.sqlite + + +%post storage-postgresql +/usr/sbin/alternatives --install /usr/sbin/bcopy bacula-sd /usr/sbin/bcopy.postgresql 60 \ + --slave /usr/sbin/dbcheck bacula-bscan /usr/sbin/bscan.postgresql + + +%preun storage-mysql +/usr/sbin/alternatives --remove bacula-sd /usr/sbin/bcopy.mysql + + +%preun storage-sqlite +/usr/sbin/alternatives --remove bacula-sd /usr/sbin/bcopy.sqlite + + +%preun storage-postgresql +/usr/sbin/alternatives --remove bacula-sd /usr/sbin/bcopy.postgresql + + +%post client +/sbin/chkconfig --add bacula-fd + + +%preun client +if [ $1 = 0 ]; then + /sbin/service bacula-fd stop >/dev/null 2>&1 || : + /sbin/chkconfig --del bacula-fd +fi + + +%postun client +if [ "$1" -ge "1" ]; then + /sbin/service bacula-fd condrestart >/dev/null 2>&1 || : +fi + + +%post director-common +/sbin/chkconfig --add bacula-dir + + +%preun director-common +if [ $1 = 0 ]; then + /sbin/service bacula-dir stop >/dev/null 2>&1 || : + /sbin/chkconfig --del bacula-dir +fi + + +%postun director-common +if [ "$1" -ge "1" ]; then + /sbin/service bacula-dir condrestart >/dev/null 2>&1 || : +fi + + +%post storage-common +/sbin/chkconfig --add bacula-sd + + +%preun storage-common +if [ $1 = 0 ]; then + /sbin/service bacula-sd stop >/dev/null 2>&1 || : + /sbin/chkconfig --del bacula-sd +fi + + +%postun storage-common +if [ "$1" -ge "1" ]; then + /sbin/service bacula-sd condrestart >/dev/null 2>&1 || : +fi + + +%files common +%doc bacula-%{version}/AUTHORS bacula-%{version}/ChangeLog bacula-%{version}/COPYING bacula-%{version}/LICENSE +%doc bacula-%{version}/README bacula-%{version}/SUPPORT bacula-%{version}/VERIFYING +%doc bacula-%{version}/examples/ +%defattr(-,root,root,-) +%config(noreplace) %{_sysconfdir}/logrotate.d/bacula +%dir %{_sysconfdir}/bacula +%dir %{_libexecdir}/bacula +%{_sbindir}/bsmtp +%{_sbindir}/btraceback +%{_libexecdir}/bacula/btraceback.dbx +%{_libexecdir}/bacula/btraceback.gdb +%{_mandir}/man1/bsmtp.1* +%{_mandir}/man8/bacula.8* +%{_mandir}/man8/btraceback.8* +%dir %attr(750, bacula, bacula) %{_localstatedir}/log/bacula +%dir %attr(750, bacula, bacula) %{_localstatedir}/spool/bacula + + +%files client +%defattr(-,root,root,-) +%{_sbindir}/bacula-fd +%{_initrddir}/bacula-fd +%config(noreplace) %{_sysconfdir}/bacula/bacula-fd.conf +%dir %{_localstatedir}/spool/bacula +%{_mandir}/man8/bacula-fd.8* + + +%files console +%defattr(-,root,root,-) +%{_sbindir}/bconsole +%config(noreplace) %{_sysconfdir}/bacula/bconsole.conf +%{_mandir}/man8/bconsole.8* + + +%files console-gnome +%defattr(-,root,root,-) +%config %{_sysconfdir}/security/console.apps/gnome-console +%config %{_sysconfdir}/pam.d/gnome-console +%config(noreplace) %{_sysconfdir}/bacula/gnome-console.conf +%{_bindir}/gnome-console +%{_sbindir}/gnome-console +%{_mandir}/man1/bacula-console-gnome.1* +%{_datadir}/applications/fedora-bacula-gconsole.desktop +%{_datadir}/pixmaps/bacula.png + + +%files console-wxwidgets +%defattr(-,root,root,-) +%config %{_sysconfdir}/security/console.apps/wxconsole +%config %{_sysconfdir}/pam.d/wxconsole +%config(noreplace) %{_sysconfdir}/bacula/wxconsole.conf +%{_bindir}/wxconsole +%{_sbindir}/wxconsole +%{_mandir}/man1/bacula-wxconsole.1* +%{_datadir}/applications/fedora-bacula-wxconsole.desktop +%{_datadir}/pixmaps/wxwin16x16.xpm + + +%files director-common +%doc bacula-%{version}/updatedb/ +%defattr(-,root,root,-) +%config(noreplace) %{_sysconfdir}/bacula/bacula-dir.conf +%config(noreplace) %{_sysconfdir}/bacula/query.sql +%config %{_sysconfdir}/logwatch/conf/logfiles/bacula.conf +%config %{_sysconfdir}/logwatch/conf/services/bacula.conf +%{_sysconfdir}/logwatch/scripts/services/bacula +%{_initrddir}/bacula-dir +%{_sbindir}/bregex +%{_sbindir}/bwild +%{_mandir}/man8/dbcheck.8* +%{_mandir}/man8/bacula-dir.8* +%{_libexecdir}/bacula/delete_catalog_backup + + +%files director-mysql +%defattr(-,root,root,-) +%{_sbindir}/bacula-dir.mysql +%{_sbindir}/dbcheck.mysql +%{_libexecdir}/bacula/create_mysql_database +%{_libexecdir}/bacula/drop_mysql_database +%{_libexecdir}/bacula/drop_mysql_tables +%{_libexecdir}/bacula/grant_mysql_privileges +%{_libexecdir}/bacula/make_mysql_tables +%{_libexecdir}/bacula/update_mysql_tables +%{_libexecdir}/bacula/create_bacula_database.mysql +%{_libexecdir}/bacula/drop_bacula_database.mysql +%{_libexecdir}/bacula/drop_bacula_tables.mysql +%{_libexecdir}/bacula/grant_bacula_privileges.mysql +%{_libexecdir}/bacula/make_bacula_tables.mysql +%{_libexecdir}/bacula/make_catalog_backup.mysql +%{_libexecdir}/bacula/update_bacula_tables.mysql + + + +%files director-sqlite +%defattr(-,root,root,-) +%{_sbindir}/bacula-dir.sqlite +%{_sbindir}/dbcheck.sqlite +# DANGER Will Robinson. Bacula has versioned sqlite filenames +%{_libexecdir}/bacula/create_sqlite%{?sqlite_suffix}_database +%{_libexecdir}/bacula/drop_sqlite%{?sqlite_suffix}_database +%{_libexecdir}/bacula/drop_sqlite%{?sqlite_suffix}_tables +%{_libexecdir}/bacula/grant_sqlite%{?sqlite_suffix}_privileges +%{_libexecdir}/bacula/make_sqlite%{?sqlite_suffix}_tables +%{_libexecdir}/bacula/update_sqlite%{?sqlite_suffix}_tables +%{_libexecdir}/bacula/create_bacula_database.sqlite +%{_libexecdir}/bacula/drop_bacula_database.sqlite +%{_libexecdir}/bacula/drop_bacula_tables.sqlite +%{_libexecdir}/bacula/grant_bacula_privileges.sqlite +%{_libexecdir}/bacula/make_bacula_tables.sqlite +%{_libexecdir}/bacula/make_catalog_backup.sqlite +%{_libexecdir}/bacula/update_bacula_tables.sqlite + + +%files director-postgresql +%defattr(-,root,root,-) +%{_sbindir}/bacula-dir.postgresql +%{_sbindir}/dbcheck.postgresql +%{_libexecdir}/bacula/create_postgresql_database +%{_libexecdir}/bacula/drop_postgresql_database +%{_libexecdir}/bacula/drop_postgresql_tables +%{_libexecdir}/bacula/grant_postgresql_privileges +%{_libexecdir}/bacula/make_postgresql_tables +%{_libexecdir}/bacula/update_postgresql_tables +%{_libexecdir}/bacula/create_bacula_database.postgresql +%{_libexecdir}/bacula/drop_bacula_database.postgresql +%{_libexecdir}/bacula/drop_bacula_tables.postgresql +%{_libexecdir}/bacula/grant_bacula_privileges.postgresql +%{_libexecdir}/bacula/make_bacula_tables.postgresql +%{_libexecdir}/bacula/make_catalog_backup.postgresql +%{_libexecdir}/bacula/update_bacula_tables.postgresql + + +%files storage-common +%defattr(-,root,root,-) +%{_sbindir}/bacula-sd +%{_sbindir}/bextract +%{_sbindir}/bls +%{_sbindir}/btape +%config(noreplace) %{_sysconfdir}/bacula/bacula-sd.conf +%{_initrddir}/bacula-sd +%{_libexecdir}/bacula/disk-changer +%{_libexecdir}/bacula/dvd-handler +%{_libexecdir}/bacula/mtx-changer +%{_mandir}/man8/bcopy.8* +%{_mandir}/man8/bextract.8* +%{_mandir}/man8/bls.8* +%{_mandir}/man8/bscan.8* +%{_mandir}/man8/btape.8* +%{_mandir}/man8/bacula-sd.8* + + +%files storage-mysql +%defattr(-,root,root,-) +%{_sbindir}/bcopy.mysql +%{_sbindir}/bscan.mysql + + +%files storage-sqlite +%defattr(-,root,root,-) +%{_sbindir}/bcopy.sqlite +%{_sbindir}/bscan.sqlite + + +%files storage-postgresql +%defattr(-,root,root,-) +%{_sbindir}/bcopy.postgresql +%{_sbindir}/bscan.postgresql + + +%files traymonitor +%defattr(-,root,root,-) +%{_sbindir}/bacula-tray-monitor +%config(noreplace) %{_sysconfdir}/bacula/tray-monitor.conf +%{_mandir}/man1/bacula-tray-monitor.1* +%{_datadir}/applications/fedora-bacula-traymonitor.desktop +%{_datadir}/pixmaps/bacula-tray-monitor.xpm + + +%files docs +%doc bacula-docs-%{docs_version}/bacula-web/bacula-web.pdf +%doc bacula-docs-%{docs_version}/bacula-web/bacula-web/ +%doc bacula-docs-%{docs_version}/developers/developers.pdf +%doc bacula-docs-%{docs_version}/developers/developers/ +%doc bacula-docs-%{docs_version}/manual/bacula.pdf +%doc bacula-docs-%{docs_version}/manual/bacula/ + + +#%files web +#%defattr(-,root,root,-) +#%doc bacula-gui-%{gui_version}/bacula-web/CONTACT bacula-gui-%{gui_version}/bacula-web/COPYING +#%doc bacula-gui-%{gui_version}/bacula-web/README bacula-gui-%{gui_version}/bacula-web/TODO +#%{_datadir}/bacula-web/ +#%config(noreplace) %{_sysconfdir}/bacula/bacula-web.conf +#%config(noreplace) %{_sysconfdir}/httpd/conf.d/bacula-web.conf +#%dir %attr(755, apache, apache) %{_localstatedir}/cache/bacula-web + + +%changelog +* Wed Jul 19 2007 Andreas Thienemann 2.0.3-8 +- Moved some files around in the %%files section and refactored + spec parts a bit +- Fixed up the catalog-backup scripts by including them in the + alternatives system +- Applied tls patch fixing some tls disconnection issues. + +* Thu Jul 18 2007 Andreas Thienemann 2.0.3-7 +- Minor specchanges, mostly typos in the comments +- Incorporated minor changes from dgilmore's review. + +* Fri Jul 13 2007 Andreas Thienemann 2.0.3-6 +- Fixing %%preun scripts. Thx to Dan for spotting this + +* Fri Jul 13 2007 Andreas Thienemann 2.0.3-5 +- Fixed provides and requires + +* Wed Jul 11 2007 Andreas Thienemann 2.0.3-4 +- Fixed many rpmlint issues + +* Thu Apr 26 2007 Andreas Thienemann 2.0.3-3 +- Final cleanups for fedora +- Removed webgui for now. It will be back in a future release +- Added LANG=C calls to the initscripts + +* Thu Apr 26 2007 Andreas Thienemann 2.0.3-2 +- Added logdir +- Fixed up doc-creation to actually work +- Fixed up web interface +- Included docs sub-package +- Included README et al as docs where appropriate + +* Sat Mar 10 2007 Andreas Thienemann 2.0.3-1 +- Updated to 2.0.3 +- Reverted the database-check as we're not sure the db is running on the + local machine. A later revision might parse the bacula-dir.conf file + and just connect to the db to see if it's running. + +* Sat Feb 28 2007 Andreas Thienemann 2.0.2-1 +- Further updates on the spec + +* Sat Feb 18 2007 Andreas Thienemann 2.0.2-1 +- Much work on the spec +- Updated to 2.0.2 + +* Sat Feb 18 2006 Andreas Thienemann 1.38.11-1 +- Initial spec. diff --git a/sources b/sources index e69de29..77d62d4 100644 --- a/sources +++ b/sources @@ -0,0 +1,2 @@ +443d2560ace95173a0d8ba465de493ef bacula-2.0.3.tar.gz +dce3aed621b9e4abee51cc89aebf4a58 bacula-docs-2.0.3.tar.gz