]> git.sur5r.net Git - bacula/bacula/commitdiff
Fix scripts/bacula.in to have awk on an environment variable
authorKern Sibbald <kern@sibbald.com>
Tue, 11 Jan 2005 21:36:20 +0000 (21:36 +0000)
committerKern Sibbald <kern@sibbald.com>
Tue, 11 Jan 2005 21:36:20 +0000 (21:36 +0000)
  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

bacula/examples/autochangers/solaris-mtx-changer [new file with mode: 0755]
bacula/scripts/bacula.in
bacula/src/lib/address_conf.h
bacula/src/lib/bnet.c
bacula/src/stored/bacula-sd.conf.in
bacula/src/version.h

diff --git a/bacula/examples/autochangers/solaris-mtx-changer b/bacula/examples/autochangers/solaris-mtx-changer
new file mode 100755 (executable)
index 0000000..fd86992
--- /dev/null
@@ -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
index 0d7996703aed17eaf1375dc65b046cb2521b9ac8..b530ad8cf3b2af66b1c6937d922216b227ef7e40 100755 (executable)
 
 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`
index 779c68ee691a12c6aa4fb72e527d9a3c450dc3d1..6145a3fb4f7a3f455ce5511c8eaac36c9b6746a9 100644 (file)
@@ -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
index 5c3b638d15a355e6f7748a9f84756e83588300fa..cc7b2fb92c40d40bc68841b61d8f94a3a0fb1d4c 100644 (file)
@@ -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;
    }
 }
index 628576124737bffbd473e418b8769d37c4052ac2..b7c7b2ba02dd7720f8acaead24ed59af45fcca91 100644 (file)
@@ -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"
+#}
 
 
 #
index f44707ce51bb97e3e1d7e8afa897eb4f7db09288..42d2d4b31d52eae1b33167da8a85194b6ece5355 100644 (file)
@@ -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