Benutzer-Werkzeuge

Webseiten-Werkzeuge


run_download-ff.sh

Was macht das Script

Mit meinem Shellscript kann man direkt von Mozillas Downloadservern Firefox im eigenen $HOME/opt Verzeichnis installiert werden. Die Option -r installiert die aktuelle Releaseversion, die Option -i die aktuelle Betaversion von Firefox. Eine spezielle Version kann mit der Option -s installiert werden (zB ESR Version).

Es ist problemlos möglich mehrere Versionen parallel nebeneinander zu installieren, auch Release- und Betaversionen gemischt. Die zuletzt installierte ist die aktive, zusehen mir der Option -l. Es wird bei der Installtion ein symbolischer Link von der zu installierenden auf ein allgemeines Firefoxverzeichnis firefox gesetzt, da das Quellverzeichnis immer die Version im Namen mit enthält. Dieser ändert sich natürlich bei jeder neuen Installtaion. Damit habe ich den Verzeichnispfad des Installationsortes immer auf $HOME/opt/firefox gesetzt.

$ ls -l
insgesamt 4
lrwxrwxrwx  1 michael michael   33 Jan  4 16:54 firefox -> /home/michael/opt/firefox-72.0b11
drwxr----- 10 michael michael 4096 Jan 18 10:58 firefox-72.0b11
drwxr----- 10 michael michael 4096 Jan 18 10:58 firefox-72.0.1

Mit der Option -c kann ich den Link händisch auf eine parallele installierte Version setzen.

Die Option -v zeigt die möglichen aktuellesten Installationsvarianten von Beta- und Releaseversion an, sowie die aktuell lokal installierte Version auf die gerade verlinkt ist.

$ ./run_download-ff.sh -v
 Ermittle Versionnummer von lokalen Firefox ...
  --> [OKAY]
  --> Installtion als Benutzer michael im Verzeichnis:            /home/michael/opt
  --> Aktuellste downloadbare Firefox Beta-Version (Mozilla):     firefox-73.0b6
  --> Aktuellste downloadbare Firefox Release-Version (Mozilla):  firefox-72.0.1
  --> Aktuellste installierte Firefox Version (lokal):            firefox-72.0b11

Die Option -l ermittelt alle lokalen, mit diesem Script installierten Versionen, des Firefox an. Hiermit kann man sehr schnell erkennen auf welche Version verlinkt ist.

$ ./run_download-ff.sh -l
 Ermittle alle lokal installierten Versionen von Firefox ...
  --> [LINK] /home/michael/opt/firefox          -->  /home/michael/opt/firefox-72.0b11
  --> [DIR]  /home/michael/opt/firefox-72.0b11


Optionsparameter

$ ./run_download-ff.sh -h
Syntax: ./run_download-ff.sh [-h|-v|-l|-a|-d|-i|-r|-s <version>|-p <version>|-c <version>|-b]

Das Script ermittelt die aktuellste verfuegbare Firefox Version von Mozilla, laedt es
herunter und installiert es bzw. loescht die Version (als root oder User). Es wird
jeweils ein symbolischer Link erstellt der von dem aktuellen Versionsverzeichnis
unterhalb von /opt bzw. /home/michael/opt auf das Verzeichnis firefox zeigt.

 -h (help):             diese Hilfeseite
 -v (version):          zeigt die aktuellste verfuegbare Beta- und Releaseversion, sowie
                        die aktuellste lokal installierte Version von Firefox an
 -l (list):             listet alle lokal installierten Versionen von Firefox auf
 -a (availabel):        listet alle verfuegbaren und installierbaren Versionen von Firefox auf
 -d (download):         laedt die aktuellste verfuegbare Beta-Version von Firefox ins
                        Verzeichnis /tmp herunter
 -i (install beta):     installiert die aktuellste verfuegbare Beta-Version von Firefox
                        im Verzeichnis /opt (als root oder User moeglich)
 -r (install release)   installiert die aktuellste verfuegbare Release-Version von Firefox
                        im Verzeichnis /opt (als root oder User moeglich)
 -s (special):          installiert eine anzugebende Version von Firefox im Verzeichnis /opt
                        (als root oder User moeglich)
 -c (change):           setzt den Link (Quellverzeichnis firefox) des auf ein anderes
                        Verzeichnis innerhalb des Installationsverzeichnisses
 -p (purge):            eine vorhandene Installationsversion deinstallatieren
 -b (browse):           im ftp-Verzeichnis von Mozilla browsen


Codelisting

