File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / smartmontools / update-smart-drivedb.in
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 16:32:16 2012 UTC (12 years, 4 months ago) by misho
Branches: smartmontools, elwix, MAIN
CVS tags: v6_1p0, v6_1, v5_43, v5_42, HEAD
smartmontools

    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,v 1.1.1.1 2012/02/21 16:32:16 misho Exp $
   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>