From c2a54b988e3d4f0f605cdbd47b618ed642c80531 Mon Sep 17 00:00:00 2001 From: Kern Sibbald Date: Tue, 11 Jan 2005 21:36:20 +0000 Subject: [PATCH] Fix scripts/bacula.in to have awk on an environment variable and add comments for Solaris users. - Turn off inet_aton in src/lib/address_conf.c for Win32 - Add new files to win32 build and eliminate a compiler warning. - Add sample DVD Device resource to bacula-sd.conf git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@1799 91ce42f0-d328-0410-95d8-f526ca767f89 --- .../examples/autochangers/solaris-mtx-changer | 157 ++++++++++++++++++ bacula/scripts/bacula.in | 11 +- bacula/src/lib/address_conf.h | 5 +- bacula/src/lib/bnet.c | 2 +- bacula/src/stored/bacula-sd.conf.in | 23 ++- bacula/src/version.h | 4 +- bacula/src/win32/baculafd/baculafd.mak | 51 ++++++ bacula/src/win32/filed/chksum.cpp | 1 + bacula/src/win32/findlib/fstype.cpp | 1 + 9 files changed, 247 insertions(+), 8 deletions(-) create mode 100755 bacula/examples/autochangers/solaris-mtx-changer create mode 100644 bacula/src/win32/filed/chksum.cpp create mode 100644 bacula/src/win32/findlib/fstype.cpp diff --git a/bacula/examples/autochangers/solaris-mtx-changer b/bacula/examples/autochangers/solaris-mtx-changer new file mode 100755 index 0000000000..fd86992a44 --- /dev/null +++ b/bacula/examples/autochangers/solaris-mtx-changer @@ -0,0 +1,157 @@ +#!/bin/bash +# +# /bin/sh isn't always compatible so use /bin/bash +# +# Bacula interface to mtx autoloader +# +# $Id$ +# +# If you set in your Device resource +# +# Changer Command = "path-to-this-script/mtx-changer" %c %o %S %a %d +# you will have the following input to this script: +# +# mtx-changer "changer-device" "command" "slot" "archive-device" "drive-index" +# $1 $2 $3 $4 $5 +# +# for example: +# +# mtx-changer /dev/sg0 load 1 /dev/nst0 0 (on a Linux system) +# +# If you need to an offline, refer to the drive as $4 +# e.g. mt -f $4 offline +# +# Many changers need an offline after the unload. Also many +# changers need a sleep 60 after the mtx load. +# +# N.B. If you change the script, take care to return either +# the mtx exit code or a 0. If the script exits with a non-zero +# exit code, Bacula will assume the request failed. +# + +# Sun sed/awk etc are not sufficient, working versions are in /usr/xpg4/bin +export PATH="/usr/local/bin:/usr/sfw/bin:/usr/xpg4/bin:/usr/bin" + +MTX=mtx + + +# +# The purpose of this function to wait a maximum +# time for the drive. It will +# return as soon as the drive is ready, or after +# waiting a maximum of 180 seconds. +# Note, this is very system dependent, so if you are +# not running on Linux, you will probably need to +# re-write it. +# +# If you have a FreeBSD system, you might want to change +# the $(seq 180) to $(jot 180) -- tip from Brian McDonald +# +wait_for_drive() { + for i in $(seq 180); do # Wait max 180 seconds + if ( mt -f $1 status | grep 0x0 ) >/dev/null 2>&1; then + #echo "Device $1 READY" + break + fi + #echo "Device $1 - not ready, retry ${i}..." + sleep 1 + done +} + + +if test $# -lt 2 ; then + echo "usage: mtx-changer ctl-device command slot archive-device drive" + echo " Insufficient number of arguments arguments given." + echo " Mimimum usage is first two arguments ..." + exit 1 +fi + +# Setup arguments +ctl=$1 +cmd="$2" +slot=$3 +device=$4 +# If drive not given, default to 0 +if test $# = 5 ; then + drive=$5 +else + drive=0 +fi + +# +# Check for special cases where only 2 arguments are needed, +# all others are a minimum of 3 +case $cmd in + loaded) + ;; + unload) + ;; + list) + ;; + slots) + ;; + *) + if test $# -lt 3; then + echo "usage: mtx-changer ctl-device command slot archive-device drive" + echo " Insufficient number of arguments arguments given." + echo " Mimimum usage is first three arguments ..." + exit 1 + fi + ;; +esac + + +case $cmd in + unload) +# echo "Doing mtx -f $ctl unload $slot $drive" +# +# enable the following line if you need to eject the cartridge + #mt -f $device offline + mt -f $device rewoffl + if test x$slot = x; then + ${MTX} -f $ctl unload + else + ${MTX} -f $ctl unload $slot $drive + fi + ;; + + load) +# echo "Doing mtx -f $ctl load $slot $drive" + ${MTX} -f $ctl load $slot $drive + rtn=$? +# +# Increase the sleep time if you have a slow device +# or remove the sleep and add the following: + #sleep 15 + wait_for_drive $device + exit $rtn + ;; + + list) +# echo "Requested list" + # Some tape changers lose track of their inventory (well, mine does) so + # do one before trying to get a status out of it. + ${MTX} -f $ctl inventory + ${MTX} -f $ctl status | grep " *Storage Element [0-9]*:.*Full" | awk "{print \$3 \$4}" | sed "s/Full *\(:VolumeTag=\)*//" +# Comment out the previous line and add a line here +# to print "fake" barcodes. +# +# If you have a VXA PacketLoader and the above does not work, try +# turning it off and enabling the following line. +# ${MTX} -f $ctl status | grep " *Storage Element [0-9]*:.*Full" | sed "s/*Storage Element //" | sed "s/Full :VolumeTag=//" + ;; + + loaded) + ${MTX} -f $ctl status >/tmp/mtx.$$ + rtn=$? + cat /tmp/mtx.$$ | grep "^Data Transfer Element $drive:Full" | awk "{print \$7}" + cat /tmp/mtx.$$ | grep "^Data Transfer Element $drive:Empty" | awk "{print 0}" + rm -f /tmp/mtx.$$ + exit $rtn + ;; + + slots) +# echo "Request slots" + ${MTX} -f $ctl status | grep " *Storage Changer" | awk "{print \$5}" + ;; +esac diff --git a/bacula/scripts/bacula.in b/bacula/scripts/bacula.in index 0d7996703a..b530ad8cf3 100755 --- a/bacula/scripts/bacula.in +++ b/bacula/scripts/bacula.in @@ -11,6 +11,12 @@ PSCMD="@PSCMD@" +# +# On Solaris, you may need to use nawk, or alternatively, +# add the GNU binaries to your path, such as /usr/xpg4/bin +# +AWK=awk + # All these are not *really* needed but it makes it # easier to "steal" this code for the development # environment where they are different. @@ -131,11 +137,12 @@ pidofproc() { fi # Finally try to extract it from ps - ${PSCMD} | grep $1 | awk '{ print $1 }' | tr '\n' ' ' + ${PSCMD} | grep $1 | ${AWK} '{ print $1 }' | tr '\n' ' ' return 0 } status() { + pid="" # Test syntax. if [ $# = 0 ] ; then echo "Usage: status {program}" @@ -153,7 +160,7 @@ status() { echo "$base (pid $pid) is running..." return 0 else - pid=`${PSCMD} | awk 'BEGIN { prog=ARGV[1]; ARGC=1 } + pid=`${PSCMD} | ${AWK} 'BEGIN { prog=ARGV[1]; ARGC=1 } { if ((prog == $2) || (("(" prog ")") == $2) || (("[" prog "]") == $2) || ((prog ":") == $2)) { print $1 ; exit 0 } }' $1` diff --git a/bacula/src/lib/address_conf.h b/bacula/src/lib/address_conf.h index 779c68ee69..6145a3fb4f 100644 --- a/bacula/src/lib/address_conf.h +++ b/bacula/src/lib/address_conf.h @@ -29,7 +29,7 @@ class IPADDR : public SMARTALLOC { public: typedef enum { R_SINGLE, R_SINGLE_PORT, R_SINGLE_ADDR, R_MULTIPLE, - R_DEFAULT, R_EMPTY + R_DEFAULT, R_EMPTY } i_type; IPADDR(int af); IPADDR(const IPADDR & src); @@ -89,6 +89,9 @@ extern const char *build_addresses_str(dlist *addrs, char *buf, int blen); extern int sockaddr_get_port_net_order(const struct sockaddr *sa); extern int sockaddr_get_port(const struct sockaddr *sa); extern char *sockaddr_to_ascii(const struct sockaddr *sa, char *buf, int len); +#ifdef WIN32 +#undef HAVE_OLD_SOCKOPT +#endif #ifdef HAVE_OLD_SOCKOPT extern int inet_aton(const char *cp, struct in_addr *inp); #endif diff --git a/bacula/src/lib/bnet.c b/bacula/src/lib/bnet.c index 5c3b638d15..cc7b2fb92c 100644 --- a/bacula/src/lib/bnet.c +++ b/bacula/src/lib/bnet.c @@ -936,7 +936,7 @@ const char *bnet_sig_to_ascii(BSOCK * bs) case BNET_PROMPT: return "BNET_PROMPT"; default: - sprintf(buf, "Unknown sig %d", bs->msglen); + sprintf(buf, "Unknown sig %d", (int)bs->msglen); return buf; } } diff --git a/bacula/src/stored/bacula-sd.conf.in b/bacula/src/stored/bacula-sd.conf.in index 6285761247..b7c7b2ba02 100644 --- a/bacula/src/stored/bacula-sd.conf.in +++ b/bacula/src/stored/bacula-sd.conf.in @@ -106,8 +106,27 @@ Device { # Maximum Block Size = 32768 #} - - +# +# A DVD device +# +#Device { +# Name = "NEC ND-1300A" +# Media Type = DVD +# Archive Device = /dev/hdc +# LabelMedia = yes; # lets Bacula label unlabeled media +# Random Access = Yes; +# AutomaticMount = yes; # when device opened, read it +# RemovableMedia = yes; +# AlwaysOpen = no; +# MaximumPartSize = 800M; +# RequiresMount = yes; +# MountPoint = /mnt/cdrom; +# MountCommand = "/bin/mount -t iso9660 -o ro %a %m"; +# UnmountCommand = "/bin/umount %m"; +# SpoolDirectory = /tmp/backup; +# WritePartCommand = "/etc/bacula/dvd-writepart %n %a %v" +# FreeSpaceCommand = "/etc/bacula/dvd-freespace %a %n" +#} # diff --git a/bacula/src/version.h b/bacula/src/version.h index f44707ce51..42d2d4b31d 100644 --- a/bacula/src/version.h +++ b/bacula/src/version.h @@ -1,8 +1,8 @@ /* */ #undef VERSION #define VERSION "1.37.2" -#define BDATE "08 January 2005" -#define LSMDATE "08Jan05" +#define BDATE "11 January 2005" +#define LSMDATE "11Jan05" /* Debug flags */ #undef DEBUG diff --git a/bacula/src/win32/baculafd/baculafd.mak b/bacula/src/win32/baculafd/baculafd.mak index ac93adabdc..0ebf4ca2f1 100644 --- a/bacula/src/win32/baculafd/baculafd.mak +++ b/bacula/src/win32/baculafd/baculafd.mak @@ -57,6 +57,7 @@ CLEAN : -@erase "$(INTDIR)\bsys.obj" -@erase "$(INTDIR)\btime.obj" -@erase "$(INTDIR)\btimers.obj" + -@erase "$(INTDIR)\chksum.obj" -@erase "$(INTDIR)\compat.obj" -@erase "$(INTDIR)\cram-md5.obj" -@erase "$(INTDIR)\crc32.obj" @@ -71,6 +72,7 @@ CLEAN : -@erase "$(INTDIR)\find.obj" -@erase "$(INTDIR)\find_one.obj" -@erase "$(INTDIR)\fnmatch.obj" + -@erase "$(INTDIR)\fstype.obj" -@erase "$(INTDIR)\getopt.obj" -@erase "$(INTDIR)\heartbeat.obj" -@erase "$(INTDIR)\hmac.obj" @@ -145,6 +147,7 @@ LINK32_OBJS= \ "$(INTDIR)\bsys.obj" \ "$(INTDIR)\btime.obj" \ "$(INTDIR)\btimers.obj" \ + "$(INTDIR)\chksum.obj" \ "$(INTDIR)\compat.obj" \ "$(INTDIR)\cram-md5.obj" \ "$(INTDIR)\crc32.obj" \ @@ -159,6 +162,7 @@ LINK32_OBJS= \ "$(INTDIR)\find.obj" \ "$(INTDIR)\find_one.obj" \ "$(INTDIR)\fnmatch.obj" \ + "$(INTDIR)\fstype.obj" \ "$(INTDIR)\getopt.obj" \ "$(INTDIR)\heartbeat.obj" \ "$(INTDIR)\hmac.obj" \ @@ -253,6 +257,8 @@ CLEAN : -@erase "$(INTDIR)\btime.sbr" -@erase "$(INTDIR)\btimers.obj" -@erase "$(INTDIR)\btimers.sbr" + -@erase "$(INTDIR)\chksum.obj" + -@erase "$(INTDIR)\chksum.sbr" -@erase "$(INTDIR)\compat.obj" -@erase "$(INTDIR)\compat.sbr" -@erase "$(INTDIR)\cram-md5.obj" @@ -281,6 +287,8 @@ CLEAN : -@erase "$(INTDIR)\find_one.sbr" -@erase "$(INTDIR)\fnmatch.obj" -@erase "$(INTDIR)\fnmatch.sbr" + -@erase "$(INTDIR)\fstype.obj" + -@erase "$(INTDIR)\fstype.sbr" -@erase "$(INTDIR)\getopt.obj" -@erase "$(INTDIR)\getopt.sbr" -@erase "$(INTDIR)\heartbeat.obj" @@ -394,6 +402,7 @@ BSC32_SBRS= \ "$(INTDIR)\bsys.sbr" \ "$(INTDIR)\btime.sbr" \ "$(INTDIR)\btimers.sbr" \ + "$(INTDIR)\chksum.sbr" \ "$(INTDIR)\compat.sbr" \ "$(INTDIR)\cram-md5.sbr" \ "$(INTDIR)\crc32.sbr" \ @@ -408,6 +417,7 @@ BSC32_SBRS= \ "$(INTDIR)\find.sbr" \ "$(INTDIR)\find_one.sbr" \ "$(INTDIR)\fnmatch.sbr" \ + "$(INTDIR)\fstype.sbr" \ "$(INTDIR)\getopt.sbr" \ "$(INTDIR)\heartbeat.sbr" \ "$(INTDIR)\hmac.sbr" \ @@ -475,6 +485,7 @@ LINK32_OBJS= \ "$(INTDIR)\bsys.obj" \ "$(INTDIR)\btime.obj" \ "$(INTDIR)\btimers.obj" \ + "$(INTDIR)\chksum.obj" \ "$(INTDIR)\compat.obj" \ "$(INTDIR)\cram-md5.obj" \ "$(INTDIR)\crc32.obj" \ @@ -489,6 +500,7 @@ LINK32_OBJS= \ "$(INTDIR)\find.obj" \ "$(INTDIR)\find_one.obj" \ "$(INTDIR)\fnmatch.obj" \ + "$(INTDIR)\fstype.obj" \ "$(INTDIR)\getopt.obj" \ "$(INTDIR)\heartbeat.obj" \ "$(INTDIR)\hmac.obj" \ @@ -889,6 +901,26 @@ SOURCE=..\lib\btimers.cpp !ENDIF + +SOURCE=..\filed\chksum.cpp + +!IF "$(CFG)" == "baculafd - Win32 Release" + + +"$(INTDIR)\chksum.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "baculafd - Win32 Debug" + + +"$(INTDIR)\chksum.obj" "$(INTDIR)\chksum.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + + SOURCE=..\compat\compat.cpp !IF "$(CFG)" == "baculafd - Win32 Release" @@ -1141,6 +1173,25 @@ SOURCE=..\lib\fnmatch.cpp !ENDIF +SOURCE=..\findlib\fstype.cpp + +!IF "$(CFG)" == "baculafd - Win32 Release" + + +"$(INTDIR)\fstype.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "baculafd - Win32 Debug" + + +"$(INTDIR)\fstype.obj" "$(INTDIR)\fstype.sbr" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + + SOURCE=..\compat\getopt.c !IF "$(CFG)" == "baculafd - Win32 Release" diff --git a/bacula/src/win32/filed/chksum.cpp b/bacula/src/win32/filed/chksum.cpp new file mode 100644 index 0000000000..de3fd34fb5 --- /dev/null +++ b/bacula/src/win32/filed/chksum.cpp @@ -0,0 +1 @@ +#include "../../filed/chksum.c" diff --git a/bacula/src/win32/findlib/fstype.cpp b/bacula/src/win32/findlib/fstype.cpp new file mode 100644 index 0000000000..a1eaf6e999 --- /dev/null +++ b/bacula/src/win32/findlib/fstype.cpp @@ -0,0 +1 @@ +#include "../../findlib/fstype.c" -- 2.39.5