X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=changer-src%2Fchg-juke.sh.in;fp=changer-src%2Fchg-juke.sh.in;h=0000000000000000000000000000000000000000;hb=94a044f90357edefa6f4ae9f0b1d5885b0e34aee;hp=b894623e8a73faa26987dcd7a89b782ebf395ac8;hpb=d3b2175e084f88c8736ad7073eacbf4670147aec;p=debian%2Famanda diff --git a/changer-src/chg-juke.sh.in b/changer-src/chg-juke.sh.in deleted file mode 100755 index b894623..0000000 --- a/changer-src/chg-juke.sh.in +++ /dev/null @@ -1,266 +0,0 @@ -#!@SHELL@ - -# chg-juke -# -# This assumes we have possibly rait-striped drives in several -# jukeboxes, controlled by the Fermilab "juke" package -# -# So we could have 3 drives in 3 jukeboxes: -# changerscript="chg-juke" -# changerfile=/some/file -# tapedev="rait:/dev/nst{1,2,3}" -# changerdev="myjuke{0,1,2}" -# Or, if the jukebox has multiple drives: -# changerscript="chg-juke" -# changerfile=/some/file -# tapedev="rait:/dev/nst{1,2,3}" -# changerdev="myjuke" -# We need therefore to generate lists with csh to expand the tapedev -# and changerdev, and deal with the possibility that there are several -# jukeboxes and several drives in each jukebox involved. - -# -# debugging... -# -if [ -d "@AMANDA_DBGDIR@" ]; then - DBGFILE=@AMANDA_DBGDIR@/changer.debug -else - DBGFILE=/dev/null -fi -exec 2>$DBGFILE -echo "args: $0 $*" >&2 -set -x - -# -# the usual config fun -# -prefix=@prefix@ -exec_prefix=@exec_prefix@ -sbindir=@sbindir@ -libexecdir=@libexecdir@ -MT=ammt - -USE_VERSION_SUFFIXES="@USE_VERSION_SUFFIXES@" -if test "$USE_VERSION_SUFFIXES" = "yes"; then - SUF="-@VERSION@"; -else - SUF= -fi -getconf=$sbindir/amgetconf$SUF - -# -# make sure we can find JUKE later -# -JUKE_DIR=/usr/local -# Fermilab specific -if [ -f /usr/local/etc/setups.sh ] -then - . /usr/local/etc/setups.sh - setup juke -fi - -PATH=$sbindir:$libexecdir:$JUKE_DIR/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/ucb -export PATH JUKE_DIR - -build_drivelists() { - # - # figure out which drives are in which jukebox - # - count=0 - for juke in $jlist - do - for d in $dlist - do - if juke list -j $juke drive $d | grep 'drive [0-9]' >&2 - then - eval "drives_in_$juke=\"\$drives_in_$juke $d\"" - fi - done - done -} - -unload_drive_n_clean() { - - # - # $1 is whether to clean it - # - cleanit=$1 - - # - # if the drive is ONLINE, mt unload it - # - if $MT -t $tapedev status | egrep "$ONLINEREGEX" >&2 - then - $MT -t $tapedev offline >&2 || true - fi - - # - # unload any tapes present, maybe load/unload a cleaning cartridge - # - for juke in $jlist - do - eval "jdlist=\"\$drives_in_$juke\"" - for drive in $jdlist - do - juke unload -j $juke drive $drive >&2 || true - if juke list -j $juke drive $drive | grep '(empty)' >&2 - then - : - else - echo "$slot $tapedev unable to empty preceding tape from drive $drive" - exit 1 - fi - - if $cleanit - then - juke load -j $juke drive $drive clean - sleep 120 - juke unload -j $juke drive $drive - fi - done - done -} - -load_drives() { - # - # load slots. If it's a stripe, load several... - # - for juke in $jlist - do - eval "jdlist=\"\$drives_in_$juke\"" - jndrives=`echo $jdlist | wc -w` - count=0 - for drive in $jdlist - do - rslot=`expr $newslot '*' $jndrives + $count` - juke load -j $changerdev drive $drive slot $rslot >&2 - if juke list -j $changerdev drive $drive | grep '(empty)' >&2 - then - echo "$slot $tapedev unable to load tape into drive" - exit 1 - fi - count=`expr $count + 1` - done - done - - # - # wait for drive(s) to come online - # - count=0 - until $MT -t $tapedev status | egrep "$ONLINEREGEX" >&2 - do - count=`expr $count + 1` - if [ $count -gt 24 ] - then - echo "$slot $tapedev never came online" - exit 1 - fi - sleep 5 - done -} - - -ONLINEREGEX="ONLINE|READY|sense[_ ]key[(]0x0[)]|sense key error = 0|^er=0$" - -# -# get config variables -# -changerfile=`$getconf changerfile` - tapedev=`$getconf tapedev` - changerdev=`$getconf changerdev` - dlist=`csh -c "echo $tapedev" | sed -e 's/rait://g' -e 's/tape://g'` - ndrives=`echo $dlist | wc -w` - jlist=`csh -c "echo $changerdev"` - njukes=`echo $jlist | wc -w` - totalslots=`for juke in $jlist ; do juke list -j $juke; done | - grep -v '^clean' | - grep 'slot [0-9]' | - wc -l` - -if [ $ndrives -gt 1 ] -then - # - # if it's a 3 tape stripe and we have 30 actual slots - # we only have 10 virtual slots... - # - totalslots=`expr $totalslots / $ndrives` -fi - -build_drivelists - -# -# get current slot if we have one -# -if [ -f "$changerfile" ] -then - slot="`cat $changerfile`" -else - slot=0 - echo $slot > $changerfile -fi - -# -# We treat -reset just like -slot 0 -# -if [ x$1 = 'x-reset' ] -then - set : -slot 0 - shift -fi - -case x$1 in - -x-slot) - - # - # handle special slots... - # - case "$2" in - current) newslot=$slot ; load=true;; - next) newslot=`expr $slot + 1`; load=true;; - advance) newslot=`expr $slot + 1`; load=false;; - prev) newslot=`expr $slot - 1`; load=true;; - first) newslot=0 ; load=true;; - last) newslot=-1 ; load=true;; - *) newslot=$2 ; load=true;; - esac - - if [ $newslot = "clean" ] - then - unload_drive_n_clean true - else - if [ 0 -gt $newslot ] - then - newslot=`expr $totalslots - 1` - fi - - if [ $totalslots -le $newslot ] - then - newslot=0 - fi - - echo $newslot > $changerfile - slot=$newslot - - if $load - then - unload_drive_n_clean false - load_drives - fi - fi - - echo $slot $tapedev - ;; - -x-info) - echo $slot $totalslots 1 - exit 0 - ;; - -x-eject) - unload_drive_n_clean false - echo $slot $tapedev - ;; -esac - -exit $rc