Annotation of embedaddon/smartmontools/update-smart-drivedb.in, revision 1.1.1.1

1.1       misho       1: #! /bin/sh
                      2: #
                      3: # smartmontools drive database update script
                      4: #
                      5: # Copyright (C) 2010-11 Christian Franke <smartmontools-support@lists.sourceforge.net>
                      6: #
                      7: # This program is free software; you can redistribute it and/or modify
                      8: # it under the terms of the GNU General Public License as published by
                      9: # the Free Software Foundation; either version 2, or (at your option)
                     10: # any later version.
                     11: #
                     12: # You should have received a copy of the GNU General Public License
                     13: # (for example COPYING); If not, see <http://www.gnu.org/licenses/>.
                     14: #
                     15: # $Id: update-smart-drivedb.in 3294 2011-03-16 21:36:58Z chrfranke $
                     16: #
                     17: 
                     18: set -e
                     19: 
                     20: # Set by config.status
                     21: PACKAGE="@PACKAGE@"
                     22: VERSION="@VERSION@"
                     23: prefix="@prefix@"
                     24: exec_prefix="@exec_prefix@"
                     25: sbindir="@sbindir@"
                     26: datarootdir="@datarootdir@"
                     27: datadir="@datadir@"
                     28: drivedbdir="@drivedbdir@"
                     29: 
                     30: # Download tools
                     31: os_dltools="@os_dltools@"
                     32: 
                     33: # drivedb.h update branch
                     34: BRANCH="@DRIVEDB_BRANCH@"
                     35: 
                     36: # Default drivedb location
                     37: DEST="$drivedbdir/drivedb.h"
                     38: 
                     39: # Smartctl used for syntax check
                     40: SMARTCTL="$sbindir/smartctl"
                     41: 
                     42: # Trac repository browser (does not return HTTP 404 errors)
                     43: #SRCEXPR='http://sourceforge.net/apps/trac/smartmontools/export/HEAD/$location/smartmontools/drivedb.h'
                     44: 
                     45: # ViewVC repository browser
                     46: SRCEXPR='http://smartmontools.svn.sourceforge.net/viewvc/smartmontools/$location/smartmontools/drivedb.h?revision=HEAD'
                     47: 
                     48: 
                     49: # Parse options
                     50: q="-q "
                     51: case "$1" in
                     52:   -v) q=; shift ;;
                     53: esac
                     54: 
                     55: case "$*" in
                     56:   -*|*\ *)
                     57:     cat <<EOF
                     58: smartmontools $VERSION drive database update script
                     59: 
                     60: Usage: $0 [-v] [DESTFILE]
                     61: 
                     62:   -v    verbose output
                     63: 
                     64: Updates $DEST
                     65: or DESTFILE from smartmontools SVN repository.
                     66: Tries to download first from branch $BRANCH
                     67: and then from trunk.
                     68: EOF
                     69:     exit 1
                     70:     ;;
                     71: 
                     72:   "") ;;
                     73:   *)  DEST="$1" ;;
                     74: esac
                     75: 
                     76: # Abort if 'which' is not available
                     77: which which >/dev/null || exit 1
                     78: 
                     79: # Find download tool
                     80: DOWNLOAD=
                     81: for t in $os_dltools; do
                     82:   if which $t >/dev/null 2>/dev/null; then
                     83:     case $t in
                     84:       curl)  DOWNLOAD="curl ${q:+-s }"'-f -o "$DEST.new" "$SRC"' ;;
                     85:       lynx)  DOWNLOAD='lynx -source "$SRC" >"$DEST.new"' ;;
                     86:       wget)  DOWNLOAD="wget $q"'-O "$DEST.new" "$SRC"' ;;
                     87:       fetch) DOWNLOAD='fetch -o "$DEST.new" "$SRC"' ;; # FreeBSD
                     88:       ftp)   DOWNLOAD='ftp -o "$DEST.new" "$SRC"' ;; # OpenBSD
                     89:     esac
                     90:     break
                     91:   fi
                     92: done
                     93: if [ -z "$DOWNLOAD" ]; then
                     94:   echo "$0: found none of: $os_dltools" >&2; exit 1
                     95: fi
                     96: 
                     97: # Try possible branch first, then trunk
                     98: for location in "branches/$BRANCH" "trunk"; do
                     99:   test -n "$q" || echo "Download from $location"
                    100: 
                    101:   errmsg=
                    102:   rm -f "$DEST.new"
                    103:   SRC="`eval echo "$SRCEXPR"`"
                    104: 
                    105:   if (eval $DOWNLOAD); then :; else
                    106:     errmsg="download from $location failed (HTTP error)"
                    107:     continue
                    108:   fi
                    109:   if grep -i 'ViewVC Exception' "$DEST.new" >/dev/null; then
                    110:     errmsg="download from $location failed (ViewVC error)"
                    111:     continue
                    112:   fi
                    113: 
                    114:   break
                    115: done
                    116: 
                    117: if [ -n "$errmsg" ]; then
                    118:   rm -f "$DEST.new"
                    119:   echo "$0: $errmsg" >&2
                    120:   exit 1
                    121: fi
                    122: 
                    123: # Adjust timestamp and permissions
                    124: touch "$DEST.new"
                    125: chmod 0644 "$DEST.new"
                    126: 
                    127: # Check syntax
                    128: rm -f "$DEST.error"
                    129: if $SMARTCTL -B "$DEST.new" -P showall >/dev/null; then :; else
                    130:   mv "$DEST.new" "$DEST.error"
                    131:   echo "$DEST.error: rejected by $SMARTCTL, probably no longer compatible" >&2
                    132:   exit 1
                    133: fi
                    134: 
                    135: # Keep old file if identical, ignore differences in Id string
                    136: rm -f "$DEST.lastcheck"
                    137: if [ -f "$DEST" ]; then
                    138:   if cat "$DEST" | sed 's|\$''Id''[^$]*\$|$''Id''$|' | cmp - "$DEST.new" >/dev/null; then
                    139:     rm -f "$DEST.new"
                    140:     touch "$DEST.lastcheck"
                    141:     echo "$DEST is already up to date"
                    142:     exit 0
                    143:   fi
                    144:   mv "$DEST" "$DEST.old"
                    145: fi
                    146: 
                    147: mv "$DEST.new" "$DEST"
                    148: 
                    149: echo "$DEST updated from $location"
                    150: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>