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>