Annotation of embedaddon/smartmontools/update-smart-drivedb.in, revision 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>