lld="qd"
llu="qu"
TAPEDRIVE="/dev/nrst0"
- PSCMD="ps -a -o pid,command"
+ PSCMD="ps -ax -o pid,command"
PTHREAD_LIB="-pthread"
CFLAGS="${CFLAGS} -pthread"
PFILES="${PFILES} \
PSCMD="ps -e -o pid,command"
PFILES="${PFILES} \
platforms/gentoo/Makefile \
- platforms/gentoo/bacula-init \
+ platforms/gentoo/bacula-init \
platforms/gentoo/bacula-fd \
platforms/gentoo/bacula-sd \
platforms/gentoo/bacula-dir"
scripts/bacula.desktop.gnome2.xsu \
scripts/gnome-console.console_apps \
scripts/mtx-changer \
- scripts/bacula-tray-monitor.desktop \
+ scripts/bacula-tray-monitor.desktop \
doc/Makefile \
src/Makefile \
src/host.h \
lld="qd"
llu="qu"
TAPEDRIVE="/dev/nrst0"
- PSCMD="ps -a -o pid,command"
+ PSCMD="ps -ax -o pid,command"
PTHREAD_LIB="-pthread"
CFLAGS="${CFLAGS} -pthread"
PFILES="${PFILES} \
PSCMD="ps -e -o pid,command"
PFILES="${PFILES} \
platforms/gentoo/Makefile \
- platforms/gentoo/bacula-init \
+ platforms/gentoo/bacula-init \
platforms/gentoo/bacula-fd \
platforms/gentoo/bacula-sd \
platforms/gentoo/bacula-dir"
IPv6_2 Meno Abels
Data encryption Meno Abels (see projects)
Communication encryption Meno Abels
-Version 1.35 Kern (see below)
+Version 1.37 Kern (see below)
========================================================
-1.37 Items to do for release:
-
-
1.37 Items:
+- Make bls list files but with VolID, VolTime, FileIndex
+- Modify Backing up Your Database to include a bootstrap file.
+- Add restore of specific JobId to regression.
+- Add date/time to each Jmsg.
+- Think about making certain database errors fatal.
- Look at correcting the time jump in the sceduler for daylight
savings time changes.
- Add a "real" timer to network connections.
+bacula-tray-monior.desktop
.xvpics
logrotate
bacula.desktop
LStat TINYBLOB NOT NULL,
MD5 TINYBLOB NOT NULL,
PRIMARY KEY(FileId),
- INDEX (JobId),
- INDEX (PathId),
- INDEX (FilenameId),
- INDEX (JobId, PathId, FilenameId)
+ INDEX (FilenameId, PathId)
);
+#
+# Possibly add one or more of the following indexes
+# to the above File table if your Verifies are
+# too slow.
+#
+# INDEX (JobId),
+# INDEX (PathId),
+# INDEX (FilenameId),
+# INDEX (JobId, PathId, FilenameId)
+#
CREATE TABLE Job (
JobId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
);
create index file_jobid_idx on file (jobid);
-create index file_pathid_idx on file(pathid);
-create index file_filenameid_idx on file(filenameid);
-create index file_jpfid_idx on file (jobid, pathid, filenameid);
+create index file_fp_idx on file (filenameid, pathid);
+
+--
+-- Possibly add one or more of the following indexes
+-- if your Verifies are too slow.
+--
+-- create index file_pathid_idx on file(pathid);
+-- create index file_filenameid_idx on file(filenameid);
+-- create index file_jpfid_idx on file (jobid, pathid, filenameid);
create table jobmedia
(
);
CREATE INDEX inx3 ON File (JobId);
-CREATE INDEX inx4 ON File (PathId);
-CREATE INDEX inx5 ON File (FileNameId);
-CREATE INDEX inx9 ON File (JobId, PathId, FileNameId);
+CREATE INDEX inx4 ON File (FilenameId, PathId);
+--
+-- Possibly add one or more of the following indexes
+-- if your Verifies are too slow.
+--
+-- CREATE INDEX inx4 ON File (PathId);
+-- CREATE INDEX inx5 ON File (FileNameId);
+-- CREATE INDEX inx9 ON File (JobId, PathId, FilenameId);
CREATE TABLE Job (
JobId INTEGER UNSIGNED NOT NULL,
PidDirectory = "@piddir@"
Maximum Concurrent Jobs = 1
Password = "@dir_password@" # Console password
- Messages = Standard
+ Messages = Daemon
}
JobDefs {
#
append = "@working_dir@/log" = all, !skipped
}
+
+
+#
+# Message delivery for daemon messages (no job).
+Messages {
+ Name = Daemon
+ 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
+}
+
+
+
# Default pool definition
Pool {
"Bootstrap: %s\n"
"Where: %s\n"
"Replace: %s\n"
- "FileSet: %s\n"
"Client: %s\n"
"Storage: %s\n"
"JobId: %s\n"
if (WIFEXITED(chldstatus)) { /* process exit()ed */
stat = WEXITSTATUS(chldstatus);
if (stat != 0) {
- Dmsg1(100, "Non-zero status %s returned from child.\n", stat);
+ Dmsg1(200, "Non-zero status %d returned from child.\n", stat);
stat |= b_errno_exit; /* exit status returned */
}
Dmsg1(200, "child status=%d\n", stat & ~b_errno_exit);
static BPIPE *open_mail_pipe(JCR *jcr, POOLMEM *&cmd, DEST *d)
{
BPIPE *bpipe;
- int use_bsmtp = (d->mail_cmd && jcr);
- if (use_bsmtp) {
+ if (d->mail_cmd) {
cmd = edit_job_codes(jcr, cmd, d->mail_cmd, d->where);
} else {
-#if 1
Mmsg(cmd, "/usr/lib/sendmail -F Bacula %s", d->where);
-#else
- Mmsg(cmd, "mail -s \"Bacula Message\" %s", d->where);
-#endif
}
fflush(stdout);
cmd, be.strerror());
}
-#if 1
- if (!use_bsmtp) {
+ /* If we had to use sendmail, add subject */
+ if (!d->mail_cmd) {
fprintf(bpipe->wfd, "Subject: Bacula Message\r\n\r\n");
}
-#endif
return bpipe;
}
if (stat != 0) {
berrno be;
be.set_errno(stat);
- Jmsg2(jcr, M_ERROR, 0, _("Operator mail program terminated in error.\n"
+ Qmsg2(jcr, M_ERROR, 0, _("Operator mail program terminated in error.\n"
"CMD=%s\n"
"ERR=%s\n"), mcmd, be.strerror());
}
d->fd = fopen(name, "w+");
if (!d->fd) {
d->fd = stdout;
- Jmsg2(jcr, M_ERROR, 0, "fopen %s failed: ERR=%s\n", name, strerror(errno));
+ Qmsg2(jcr, M_ERROR, 0, "fopen %s failed: ERR=%s\n", name, strerror(errno));
d->fd = NULL;
free_pool_memory(name);
break;
d->fd = fopen(d->where, "w+");
if (!d->fd) {
d->fd = stdout;
- Jmsg2(jcr, M_ERROR, 0, "fopen %s failed: ERR=%s\n", d->where, strerror(errno));
+ Qmsg2(jcr, M_ERROR, 0, "fopen %s failed: ERR=%s\n", d->where, strerror(errno));
d->fd = NULL;
break;
}
d->fd = fopen(d->where, "a");
if (!d->fd) {
d->fd = stdout;
- Jmsg2(jcr, M_ERROR, 0, "fopen %s failed: ERR=%s\n", d->where, strerror(errno));
+ Qmsg2(jcr, M_ERROR, 0, "fopen %s failed: ERR=%s\n", d->where, strerror(errno));
d->fd = NULL;
break;
}
str = "%";
break;
case 'c':
- str = jcr->client_name;
+ if (jcr) {
+ str = jcr->client_name;
+ } else {
+ str = "*none*";
+ }
if (!str) {
str = "";
}
str = my_name; /* Director's name */
break;
case 'e':
- str = job_status_to_str(jcr->JobStatus);
+ if (jcr) {
+ str = job_status_to_str(jcr->JobStatus);
+ } else {
+ str = "*none*";
+ }
break;
case 'i':
- bsnprintf(add, sizeof(add), "%d", jcr->JobId);
- str = add;
+ if (jcr) {
+ bsnprintf(add, sizeof(add), "%d", jcr->JobId);
+ str = add;
+ } else {
+ str = "*none*";
+ }
break;
case 'j': /* Job name */
- str = jcr->Job;
+ if (jcr) {
+ str = jcr->Job;
+ } else {
+ str = "*none*";
+ }
break;
case 'l':
- str = job_level_to_str(jcr->JobLevel);
+ if (jcr) {
+ str = job_level_to_str(jcr->JobLevel);
+ } else {
+ str = "*none*";
+ }
break;
case 'n':
- bstrncpy(name, jcr->Job, sizeof(name));
- /* There are three periods after the Job name */
- for (i=0; i<3; i++) {
- if ((q=strrchr(name, '.')) != NULL) {
- *q = 0;
+ if (jcr) {
+ bstrncpy(name, jcr->Job, sizeof(name));
+ /* There are three periods after the Job name */
+ for (i=0; i<3; i++) {
+ if ((q=strrchr(name, '.')) != NULL) {
+ *q = 0;
+ }
}
+ str = name;
+ } else {
+ str = "*none*";
}
- str = name;
break;
case 'r':
str = to;
break;
case 't':
- str = job_type_to_str(jcr->JobType);
+ if (jcr) {
+ str = job_type_to_str(jcr->JobType);
+ } else {
+ str = "*none*";
+ }
break;
case 'v':
- if (jcr->VolumeName && jcr->VolumeName[0]) {
- str = jcr->VolumeName;
+ if (jcr) {
+ if (jcr->VolumeName && jcr->VolumeName[0]) {
+ str = jcr->VolumeName;
+ } else {
+ str = "";
+ }
} else {
- str = "";
+ str = "*none*";
}
break;
default: