X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=inline;f=changer-src%2Fchg-mcutil.sh.in;fp=changer-src%2Fchg-mcutil.sh.in;h=0000000000000000000000000000000000000000;hb=94a044f90357edefa6f4ae9f0b1d5885b0e34aee;hp=d31201f635297f9f8848be62d35173b7d40457a1;hpb=d3b2175e084f88c8736ad7073eacbf4670147aec;p=debian%2Famanda diff --git a/changer-src/chg-mcutil.sh.in b/changer-src/chg-mcutil.sh.in deleted file mode 100644 index d31201f..0000000 --- a/changer-src/chg-mcutil.sh.in +++ /dev/null @@ -1,564 +0,0 @@ -#!@SHELL@ -# -# Author: Robert Dege -# -# -# version 1.2 -# ----------- -# fixed last_cleaned file so that if it doesn't exist, it gets created with current date, not '0,0' -# fixed a bug that was reporting the wrong slot # to amcheck -# -# version 1.1 -# ----------- -# amverify was failing when using -slot current. Fixed exit $code from 1 -> 0. -# removed useless $current variables from movetape() function. -# -# -# -# Exit Status: -# 0 Alles Ok -# 1 Illegal Request -# 2 Fatal Error -# - - -# -# Set Path so that it includes Amanda binaries, and access to tapechanger & drive programs -# -prefix=@prefix@ -exec_prefix=@exec_prefix@ -sbindir=@sbindir@ -libexecdir=@libexecdir@ - -PATH=$sbindir:$libexecdir:/usr/bin:/bin:/usr/sbin:/sbin:/usr/ucb:/usr/local/bin -export PATH - - -# -# Define Suffix for amanda binaries -# -USE_VERSION_SUFFIXES="@USE_VERSION_SUFFIXES@" -if test "$USE_VERSION_SUFFIXES" = "yes"; then - SUF="-@VERSION@" -else - SUF= -fi - - -# -# Load configuration data from the config file -# - -ourconf=`amgetconf$SUF changerfile` -myname=$0 - - -if [ ! -f "$ourconf" ]; then - code=2 - echo "Command Line -> $myname $@\nExit($code): $ourconf not found as listed in amanda.conf" - exit $code -fi - - -# grab mcutil info -tmpval1=`grep ^mcutil $ourconf | awk -F\ '{print $2}'` -tmpval2=`grep ^mcutil $ourconf | awk -F= '{print $2}'` -if [ -z "$tmpval1" ] && [ -z "$tmpval2" ]; then - code=2 - echo "Command Line -> $myname $@ \nExit($code): mcutil not specified in $ourconf" - exit $code -elif [ -z "$tmpval1" ]; then - MCUTIL=$tmpval2 -else - MCUTIL=$tmpval1 -fi - - -# grab tape info -tmpval1=`grep ^tape $ourconf | awk -F\ '{print $2}'` -tmpval2=`grep ^tape $ourconf | awk -F= '{print $2}'` -if [ -z "$tmpval1" ] && [ -z "$tmpval2" ]; then - code=2 - echo "Command Line -> $myname $@ \nExit($code): tape not specified in $ourconf" - exit $code -elif [ -z "$tmpval1" ]; then - tape=$tmpval2 -else - tape=$tmpval1 -fi - - -# grab firstslot info -tmpval1=`grep ^firstslot $ourconf | awk -F\ '{print $2}'` -tmpval2=`grep ^firstslot $ourconf | awk -F= '{print $2}'` -if [ -z "$tmpval1" ] && [ -z "$tmpval2" ]; then - code=2 - echo "Command Line -> $myname $@ \nExit($code): firstslot not specified in $ourconf" - exit $code -elif [ -z "$tmpval1" ]; then - firstslot=$tmpval2 -else - firstslot=$tmpval1 -fi - - -# grab lastslot info -tmpval1=`grep ^lastslot $ourconf | awk -F\ '{print $2}'` -tmpval2=`grep ^lastslot $ourconf | awk -F= '{print $2}'` -if [ -z "$tmpval1" ] && [ -z "$tmpval2" ]; then - code=2 - echo "Command Line -> $myname $@ \nExit($code): lastslot not specified in $ourconf" - exit $code -elif [ -z "$tmpval1" ]; then - lastslot=$tmpval2 -else - lastslot=$tmpval1 -fi - - -# grab use_cleaning info -tmpval1=`grep ^use_cleaning $ourconf | awk -F\ '{print $2}'` -tmpval2=`grep ^use_cleaning $ourconf | awk -F= '{print $2}'` -if [ -z "$tmpval1" ] && [ -z "$tmpval2" ]; then - code=2 - echo "Command Line -> $myname $@ \nExit($code): use_cleaning not specified in $ourconf" - exit $code -elif [ -z "$tmpval1" ]; then - use_cleaning=$tmpval2 -else - use_cleaning=$tmpval1 -fi - - -# grab cleanslot info -tmpval1=`grep ^cleanslot $ourconf | awk -F\ '{print $2}'` -tmpval2=`grep ^cleanslot $ourconf | awk -F= '{print $2}'` -if [ -z "$tmpval1" ] && [ -z "$tmpval2" ]; then - code=2 - echo "Command Line -> $myname $@ \nExit($code): cleanslot not specified in $ourconf" - exit $code -elif [ -z "$tmpval1" ]; then - cleanslot=$tmpval2 -else - cleanslot=$tmpval1 -fi - - -# grab cleansleep info -tmpval1=`grep ^cleansleep $ourconf | awk -F\ '{print $2}'` -tmpval2=`grep ^cleansleep $ourconf | awk -F= '{print $2}'` -if [ -z "$tmpval1" ] && [ -z "$tmpval2" ]; then - code=2 - echo "Command Line -> $myname $@ \nExit($code): cleansleep not specified in $ourconf" - exit $code -elif [ -z "$tmpval1" ]; then - cleansleep=$tmpval2 -else - cleansleep=$tmpval1 -fi - - -# grab cleanme info -tmpval1=`grep ^cleanme $ourconf | awk -F\ '{print $2}'` -tmpval2=`grep ^cleanme $ourconf | awk -F= '{print $2}'` -if [ -z "$tmpval1" ] && [ -z "$tmpval2" ]; then - code=2 - echo "Command Line -> $myname $@ \nExit($code): cleanme not specified in $ourconf" - exit $code -elif [ -z "$tmpval1" ]; then - cleanme=$tmpval2 -else - cleanme=$tmpval1 -fi - - -# grab cleanfile info -tmpval1=`grep ^cleanfile $ourconf | awk -F\ '{print $2}'` -tmpval2=`grep ^cleanfile $ourconf | awk -F= '{print $2}'` -if [ -z "$tmpval1" ] && [ -z "$tmpval2" ]; then - code=2 - echo "Command Line -> $myname $@ \nExit($code): cleanfile not specified in $ourconf" - exit $code -elif [ -z "$tmpval1" ]; then - cleanfile=$tmpval2 -else - cleanfile=$tmpval1 -fi - - -# grab lastfile info -tmpval1=`grep ^lastfile $ourconf | awk -F\ '{print $2}'` -tmpval2=`grep ^lastfile $ourconf | awk -F= '{print $2}'` -if [ -z "$tmpval1" ] && [ -z "$tmpval2" ]; then - code=2 - echo "Command Line -> $myname $@ \nExit($code): lastfile not specified in $ourconf" - exit $code -elif [ -z "$tmpval1" ]; then - lastfile=$tmpval2 -else - lastfile=$tmpval1 -fi - - -# grab currentslot info -tmpval1=`grep ^currentslot $ourconf | awk -F\ '{print $2}'` -tmpval2=`grep ^currentslot $ourconf | awk -F= '{print $2}'` -if [ -z "$tmpval1" ] && [ -z "$tmpval2" ]; then - code=2 - echo "Command Line -> $myname $@ \nExit($code): currentslot not specified in $ourconf" - exit $code -elif [ -z "$tmpval1" ]; then - currentslot=$tmpval2 -else - currentslot=$tmpval1 -fi - - -# grab logfile info -tmpval1=`grep ^logfile $ourconf | awk -F\ '{print $2}'` -tmpval2=`grep ^logfile $ourconf | awk -F= '{print $2}'` -if [ -z "$tmpval1" ] && [ -z "$tmpval2" ]; then - code=2 - echo "Command Line -> $myname $@ \nExit($code): logfile not specified in $ourconf" - exit $code -elif [ -z "$tmpval1" ]; then - logfile=$tmpval2 -else - logfile=$tmpval1 -fi - -[ ! -w $logfile ] && logfile=/dev/null - - -# grab slot0source info -tmpval1=`grep ^slot0source $ourconf | awk -F\ '{print $2}'` -tmpval2=`grep ^slot0source $ourconf | awk -F= '{print $2}'` -if [ -z "$tmpval1" ] && [ -z "$tmpval2" ]; then - code=2 - echo "Command Line -> $myname $@ \nExit($code): slot0source not specified in $ourconf" - exit $code -elif [ -z "$tmpval1" ]; then - slot0source=$tmpval2 -else - slot0source=$tmpval1 -fi - - - -# -# Verify currentslot contains a value -# -if [ ! -f $currentslot ] || [ `cat $currentslot` -lt $firstslot ];then - readstatus - echo $used > $currentslot -fi - -current=`cat $currentslot` - - -# Start logging to $logfile -echo "\n\n==== `date` ====" >> $logfile -echo "Command Line -> $myname $@" >> $logfile - - -# -# is Use Cleaning activated? -# -if [ $use_cleaning -eq 1 ]; then - curday=`date +%j` - curyear=`date +%Y` - - [ ! -f $cleanfile ] && echo 0 > $cleanfile - [ ! -f $lastfile ] && echo $curday,$curyear > $lastfile - - -# -# Check to see when tape drive was last cleaned -# output warning message if it's been too long -# Currently, if it's been more than 45days, then -# an error message is displayed everytime the -# script is called, until the clean parameter -# is run -# - cleaned=`cat $cleanfile` - lastcleaned=`cut -d, -f1 $lastfile` - yearcleaned=`cut -d, -f2 $lastfile` - - if [ `expr $curday - $lastcleaned` -lt 0 ];then - diffday=`expr $curday - $lastcleaned + 365` - diffyear=`expr $curyear - $yearcleaned - 1` - else - diffday=`expr $curday - $lastcleaned` - diffyear=`expr $curyear - $yearcleaned` - fi - - if [ $diffday -gt $cleanme ] || [ $diffyear -ge 1 ];then - if [ $diffyear -ge 1 ];then - echo "Warning, it's been $diffyear year(s) & $diffday days since you last cleaned the tape drive!" - else - echo "Warning, it's been $diffday days since you last cleaned the tape drive!" - fi - fi - -fi - - -# -# Read if there is a tape in the tape drive -# If so, determine what slot is the tape from -# -readstatus() { - echo -n "querying tape drive....." >> $logfile - used=`expr \`$MCUTIL -e drive | tr = \] | cut -d\] -f2\` - $slot0source` - echo " Done" >> $logfile - - # Give changer a chance to reset itself - sleep 3 -} - - -# -# If tape is in the drive, eject it -# -eject() { - echo "tape drive eject was called" >> $logfile - - readstatus - - if [ $used -ge $firstslot ];then - $MCUTIL -m drive slot:$used - code=$? - else - code=1 - fi - - if [ $code -eq 0 ];then - answer="Cartridge $used successfully ejected from $tape" - echo "Exit($code): $answer" >> $logfile - echo $current $tape #For amtape output - return $code - elif [ $code -eq 1 ];then - answer="No Cartridge in Tape Drive" - echo "Exit($code): $answer" >> $logfile - echo $current $answer #For amtape output - exit $code - else - answer="Tape abnormally failed" - echo "Exit($code): $answer" >> $logfile - echo $current $answer #For amtape output - exit $code - fi -} - - -# -# reset tape drive to a current state. -# This involves ejecting the current tape (if occupied) -# and inserting the tape in $firstslot -# -reset() { - echo "tape drive reset was called" >> $logfile - - readstatus - - if [ $used -ge $firstslot ];then - eject - fi - - res=`$MCUTIL -m slot:$firstslot drive` - code=$? - - - if [ $code -eq 0 ];then - echo $firstslot > $currentslot - answer="$firstslot - Tape drive was successfully reset" - elif [ $code -eq 1 ];then - answer="$firstslot - Tape drive reset failed\nCommand -> $res" - else - code=2 - answer="$firstlot - Tape abnormally failed -> $res" - fi - - echo "Exit($code): slot $answer" >> $logfile - echo $firstslot #For amtape output - exit $code -} - - - - -# -# Load a specific cartridge into the changer -# -loadslot() { - echo "loadslot was called" >> $logfile - - readstatus - - whichslot=$1 - - case $whichslot in - current) - if [ $current -ge $firstslot ];then - load=$current - else - load=$used - fi - - movetape - ;; - next|advance) - [ $used -lt $firstslot ] && used=$current - - load=`expr $used + 1` - [ $load -gt $lastslot ] && load=$firstslot - - if [ $whichslot = advance ];then - echo $load > $currentslot - code=0 - answer="advancing to slot $load" - echo "Exit($code): $answer" >> $logfile - echo $load $code - exit $code - else - movetape - fi - ;; - prev) - [ $used -lt $firstslot ] && used=$current - - load=`expr $used - 1` - [ $load -lt $firstslot ] && load=$lastslot - movetape - ;; - first) - load=$firstslot - movetape - ;; - last) - load=$lastslot - movetape - ;; - [$firstslot-$lastslot]) - load=$1 - movetape - ;; - clean) - if [ use_cleaning -eq 1 ];then - current=$cleanslot - eject - $MCUTIL slot:$cleanslot drive - sleep $cleansleep - echo "$curday,$curyear" > $lastfile - echo `expr $cleaned + 1` > $cleanfile - reset - else - code=1 - answer="Cleaning not enabled in config" >> $logfile - echo "Exit($code): $answer" >> $logfile - echo $cleanslot $answer - exit $code - fi - ;; - *) - code=1 - answer="\"$whichslot\" invalid menu option" - echo "Exit($code): slot $answer" >> $logfile - echo "$answer" - exit $code - ;; - esac -} - - -# -# sub-function that slot calls to actually eject the tape -# & load in the correct slot cartridge -# -movetape() { - - # If the requested slot is already loaded in the tape drive - if [ $load -eq $used ]; then - code=0 - answer="$load is already loaded" - echo "Exit($code): slot $answer" >> $logfile - echo $load $tape # For amtape output - exit $code - elif [ $used -ge $firstslot ];then - current=$load - eject - else - echo $load $tape # For amtape output - fi - - echo "Loading slot $load into Tape drive" >> $logfile - $MCUTIL -m slot:$load drive - code=$? - - if [ $code -eq 0 ];then - echo $load > $currentslot - answer="Cartridge $load successfully loaded in Tape drive" - else - answer="Cartridge $load failed to load in Tape drive" - fi - echo "Exit($code): $answer" >> $logfile - exit $code -} - - -info() { - echo "tape drive info was called" >> $logfile - - readstatus - - if [ $used -lt 0 ];then - used=0 - fi - - code=0 - answer="$used $lastslot 1" - echo "Exit($code): $answer" >> $logfile - echo "$answer" - exit $code -} - - - case $1 in - -slot) - shift - loadslot $* - ;; - -device) - echo $tape - ;; - -info) - shift - info - ;; - -reset) - shift - reset - ;; - -eject) - shift - eject - ;; - --help|-help) - echo "-slot {current|next|previous|first|last|$firstslot-$lastslot|clean}" - echo " current - show contents of current slot" - echo " next - load tape from next slot" - echo " previous - load tape from previous slot" - echo " first - load tape from first slot" - echo " last - load tape from last slot" - echo " $firstslot - $lastslot - load tape from slot " - echo " clean - Clean the drive" - echo "-device : Show current tape device" - echo "-reset : Reset changer to known state" - echo "-eject : Eject current tape from drive" - echo "-info : Output {current slot | # of slots | can changer go backwards}" - echo "-help : Display this help" - ;; - *) - echo " $myname -{slot|device|reset|eject|help}" - ;; - esac