run_download-ff.sh
#!/bin/bash
#
################ Variablenbelegung ##################
ERRORMESSAGE="Achtung - Diese Option ist nicht verfuegbar"
LOCAL_PATH="/tmp"
DOWNLOADSITE="http://archive.mozilla.org/pub/firefox/releases/"
PLATFORM="linux-$(uname -m)"
LANGUAGE="de"
EXECUTE_USER=$(id -u)
 
################### Funktionen ######################
 
do_print_version()
{
	echo "  --> Installtion als Benutzer "$USER" im Verzeichnis:            "$INST_PATH
	echo "  --> Aktuellste downloadbare Firefox Beta-Version (Mozilla):     "$DOWNLOAD_VERSION
	echo "  --> Aktuellste downloadbare Firefox Release-Version (Mozilla):  "$DOWNLOAD_VERSION_RELEASE
	echo "  --> Aktuellste installierte Firefox Version (lokal):            "$INSTALLED_VERSION
}
 
 
do_check_instdir()
{
	if [ $EXECUTE_USER -eq 0 ]
		then
		if [ ! -d "$INST_PATH" ]
			then
			mkdir -p "$INST_PATH"
		fi
	elif [ $EXECUTE_USER -ne 0 ]
		then
		if [ ! -d "$INST_PATH" ]
			then
			mkdir -p "$INST_PATH"
		fi
	fi
}
 
 
do_set_env()
{
	if [ $EXECUTE_USER -eq 0 ]
		then
		INST_PATH="/opt"
		LINK_DIR="/opt/firefox"
	elif [ $EXECUTE_USER -ne 0 ]
		then
		INST_PATH="$HOME/opt"
		LINK_DIR="$HOME/opt/firefox"
	fi
	do_check_instdir
}
 
 
do_get_installed_version()
{
	if [ -h "$LINK_DIR" ]
		then
		echo " Ermittle Versionnummer von lokalen Firefox ..."
		INSTALLED_VERSION=$(basename $(stat --format="%N" $LINK_DIR | cut -d" " -f3 | sed "s/'//g"))
		do_print_okay_fail $?
	elif [ -d "$LINK_DIR" ]
		then
		echo " $LINK_DIR ist kein Link, sondern ein Verzeichnis. Firefox kann nicht installiert werden"
		do_print_okay_fail 1
		exit 1
	elif [ ! -e "$LINK_DIR" ]
		then
		echo " Firefox ist nicht vorhanden und kann installiert werden ..."
		INSTALLED_VERSION=""
		do_print_okay_fail $?
	else
		echo " Die aktuellste installierte lokale Firefox Version ist nicht ermittelbar"
		do_print_okay_fail 2
		exit 2
	fi
}
 
 
do_get_all_installed_versions()
{
	if [ -L $LINK_DIR ]
		then
		echo " Ermittle alle lokal installierten Versionen von Firefox ..."
		ls -dgo --time-style=long-iso "$LINK_DIR"* | awk '{if ($7 != "") print "  --> [LINK] "$6"          -->  "$8; else print "  --> [DIR]  "$6}'
	else
		echo " Firefox ist nicht vorhanden"
		INSTALLED_VERSION=""
		do_print_okay_fail 2
	fi
}
 
 
do_get_version()
{
	# Beta-Versionen suchen
	# findet auch Beta-Versionen ala 38.0b1 oder 38.0.5b1
	LATEST_VERSION=$(wget -qnv -O - $DOWNLOADSITE | html2text | awk '{print $2}' | egrep '^[0-9]{1,2}.[0-9](.[0-9]{1,2}b[0-9]{1,2}|b[0-9]{1,2})[^-]'| sort --version-sort | tail -1 | sed 's|/||g')
	DOWNLOAD_VERSION="firefox-$LATEST_VERSION"
 
	# Release-Version suchen
	LATEST_VERSION_RELEASE=$(wget -qnv -O - $DOWNLOADSITE | html2text | awk '{print $2}' |  egrep -v '[a-z]' | sed 's|/||g' |  sort -t"." -n -k1,2 -k3 | tail -1)
	DOWNLOAD_VERSION_RELEASE="firefox-$LATEST_VERSION_RELEASE"
}
 
 
do_get_special_version()
{
	echo " Ermittle Versionnummer von angebenen Firefox ..."
	# ungueltige Eingabe abfangen (letztes Zeichen ".")
	LENGTH=${#OPTARG}
	LAST_OPTARG=${OPTARG:LENGTH-1:1}
	if [ "$LAST_OPTARG" = "." ]
		then
		do_print_okay_fail 8
	fi
 
	# angegebene Version suchen
	# Variable OPTARG (angegebene Version) bearbeiten. Punkte mit Backslash entwerten
	OPTARG_TMP=${OPTARG//./\\.}
	LATEST_VERSION=$(wget -qnv -O - $DOWNLOADSITE | html2text | awk '{print $2}' | egrep '^[0-9]{1,2}.[0-9]' | sed 's|/||g' | egrep -w $OPTARG_TMP\$)
 
	if [ "$LATEST_VERSION" ]
		then
		DOWNLOAD_VERSION="firefox-$LATEST_VERSION"
	elif [ "$LATEST_VERSION" = "" ]
		then
		do_print_okay_fail 9 
	fi
}
 
 
do_list_all_available_versions()
{
	wget -qnv -O - $DOWNLOADSITE | html2text | awk '{print $2}' | egrep '^[0-9]{1,2}.[0-9]' | sed 's|/||g' | sort -t"." -n -k1,2
}
 
 
do_download()
{
	DOWNLOAD_FILE="firefox-$LATEST_VERSION.tar.bz2"
	DOWNLOAD_PATH="$DOWNLOADSITE$LATEST_VERSION/$PLATFORM/$LANGUAGE"
	echo " Mozilla Firefox $LATEST_VERSION wird heruntergeladen ins Verzeichnis $LOCAL_PATH ..."
	wget -q -P $LOCAL_PATH $DOWNLOAD_PATH/$DOWNLOAD_FILE
	do_print_okay_fail $?
}
 
 
do_uncompress()
{
	echo " Datei $DOWNLOAD_FILE wird dekomprimiert ..."
	bzip2 -d $LOCAL_PATH/$DOWNLOAD_FILE
	do_print_okay_fail $?
}
 
 
do_print_okay_fail()
{
	RC=$1
	if [ $RC -eq 0 ]
		then
		echo "  --> [OKAY]"
	elif [ $RC -eq 8 ]
		then
		echo "  --> [WRONG ENTRY and EXIT]"
		exit 8
	elif [ $RC -ne 0 ]
		then
		echo "  --> [FAIL and EXIT]"
		exit 3
	fi
}
 
 
do_inst_new_version()
{
	TAR_FILE="firefox-$LATEST_VERSION.tar"
	echo " Link im Verzeichnis $INST_PATH entfernen ..."
	if [ -h $INST_PATH/firefox ]
		then
		rm $INST_PATH/firefox
		do_print_okay_fail $?
	fi
	echo " Archiv $LOCAL_PATH/$TAR_FILE entpacken ..."
	tar -xf $LOCAL_PATH/$TAR_FILE -C $INST_PATH
	do_print_okay_fail $?
	echo " Link setzen auf neue Version ..."
	mv $INST_PATH/firefox $INST_PATH/firefox-$LATEST_VERSION
	ln -s $INST_PATH/$DOWNLOAD_VERSION $INST_PATH/firefox
	do_print_okay_fail $?
 
	USERID=$(id -u)
	if [ $USERID -eq 0 ]
		then
		echo " Zugriffsrechte auf Installationsverzeichnis setzen ..."
		chmod 750 $INST_PATH/$DOWNLOAD_VERSION
		find $INST_PATH/$DOWNLOAD_VERSION -type d -exec chmod 750 {} \;
		do_print_okay_fail $?
		echo " Ownership auf Installationsverzeichnis setzen ..."
		chown -R root.users $INST_PATH/$DOWNLOAD_VERSION
		do_print_okay_fail $?
	fi
}
 
 
do_del_tmpfiles()
{
	if [ -e $LOCAL_PATH/firefox-*.tar* ]
		then
		echo " Temporaere Archivdatei(en) loeschen..."
		rm $LOCAL_PATH/firefox-*.tar*
		do_print_okay_fail $?
	fi
}
 
 
do_can_del_version()
{
	if [ -e $INST_PATH/$DEL_VERSION ]
		then
		RC=$?
		do_get_installed_version
	else
		RC=$?
		echo " Angegebene Version $DEL_VERSION ist nicht vorhanden"
		do_print_okay_fail $RC
	fi
}
 
 
do_get_linked_version()
{
	LINKED_VERSION=$(basename $(stat --format="%N" $LINK_DIR | sed -e "s/[',>]//g" | cut -d" " -f3))
	if [ "$DEL_VERSION" = "$LINKED_VERSION" ]
		then
		echo " Zu loeschende Version $DEL_VERSION ist aktuell auf die ausfuehrbare Version verlinkt"
		read -p " Trotzdem loeschen? (y/n): " DEL_FORCE
		if [ "$DEL_FORCE" = "y" ]
			then
			do_print_okay_fail 0
		elif [ "$DEL_FORCE" = "n" ]
			then
			do_print_okay_fail 1
		else
			echo " Ungueltige Eingabe"
			do_print_okay_fail 1
		fi
	else
		echo " Zu loeschende Version $DEL_VERSION ist aktuell nicht verlinkt auf die ausfuehrbare Version"
		do_print_okay_fail 0
	fi
}
 
 
do_purge_version()
{
	REALY_FF="firefox-"
	REALY_DEL_VERSION=${DEL_VERSION:0:8}
 
	if [ "$REALY_FF" = "$REALY_DEL_VERSION" ]
		then
		rm -r $INST_PATH/$DEL_VERSION
		RC=$?
		echo " Version $DEL_VERSION loeschen ..."
		do_print_okay_fail $RC
 
		DEAD_LINK=$(symlinks $INST_PATH | egrep ^dangling | cut -d" " -f4)
		if [ "$DEAD_LINK" ]
			then
			symlinks -d $INST_PATH 1>/dev/null
			echo " Defekten Link in $INST_PATH loeschen"
			do_print_okay_fail 0
		fi
	elif [ "$REALY_FF" != "$REALY_DEL_VERSION" ]
		then
		echo " Angebenes Verzeichnis $DEL_VERSION existiert darf aber nicht geloescht werden"
		do_print_okay_fail 1
	fi
}
 
 
change_linkdir()
{
	# Überprüfen ob generell ein Link vorhanden ist
	CHECK_LINK=$(symlinks $INST_PATH)
	if [ "$CHECK_LINK" = "" ]
		then
		ln -s $INST_PATH/$CHANGE_VERSION $INST_PATH/firefox
		RC=$?
		if [ $RC -eq 0 ]
			then
			do_print_okay_fail 0
		elif [ $RC -ne 0 ]
			then
			do_print_okay_fail 1
		fi
	fi
 
	# Überprüfen $INST_PATH/firefox ein symbolischer Link ist
	if [ -L "$INST_PATH/firefox" ]
		then
		# überprüfen ob angebene Version ein Verzeichnis ist
		if [ -d "$INST_PATH/$CHANGE_VERSION" ]
			then
			echo " Linkverzeichnis löschen ..."
			rm $INST_PATH/firefox
			RC=$?
			if [ $RC -eq 0 ]
				then
				do_print_okay_fail 0
			elif [ $RC -ne 0 ]
				then
				do_print_okay_fail 1
			fi
			echo " Neuen Link auf Version $CHANGE_VERSION setzen ..."
			ln -s $INST_PATH/$CHANGE_VERSION $INST_PATH/firefox
			RC=$?
			if [ $RC -eq 0 ]
				then
				do_print_okay_fail 0
			elif [ $RC -ne 0 ]
				then
				do_print_okay_fail 1
			fi
		else
			echo " $INST_PATH/$CHANGE_VERSION ist kein Verzeichnis oder nicht vorhanden"
			do_print_okay_fail 1
		fi
	else
		echo " Verzeichnis $INST_PATH/firefox ist kein Link oder nicht vorhanden"
		do_print_okay_fail 1
	fi
}
 
 
debug_var_show()
{
	echo "--------------- Debuging Variablen ---------------"
	echo ""
	echo "LATEST_VERSION_RELEASE="$LATEST_VERSION_RELEASE	
	echo "LATEST_VERSION="$LATEST_VERSION
	echo "DOWNLOAD_VERSION="$DOWNLOAD_VERSION
	echo "DOWNLOAD_VERSION_RELEASE="$DOWNLOAD_VERSION_RELEASE
	echo "INSTALLED_VERSION="$INSTALLED_VERSION
	echo ""
	echo "--------------------------------------------------"
}
 
usage()
{
	echo "Syntax: $0 [-h|-v|-l|-a|-d|-i|-r|-s <version>|-p <version>|-c <version>|-b]"
	echo ""
	echo "Das Script ermittelt die aktuellste verfuegbare Firefox Version von Mozilla, laedt es"
	echo "herunter und installiert es bzw. loescht die Version (als root oder User). Es wird"
	echo "jeweils ein symbolischer Link erstellt der von dem aktuellen Versionsverzeichnis"
	echo "unterhalb von /opt bzw. $HOME/opt auf das Verzeichnis firefox zeigt."
	echo ""
	echo " -h (help):             diese Hilfeseite"
	echo " -v (version):          zeigt die aktuellste verfuegbare Beta- und Releaseversion, sowie"
	echo "                        die aktuellste lokal installierte Version von Firefox an"
	echo " -l (list):             listet alle lokal installierten Versionen von Firefox auf"
	echo " -a (availabel):        listet alle verfuegbaren und installierbaren Versionen von Firefox auf"
	echo " -d (download):         laedt die aktuellste verfuegbare Beta-Version von Firefox ins"
	echo "                        Verzeichnis /tmp herunter"
	echo " -i (install beta):     installiert die aktuellste verfuegbare Beta-Version von Firefox"
	echo "                        im Verzeichnis /opt (als root oder User moeglich)"
	echo " -r (install release)   installiert die aktuellste verfuegbare Release-Version von Firefox"
	echo "                        im Verzeichnis /opt (als root oder User moeglich)"
	echo " -s (special):          installiert eine anzugebende Version von Firefox im Verzeichnis /opt"
	echo "                        (als root oder User moeglich)"
	echo " -c (change):           setzt den Link (Quellverzeichnis firefox) des auf ein anderes"
	echo "                        Verzeichnis innerhalb des Installationsverzeichnisses"
	echo " -p (purge):            eine vorhandene Installationsversion deinstallatieren"
	echo " -b (browse):           im ftp-Verzeichnis von Mozilla browsen"
	echo ""
}
 
 
################### Hauptprogramm ###################
 
if [ $# -eq 0 ]
	then
	usage
	exit 4
fi
 
while getopts hdirs:p:vlaic:b OPTION; do
	case $OPTION in
		h)
		usage
		;;
 
		d)
		do_set_env
		do_get_version
		do_download
		;;
 
		i)
		do_set_env
		do_del_tmpfiles
		do_get_version
		do_get_installed_version
		if [ "$DOWNLOAD_VERSION" != "$INSTALLED_VERSION" ]
			then
			do_download
			do_uncompress
			do_inst_new_version
			do_del_tmpfiles
		else
			echo " Die installierte Version von Firefox $INSTALLED_VERSION ist bereits die aktuellste"
		fi
		;;
 
		r)
		do_set_env
		do_del_tmpfiles
		do_get_version
		do_get_installed_version
		if [ "$DOWNLOAD_VERSION_RELEASE" != "$INSTALLED_VERSION" ]
			then
			if [ -d "$INST_PATH/$DOWNLOAD_VERSION_RELEASE" ]
				then
				echo " Version $DOWNLOAD_VERSION_RELEASE existiert bereits und wird geloescht ..."
				rm -r $INST_PATH/$DOWNLOAD_VERSION_RELEASE
				do_print_okay_fail 0
			fi
			LATEST_VERSION=$LATEST_VERSION_RELEASE
			DOWNLOAD_VERSION=$DOWNLOAD_VERSION_RELEASE
			do_download
			do_uncompress
			do_inst_new_version
			do_del_tmpfiles
		else
			echo " Die installierte Version von Firefox $INSTALLED_VERSION ist bereits vorhanden"
		fi
		;;
 
		s)
		do_set_env
		do_del_tmpfiles
		do_get_special_version
		do_get_installed_version
		if [ "$DOWNLOAD_VERSION" != "$INSTALLED_VERSION" ]
			then
			do_download
			do_uncompress
			do_inst_new_version
			do_del_tmpfiles
		else
			echo " Die installierte Version von Firefox $INSTALLED_VERSION ist bereits vorhanden"
		fi
		;;
 
		p)
		do_set_env
		DEL_VERSION="firefox-$OPTARG"
		do_can_del_version
		do_get_linked_version
		do_purge_version
		;;
 
		v)
		do_set_env
		do_get_version
		do_get_installed_version
		do_print_version		
		;;
 
		l)
		do_set_env
		do_get_all_installed_versions
		;;
 
		a)
		do_list_all_available_versions
		;;
 
		c)
		CHANGE_VERSION="firefox-$OPTARG"
		do_set_env
		change_linkdir
		;;
 
		b)
		elinks $DOWNLOADSITE
		;;
 
		\?)
		echo $ERRORMESSAGE
		exit 99
		;;
	esac
done
shift `expr $OPTIND - 1`
exit 0
#
#EOF
run_download-ff.sh.txt · Zuletzt geändert: 2020/02/23 15:53 von dwadmin