Annotation of embedaddon/smartmontools/update-smart-drivedb.in, revision 1.1.1.2
1.1 misho 1: #! /bin/sh
2: #
3: # smartmontools drive database update script
4: #
1.1.1.2 ! misho 5: # Copyright (C) 2010-13 Christian Franke <smartmontools-support@lists.sourceforge.net>
1.1 misho 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: #
1.1.1.2 ! misho 15: # $Id: update-smart-drivedb.in 3814 2013-06-04 19:38:25Z chrfranke $
1.1 misho 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:
1.1.1.2 ! misho 42: # Download URL for sourceforge code browser
! 43: SRCEXPR='http://sourceforge.net/p/smartmontools/code/HEAD/tree/$location/smartmontools/drivedb.h?format=raw'
1.1 misho 44:
45: # Parse options
46: q="-q "
47: case "$1" in
48: -v) q=; shift ;;
49: esac
50:
51: case "$*" in
52: -*|*\ *)
53: cat <<EOF
54: smartmontools $VERSION drive database update script
55:
56: Usage: $0 [-v] [DESTFILE]
57:
58: -v verbose output
59:
60: Updates $DEST
61: or DESTFILE from smartmontools SVN repository.
62: Tries to download first from branch $BRANCH
63: and then from trunk.
64: EOF
65: exit 1
66: ;;
67:
68: "") ;;
69: *) DEST="$1" ;;
70: esac
71:
72: # Abort if 'which' is not available
73: which which >/dev/null || exit 1
74:
75: # Find download tool
76: DOWNLOAD=
77: for t in $os_dltools; do
78: if which $t >/dev/null 2>/dev/null; then
79: case $t in
80: curl) DOWNLOAD="curl ${q:+-s }"'-f -o "$DEST.new" "$SRC"' ;;
81: lynx) DOWNLOAD='lynx -source "$SRC" >"$DEST.new"' ;;
82: wget) DOWNLOAD="wget $q"'-O "$DEST.new" "$SRC"' ;;
83: fetch) DOWNLOAD='fetch -o "$DEST.new" "$SRC"' ;; # FreeBSD
84: ftp) DOWNLOAD='ftp -o "$DEST.new" "$SRC"' ;; # OpenBSD
85: esac
86: break
87: fi
88: done
89: if [ -z "$DOWNLOAD" ]; then
90: echo "$0: found none of: $os_dltools" >&2; exit 1
91: fi
92:
93: # Try possible branch first, then trunk
94: for location in "branches/$BRANCH" "trunk"; do
95: test -n "$q" || echo "Download from $location"
96:
97: errmsg=
98: rm -f "$DEST.new"
99: SRC="`eval echo "$SRCEXPR"`"
100:
101: if (eval $DOWNLOAD); then :; else
102: errmsg="download from $location failed (HTTP error)"
103: continue
104: fi
1.1.1.2 ! misho 105: if grep -i '<title>.*Error has Occurred' "$DEST.new" >/dev/null; then
! 106: errmsg="download from $location failed (SF code browser error)"
1.1 misho 107: continue
108: fi
109:
110: break
111: done
112:
113: if [ -n "$errmsg" ]; then
114: rm -f "$DEST.new"
115: echo "$0: $errmsg" >&2
116: exit 1
117: fi
118:
119: # Adjust timestamp and permissions
120: touch "$DEST.new"
121: chmod 0644 "$DEST.new"
122:
123: # Check syntax
124: rm -f "$DEST.error"
125: if $SMARTCTL -B "$DEST.new" -P showall >/dev/null; then :; else
126: mv "$DEST.new" "$DEST.error"
127: echo "$DEST.error: rejected by $SMARTCTL, probably no longer compatible" >&2
128: exit 1
129: fi
130:
1.1.1.2 ! misho 131: # Keep old file if identical
1.1 misho 132: rm -f "$DEST.lastcheck"
133: if [ -f "$DEST" ]; then
1.1.1.2 ! misho 134: if cmp "$DEST" "$DEST.new" >/dev/null 2>/dev/null; then
1.1 misho 135: rm -f "$DEST.new"
136: touch "$DEST.lastcheck"
137: echo "$DEST is already up to date"
138: exit 0
139: fi
140: mv "$DEST" "$DEST.old"
141: fi
142:
143: mv "$DEST.new" "$DEST"
144:
145: echo "$DEST updated from $location"
146:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>