File: //usr/bin/download-mibs
#!/bin/bash
set -e
set -o pipefail
SMISTRIP=/usr/bin/smistrip
CONFDIR=/etc/snmp-mibs-downloader
. $CONFDIR/snmp-mibs-downloader.conf
download_mibs()
{
TMP="$(mktemp -d)"
if [ ! -z "$ARCHIVE" ]; then
ARCHTMP="$(mktemp -d)"
if [ "$ARCHTYPE" == "dirgz" ]; then
if [ ! -z "$HOST" ]; then
echo "Downloading a whole directory with compressed content"
echo "is not supported."
exit 1
else
cp "$DIR/$ARCHIVE"/* "$ARCHTMP/"
gzip -d "$ARCHTMP"/* || /bin/true
fi
else
if [ ! -z "$HOST" ]; then
wget -O "$ARCHTMP/$ARCHIVE" -q -nv "$HOST/$DIR/$ARCHIVE"
else
cp "$DIR/$ARCHIVE" "$ARCHTMP/$ARCHIVE"
fi
case "$ARCHTYPE" in
tar)
tar -C "$ARCHTMP" -xf "$ARCHTMP/$ARCHIVE"
;;
tgz)
tar -C "$ARCHTMP" -xzf "$ARCHTMP/$ARCHIVE"
;;
zip)
unzip -d "$ARCHTMP" "$ARCHTMP/$ARCHIVE"
;;
esac
fi
fi
while read -r file mibs; do
if [ "$file" != "#" ]; then
if [ ! -z "$PREFIX" ]; then
file="$PREFIX$file"
fi
if [ ! -z "$SUFFIX" ]; then
file="$file$SUFFIX"
fi
if [ -z "$ARCHIVE" ]; then
archive_fetcher=(wget -O - -q -nv "$HOST/$DIR/$file")
else
archive_fetcher=(cat "$ARCHTMP/$ARCHDIR/$file")
fi
"${archive_fetcher[@]}" \
| tr -d \\r \
| $SMISTRIP -v -a -d "$TMP" -m "$mibs" -
fi
done <"$CONFDIR/$CONF"
if [ ! -z "$DIFF" ]; then
patch -d "$TMP" <"$CONFDIR/$DIFF"
fi
if [ ! -d "$BASEDIR/$DEST" ]; then
mkdir -p "$BASEDIR/$DEST"
fi
cp "$TMP"/* "$BASEDIR/$DEST"
rm -f "$BASEDIR/$DEST/.index"
rm -fr "$TMP"
if [ ! -z "$ARCHTMP" ]; then
rm -rf "$ARCHTMP"
fi
}
list_mibs()
{
while read -r file mibs; do
if [ "$file" = "#" ]; then
continue
fi
echo "$mibs" | tr ':' '\n'
done <"$CONFDIR/$CONF"
}
MODE='get'
while [ $# -gt 0 ]; do
case $1 in
--get)
MODE='get'
;;
--list)
MODE='list'
;;
*)
break
esac
shift
done
if [ $MODE = get ]; then
echo ""
echo "Downloading documents and extracting MIB files."
echo "This will take some minutes."
echo ""
echo "In case this process fails, it can always be repeated later by executing"
echo "$0 again."
echo ""
fi
sources=$1
if [ -z "$sources" ]; then
sources="$AUTOLOAD"
fi
for i in $sources; do
TMP=
ARCHTMP=
HOST=
DIR=
CONF=
DEST=
DIFF=
PREFIX=
SUFFIX=
ARCHIVE=
ARCHTYPE=
ARCHDIR=
. "$CONFDIR/$i.conf"
if [ $MODE = list ]; then
list_mibs
else
download_mibs
fi
done