This commit is contained in:
kyodev 2017-07-18 16:44:14 +02:00
parent aaabd70a18
commit 094c53c54d
3 changed files with 446 additions and 211 deletions

View File

@ -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

View File

@ -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: <erreur> $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

View File

@ -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