From 094c53c54d3910d6896b33ab71969530362f2628 Mon Sep 17 00:00:00 2001 From: kyodev Date: Tue, 18 Jul 2017 16:44:14 +0200 Subject: [PATCH] 0.4.0 --- docs/scripts/getFirefox.md | 200 +++++++++++---- scripts/getFirefox | 440 ++++++++++++++++++++------------ scripts/getFirefox_changelog.md | 17 ++ 3 files changed, 446 insertions(+), 211 deletions(-) create mode 100644 scripts/getFirefox_changelog.md diff --git a/docs/scripts/getFirefox.md b/docs/scripts/getFirefox.md index 4ad9bc5..8604a12 100644 --- a/docs/scripts/getFirefox.md +++ b/docs/scripts/getFirefox.md @@ -1,5 +1,14 @@ # getFirefox -**version 0.3.0beta** + +** toute version inférieure à 1.x doit être considérée comme beta en cours de développement** + +## installation raccourci: + +**en root**: +```shell +wget https://framagit.org/kyodev/kyopages/raw/master/scripts/getFirefox + && chmod +x getFirefox && ./getFirefox && getFirefox +``` ## charger le script @@ -9,24 +18,12 @@ chmod +x getFlasPlayer ``` ## installation du script -en **root** + +en **root**, pour l'installation: ```shell -su ./getFirefox -exit -``` - * le script est maintenant dans le système et tout utilisateur peut s'en servir. - * si le paquet Debian `firefox-esr` est présent, il sera **désinstallé**. - * **Fermer un Firefox existant** avant installation - * si ce paquet devait être ré-installé, il semble préférable de désinstaller ces version - officielles auparavant. - - -## help -lancer le script sans arguments: `getFirefox` - -`getFirefox` ``` +```text _ _____ _ __ __ _ ___| |_| ___(_)_ __ ___ / _| _____ __ / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / @@ -34,23 +31,48 @@ lancer le script sans arguments: `getFirefox` \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ |___/ - pour Debian, version 0.3.0beta - 10/06/2017 + pour Debian, version 0.4.0b4 - 18/07/2017 + + getFirefox installé dans le système. + maintenant, appel du script par: getFirefox (sans ./) + +``` + * le script est maintenant dans le système et tout utilisateur peut s'en servir. + * si le paquet Debian `firefox-esr` était présent, il a été **désinstallé**. + * si ce paquet devait être ré-installé, il semble préférable de désinstaller ces versions + officielles auparavant. + * **Fermer un Firefox existant** avant installation + +## help + +lancer le script sans arguments: `getFirefox`ou avec l'option help `getFirefox help` +```text + _ _____ _ __ + __ _ ___| |_| ___(_)_ __ ___ / _| _____ __ + / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / +| (_| | __/ |_| _| | | | | __/ _| (_) > < + \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ + |___/ + + pour Debian, version 0.4.0b4 - 18/07/2017 ----------------------------------------------------------------------- ./getFirefox : installation du script dans le système getFirefox +latest : installation Firefox Release - getFirefox -latest : désinstallation Firefox Release - getFirefox version : version en ligne Firefox Release & ESR - ---- getFirefox +aurora : installation de Firefox Developer Edition - getFirefox -aurora : désinstallation Firefox Developer Edition getFirefox +nightly : installation de Firefox Nightly - getFirefox -nightly : désinstallation Firefox Nightly getFirefox +esr : installation de Firefox ESR + ---- + getFirefox -latest : désinstallation Firefox Release + getFirefox -aurora : désinstallation Firefox Developer Edition + getFirefox -nightly : désinstallation Firefox Nightly getFirefox -esr : désinstallation Firefox ESR ---- - getFirefox sysremove : désinstall du script du système + getFirefox version : version en ligne Firefox Release & ESR + getFirefox upgrade : mise à jour forcée du script + ---- + getFirefox sysremove : désinstallation du script du système ----------------------------------------------------------------------- Ce script doit être exécuté avec les droits ROOT. FERMER et DESINSTALLER un Firefox existant avant d'installer un @@ -60,15 +82,59 @@ lancer le script sans arguments: `getFirefox` ----------------------------------------------------------------------- ``` +## mise à jour du script -## installation _Release_ +`getFirefox upgrade` +```text ``` -su -getFirefox +latest -exit -``` -``` + +* test toutes les **semaines** +* mise à jour du **script** si une nouvelle version est disponible en ligne +* pas de nouvelle version: pas de téléchargement +* à la différence de [_getFirefox install_](#installation-du-script) un téléchargement et + une installation **ne sont pas forcés**. il n'y aura téléchargement que si nouvelle version disponible. +* cette tâche est exécutée périodiquement par cron/anachron et n'a pas vraiment + d'utilité à être lancée manuellement +* _anacron_ est utilisé, c'est à dire que la mise à jour sera testée, même lors d'arrêts du Pc + + +## tâche planifiée + +dans le syslog, (en **root**): `cat /var/log/syslog | grep getFirefox` + + +## date d'installation du script + +pour vérifier la date où la dernière version du script a été installée ou mise à jour +`date -r /opt/bin/getFirefox` + + +## versions + +`getFirefox version`: affiche la version en ligne de Firefox _Release_ et _ESR_, ainsi que +les versions installées par ce script. + +```text + _ _____ _ __ + __ _ ___| |_| ___(_)_ __ ___ / _| _____ __ + / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / +| (_| | __/ |_| _| | | | | __/ _| (_) > < + \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ + |___/ + + pour Debian, version 0.4.0b4 - 18/07/2017 + + Firefox installé(s): + Release: 54.0.1 + Aurora: 54.0a2 + Nightly: 55.0a1 + + Version Firefox en ligne: + Release: 54.0.1 + ESR: + + version script en ligne: "0.3.0", mise à jour possible _.-~-. 7'' Q..\ _7 (_ @@ -83,33 +149,49 @@ exit /..\ /..\__/ ' '::: | | | | | | (_) / /| | | | (_| | ::' vVVv vVVv ': |_| |_| |_|\___/___|_|_|_|\__,_| '' ``` + +## installation _Release_ + +``` +su +getFirefox +latest +exit +``` +```text + _.-~-. + 7'' Q..\ + _7 (_ + _7 _/ _q. / + _7 . ___ /VVvv-'_ . + 7/ / /~- \_\\ '-._ .-' / // + ./ ( /-~-/||'=.__ '::. '-~'' { ___ / // ./{ + V V-~-~| || __''_ ':::. ''~-~.___.-'' _/ // / {_ / { / + VV/-~-~-|/ \ .'__'. '. ':: _ _ _ ''. + / /~~~~||VVV/ / \ ) \ _ __ ___ ___ ___(_) | | __ _ .::' + / (~-~-~\\.-' / \' \::::. | '_ ' _ \ / _ \_ / | | |/ _' | :::' +/..\ /..\__/ ' '::: | | | | | | (_) / /| | | | (_| | ::' +vVVv vVVv ': |_| |_| |_|\___/___|_|_|_|\__,_| '' +``` + * Firefox est installé, en étant directement chargé du site Mozilla. * c'est la dernière release officielle, qui se met à jour automatiquement. * mise à jour majeure toutes les 6 à 8 semaines environ. -## versions en ligne - -`getFirefox version`: affiche la version en ligne de: - - * Firefox version latest release - * Firexos version esr - - ## installation autres canaux 3 autres canaux sont possibles: * Developer Developer (**aurora**), orientée développeurs, version _beta_ comme _testing_, - [Mozilla developer](https://www.mozilla.org/fr/firefox/developer/) + [Mozilla developer](https://www.mozilla.org/fr/firefox/developer/) * Nightly, réservé aux aventuriers, mise à jour tous les jours, version _alpha_ comme _sid_ - [Mozilla Nightly](https://blog.nightly.mozilla.org/) + [Mozilla Nightly](https://blog.nightly.mozilla.org/) * ESR, mise à jour majeure toutes les ans environ, avec support à plus long terme. mise à jour majeure toutes les ans environ, en savoir plus - [Mozilla ESR](https://developer.mozilla.org/fr/Firefox/Firefox_ESR) + [Mozilla ESR](https://developer.mozilla.org/fr/Firefox/Firefox_ESR) -l'installation est lancée avec _getFirefox _**+canal**, soit: - `getFirefox +aurora`, `getFirefox +nightly`, `getFirefox +esr` +l'installation est lancée avec _getFirefox **+canal**_, soit: + `getFirefox +aurora` , `getFirefox +nightly` , `getFirefox +esr` ## Avertissement @@ -118,10 +200,9 @@ le reste est en cours de développement les versions des autres canaux, sont à utiliser avec prudence, seulement si vous maitrisez la technique. -les versions des canaux par ordre croissant: -``` - ESR <= release < aurora < nightly -``` +les versions des canaux par ordre croissant: +` ESR <= release < aurora < nightly ` + * il n'est **pas conseillé de descendre de version** au risque de voir le profil utilisateur **corrompu**. * par contre les profils suivent plus sûrement les montées de version * le script sauvegarde automatiquement, avant installation, le profil firefox de l'utilisateur qui a ouvert la @@ -141,7 +222,7 @@ exemple, Firefox est en release, vous voulez suivre le canal **Nightly** ```shell su getFirefox -latest -getFirefox +n ightly +getFirefox +nightly exit ``` @@ -152,13 +233,27 @@ exit ## désinstallation Firefox -l'installation est lancée avec _getFirefox _**-canal**, soit: +l'installation est lancée avec _getFirefox **-canal**_, soit: `getFirefox -esr`, `getFirefox -aurora`, `getFirefox -nightly` -## supprimer le script sur le systeme +## supprimer le script -en **root**: `getFirefox sysremove` +en **root**: +`getFirefox sysremove` +```txt + _ _____ _ __ + __ _ ___| |_| ___(_)_ __ ___ / _| _____ __ + / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / +| (_| | __/ |_| _| | | | | __/ _| (_) > < + \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ + |___/ + + pour Debian, version 0.4.0b4 - 18/07/2017 + + getFirefox supprimé du système. + +``` ## sources @@ -166,6 +261,11 @@ en **root**: `getFirefox sysremove` sur [framagit](https://framagit.org/kyodev/kyopages/blob/master/scripts/getFirefox) +## changelog + +sur [framagit](https://framagit.org/kyodev/kyopages/blob/master/scripts/getFirefox_changelog.md) + + ## Contact pour tout problème ou suggestion concernant ce script, n'hésitez pas à ouvrir une issue diff --git a/scripts/getFirefox b/scripts/getFirefox index 45acd15..7d649ac 100755 --- a/scripts/getFirefox +++ b/scripts/getFirefox @@ -1,16 +1,21 @@ #!/bin/bash -version="0.3.0beta" +version=0.4.0 +date="18/07/2017" projet="Kyodev" contact="https://framagit.org/kyodev/kyopages/issues" -date="10/06/2017" script="getFirefox" +urlScript="https://framagit.org/kyodev/kyopages/raw/master/scripts/getFirefox" +urlNotice="https://kyodev.frama.io/kyopages/scripts/getFirefox/" +user_agent="Mozilla/5.0 (X11; Linux $(uname -m); rv:54.0) Gecko/20100101 Firefox/54.0" ##### license LPRAB/WTFPL # auteurs: kyodev # contibuteurs: - ##### +PATH='/bin:/usr/bin' ; IFS=' ' + #### définition couleurs ----------------------------------------------- YELLOW=`printf "\033[0;33m"` # ? GREEN=`printf "\033[0;32m"` # ok @@ -31,62 +36,196 @@ cat << 'EOF' |___/ EOF -echo -e "$YELLOW pour Debian, version $version - $date\n$COLOR" +echo -e "$YELLOW pour Debian, version $version - $date\n$COLOR" #### fonctions diverses ================================================ - # sortie sur erreur -f_error() { # affichage paramètre 1 en rouge pour le premier, les suivants optionnels en bleu, sortie du script + # detect system architecture, assign $architecture : linux | linux64, return 1 on unknown architecture +f__architecture(){ + case "$(uname -m)" in + amd64 | x86_64 ) + architecture="linux64";; + i?86 | x86 ) + architecture="linux";; + * ) + case "$(getconf LONG_BIT)" in + 64 ) + architecture="linux64";; + 32 ) + architecture="linux";; + *) + return 1 + esac ;; + esac +} + + # user ayant initié la session graphique, assigne $user_, testé avec mate, gnome + # sortie script sur erreur, gestion variable environnement pour personnaliser l'user avec: + # USER_INSTALL=user script +f__user(){ + # user_ via variable en environnement + test "$USER_INSTALL" && user_="$USER_INSTALL" + # sudo ou gnome: uid + test "$SUDO_UID" && user_id="$SUDO_UID" || user_id="$(echo "$XAUTHORITY" | grep -Eo '[0-9]+')" + # si user_ vide, extraction classique user dans XAUTHORITY, donc priorité à $USER_INSTALL + test "$user_" || user_="$(echo "$XAUTHORITY" | cut -d "/" -f 3)" + # si user_id, extraction via passwd + test "$user_id" && user_="$(grep "$user_" /etc/passwd | cut -d ":" -f 1 )" + # derniers tests, home existant ou user_ défini + if [ "$user_" ]; then + ls "/home/$user_" &>/dev/null || f__error "répertoire /home/$user_ INEXISTANT" + else + f__error "user indéterminé" " lancer le script avec:\n\tUSER_INSTALL=user $0" + fi +} + + #test dépendances (commandes disponibles), $1 liste commandes +f__requis(){ + for i in "$@"; do + if [ ! "$(which $i)" ]; then + testDepends="ko" + f__info "$RED vous devez avoir la commande $i pour exploiter ce script" + fi + done + [ -z "$testDepends" ] || f__error "Paquets manquants" " Contacter administrateur pour disposer de ces commandes" +} + + # test wget, $1 url à tester, retourne url testée & entêtes +f__testWget(){ + echo " $1" + wget -Sq --tries=1 --timeout=15 --user-agent="$user_agent" -O /dev/null "$1" + f__error "Erreur wget" " réessayer et si persistance, contacter $projet $contact" " en indiquant les messages précédents." +} + + + + # sortie sur erreur, log $1 si upgrade +f__error() { #affichage $1 en rouge, $1++ optionnels en bleu, sortie du script, log $1 si upgrade echo -e "\n$RED Erreur critique: $1 $COLOR" - for (( i=2 ; i<=$# ; i++ )); do echo " $BLUE${!i}"; done + for (( i=2 ; i<=$# ; i++ )); do echo -e " $BLUE${!i}"; done echo "$COLOR" + if [ "$opType" == "upgrade" ]; then logger --id -p user.err "$script $version: $1"; fi exit 1 } - # affichage information -f_info() { # tous les paramètres en ligne en couleur bleue, accepte \n, ligne vide à la fin - echo -e " $BLUE $@ $COLOR\n" -} - - #debian? return 0 else 1 -f_debian(){ - if [ -f /etc/debian_version ]; then return 0; else return 1; fi + # affichage information, log $1 si upgrade +f__info() { # tous les paramètres en ligne en couleur bleue, accepte \n, ligne vide à la fin + for (( i=1 ; i<=$# ; i++ )); do echo -e " $BLUE${!i}"; done + echo "$COLOR" + if [ "$opType" == "upgrade" ]; then logger --id -p user.info "$1"; fi } # root? return 0 else 1 -f_root(){ +f__root(){ if [ $EUID -eq 0 ]; then return 0; else return 1; fi } - # script en /bin? return 0 si bin, 1 si local -f_scriptBin(){ - # echo egrep: "-$(echo $0 | grep -Eo '\.\/')-" - if [ "$(echo $0 | grep -Eo '\.\/')" != "./" ]; then return 0; else return 1; fi -} - - # user ayant démarré la session graphique; $userHome -f_userHome(){ - userHome=$(echo $XAUTHORITY | sed -E 's/(.*)\.Xauthority/\1/') -} - - #### fonctions script ================================================== - # version Firefox en ligne, $verLatest, $verEsr, $user_agent, $urlOnline, si $1="quiet", pas d'affichage -user_agent="Mozilla/5.0 (X11; Linux $architecture; rv:45.0) Gecko/ Firefox" -f_versionFF(){ + # install du script dans le système +fscript_install(){ + # si script inexistant ou inaccessible en écriture, ou si cronAnacron non installé: root requis + if [ ! -w "/opt/bin/$script" ] || [ ! -e "/home/$user_/.mozilla/$script.anacrontab" ]; then + f__root || f__error "vous devez être ROOT pour installer ce script dans le système" + if [ "$(which dpkg)" ]; then + # on vire 'firefox-esr' si installé + dpkg --get-selections | grep '^firefox-esr[[:space:]]' &>/dev/null && apt-get remove firefox-esr + fi + # install /opt + mkdir -p /opt/bin/ + ln -s /opt/bin/"$script" /usr/local/bin/"$script" &>/dev/null + cp -d "$(basename $0)" "/opt/bin/$script" + chmod a+rwx "/opt/bin/$script" + chown "$user_": "/opt/bin/$script" + # cron/anacron install + fscript_cronAnacron install + else # maj en user (upgrade manuel ou auto) + chmod a+rwx "$(basename $0)" + chown "$user_": "$(basename $0)" + cp -d "$(basename $0)" "/opt/bin/$script" + fi + [ -f "$script"_changelog.md ] || rm "$(basename $0)" &>/dev/null ## on efface pas si changelog (dev) + f__info "$GREEN$script installé dans le système." "maintenant, appel du script par:$GREEN $script$BLUE (sans ./)" + exit 0 +} + + # suppression du script dans le système +fscript_remove(){ + f__root || f__error "vous devez être ROOT pour supprimer ce script dans le système" + # suppression de /opt + rm /opt/bin/"$script" &>/dev/null + unlink /usr/local/bin/"$script" &>/dev/null + # cron/anacron remove + fscript_cronAnacron remove + f__info "$GREEN$script supprimé du système." +} + + # version script en ligne, assigne $versionScript, $uptd_script=""|ko, +fscript_version(){ + versionScript="$(wget -q --tries=2 --timeout=15 --user-agent="$user_agent" -O - "$urlScript" | grep '^version=' | cut -d '=' -f 2)" + if [ "$version" != "$versionScript" ]; then + f__info "version script en ligne: $versionScript, mise à jour possible" + uptd_script="ko" + else uptd_script=""; fi +} + + # mise à jour script si dispo +fscript_dl(){ + if [ "$uptd_script" != "ko" ]; then return 0; fi + dirTemp="/tmp/$script-$RANDOM/" + mkdir -p "$dirTemp" + wget -q --show-progress --tries=2 --timeout=15 --user-agent="$user_agent" -O "$dirTemp$script" "$urlScript" + if [ "$?" != "0" ]; then f__testWget "$urlScript"; fi + chmod a+rwx "$dirTemp$script" + chown "$user_": "$dirTemp$script" + cp -d "$dirTemp$script" /opt/bin/"$script" + rm -rf "$dirTemp" + echo ""; f__info "$script mis à jour en version $versionScript" +} + + #inscription dans tache upgrade en cron hebdomadaire, une partie requiert root +fscript_cronAnacron(){ +case "$1" in + "install" ) + # table anacron +echo "7 05 getFF nice /opt/bin/$script upgrade &>/dev/null" > "/home/$user_/.mozilla/$script.anacrontab" + ## test: anacron journalier: +echo "1 05 getFF nice /opt/bin/$script upgrade &>/dev/null" >> "/home/$user_/.mozilla/$script.anacrontab" +chown "$user_": "/home/$user_/.mozilla/$script.anacrontab" + # création spool anacron utilisateur +mkdir -p "/home/$user_/.config/anacron/spool" +chown "$user_": "/home/$user_/.config/anacron/spool" + # cron tab pour activation horaire anacron +echo "@hourly $user_ /usr/sbin/anacron -t /home/$user_/.mozilla/$script.anacrontab -S /home/$user_/.config/anacron/spool" >> /etc/crontab + ;; + "remove" ) +[ -e "/home/$user_/.config/anacron/spool/getFF" ] && rm "/home/$user_/.config/anacron/spool/getFF" +sed -i "/^\@hourly.*$script.anacrontab.*$/d" /etc/crontab +rm "/home/$user_/.mozilla/$script.anacrontab" + ;; +esac +} + + # version Firefox en ligne, $verLatest, $verEsr, $versionInstall, $user_agent, $urlOnline, si $1="quiet", pas d'affichage +ffx_versionFF(){ urlOnline="https://www.mozilla.org/en-US/firefox/notes/" verLatest=$(wget --no-check-certificate --tries=1 --timeout=15 --user-agent=$user_agent -nv -qO - $urlOnline | \ grep -Eo 'data-latest-firefox="[0-9\.]+"' | grep -Eo '[0-9\.]+') verEsr=$(wget --no-check-certificate --tries=1 --timeout=15 --user-agent=$user_agent -nv -qO - $urlOnline | \ grep -Eo 'data-esr-versions="[0-9 \.]+"' | grep -Eo ' [0-9\.]+' | grep -Eo '[0-9\.]+') - if [ "$1" != "quiet" ]; then f_info "Version Firefox en ligne: $verLatest\n Version esr: $verEsr"; fi + versionInstall="" + if [ -x /opt/firefox-latest/firefox ]; then versionInstall+="\n Release: $(/opt/firefox-latest/firefox -v | grep -Eo '[0-9].*')"; fi + if [ -x /opt/firefox-esr/firefox ]; then versionInstall+="\n ESR: $(/opt/firefox-esr/firefox -v | grep -Eo '[0-9].*')"; fi + if [ -x /opt/firefox-aurora/firefox ]; then versionInstall+="\n Aurora: $(/opt/firefox-aurora/firefox -v | grep -Eo '[0-9].*')"; fi + if [ -x /opt/firefox-nightly/firefox ]; then versionInstall+="\n Nightly: $(/opt/firefox-nightly/firefox -v | grep -Eo '[0-9].*')"; fi + if [ "$versionInstall" != "" ] && [ "$1" != "quiet" ]; then f__info "Firefox installé(s): $versionInstall"; fi + if [ "$1" != "quiet" ]; then f__info "Version Firefox en ligne:\n Release: $verLatest\n ESR: $verEsr"; fi } - # ascii art godzilla -f_godzilla(){ +ffx_godzilla(){ +printf "$RED" cat << 'EOF' _.-~-. 7'' Q..\ @@ -101,126 +240,52 @@ cat << 'EOF' / (~-~-~\\.-' / \' \::::. | '_ ' _ \ / _ \_ / | | |/ _' | :::' /..\ /..\__/ ' '::: | | | | | | (_) / /| | | | (_| | ::' vVVv vVVv ': |_| |_| |_|\___/___|_|_|_|\__,_| '' - EOF +echo "$COLOR" } # affichage help -f_help(){ +ffx_help(){ printf $BLUE cat << 'EOF' ---------------------------------------------------------------------- ./getFirefox : installation du script dans le système getFirefox +latest : installation Firefox Release - getFirefox -latest : désinstallation Firefox Release - getFirefox version : version en ligne Firefox Release & ESR - ---- getFirefox +aurora : installation de Firefox Developer Edition - getFirefox -aurora : désinstallation Firefox Developer Edition getFirefox +nightly : installation de Firefox Nightly - getFirefox -nightly : désinstallation Firefox Nightly getFirefox +esr : installation de Firefox ESR + ---- + getFirefox -latest : désinstallation Firefox Release + getFirefox -aurora : désinstallation Firefox Developer Edition + getFirefox -nightly : désinstallation Firefox Nightly getFirefox -esr : désinstallation Firefox ESR ---- + getFirefox version : version en ligne Firefox Release & ESR + getFirefox upgrade : mise à jour forcée du script + ---- getFirefox sysremove : désinstallation du script du système EOF - printf $COLOR; cat << 'EOF' + printf "$COLOR" +cat << 'EOF' ---------------------------------------------------------------------- - Ce script doit être exécuté avec les droits ROOT. + Ce script doit être exécuté avec les droits ROOT pour + les installations et les désinstallations. FERMER et DESINSTALLER un Firefox existant avant d'installer un - nouveau canal - Il désinstallera le paquet Debian firefox-esr si présent. - Ce script devrait fonctionner sur Ubuntu. + nouveau canal + Il désinstallera le *paquet Debian* firefox-esr si présent. ---------------------------------------------------------------------- EOF - printf $COLOR -} - - # install du script dans le système -f_sysinstall(){ - if ! f_root ; then f_error "vous devez être ROOT pour installer ce script dans le système"; fi - - # installation dans /opt - mkdir -p /opt/bin/ - cp -d "$0" /opt/bin/ - ln -s /opt/bin/$script /usr/local/bin/$script &>/dev/null - rm "$0" &>/dev/null - f_info "$GREEN$script est installé dans le système.\n$BLUE appel du script par$GREEN $script$BLUE (sans ./)" - exit 0 -} - - # suppression du script dans le système -f_sysremove(){ - if ! f_root ; then f_error "vous devez être ROOT pour supprimer ce script dans le système"; fi - # suppression de /opt - rm /opt/bin/"$script" &>/dev/null - unlink /usr/local/bin/"$script" &>/dev/null - f_info "$GREEN$script est supprimé du système.\n" } # sauvegarde profil -f_sauveProfil(){ - f_userHome - cp -a "$userHome".mozilla/firefox/ "$userHome".mozilla/"$(date -u +%Y%m%d-%H%M%S)"/ +ffx_sauveProfil(){ + cp -a "/home/$user_".mozilla/firefox/ "/home/$user_".mozilla/"$(date -u +%Y%m%d-%H%M%S)"/ } - # install firefox -f_install(){ - - if ! f_root ; then f_error "vous devez être ROOT pour installer Firefox en tant que ROOT"; fi - # debian? sinon dehors / utile? / - if ! f_debian ; then f_error "désolé, vous n'utilisez pas Debian :( adieu o/"; fi - - printf $RED; f_godzilla; printf $COLOR - - # on vire 'firefox-esr' si installé - if [ "$( dpkg-query -l firefox-esr &>/dev/null | grep -Eo ^ii)" == "ii" ]; then apt-get remove firefox-esr; fi - - f_versionFF "quiet" - # architecture > $architecture (version release) - if [ "$(dpkg --print-architecture)" = "amd64" ]; then architecture='linux64'; else architecture='linux'; fi - - # calcul $file, $url, affichage version pendant l'install - file="firefox-$product.$architecture.tar.bz2" - if [ "$product" == "latest" ]; then - f_info "installation Firefox-$product, version $verLatest" - url="https://download.mozilla.org/?product=firefox-$product&os=$architecture&lang=fr" - elif [ "$product" == "esr" ]; then - f_info "installation Firefox-$product, version $verEsr" - url="https://download.mozilla.org/?product=firefox-$product-latest&os=$architecture&lang=fr" - else - f_info "installation Firefox-$product" - url="https://download.mozilla.org/?product=firefox-$product-latest-l10n-ssl&os=linux&lang=fr" - fi - - # dossier temporaire de travail, création $dirTemp - dirTemp="/tmp/$script/" - mkdir -p "$dirTemp" - - # chargement - f_info "téléchargement..." - wget -c --user-agent="$user_agent" -O "$dirTemp$file" "$url" - - # gestion erreur wget / à peaufiner? / - if [ "$?" != "0" ]; then - f_error "problème au chargement, connexion défaillante?" \ - "Si persistance, merci de prévenir $projet" \ - "$contact" - fi - - # décompression archive - f_info "décompression...." - tar -xaf "$dirTemp$file" -C "$dirTemp" - - f_info "installation...." - - #sauvegarde du profil - f_sauveProfil - - # install lanceur -f_lanceur(){ + # création lanceur +ffx_lanceur(){ rm -f /usr/share/applications/firefox-"$product".desktop cat << "EOF" >> /usr/share/applications/firefox-"$product".desktop #!/usr/bin/env xdg-open @@ -244,7 +309,56 @@ MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/vn StartupNotify=true EOF } - f_lanceur + + # install firefox +ffx_install(){ + + if ! f__root ; then f__error "vous devez être ROOT pour installer Firefox en tant que ROOT"; fi + + ffx_godzilla + ffx_versionFF "quiet" + + # calcul $file, $url, affichage version pendant l'install + f__architecture + file="firefox-$product.$architecture.tar.bz2" + if [ "$product" == "latest" ]; then + f__info "installation Firefox-$product, version $verLatest" + url="https://download.mozilla.org/?product=firefox-$product&os=$architecture&lang=fr" + elif [ "$product" == "esr" ]; then + f__info "installation Firefox-$product, version $verEsr" + url="https://download.mozilla.org/?product=firefox-$product-latest&os=$architecture&lang=fr" + else + f__info "installation Firefox-$product" + url="https://download.mozilla.org/?product=firefox-$product-latest-l10n-ssl&os=linux&lang=fr" + fi + + # dossier temporaire de travail, création $dirTemp + dirTemp="/tmp/$script/" + mkdir -p "$dirTemp" + + # chargement + f__info "téléchargement..." + wget -c --user-agent="$user_agent" -O "$dirTemp$file" "$url" + + # gestion erreur wget / à peaufiner? / + if [ "$?" != "0" ]; then + f__error "problème au chargement, connexion défaillante?" \ + "Si persistance, merci de prévenir $projet" \ + "$contact" + fi + + # décompression archive + f__info "décompression...." + tar -xaf "$dirTemp$file" -C "$dirTemp" +#test erreur decompression + + f__info "installation...." + + #sauvegarde du profil + ffx_sauveProfil + + # install lanceur + ffx_lanceur # on déplace le répertoire firefox en /opt rm -rf /opt/firefox-"$product"/ @@ -254,9 +368,12 @@ EOF # lien pixmap ln -sf /opt/firefox-"$product"/browser/chrome/icons/default/default48.png /usr/share/pixmaps/firefox-"$product".png -# # alternatives +# # alternatives, trop intrusif pour plusieurs versions simultanées? # update-alternatives --quiet --install /usr/bin/firefox-"$product" x-www-browser /opt/firefox-"$product"/firefox 100 +#grep -Ec '\[Profile' ~/.mozilla/firefox/profiles.ini -> 2 +#firefox -P nightly + # test sans alternatives, et avec liens dans /usr/bin pour latest en tant que firefox if [ "$product" == "latest" ]; then ln -sf /opt/firefox-"$product"/firefox /usr/bin/firefox; fi @@ -264,13 +381,13 @@ EOF rm -rf "$dirTemp" # the end - f_info "$GREEN""Firefox-$product est installé.\n" - if [ $product == "nightly" ]; then f_info "pour savoir comment participer au développement: https://nightly.mozfr.org/participer/"; fi + f__info "$GREEN""Firefox-$product installé." + if [ $product == "nightly" ]; then f__info "pour savoir comment participer au développement: https://nightly.mozfr.org/participer/"; fi } # désinstallation de firefox -f_remove(){ - if ! f_root ; then f_error "vous devez être ROOT pour désinstaller"; fi +ffx_remove(){ + if ! f__root ; then f__error "vous devez être ROOT pour désinstaller"; fi # on supprime le répertoire firefox en /opt rm -rf /opt/firefox-"$product"/ @@ -285,41 +402,42 @@ f_remove(){ update-alternatives --quiet --remove x-www-browser /opt/firefox/firefox-"$product" # the end - f_info "$GREEN""Firefox-$product est désinstallé.\n" + f__info "$GREEN""Firefox-$product est désinstallé." } -#### traitements arguments ============================================= -if [ "$#" -gt 1 ]; then cmd="help" && f_info "$RED trop d'arguments" -elif [ "$1" == "version" ]; then cmd="version" -elif [ "$1" == "+latest" ]; then cmd="install"; product='latest' -elif [ "$1" == "-latest" ]; then cmd="remove"; product='latest' -elif [ "$1" == "+esr" ]; then cmd="install"; product='esr' -elif [ "$1" == "-esr" ]; then cmd="remove"; product='esr' -elif [ "$1" == "+aurora" ]; then cmd="install"; product='aurora' -elif [ "$1" == "-aurora" ]; then cmd="remove"; product='aurora' -elif [ "$1" == "+nightly" ]; then cmd="install"; product='nightly' -elif [ "$1" == "-nightly" ]; then cmd="remove"; product='nightly' -elif [ "$1" == "sysremove" ]; then cmd="sysremove" -else cmd="help" -fi +### début script ======================================================= -#### installation du script si pas dans le système ===================== -if ! f_scriptBin ; then f_sysinstall; fi + #initialisation +f__architecture || f__error "Architecture non supportée" +f__user +f__requis "wget" "logger" "file" +[ -e "/opt/bin/$script" ] && ls -l "/opt/bin/$script" | grep 'root' &>/dev/null && f__error "bug sécu 01" \ + "veuillez désinstaller le script et le réinstaller" "voir: $urlNotice#supprimer-le-script" -#### désinstallation du script ========================================= -if [ "$cmd" == "sysremove" ]; then f_sysremove; fi + # installation du script si pas dans le système +dirname "$0" | grep 'bin' &>/dev/null || fscript_install -#### help ============================================================== -if [ "$cmd" == "help" ]; then f_help; fi +case "$1" in + "sysremove" ) + fscript_remove ;; # désinstallation du script + "version" ) + ffx_versionFF + fscript_version + ffx_godzilla ;; # affiche versions FF en ligne & installée & version script + "upgrade" ) + opType="upgrade" + fscript_version + fscript_dl ;; # upgrade script si maj possible -#### version en ligne ================================================== -if [ "$cmd" == "version" ]; then f_versionFF; fi - -#### installation ====================================================== -if [ "$cmd" == "install" ]; then f_install; fi - -#### désinstallation =================================================== -if [ "$cmd" == "remove" ]; then f_remove; fi + +latest | +esr | +aurora | +nightly ) + ffx_install "$(echo $1 | sed 's/+//')" ;; # installation plugin + -latest | -esr | -aurora | -nightly ) + ffx_remove "$(echo $1 | sed 's/-//')" ;; # désinstallation plugin + "xx_manuel" ) + ffx_manuelInstall "$2" ;; # install manuelle d'un chargement + * ) + ffx_help ;; # affichage help par défaut +esac exit 0 diff --git a/scripts/getFirefox_changelog.md b/scripts/getFirefox_changelog.md new file mode 100644 index 0000000..af8f278 --- /dev/null +++ b/scripts/getFirefox_changelog.md @@ -0,0 +1,17 @@ +# changelog getFirefox + +## todo + +* install manuelle archive +* téléchargement archive +* version enligne autre que esr et release +* wget test +* test archive chargée +* fix bug droits sur répertoire install + +## 0.4.0 18/06/17 + +* révision traitement paramètres +* mieux sécu: chown, path, ifs +* test bug secu 01, propriétaire du script +* script: maj auto, cron/anacron