08.04.2013

Aktuelle Mozilla-Programme downloaden

Mal wieder ein kleines, nützliches Skript, um bei den Updates für Firefox und Thunderbird auf Windows Schritt zu halten. Das ist sehr praktisch, wenn man ein eigenes kleines Netzwerk verwalten muss und nicht jeder PC einzeln die Updates runterladen soll.

Das Skript verlässt sich auf die Symlinks "latest" bzw. "latest-esr" auf dem Downloadserver. Die sind leider nicht so spontan aktuell, aber doch durchaus noch im vertretbaren Rahmen. Wenn man eine ganz bestimmte Version haben will oder die Symlinks doch länger nicht aktuell sind, kann man auch auf der Kommandozeile die gewünschte Versionsnummer direkt angeben (z.B. "19.0.42" oder "17.0.5esr"). Erste Angabe ist für Firefox, zweite Angabe für Thunderbird.

Beispiel von Aufrufen mit "verbose"-Option:

get-mozilla.sh -v 20.0.1 17.0.5
get-mozilla.sh -ve 17.0.5esr 17.0.5esr
Das Skript besorgt sich mit "lynx -dump" für die gewünschte Version ("release" bzw. "esr", "de" bzw. "en") die Download-Seite bei einem der gespiegelten Mozilla-Server im Klartext, sucht sich aus dem Anhang der Seite die Downloadlinks heraus, und lädt dann die neuen Versionen herunter, sofern sie nicht schon lokal vorhanden sind. Es wird also nix doppelt runtergeladen. Wer kein rsync verwendet, kann den letzten "if"-Befehl im Skript entfernen, das kopiert die heruntergeladenen Dateien auf einen anderen Server.


Da die ESR-Versionen (Extended Support Release, d.h. nur Sicherheitsupdates, keine neuen Features für den Support-Zeitraum) nicht überall gespiegelt werden, gibt es einen expliziten Server, von dem diese "Enterprise"-Versionen geholt werden.

Wenn man also die "normalen" rapid-release und die ESR-Versionen benötigt, muss man das Skript 2x aufrufen, einmal mit "-e", einmal ohne diesen Switch. Danach hat man vier Dateien pro Variante, TB und FF jeweils in deutsch und englisch. Wer weniger oder andere Sprachen haben will, muss das Skript entsprechend anpassen.

Gesteuert wird das Skript über einige Switches:
  • -e ESR-Version herunterladen
  • -v verbose
  • -s nur Anzeigen, nix herunterladen
  • -S rsync zum Kopieren auf einen anderen Server
#!/bin/sh

# ftp.mozilla.org
# /pub/mozilla.org/firefox/releases/17.0esr/win32/en-US
# /pub/mozilla.org/firefox/releases/17.0esr/win32/de
# Firefox Setup 17.0.2esr.exe
# /pub/mozilla.org/thunderbird/releases/17.0esr/win32/de/
# /pub/mozilla.org/thunderbird/releases/17.0esr/win32/en-US/
# Thunderbird Setup 17.0.2esr.exe
# https://download-installer.cdn.mozilla.net/pub/mozilla.org/

latestff=latest
latesttb=latest
esrff=latest-esr
esrtb=latest-esr
show=0
sync=0
verbose=-q
url=http://download-installer.cdn.mozilla.net/pub/mozilla.org
mirror=ftp.mozilla.org/pub/mozilla.org

while getopts "esSv" opt
do
  case "$opt" in
  S) sync=1;;
  s) show=1;;
  v) verbose=-v;;
  e) latestff=$esrff
     latesttb=$esrtb
     url=$mirror
  ;;
  esac
done
shift $(expr $OPTIND - 1)

PATH=/opt/bin${PATH:+:$PATH}

ff=$url/firefox/releases/%s/win32
tb=$url/thunderbird/releases/%s/win32
ffde=$ff/de
ffen=$ff/en-US
tbde=$tb/de
tben=$tb/en-US
mail=0

msg() { echo "$*" 1>&2; }
error() { msg "$*"; exit 1; }

download() {
  ver=${4}
  u=$(printf "$1" $ver)
  name=$(lynx -dump $u | awk '/\.exe$/{sub(/.*\//,"",$2);print$2;exit;}')
  ver=${name%.exe}
  ver=${ver#*Setup%20}
  fn=$2-$ver-$3.exe
  if [ $show -eq 1 ]
  then
    echo "$u"
    lynx -dump $u | awk '/\.exe$/{sub(/.*\//,"",$2);print$2;exit;}'
    echo "$fn"
  else
    if [ -f "$fn" ]
    then
      echo found $2 $ver $3
    else
      echo downloading $2 $ver $3
      wget $verbose $u/$name -O "$fn"
      if [ -s "$fn" ]
      then
        mail=1
      else
        rm "$fn"
      fi
    fi
  fi
}

cd /install/mozilla

download "$ffde" firefox de ${1:-$latestff}
download "$ffen" firefox en ${1:-$latestff}
shift
download "$tbde" thunderbird de ${1:-$latesttb}
download "$tben" thunderbird en ${1:-$latesttb}

if [ "$mail" -eq 1 ]
then
  echo send mail ...
  ls -1rt | \
  grep -i '\.exe' | \
  /bin/mail -s "New Mozilla software (FF $latestff) (TB $latesttb)" ths
fi
if [ "$sync" -eq 1 ]
then
  echo sync to nas ...
  rsync -v -e /opt/bin/ssh *.exe root@nas:/mnt/nas1/install/mozilla
fi