From b767fa7a856f0a514564f1ad48978566e2a4c4c0 Mon Sep 17 00:00:00 2001 From: kyodev Date: Sat, 9 Jun 2018 08:44:08 +0200 Subject: [PATCH] maj --- docs/scripts/getXfox.md | 78 ++--- docs/scripts/nstest.md | 2 +- scripts/getFirefox | 23 +- scripts/getInfo | 4 +- scripts/getXfox | 633 +++++++++++++++++++---------------- scripts/getXfox_changelog.md | 84 ----- 6 files changed, 406 insertions(+), 418 deletions(-) delete mode 100644 scripts/getXfox_changelog.md diff --git a/docs/scripts/getXfox.md b/docs/scripts/getXfox.md index f918a65..513dd1c 100644 --- a/docs/scripts/getXfox.md +++ b/docs/scripts/getXfox.md @@ -12,7 +12,7 @@ * les installations/désinstallations doivent être faites avec les privilèges **root** * les opérations sur l'utilisateur, ou sur la mise à jour du script, peuvent être faites en utilisateur. -> le programme Firefox est pris en charge par [getFirefox](https://kyodev.frama.io/kyopages/scripts/getFirefox/) +> le programme Firefox est pris en charge par [getFirefox](https://framaclic.org/h/doc-getfirefox) ## installation rapide du script @@ -20,18 +20,18 @@ * privilèges **root** requis ```shell -wget -nv -O getXfox https://framagit.org/kyodev/kyopages/raw/master/scripts/getXfox +wget -nv -O getXfox https://framaclic.org/h/getxfox chmod +x getXfox && ./getXfox ``` ```text - _ __ __ __ - __ _ ___| |_\ \/ // _| _____ __ - / _' |/ _ \ __|\ /| |_ / _ \ \/ / -| (_| | __/ |_ / \| _| (_) > < - \__, |\___|\__/_/\_\_| \___/_/\_\Tor Browser WaterFox - |___/ version 4.17.0 - 09/03/2018 + _ __ __ __ + __ _ ___| |_\ \/ // _| _____ __ + / _' |/ _ \ __|\ /| |_ / _ \ \/ / + | (_| | __/ |_ / \| _| (_) > < + \__, |\___|\__/_/\_\_| \___/_/\_\Tor Browser WaterFox + |___/ version 4.16.0 - 09/06/2018 - getXfox 4.17.0 installé dans le système. + getXfox 4.16.0 installé dans le système. maintenant, appel du script par: getXfox (sans ./) ``` @@ -105,12 +105,12 @@ getXfox i-wfx getXfox -h ``` ```text - _ __ __ __ - __ _ ___| |_\ \/ // _| _____ __ - / _' |/ _ \ __|\ /| |_ / _ \ \/ / -| (_| | __/ |_ / \| _| (_) > < - \__, |\___|\__/_/\_\_| \___/_/\_\Tor Browser WaterFox - |___/ version 4.17.0 - 09/03/2018 + _ __ __ __ + __ _ ___| |_\ \/ // _| _____ __ + / _' |/ _ \ __|\ /| |_ / _ \ \/ / + | (_| | __/ |_ / \| _| (_) > < + \__, |\___|\__/_/\_\_| \___/_/\_\Tor Browser WaterFox + |___/ version 4.16.0 - 09/06/2018 ---------------------------------------------------------------------- softs possibles: tor, wfx (Tor Browser, Waterfox) exemple, installation Tor Browser: getXfox i-tor @@ -121,7 +121,7 @@ getXfox -h getXfox m-soft archi : installation de à partir d'une ve téléchargée manuellement (root) getXfox r-soft : désinstallation (remove) de (root) - getXfox ri : réparation icône(s) et lanceur(s) dans le menu (root) + getXfox ri : réparation icône(s) dans le menu (Tor Browser ou Waterfox) getXfox u-soft : profil pour l'utilisateur en cours et comme défaut système (root) (Tor Browser n'est pas concerné) getXfox p-soft : personnalisation sur de user.js & userChrome.css @@ -134,9 +134,9 @@ getXfox -h getXfox -h, --help : affichage aide getXfox -r, --remove : désinstallation du script (root) getXfox -u, --upgrade : mise à jour du script - getXfox -v, --version : version du script - - plus d'infos: https://kyodev.frama.io/kyopages/scripts/getXfox/ + getXfox -v, --version : version du script + + plus d'infos: https://framaclic.org/h/doc-getxfox ``` @@ -147,26 +147,26 @@ getXfox -h getXfox version ``` ```text - _ __ __ __ - __ _ ___| |_\ \/ // _| _____ __ - / _' |/ _ \ __|\ /| |_ / _ \ \/ / -| (_| | __/ |_ / \| _| (_) > < - \__, |\___|\__/_/\_\_| \___/_/\_\Tor Browser WaterFox - |___/ version 4.17.0 - 09/03/2018 + _ __ __ __ + __ _ ___| |_\ \/ // _| _____ __ + / _' |/ _ \ __|\ /| |_ / _ \ \/ / + | (_| | __/ |_ / \| _| (_) > < + \__, |\___|\__/_/\_\_| \___/_/\_\Tor Browser WaterFox + |___/ version 4.16.0 - 09/06/2018 - script en place: 4.15.0 - script en ligne: 4.15.0 + script en place: 4.16.0 + script en ligne: 4.16.0 Tor Browser en place: 7.5 -- January 23 2018 Tor Browser en ligne: 7.5 - perso. Tor Browser en place: Non Installé - perso. Tor Browser en ligne: 0.2 + Tor Browser en place: Non Installé + Tor Browser en ligne: 7.5.4 Waterfox en place: 56.0.4 - Waterfox en ligne: 56.0.4.1 + Waterfox en ligne: 56.2.0 - perso. Waterfox en place: Non Installé + perso. Waterfox en place: 0.6 perso. Waterfox en ligne: 0.6 ``` @@ -207,13 +207,13 @@ getXfox p-soft * pour figer des fichiers de personnalisations et ne pas les mettre à jour, il suffit d'effacer les fichiers `personnalisation` -* contenu de [user.js](https://framagit.org/kyodev/kyopages/blob/master/scripts/user.js) -* contenu de [userChrome.css](https://framagit.org/kyodev/kyopages/blob/master/scripts/userChrome.css) +* contenu de [user.js](https://framagit.org/sdeb/getFirefox/blob/master/user.js) +* contenu de [userChrome.css](https://framagit.org/sdeb/getFirefox/blob/master/userChrome.css) pour Tor Browser -* contenu de [user.js](https://framagit.org/kyodev/kyopages/blob/master/scripts/userTor.js) -* contenu de [userChrome.css](https://framagit.org/kyodev/kyopages/blob/master/scripts/userChromeTor.css) +* contenu de [user.js](https://framagit.org/sdeb/getXfox/blob/master/userTor.js) +* contenu de [userChrome.css](https://framagit.org/sdeb/getXfox/blob/master/userChromeTor.css) @@ -307,22 +307,22 @@ getXfox -r ## sources -sur [framagit](https://framagit.org/kyodev/kyopages/blob/master/scripts/getXfox) +sur [framagit](https://framagit.org/sdeb/getXfox/blob/master/getXfox) ## changelog -sur [framagit](https://framagit.org/kyodev/kyopages/blob/master/scripts/getXfox_changelog.md) +sur [framagit](https://framagit.org/sdeb/getXfox/blob/master/CHANGELOG.md) ## contact pour tout problème ou suggestion concernant ce script, n'hésitez pas à ouvrir une issue -[Framagit](https://framagit.org/kyodev/kyopages/issues) +[Framagit](https://framagit.org/sdeb/getXfox/issues) IRC freenode: ##sdeb ## license -[LPRAB/WTFPL](https://framagit.org/kyodev/kyopages/blob/master/scripts/LICENSE.md) +[LPRAB/WTFPL](https://framagit.org/sdeb/getXfox/blob/master/LICENSE.md) diff --git a/docs/scripts/nstest.md b/docs/scripts/nstest.md index aed7d2e..d4ffbf3 100644 --- a/docs/scripts/nstest.md +++ b/docs/scripts/nstest.md @@ -149,4 +149,4 @@ some servers, outside OpenNic, resolve alternative domain names, today: level3 & * [LPRAB / WTFPL](https://framagit.org/sdeb/nstest/blob/master/LICENSE.md) -![compteur](https://framaclic.org/h/nestest-gif) +![compteur](https://framaclic.org/h/nstest-gif) diff --git a/scripts/getFirefox b/scripts/getFirefox index 79e361e..2a67a90 100755 --- a/scripts/getFirefox +++ b/scripts/getFirefox @@ -4,8 +4,8 @@ # SC2119 Use function "$@" if function's $1 should mean script's $1 (??) # SC2120 function references arguments, but none are ever passed. -version=4.21.1 -date="08/06/2018" +version=4.22.0 +date="09/06/2018" #contact="IRC ##sdeb@freenode.net ou https://framagit.org/sdeb/getFirefox/issues" script="getFirefox" @@ -100,7 +100,7 @@ f__info(){ # 07/06/2018 f__trim log f__log "$log" fi - for (( i="$depart" ; i<=$# ; i++ )); do + for (( i=$depart ; i<=$# ; i++ )); do echo -e " $BLUE${!i}$STD" done [[ "$1" =~ raw ]] || echo @@ -689,7 +689,7 @@ ffx_lanceur_desktop(){ # 09/03/2018 } # version personnalisation en ligne, [$1=quiet], assigne $perso_ffx_afaire -ffx_pers_get_version(){ # 07/06/2018 +ffx_pers_get_version(){ # 09/06/2018 local ii verPersEnPlace persEnPlace verPersOnline x_ffx_pers_get_version=1 @@ -710,16 +710,16 @@ ffx_pers_get_version(){ # 07/06/2018 verPersOnline="${RED}non accessible$STD" # si quiet continue fi - if [[ "$verPersEnPlace" != "$verPersOnline" ]]; then + if [ "$verPersEnPlace" != "$verPersOnline" ]; then perso_ffx_afaire+="$ii " fi fi done - f__trim persEnPlace - f__trim verPersOnline f__trim perso_ffx_afaire [ "$1" == "quiet" ] && return 0 + f__trim persEnPlace + f__trim verPersOnline persEnPlace=${persEnPlace:="Non installé"} verPersOnline=${verPersOnline:="${RED}n/a$STD"} f__info "raw" "perso. $appli en place: $GREEN$persEnPlace" @@ -1024,6 +1024,10 @@ produit_all_inverse="nightly beta latest esr" # tous les canaux sauf dev (=b # url perso éventuellement personnalisée, une seule url possible, arrêt à la première trouvée for ii in $produit_all dev; do # première url personnalisée éventuellement trouvée + if [ -e "$dirProfilFfx/$ii/personnalisation.getFirefox" ]; then + # renommage anciens fichiers personnalisation + mv "$dirProfilFfx/$ii/personnalisation.getFirefox" "$dirProfilFfx/$ii/personnalisation" + fi if [ -e "$dirProfilFfx/$ii/personnalisation" ]; then [ -z "$urlPersoEnPlace" ] && read -r urlPersoEnPlace < "$dirProfilFfx/$ii/personnalisation" # url 1er fichier perso_ffx_enPlace+="$ii " @@ -1035,11 +1039,6 @@ elif [ "$urlPersoEnPlace" != "$urlPersFfx" ]; then # url personnalisée urlPersFfx="$urlPersoEnPlace" fi - # renommage anciens fichiers personnalisation -for ii in $produit_all dev; do - [ -e "$dirProfilFfx/$ii/personnalisation.getFirefox" ] && mv "$dirProfilFfx/$ii/personnalisation.getFirefox" "$dirProfilFfx/$ii/personnalisation" # ancien nom -done - options="$*" # auto-installation script éventuel, si pas de marqueur $fileDev if [[ $( dirname "$0" ) != $( dirname "$script_install" ) && $( dirname "$0" ) != "/usr/bin" && ! -e "$fileDev" ]]; then diff --git a/scripts/getInfo b/scripts/getInfo index 3b9bdda..1fea3d1 100755 --- a/scripts/getInfo +++ b/scripts/getInfo @@ -4956,8 +4956,8 @@ exit 0 ### END CONTROL (contrôle chargement) -wget -nv -O getInfo https://framaclic.org/h/getInfo -curl -LO https://framaclic.org/h/getInfo +wget -nv -O getInfo https://framaclic.org/h/getinfo +curl -L -o getInfo https://framaclic.org/h/getinfo chmod +x getInfo && ./getInfo wget -nv -O getInfo https://framagit.org/sdeb/getInfo/raw/master/getInfo diff --git a/scripts/getXfox b/scripts/getXfox index 63219d5..e61603e 100755 --- a/scripts/getXfox +++ b/scripts/getXfox @@ -1,9 +1,14 @@ #!/bin/bash +# shellcheck disable=SC2119,SC1117,SC2221,SC2222 -version=4.15.0 -date="04/03/2018" -projet="simpledeb" -contact="IRC freenode ##sdeb ou https://framagit.org/kyodev/kyopages/issues/" +# SC2119 Use function "$@" if function's $1 should mean script's $1 (??) +# SC1117: Backslash is literal in "\n". Prefer explicit escaping: "\\n". +SC2221: This pattern always overrides a later one +SC2222: This pattern never matches because of a previous pattern + +version=4.16.0 +date="09/06/2018" +#contact="IRC ##sdeb@freenode.net ou https://framagit.org/sdeb/getXfox/issues" script="getXfox" ##### license LPRAB/WTFPL @@ -14,9 +19,8 @@ script="getXfox" # détection architecture système, assigne $fu_archi: linux|linux64 # return 1 on unknown architecture # remarque, debian: dpkg --print-architecture affiche i386 -f__architecture(){ # 14/12/2017 SPÉCIFIQUE +f__architecture(){ # 09/03/2018 SPÉCIFIQUE - x_architecture=1 case "$(uname -m)" in amd64 | x86_64 ) fu_archi="linux64";; @@ -35,38 +39,39 @@ f__architecture(){ # 14/12/2017 SPÉCIFIQUE } # test validité archive, $1 archive, assigne $archive_detect (gzip|xz|deb|zip), return 1 si inconnue -f__archive_test(){ # 19/12/2017 - local filetest=$( file -b $1 ) +f__archive_test(){ # 09/06/2018 + local filetest + filetest=$( file -b "$1" ) grep -q 'gzip compressed data' <<< "$filetest" && archive_detect="gzip" grep -q 'bzip2 compressed data' <<< "$filetest" && archive_detect="bzip2" grep -q 'Debian binary package' <<< "$filetest" && archive_detect="deb" grep -q 'Zip archive data' <<< "$filetest" && archive_detect="zip" grep -q 'XZ compressed data' <<< "$filetest" && archive_detect="xz" - [[ -z "$archive_detect" || "$archive_detect" == "empty" ]] && return 1 || return 0 # laisser return 0 final sinon erreur, toujours return 1?!! + if [[ -z "$archive_detect" || "$archive_detect" == "empty" ]]; then return 1; fi } -f__color(){ # 01/03/2018 +# shellcheck disable=SC2034 +f__color(){ # 29/05/2018 if type -p tput &>/dev/null && tput setaf 1 &>/dev/null; then - BLACK=$( tput setaf 0 ) - RED=$( tput setaf 1 ) # alerte - GREEN=$( tput setaf 2 ) # ok - YELLOW=$( tput setaf 3 ) # question - BLUE=$( tput setaf 4 ) # info - CYAN=$( tput setaf 6 ) MAGENTA=$( tput setaf 5 ) + BLACK=$( tput setaf 0 ) + CYAN=$( tput setaf 6 ) + YELLOW=$( tput setaf 3 ) # question + GREEN=$( tput setaf 2 ) # ok + BLUE=$( tput setaf 4 ) # info + RED=$( tput setaf 1 ) # alerte STD=$( tput sgr0 ) # retour "normal" BOLD=$( tput bold ) ITAL=$( tput sitm ) SOUL=$( tput smul ) else - YELLOW=$( echo -n "\033[0;33m" ) # ? - GREEN=$( echo -n "\033[0;32m" ) # ok - BLUE=$( echo -n "\033[0;34m" ) # info - RED=$( echo -n "\033[0;31m" ) # alerte - COLOR=$( echo -n "\033[0m" ) # standard - STD=$( echo -n "\033[0m" ) # standard + YELLOW=$'\033[0;33m' # ? + GREEN=$'\033[0;32m' # ok + BLUE=$'\033[0;34m' # info + RED=$'\033[0;31m' # alerte + STD=$'\033[0m' # standard fi } @@ -84,22 +89,26 @@ f__error(){ # 18/12/2017 } # affichage en bleu, si $1=raw pas de ligne vide à la fin, si $1=log alors uniquement $2 logué, combiné: $1="log:raw" -f__info(){ # 22/02/2018 +f__info(){ # 09/06/2018 local depart=1 i - [[ "$1" =~ "raw" || "$1" =~ "log" ]] && depart=2 - [[ "$1" =~ "log" ]] && f__log "$( sed -E 's/\\t//;s/\\n// ' <<< "$2" | xargs )" - for (( i=$depart ; i<=$# ; i++ )); do + if [[ "$1" =~ "raw" || "$1" =~ "log" ]]; then + depart=2 + fi + if [[ "$1" =~ "log" ]]; then + f__log "$( sed -E 's/\\t//;s/\\n// ' <<< "$2" | xargs )" + fi + for (( i=depart ; i<=$# ; i++ )); do echo -e " $BLUE${!i}$STD" done [[ "$1" =~ raw ]] || echo } # log spécifique, fichier log limité à 10000 octets, $1 message à loguer -f__log(){ # 4/12/2017 +f__log(){ # 05/03/2018 if [ -w "$script_logs" ]; then - if [ "$(stat -c %s $script_logs)" -ge "10000" ]; then + if [ "$( stat -c %s "$script_logs" )" -ge "10000" ]; then echo "$(date +%Y%m%d\ %H%M%S) $1" &>/dev/null > "$script_logs" else echo "$(date +%Y%m%d\ %H%M%S) $1" &>/dev/null >> "$script_logs" @@ -109,23 +118,22 @@ f__log(){ # 4/12/2017 # recherche commandes/paquets, $1 liste: cmd1|cmd2[>paquet] (séparées par espaces) ex: "gawk|mawk>gawk wget" # si manque, return 1 & affiche commandes manquantes (si debian, ajout proposition paquet à installer) -f__requis(){ # 26/01/2018 - local ENV_DEBIAN ireq table package commands command commandsMissing packagesMissing +f__requis(){ # 06/06/2018 + local ENV_DEBIAN c_echo ireq cmds package commands command commandsMissing packagesMissing - type -p "dpkg" &>/dev/null && ENV_DEBIAN="oui" # debian - type -t f__info &>/dev/null && c_echo="f__info" || c_echo="echo -e" # f__info existe? sinon echo - - for ireq in $1; do # pour tous les composants de la liste $1 - table=( ${ireq//>/ } ) # séparation sur >, split avec double bashisme, mais évite manip $IFS - - commands=( ${table[0]//|/ } ) # séparation sur | - if [ ${table[1]} ]; then - package=${table[1]} - else - package="$commands" # pas de oackages dans les options, donc idem commands[0] - fi - - for command in ${commands[@]}; do # pour toutes les commandes + if type -p dpkg &>/dev/null ; then + ENV_DEBIAN="oui" # debian + fi + if type -t f__info &>/dev/null; then + c_echo="f__info" + else + c_echo="echo -e" # f__info existe? sinon echo + fi + for ireq in $1; do + IFS='>' read -r cmds package <<< "$ireq" # ex: "awk|gawk>gawk wget file tar killall>psmisc" + mapfile -t -d '|' commands <<< "${cmds}" + [ -z "$package" ] && package=${commands[0]%$'\n'} # pas de packages dans les options, donc = commands[0 + for command in "${commands[@]%$'\n'}"; do if type -p "$command" &>/dev/null ; then unset commandsMissing packagesMissing break @@ -137,8 +145,8 @@ f__requis(){ # 26/01/2018 done # dédoublonnage & triage - commandsMissing=$( echo $commandsMissing | tr ' ' '\n' | sort --unique | tr '\n' ' ' ) - packagesMissing=$( echo $packagesMissing | tr ' ' '\n' | sort --unique | tr '\n' ' ' ) + commandsMissing=$( echo "$commandsMissing" | tr ' ' '\n' | sort --unique | tr '\n' ' ' ) + packagesMissing=$( echo "$packagesMissing" | tr ' ' '\n' | sort --unique | tr '\n' ' ' ) # suppression éventuel espace final commandsMissing=${commandsMissing% } packagesMissing=${packagesMissing% } @@ -157,46 +165,53 @@ f__requis(){ # 26/01/2018 # si sudo si possible sera utilisé. # si su &2 redirigé sur &1 # si bash inexistant, return 2 -f__sudo(){ # 24/02/2018 - local nb sudo isudo toBash options nbDefault=3 +f__sudo(){ # 07/06/2018 + local nb sudo isudo options nbDefault=3 # détermination sudo possible - type -p bash &>/dev/null && toBash=$( type -p bash ) || return 2 - # sudo --shell bash équivalent su ? if sudo -v &>/dev/null && [ $EUID -ne 0 ] ; then - sudo="sudo su --shell $toBash --preserve-environment -c " + sudo="sudo su --preserve-environment -c " else - sudo="su --shell $toBash --preserve-environment -c " + sudo="su --preserve-environment -c " fi # extraction nb de tentatives éventuel - if [[ "$@" =~ :.{1,2}: ]]; then - nb="$@" + if [[ "$*" =~ :.{1,2}: ]]; then + nb="$*" nb=${nb#*:} nb=${nb%:*} - options=${@//:$nb:/ } - (( ${nb}+1 )) 2>/dev/null || nb="$nbDefault" # test si numérique, sinon, + options=${*//:$nb:/ } + (( nb+1 )) 2>/dev/null || nb="$nbDefault" # test si numérique, sinon, else nb="$nbDefault" - options="$@" + options="$*" fi # lancement cmds if [[ "$sudo" =~ ^sudo ]]; then $sudo "$options" else for (( isudo=1 ; isudo<="$nb" ; isudo++ )); do - echo -n "[su] Root, " - $sudo "$options" 2>&1 # redirection demande pass (et erreur) sur &1 (utile quand &2 est redirigé en amont) - [ "$?" == 0 ] && break + echo -en "\\n[su] Mot de passe root : " + $sudo "$options" 2>/dev/null && break [ "$isudo" == "$nb" ] && return 1 done + echo fi } + # $1=NOM de la variable à trimer (variable et non $variable), [$2=left|right|all], all si vide +f__trim(){ # 07/03/2018 + local trim=${!1} + + [[ "$2" == right || "$2" == all || -z "$2" ]] && trim="${trim%${trim##*[^[:space:]]}}" # fin right + [[ "$2" == left || "$2" == all || -z "$2" ]] && trim="${trim#${trim%%[^[:space:]]*}}" # début left + eval "$1=\"$trim\"" +} + # user ayant initié la session graphique, assigne $fu_user # return 1 sur échec identification user, return 2 sur absence home/ # gestion variable environnement user avec: USER_INSTALL= script -f__user(){ # 24/02/2018 - local user userid test root_login +f__user(){ # 08/03/2018 + local user userid root_login root_login="$(grep ':0:' /etc/passwd | cut -d':' -f1)" || root_login="root" if [ "$USER_INSTALL" ]; then # user via variable environnement, moyen d'injecter root si pb @@ -214,10 +229,10 @@ f__user(){ # 24/02/2018 userid="$SUDO_UID"; elif grep -qEo '[0-9]+' <<< "$XDG_RUNTIME_DIR" ; then userid=$( grep -Eo '[0-9]+' <<< "$XDG_RUNTIME_DIR" | cut -d'/' -f4 ) - elif grep -qEo '[0-9]+' <<< "$XAUTHORITY" ; then + else userid=$( grep -Eo '[0-9]+' <<< "$XAUTHORITY" | cut -d'/' -f4 ) fi - [ "$userid" ] && user=$( grep $userid /etc/passwd | cut -d ":" -f 1 ) + [ "$userid" ] && user=$( grep "$userid" /etc/passwd | cut -d ":" -f 1 ) if [ "$user" ] && [ "$user" != "$root_login" ]; then fu_user="$user" return 0 @@ -226,8 +241,8 @@ f__user(){ # 24/02/2018 user="$SUDO_USER"; elif who | grep -qv 'root'; then user=$( who | grep -v 'root' | head -n1 | cut -d ' ' -f1 ); # who | grep -v 'root' | awk 'FNR==1{print $1}' - elif grep -q 'hourly.*get[A-Z].*\.anacrontab.*\.config/anacron/spool' /etc/crontab; then - user=$( grep 'hourly.*get[A-Z].*\.anacrontab.*\.config/anacron/spool' /etc/crontab | head -n1 | cut -d' ' -f2 ); # grep 'hourly.*get[A-Z].*\.anacrontab.*\.config/anacron/spool' /etc/crontab | awk 'FNR==1{print $2} + else + user=$( grep -m1 'hourly.*get[A-Z].*\.anacrontab.*\.config/anacron/spool' /etc/crontab | cut -d' ' -f2 ); fi fi fu_user="$user" @@ -289,69 +304,72 @@ f__wget_test(){ # 22/02/2018 exit 0 } -f_affichage(){ # 24/01/2018 - local affichage_text=" _ __ __ __ - __ _ ___| |_\ \/ // _| _____ __ - / _' |/ _ \ __|\ /| |_ / _ \ \/ / -| (_| | __/ |_ / \| _| (_) > < - \__, |\___|\__/_/\_\_| \___/_/\_\\${GREEN}Tor Browser WaterFox$STD - |___/" +f_affichage(){ # 09/06/2018 - clear - echo -e "$BLUE$affichage_text$YELLOW version $version - $date$STD\n" + clear 2>/dev/null || tput clear 2>/dev/null + echo -n "$BLUE" + cat <<- end + _ __ __ __ + __ _ ___| |_\ \/ // _| _____ __ + / _' |/ _ \ __|\ /| |_ / _ \ \/ / + | (_| | __/ |_ / \| _| (_) > < + \__, |\___|\__/_/\_\_| \___/_/\_\\${GREEN}Tor Browser WaterFox$STD + |___/ ${YELLOW}version $version - $date$STD + + end } # affichage help -f_help(){ # 24/01/2018 - local ligne help=( - "----------------------------------------------------------------------" - " softs possibles:$GREEN tor, wfx $BLUE(Tor Browser, Waterfox)$STD" - "exemple, installation Tor Browser: $BLUE$script i-tor$STD" - " installation Waterfox: $BLUE$script i-wfx$STD" - "" - "$BLUE$script i-$STD${GREEN}soft$STD : ${RED}i${STD}nstallation de $RED(root)$STD" - " avec option $GREEN--sauve$STD l'archive téléchargée est sauvegardée dans le répertoire courant" - "" - "$BLUE$script m-$STD${GREEN}soft archi$STD : installation de à partir d'une ve téléchargée ${RED}m${STD}anuellement $RED(root)$STD" - "$BLUE$script r-$STD${GREEN}soft$STD : désinstallation (${RED}r${STD}emove) de $RED(root)$STD" - "$BLUE$script ri$STD : ${RED}r${STD}éparation$RED i${STD}cône(s) dans le menu (Tor Browser ou Waterfox)" - "$BLUE$script u-$STD${GREEN}soft$STD : profil pour l'${RED}u${STD}tilisateur en cours et comme défaut système $RED(root)$STD (Tor Browser n'est pas concerné)" - "" - "$BLUE$script p-$STD${GREEN}soft$STD : ${RED}p${STD}ersonnalisation sur de user.js & userChrome.css" - "$BLUE$script pr-$STD${GREEN}soft$STD : suppression des ${RED}p${STD}ersonnalisations (${RED}r${STD}emove) sur " - "$BLUE$script pu$STD : mise à jour des ${RED}p${STD}ersonnalisations (${RED}u${STD}pdate) installées" - "" - "$BLUE$script version$STD : versions installées et en ligne" - "----------------------------------------------------------------------" - "$BLUE./$script$STD (ou $BLUE./$script -i$STD) : installation du script dans le système $RED(root)$STD" - "$BLUE$script -h$STD, --help : affichage aide" - "$BLUE$script -r$STD, --remove : désinstallation du script $RED(root)$STD" - "$BLUE$script -u$STD, --upgrade : mise à jour du script" - "$BLUE$script -v$STD, --version : version du script" - ) +f_help(){ # 09/06/2018 tput cuu1 # une ligne plus haut - for ligne in "${help[@]}"; do - echo -e " $ligne" - done - echo -e "\n$STD plus d'infos: $YELLOW$url_notice\n$STD" + cat <<- end + ---------------------------------------------------------------------- + softs possibles:$GREEN tor, wfx $BLUE(Tor Browser, Waterfox)$STD + exemple, installation Tor Browser: $BLUE$script i-tor$STD + installation Waterfox: $BLUE$script i-wfx$STD + + $BLUE$script i-$STD${GREEN}soft$STD : ${RED}i${STD}nstallation de $RED(root)$STD + avec option $GREEN--sauve$STD l'archive téléchargée est sauvegardée dans le répertoire courant + + $BLUE$script m-$STD${GREEN}soft archi$STD : installation de à partir d'une ve téléchargée ${RED}m${STD}anuellement $RED(root)$STD + $BLUE$script r-$STD${GREEN}soft$STD : désinstallation (${RED}r${STD}emove) de $RED(root)$STD + $BLUE$script ri$STD : ${RED}r${STD}éparation$RED i${STD}cône(s) dans le menu (Tor Browser ou Waterfox) + $BLUE$script u-$STD${GREEN}soft$STD : profil pour l'${RED}u${STD}tilisateur en cours et comme défaut système $RED(root)$STD (Tor Browser n'est pas concerné) + + $BLUE$script p-$STD${GREEN}soft$STD : ${RED}p${STD}ersonnalisation sur de user.js & userChrome.css + $BLUE$script pr-$STD${GREEN}soft$STD : suppression des ${RED}p${STD}ersonnalisations (${RED}r${STD}emove) sur + $BLUE$script pu$STD : mise à jour des ${RED}p${STD}ersonnalisations (${RED}u${STD}pdate) installées + + $BLUE$script version$STD : versions installées et en ligne + ---------------------------------------------------------------------- + $BLUE./$script$STD (ou $BLUE./$script -i$STD) : installation du script dans le système $RED(root)$STD + $BLUE$script -h$STD, --help : affichage aide + $BLUE$script -r$STD, --remove : désinstallation du script $RED(root)$STD + $BLUE$script -u$STD, --upgrade : mise à jour du script + $BLUE$script -v$STD, --version : version du script + + $STD plus d'infos: $YELLOW$url_notice$STD + + end } # assigne $ver_tor_online, $ver_tor_install, [$1=quiet] -f_tor_get_version(){ # 24/01/2018 +f_tor_get_version(){ # 09/06/2018 local recup_url="https://www.torproject.org/projects/torbrowser.html.en" local fileTmp="/tmp/$script-getVersion_tor" appli="Tor Browser" x_tor_get_version=1 # version online - wget -q --tries=2 --timeout=15 --user-agent="$user_agent" -o /dev/null -O - "$recup_url" &>"$fileTmp" - [ "$?" -ne 0 ] && f__wget_test "$recup_url" + if ! wget -q --tries=2 --timeout=15 --user-agent="$user_agent" -o /dev/null -O - "$recup_url" &>"$fileTmp"; then + f__wget_test "$recup_url" + fi ver_tor_online=$( sed -En 's/^.*torbrowser\/([0-9.]*)\/.*_fr\.tar\.xz.*$/\1/p' $fileTmp | sed -n '1p' ) rm "$fileTmp" # version installée if [ -e "$dirInstallTor/Browser/TorBrowser/Docs/ChangeLog.txt" ]; then - ver_tor_install=$( sed -n '1p' $dirInstallTor/Browser/TorBrowser/Docs/ChangeLog.txt | sed -En 's/^Tor Browser (.*)$/\1/p' ) + ver_tor_install=$( sed -n '1p' "$dirInstallTor/Browser/TorBrowser/Docs/ChangeLog.txt" | sed -En 's/^Tor Browser (.*)$/\1/p' ) fi [ "$ver_tor_install" ] || ver_tor_install="Non Installé" @@ -363,12 +381,12 @@ f_tor_get_version(){ # 24/01/2018 } # installation, [$1='manuel', $2 archive] -f_tor_install(){ # 04/03/2018 +f_tor_install(){ # 09/06/2018 local fileDesktop="/usr/share/applications/tor-browser.desktop" appli="Tor Browser" local verArchive fileTemp archi recup_urlTor dirTemp="/tmp/$script-install_tor" if [ "$1" == "manuel" ]; then - verArchive=$( sed -En 's/.*tor-browser-linux[0-9]{2}-(.*)\.tar\.xz.*$/\1/p' <<< "$( basename $2 )" ) + verArchive=$( sed -En 's/.*tor-browser-linux[0-9]{2}-(.*)\.tar\.xz.*$/\1/p' <<< "$( basename "$2" )" ) f__info "installation manuelle de $appli version $verArchive ($2)" fileTemp="$2" mkdir -p "$dirTemp" @@ -381,8 +399,9 @@ f_tor_install(){ # 04/03/2018 f__info " - téléchargement..." recup_urlTor="https://www.torproject.org/dist/torbrowser/$ver_tor_online/tor-browser-$archi-$ver_tor_online""_fr.tar.xz" mkdir -p "$dirTemp" - wget -q -c --show-progress --tries=2 --timeout=15 --user-agent="$user_agent" -o /dev/null -O "$fileTemp" "$recup_urlTor" - [ "$?" -ne 0 ] && f__wget_test "$recup_urlTor" + if ! wget -q -c --show-progress --tries=2 --timeout=15 --user-agent="$user_agent" -o /dev/null -O "$fileTemp" "$recup_urlTor"; then + f__wget_test "$recup_urlTor" + fi fi f__archive_test "$fileTemp" || f__error "Le fichier $fileTemp n'est pas une archive tar.xz valide" echo @@ -391,7 +410,7 @@ f_tor_install(){ # 04/03/2018 tar -xaf "$fileTemp" -C "$dirTemp/" # mise en place finale f__info " - installation..." - rm -rf "$dirInstallTor/" # effacement éventuel répertoire existant + rm -fr "$dirInstallTor" # effacement éventuel répertoire existant mkdir -p "$dirInstallTor" mv -f "$dirTemp/tor-browser_fr/"* "$dirInstallTor/" chown -R "$fu_user:" "$dirInstallTor/" @@ -401,11 +420,13 @@ f_tor_install(){ # 04/03/2018 chown "$fu_user:" "$fileTemp" mv "$fileTemp" ./ fi - rm -rf "$dirTemp/" + rm -fr "$dirTemp" # traitement finaux système ln -sf "$dirInstallTor/Browser/browser/chrome/icons/default/default48.png" "/usr/share/pixmaps/tor-browser.png" f_tor_lanceur_desktop + # lien éventuel ancienne version + unlink "/usr/bin/tor-browser" &>/dev/null # lanceur dans /usr/bin unlink "/usr/bin/tor-browser" &>/dev/null # lien éventuel ancienne version echo "#!/bin/sh" > "/usr/bin/tor-browser" @@ -431,57 +452,68 @@ f_tor_install_manuel(){ # 23/12/2017 } # création lanceur desktop -f_tor_lanceur_desktop(){ # 13/01/2018 - local appli="Tor Browser" +f_tor_lanceur_desktop(){ # 09/03/2018 + local appli="Tor Browser" fileDesktop="/usr/share/applications/tor-browser.desktop" [ -d "$dirInstallTor" ] || return 0 # pas d'installation? sortie echo "[Desktop Entry]" > "$fileDesktop" - echo "Name=Tor Browser" >> "$fileDesktop" - echo "X-GNOME-FullName=$appli" >> "$fileDesktop" - echo "StartupWMClass=$appli" >> "$fileDesktop" - echo "Exec=$dirInstallTor/Browser/start-tor-browser --detach" >> "$fileDesktop" - echo "X-TorBrowser-ExecShell=$dirInstallTor/Browser/start-tor-browser --detach" >> "$fileDesktop" + { + echo "Name=Tor Browser" + echo "X-GNOME-FullName=$appli" + echo "StartupWMClass=$appli" + echo "Exec=$dirInstallTor/Browser/start-tor-browser --detach" + echo "X-TorBrowser-ExecShell=$dirInstallTor/Browser/start-tor-browser --detach" if [ -e "$dirInstallTor/Browser/browser/icons/mozicon128.png" ]; then - echo "Icon=$dirInstallTor/Browser/browser/icons/mozicon128.png" >> "$fileDesktop" + echo "Icon=$dirInstallTor/Browser/browser/icons/mozicon128.png" else - echo "Icon=$dirInstallTor/Browser/browser/chrome/icons/default/default48.png" >> "$fileDesktop" + echo "Icon=$dirInstallTor/Browser/browser/chrome/icons/default/default48.png" fi - echo "Comment=$appli is +1 for privacy and -1 for mass surveillance" >> "$fileDesktop" - echo "Comment[fr]=$appli est un PLUS pour la vie privée et un MOINS pour la surveillance de masse" >> "$fileDesktop" - echo "GenericName=Web Browser" >> "$fileDesktop" - echo "GenericName[fr]=Navigateur Web" >> "$fileDesktop" - echo "Terminal=false" >> "$fileDesktop" - echo "X-MultipleArgs=false" >> "$fileDesktop" - echo "Type=Application" >> "$fileDesktop" - echo "Categories=Network;WebBrowser;Security;" >> "$fileDesktop" - echo "StartupNotify=true" >> "$fileDesktop" + echo "Comment=$appli is +1 for privacy and -1 for mass surveillance" + echo "Comment[fr]=$appli est un PLUS pour la vie privée et un MOINS pour la surveillance de masse" + echo "GenericName=Web Browser" + echo "GenericName[fr]=Navigateur Web" + echo "Terminal=false" + echo "X-MultipleArgs=false" + echo "Type=Application" + echo "Categories=Network;WebBrowser;Security;" + echo "StartupNotify=true" + } >> "$fileDesktop" chown "$fu_user:" "$fileDesktop" } # version personnalisation en ligne, [$1=quiet], assigne $perso_tor_afaire -f_tor_pers_get_version(){ # 24/01/2018 - local verPersEnPlace verPersOnline personnalisationATraiter appli="Tor Browser" +f_tor_pers_get_version(){ # 09/06/2018 + local verPersEnPlace verPersOnline appli="Tor Browser" x_tor_pers_get_version=1 + if verPersOnline=$( wget -q --tries=2 --timeout=15 -o /dev/null -O - "$urlPersTor/$userTor" ) ; then + read -r <<< "$verPersOnline" # lecture 1ere ligne + verPersOnline=${REPLY,,} + verPersOnline=${verPersOnline#*v} + verPersOnline=${verPersOnline%\**} + else + f__wget_test "$urlPersTor/$userTor" # si erreur, test url + fi if [ -e "$profilTor/personnalisation" ]; then - verPersEnPlace=$( sed -n '2p' $profilTor/personnalisation ) + verPersEnPlace=$( sed -n '2p' "$profilTor/personnalisation" ) + if [ "$verPersEnPlace" != "$verPersOnline" ]; then + perso_tor_afaire="true" + fi fi - verPersOnline=$( wget -q --tries=2 --timeout=15 -o /dev/null -O - "$urlPersTor/$userTor" | sed -En 's/\/\*v(.*)\*\//\1/p' ) - [ "$?" -ne 0 ] && f__wget_test "$urlPersTor/$userTor" - if [[ -e "$profilTor/personnalisation" && "$verPersEnPlace" != "$verPersOnline" ]]; then - perso_tor_afaire="true" - fi - [ "$verPersEnPlace" ] || verPersEnPlace="Non Installé" - [ "$verPersOnline" ] || verPersOnline="${RED}n/a" + f__trim perso_tor_afaire [ "$1" == "quiet" ] && return 0 + f__trim verPersEnPlace + f__trim verPersOnline + verPersEnPlace=${verPersEnPlace:="Non installé"} + verPersOnline=${verPersOnline:="${RED}n/a$STD"} f__info "raw" "perso. $appli en place: $GREEN$verPersEnPlace" f__info "perso. $appli en ligne: $YELLOW$verPersOnline" } # recup userTor.js et chrome/userChrome.css -f_tor_pers_install(){ # 24/01/2018 +f_tor_pers_install(){ # 09/06/2018 local verPersTorDL dirTemp="/tmp/$script-persInstall_tor" appli="Tor Browser" if [ ! -d "$dirProfilTor/" ]; then # @@ -490,11 +522,13 @@ f_tor_pers_install(){ # 24/01/2018 fi # chargement fichiers personnalisation mkdir -p "$dirTemp" - wget -q --tries=2 --timeout=15 -o /dev/null -O "$dirTemp/user.js" "$urlPersTor/$userTor" - [ "$?" -ne 0 ] && f__wget_test "$urlPersTor/$userTor" + if ! wget -q --tries=2 --timeout=15 -o /dev/null -O "$dirTemp/user.js" "$urlPersTor/$userTor"; then + f__wget_test "$urlPersTor/$userTor" + fi verPersTorDL=$( sed -En 's/\/\*v(.*)\*\//\1/p' $dirTemp/user.js ) # version uniquement sur user.js - wget -q --tries=1 --timeout=15 -o /dev/null -O "$dirTemp/userChrome.css" "$urlPersTor/$chromeTor" - [ "$?" -ne 0 ] && f__wget_test "$urlPersTor/$chromeTor" + if ! wget -q --tries=1 --timeout=15 -o /dev/null -O "$dirTemp/userChrome.css" "$urlPersTor/$chromeTor"; then + f__wget_test "$urlPersTor/$chromeTor" + fi # installation mkdir -p "$profilTor/chrome" # répertoire pour userChrome.css chown "$fu_user:" "$profilTor/chrome/" @@ -507,7 +541,7 @@ f_tor_pers_install(){ # 24/01/2018 echo "$urlPersTor" > "$profilTor/personnalisation" echo "$verPersTorDL" >> "$profilTor/personnalisation" chown "$fu_user:" "$profilTor/personnalisation" - rm -rf "$dirTemp/" + rm -fr "$dirTemp" f__info "log" "personnalisation $verPersTorDL mise en place pour $appli" } @@ -537,7 +571,7 @@ f_tor_pers_upgrade(){ # 23/12/2017 } # désinstallation -f_tor_remove(){ # 14/01/2018 +f_tor_remove(){ # 09/03/2018 local fileDesktop="/usr/share/applications/tor-browser.desktop" appli="Tor Browser" if [ ! -d "$dirInstallTor/" ]; then @@ -547,7 +581,7 @@ f_tor_remove(){ # 14/01/2018 # difficile ou impossible à killer # suppression du répertoire - rm -rf "$dirInstallTor/" + rm -fr "$dirInstallTor" # supression lanceurs unlink "/usr/bin/tor-browser" &>/dev/null # lien éventuel ancienne version rm -f "$fileDesktop" @@ -574,12 +608,12 @@ f_w_config_system(){ # 15/01/2018 # update-alternatives if type -p "update-alternatives" &>/dev/null ; then # update-alternatives existe? - update-alternatives --quiet --install $( type -p x-www-browser 2>/dev/null ) 'x-www-browser' "$2" 100 # nouvelle alternative + update-alternatives --quiet --install "$( type -p x-www-browser 2>/dev/null )" 'x-www-browser' "$2" 100 # nouvelle alternative if [ "$3" != "no_set" ]; then # pas de sélection comme prioritaire pour tor update-alternatives --quiet --set 'x-www-browser' "$2" # si la priorité n'était pas suffisante fi if type -p gnome-www-browser &>/dev/null; then # commande gnome-www-browser existe ? - update-alternatives --quiet --install $( type -p gnome-www-browser 2>/dev/null ) 'gnome-www-browser' "$2" 100 # nouvelle alternative + update-alternatives --quiet --install "$( type -p gnome-www-browser 2>/dev/null )" 'gnome-www-browser' "$2" 100 # nouvelle alternative if [ "$3" != "no_set" ]; then # pas de sélection comme prioritaire pour tor update-alternatives --quiet --set 'gnome-www-browser' "$2" # si la priorité n'était pas suffisante fi @@ -612,12 +646,14 @@ f_wfx_config_profil(){ # 27/12/2017 # comptage profils existants nbProfiles=$( grep -cEs '\[Profile[0-9]+\]' "$dirProfilWfx/profiles.ini" ) # création profil dans profile.ini - echo >> "$dirProfilWfx/profiles.ini" - echo "[Profile$nbProfiles]" >> "$dirProfilWfx/profiles.ini" - echo "Name=waterfox" >> "$dirProfilWfx/profiles.ini" - echo "IsRelative=1" >> "$dirProfilWfx/profiles.ini" - echo "Path=waterfox" >> "$dirProfilWfx/profiles.ini" - echo "Default=1" >> "$dirProfilWfx/profiles.ini" + { + echo + echo "[Profile$nbProfiles]" + echo "Name=waterfox" + echo "IsRelative=1" + echo "Path=waterfox" + echo "Default=1" + } >> "$dirProfilWfx/profiles.ini" fi f__info "log:raw" "profil $appli configuré" @@ -626,19 +662,20 @@ f_wfx_config_profil(){ # 27/12/2017 # assigne $ver_wfx_online $ver_wfx_install $recup_url_wfx, [$1=quiet] f_wfx_get_version(){ # 24/01/2018 local fileTmp="/tmp/$script-getVersion_wfx" appli="Waterfox" - local recup_url="https://www.waterfoxproject.org/downloads" recup_urlWfx verWfOnline + local recup_url="https://www.waterfoxproject.org/downloads" verWfOnline x_wfx_get_version=1 # version online - wget -q --tries=2 --timeout=15 --user-agent="$user_agent" -o /dev/null -O - "$recup_url" &>"$fileTmp" - [ "$?" -ne 0 ] && f__wget_test "$recup_url" + if ! wget -q --tries=2 --timeout=15 --user-agent="$user_agent" -o /dev/null -O - "$recup_url" &>"$fileTmp"; then + f__wget_test "$recup_url" + fi ver_wfx_online=$( sed -En 's/^.*linux64\/.*waterfox-([0-9.]*)\..*\.tar\..*$/\1/p' $fileTmp ) recup_url_wfx=$( sed -En 's/^.*.*$/\1/p' $fileTmp ) rm "$fileTmp" # version installée if [ -x "$dirInstallWfx/waterfox" ]; then - ver_wfx_install=$( $dirInstallWfx/waterfox -v | grep -Eo '[0-9].*' ) + ver_wfx_install=$( "$dirInstallWfx"/waterfox -v | grep -Eo '[0-9].*' ) fi [ "$verWfOnline" ] || verWfOnline="${RED}n/a" @@ -650,7 +687,7 @@ f_wfx_get_version(){ # 24/01/2018 } # installation, [$1='manuel', $2 archive] -f_wfx_install(){ # 04/03/2018 +f_wfx_install(){ # 09/06/2018 local fileDesktop="/usr/share/applications/waterfox.desktop" archi verArchive dirTemp fileTemp local dirTemp="/tmp/$script-install_wfx" appli="Waterfox" @@ -660,7 +697,7 @@ f_wfx_install(){ # 04/03/2018 f__error "architecture non supportée par $appli" fi if [ "$1" == "manuel" ]; then - verArchive=$( sed -E 's/.*waterfox-(.*)en-US\.linux.*$/\1/' <<< "$( basename $2 )" ) + verArchive=$( sed -E 's/.*waterfox-(.*)en-US\.linux.*$/\1/' <<< "$( basename "$2" )" ) f__info "installation manuelle de $appli version $verArchive" fileTemp="$2" mkdir -p "$dirTemp" @@ -671,8 +708,9 @@ f_wfx_install(){ # 04/03/2018 # téléchargement & test archive f__info " - téléchargement..." mkdir -p "$dirTemp" - wget -q -c --show-progress --tries=2 --timeout=15 --user-agent="$user_agent" -o /dev/null -O "$fileTemp" "$recup_url_wfx" - [ "$?" -ne 0 ] && f__wget_test "$recup_url" + if ! wget -q -c --show-progress --tries=2 --timeout=15 --user-agent="$user_agent" -o /dev/null -O "$fileTemp" "$recup_url_wfx"; then + f__wget_test "$recup_url" + fi fi f__archive_test "$fileTemp" || f__error "Le fichier $fileTemp n'est pas une archive tar.bz2 valide" echo @@ -682,7 +720,7 @@ f_wfx_install(){ # 04/03/2018 # mise en place finale f__info " - installation..." - rm -rf "$dirInstallWfx/" # éventuel répertoire existant + rm -fr "$dirInstallWfx" # éventuel répertoire existant mkdir -p "$dirInstallWfx" mv -f "$dirTemp/waterfox/"* "$dirInstallWfx/" chown -R "$fu_user:" "$dirInstallWfx/" @@ -692,20 +730,22 @@ f_wfx_install(){ # 04/03/2018 chown "$fu_user:" "$fileTemp" mv "$fileTemp" ./ fi - rm -rf "$dirTemp/" + rm -fr "$dirTemp" # traitement finaux système ln -sf "$dirInstallWfx/browser/chrome/icons/default/default48.png" "/usr/share/pixmaps/waterfox.png" f_wfx_lanceur_desktop # lanceur dans /usr/bin echo "#!/bin/sh" > "/usr/bin/waterfox" - echo >> "/usr/bin/waterfox" - echo "if grep -qE '\-P|\-\-ProfileManager' <<< \"\$@\" ; then " >> "/usr/bin/waterfox" - echo " exec $dirInstallWfx/waterfox -P" >> "/usr/bin/waterfox" - echo " else" >> "/usr/bin/waterfox" - echo " exec $dirInstallWfx/waterfox \"\$@\" " >> "/usr/bin/waterfox" - echo "fi" >> "/usr/bin/waterfox" - chmod a+x "/usr/bin/waterfox" + { + echo + echo "if grep -qE '\-P|\-\-ProfileManager' <<< \"\$@\" ; then " + echo " exec $dirInstallWfx/waterfox -P" + echo " else" + echo " exec $dirInstallWfx/waterfox \"\$@\" " + echo "fi" + } >> "/usr/bin/waterfox" + chmod 755 "/usr/bin/waterfox" # traitement de profile.ini f_wfx_config_profil @@ -733,62 +773,71 @@ f_wfx_install_manuel(){ # 23/12/2017 } # création lanceur desktop -f_wfx_lanceur_desktop(){ # 16/01/2018 - local appli="Waterfox" +f_wfx_lanceur_desktop(){ # 09/03/2018 + local appli="Waterfox" fileDesktop="/usr/share/applications/waterfox.desktop" [ -d "$dirInstallWfx" ] || return 0 # pas d'installation? sortie echo "[Desktop Entry]" > "$fileDesktop" - echo "Name=$appli" >> "$fileDesktop" - echo "Name[fr]=$appli" >> "$fileDesktop" - echo "X-GNOME-FullName=$appli" >> "$fileDesktop" - echo "X-GNOME-FullName[fr]=$appli" >> "$fileDesktop" - echo "StartupWMClass=$appli" >> "$fileDesktop" - echo "Exec=$dirInstallWfx/waterfox" >> "$fileDesktop" + { + echo "Name=$appli" + echo "Name[fr]=$appli" + echo "X-GNOME-FullName=$appli" + echo "X-GNOME-FullName[fr]=$appli" + echo "StartupWMClass=$appli" + echo "Exec=$dirInstallWfx/waterfox" if [ -e "$dirInstallWfx/browser/icons/mozicon128.png" ]; then - echo "Icon=$dirInstallWfx/browser/icons/mozicon128.png" >> "$fileDesktop" + echo "Icon=$dirInstallWfx/browser/icons/mozicon128.png" elif [ -e "$dirInstallWfx/browser/chrome/icons/default/default128.png" ]; then - echo "Icon=$dirInstallWfx/browser/chrome/icons/default/default256.png" >> "$fileDesktop" + echo "Icon=$dirInstallWfx/browser/chrome/icons/default/default256.png" else - echo "Icon=$dirInstallWfx/browser/chrome/icons/default/default48.png" >> "$fileDesktop" + echo "Icon=$dirInstallWfx/browser/chrome/icons/default/default48.png" fi - echo "Comment=Browse the World Wide Web" >> "$fileDesktop" - echo "Comment[fr]=Naviguer sur Internet" >> "$fileDesktop" - echo "GenericName=Web Browser" >> "$fileDesktop" - echo "GenericName[fr]=Navigateur Web" >> "$fileDesktop" - echo "Terminal=false" >> "$fileDesktop" - echo "X-MultipleArgs=false" >> "$fileDesktop" - echo "Type=Application" >> "$fileDesktop" - echo "Categories=Network;WebBrowser;" >> "$fileDesktop" - echo "MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/rss+xml;application/rdf+xml;x-scheme-handler/http;x-scheme-handler/https;" >> "$fileDesktop" - echo "StartupNotify=true" >> "$fileDesktop" + echo "Comment=Browse the World Wide Web" + echo "Comment[fr]=Naviguer sur Internet" + echo "GenericName=Web Browser" + echo "GenericName[fr]=Navigateur Web" + echo "Terminal=false" + echo "X-MultipleArgs=false" + echo "Type=Application" + echo "Categories=Network;WebBrowser;" + echo "MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/rss+xml;application/rdf+xml;x-scheme-handler/http;x-scheme-handler/https;" + echo "StartupNotify=true" + } >> "$fileDesktop" } # version personnalisation en ligne, [$1=quiet], assigne $perso_wfx_afaire -f_wfx_pers_get_version(){ # 24/01/2018 +f_wfx_pers_get_version(){ # 09/06/2018 local verPersEnPlace verPersOnline appli="Waterfox" x_wfx_pers_get_version=1 + if verPersOnline=$( wget -q --tries=2 --timeout=15 -o /dev/null -O - "$urlPersWfx/$userWfx" ) ; then + read -r <<< "$verPersOnline" # lecture 1ere ligne + verPersOnline=${REPLY,,} + verPersOnline=${verPersOnline#*v} + verPersOnline=${verPersOnline%\**} + else + f__wget_test "$urlPersWfx/$userWfx" # si erreur, test url + fi if [ -e "$profilWfx/personnalisation" ]; then - verPersEnPlace=$( sed -n '2p' $profilWfx/personnalisation ) + verPersEnPlace=$( sed -n '2p' "$profilWfx/personnalisation" ) + if [ "$verPersEnPlace" != "$verPersOnline" ]; then + perso_wfx_afaire="true" + fi fi - - verPersOnline=$( wget -q --tries=2 --timeout=15 -o /dev/null -O - "$urlPersWfx/$userWfx" | sed -En 's/\/\*v(.*)\*\//\1/p' ) - [ "$?" -ne 0 ] && f__wget_test "$urlPersWfx/$userWfx" - if [[ -e "$profilWfx/personnalisation" && "$verPersEnPlace" != "$verPersOnline" ]]; then - perso_wfx_afaire="true" - fi - - [ "$verPersEnPlace" ] || verPersEnPlace="Non Installé" - [ "$verPersOnline" ] || verPersOnline="${RED}n/a" + f__trim perso_wfx_afaire [ "$1" == "quiet" ] && return 0 + f__trim verPersEnPlace + f__trim verPersOnline + verPersEnPlace=${verPersEnPlace:="Non installé"} + verPersOnline=${verPersOnline:="${RED}n/a$STD"} f__info "raw" "perso. $appli en place: $GREEN$verPersEnPlace" f__info "perso. $appli en ligne: $YELLOW$verPersOnline" } # recup user.js et chrome/userChrome.css, à personnaliser ou mettre à jour -f_wfx_pers_install(){ # 24/01/2018 +f_wfx_pers_install(){ # 24/02/2018 local verPersDL dirTemp="/tmp/$script-persInstall_wfx" appli="Waterfox" if [ ! -d "$profilWfx" ]; then @@ -797,11 +846,13 @@ f_wfx_pers_install(){ # 24/01/2018 fi # chargement fichiers personnalisation mkdir -p "$dirTemp" - wget -q --tries=2 --timeout=15 -o /dev/null -O "$dirTemp/user.js" "$urlPersWfx/$userWfx" - [ "$?" -ne 0 ] && f__wget_test "$urlPersWfx/$userWfx" + if ! wget -q --tries=2 --timeout=15 -o /dev/null -O "$dirTemp/user.js" "$urlPersWfx/$userWfx"; then + f__wget_test "$urlPersWfx/$userWfx" + fi verPersDL=$( sed -En 's/\/\*v(.*)\*\//\1/p' $dirTemp/user.js ) # version uniquement sur user.js - wget -q --tries=1 --timeout=15 -o /dev/null -O "$dirTemp/userChrome.css" "$urlPersWfx/$chromeWfxr" - [ "$?" -ne 0 ] && f__wget_test "$urlPersWfx/$chromeWfxr" + if ! wget -q --tries=1 --timeout=15 -o /dev/null -O "$dirTemp/userChrome.css" "$urlPersWfx/$chromeWfxr"; then + f__wget_test "$urlPersWfx/$chromeWfxr" + fi # installation mkdir -p "$profilWfx/chrome" # répertoire pour userChrome.css chown "$fu_user:" "$profilWfx/chrome" @@ -812,7 +863,7 @@ f_wfx_pers_install(){ # 24/01/2018 echo "$urlPersWfx" > "$profilWfx/personnalisation" echo "$verPersDL" >> "$profilWfx/personnalisation" chown "$fu_user:" "$profilWfx/personnalisation" - rm -rf "$dirTemp/" + rm -fr "$dirTemp" f__info "log" "personnalisation $verPersDL mise en place pour $appli" } @@ -842,7 +893,7 @@ f_wfx_pers_upgrade(){ # 23/12/2017 } # désinstallation -f_wfx_remove(){ # 14/01/2018 +f_wfx_remove(){ # 09/03/2018 local fileDesktop="/usr/share/applications/waterfox.desktop" appli="Waterfox" if [ ! -d "$dirInstallWfx" ]; then @@ -852,7 +903,7 @@ f_wfx_remove(){ # 14/01/2018 # fermeture killall "/opt/usr/share/waterfox/waterfox" &>/dev/null # suppression du répertoire - rm -rf "$dirInstallWfx/" + rm -fr "$dirInstallWfx" # suppression lanceurs rm -f "$fileDesktop" rm -f "/usr/bin/waterfox" @@ -868,8 +919,8 @@ f_wfx_remove(){ # 14/01/2018 "$YELLOW$profilWfx" } - # tache upgrade dans anacron hebdomadaire, via cron horaire, $1=upgrade|install|remove -fscript_cronAnacron(){ # 26/01/2018 + # anacron hebdomadaire, via cron horaire, $1=upgrade|install|remove +fscript_cronAnacron(){ # 07/03/2018 local dirAnacron dirSpool fileAnacron type -t fscript_cronAnacron_special &>/dev/null && fscript_cronAnacron_special # test, si fonction spécifique, appel @@ -896,23 +947,25 @@ fscript_cronAnacron(){ # 26/01/2018 grep -q "$script" "/etc/crontab" || echo f__error "inscription crontab" ;; remove ) - rm -f "$dirSpool/$script"* &>/dev/null - rm -f "$fileAnacron" &>/dev/null - rmdir "$dirSpool" "$dirAnacron" &>/dev/null + rm -f "${dirSpool:?}/$script"* 2>/dev/null + rm -f "$fileAnacron" + rmdir "$${dirSpool:?}" "${dirAnacron:?}" 2>/dev/null ;; esac } - # version script, [$1=quiet], assigne $ver_script_install, $ver_script_online, $script_a_jour=ok|KO -fscript_get_version(){ # 24/01/2018 + # [$1=quiet], assigne $ver_script_install, $ver_script_online, $script_a_jour=ok|KO +# shellcheck disable=SC2120 +fscript_get_version(){ # 06/03/2018 x_script_get_version=1 # version online - ver_script_online=$( wget -q --timeout=15 -o /dev/null -O - "$url_script" | grep -m1 '^version=' | cut -d'=' -f2 ) - [ "$?" -ne 0 ] && f__wget_test "$url_script" + if ! ver_script_online=$( wget -q --timeout=15 -o /dev/null -O - "$url_script" | grep -m1 '^version=' | cut -d'=' -f2 ); then + f__wget_test "$url_script" + fi # version installée if [ -e "$script_install" ]; then - ver_script_install=$( grep -m1 '^version=' $script_install | cut -d'=' -f2 ) + ver_script_install=$( grep -m1 '^version=' "$script_install" | cut -d'=' -f2 ) fi if [[ "$ver_script_online" && "$script_install" ]]; then @@ -926,8 +979,7 @@ fscript_get_version(){ # 24/01/2018 f__info "script en ligne: $YELLOW$ver_script_online" } - # installation du script dans le système -fscript_install(){ # 24/02/2018 +fscript_install(){ # 09/03/2018 if grep -Eq "$script_install|/usr/bin/$script" <<< "$0"; then f__info "${RED}l'installation dans le système doit se faire depuis le script non installé $GREEN(./$script -i )" @@ -937,21 +989,20 @@ fscript_install(){ # 24/02/2018 f__requis "wget anacron cron" || exit 1 # install /opt mkdir -p /opt/bin/ - cp -d "$0" "$script_install" + cp "$0" "$script_install" ln -s "$script_install" "/usr/bin/$script" &>/dev/null - chmod 775 "$script_install" # rwx rwx r-x, proprio fu_user + chmod 755 "$script_install" # cron/anacron install fscript_cronAnacron "install" # création fichier log touch "$script_logs" - chmod 664 "$script_logs" # rw- rw- r--, proprio fu_user + chmod 644 "$script_logs" chown "$fu_user:" "$script_logs" "$script_install" [ -e "$fileDev" ] || rm -f "$0" ## on efface pas si fileDev (dev) f__info "log" "$script $version installé dans le système." "maintenant, appel du script par: $GREEN$script$BLUE (sans ./)" } - # suppression du script dans le système fscript_remove(){ # 24/02/2018 if ! grep -Eq "$script_install|/usr/bin/$script" <<< "$0"; then @@ -973,8 +1024,9 @@ fscript_remove(){ # 24/02/2018 f__info "log" "$script $version supprimé du système." } - # mise à jour script, [$1 != "" si upgrade en place, $1 dans message info] -fscript_update(){ # 01/03/2018 + # si upgrade en place, $1 != "", [$1 message info] +# shellcheck disable=SC2120 +fscript_update(){ # 09/03/2018 local dirTemp="/tmp/$script-maj" upgradeEnPlace="$1" type -t fscript_update_special &>/dev/null && fscript_update_special # test, si fonction spécifique, appel @@ -990,28 +1042,26 @@ fscript_update(){ # 01/03/2018 f__info "mise à jour en cours" fi mkdir -p "$dirTemp" - wget -q --tries=2 --timeout=15 -o /dev/null -O "$dirTemp/$script" "$url_script" - if [ "$?" -ne 0 ]; then - rm -rf "$dirTemp" + if ! wget -q --tries=2 --timeout=15 -o /dev/null -O "$dirTemp/$script" "$url_script"; then + rm -fr "$dirTemp" f__wget_test "$url_script" fi if grep -q '#!/bin/bash' "$dirTemp/$script" && grep -q '^### END CONTROL' "$dirTemp/$script"; then - cp -d "$dirTemp/$script" "$script_install" - chmod 775 "$script_install" # rwx rwx r-x, proprio fu_user + cp "$dirTemp/$script" "$script_install" + chmod 755 "$script_install" chown "$fu_user:" "$script_install" [ -z "$upgradeEnPlace" ] && fscript_cronAnacron "upgrade" - f__info "log" "$script mis à jour en version $ver_script_online $updateSpecial" + f__info "log" "$script mis à jour en version $ver_script_online $upgradeEnPlace" else f_info "log" "$script: échec update" "mauvais téléchargement, réessayer plus tard" fi - rm -rf "$dirTemp/" + rm -fr "$dirTemp" } prg_init(){ # 04/03/2018 PATH='/usr/sbin:/usr/bin:/sbin:/bin' TERM=xterm - IFS_INI="$IFS" IFS=$' \t\n' export PATH TERM IFS @@ -1020,7 +1070,7 @@ prg_init(){ # 04/03/2018 shopt -u force_fignore execfail failglob # test bash v4 - [ "$BASH_VERSINFO" == 4 ] || f__error "bash v4 requis" "version installée: $BASH_VERSION" + [ "${BASH_VERSINFO[0]}" == 4 ] || f__error "bash v4 requis" "version installée: $BASH_VERSION" # architectures possibles f__architecture || f__error "Seules les architecture 32 et/ou 64 bits sont supportée (i686 & amd64)" @@ -1031,7 +1081,11 @@ prg_init(){ # 04/03/2018 [ "$retourFUser" -eq 1 ] && f__error "user indéterminé" \ "pour contourner, lancer le script avec:\n$GREEN USER_INSTALL= $0 \n" if [ "$retourFUser" -eq 2 ]; then - [ "$EUID" -eq 0 ] && fu_user="root" || f__error "user détecté, mais pas de home: /home/$fu_user" + if [ "$EUID" -eq 0 ]; then + fu_user="root" + else + f__error "user détecté, mais pas de home: /home/$fu_user" + fi f__info "user root" fi @@ -1042,6 +1096,7 @@ prg_init(){ # 04/03/2018 f__color } + ######## début script / initialisation # tests ou initialisation au démarrage @@ -1055,52 +1110,62 @@ user_agent="Mozilla/5.0 Firefox" fileDev="/opt/bin/fileDev" script_install="/opt/bin/$script" script_logs="/var/log/sdeb_$script.log" -url_script="https://framagit.org/kyodev/kyopages/raw/master/scripts/$script/" -url_notice="https://kyodev.frama.io/kyopages/scripts/$script/" +url_script="https://framagit.org/sdeb/getXfox/raw/master/getXfox" +url_notice="https://framaclic.org/h/doc-getxfox" # paramètres Tor Browser dirInstallTor="/opt/usr/share/tor-browser" -dirProfilTor="$dirInstallTor/Browser/TorBrowser/Data/Browser" # emplacement profiles.ini -profilTor="$dirProfilTor/profile.default" # profil utilisé - # url chargement fichiers personnalisation, std ou spécifique -[ -e "$profilTor/personnalisation.getFirefox" ] && mv "$profilTor/personnalisation.getFirefox" "$profilTor/personnalisation" # ancien nom -if [ -e "$profilTor/personnalisation" ]; then - urlPersTor=$( sed -n '1p' $profilTor/personnalisation ) -else - urlPersTor="https://framagit.org/kyodev/kyopages/raw/master/scripts" +dirProfilTor="$dirInstallTor/Browser/TorBrowser/Data/Browser" # emplacement profiles.ini +profilTor="$dirProfilTor/profile.default" # profil utilisé +urlPersTor="https://framagit.org/sdeb/getXfox/raw/master" # url standard des personnalisations +userTor="userTor.js" # nom du fichier user.js sur un dépôt distant +chromeTor="userChrome.css" # nom du fichier userChrome.css sur un dépôt distant + + # renommage anciens fichiers personnalisation +if [ -e "$profilTor/personnalisation.getFirefox" ]; then + mv "$profilTor/personnalisation.getFirefox" "$profilTor/personnalisation" +fi + # url personnalisation +if [ -e "$profilTor/personnalisation" ]; then + read -r < "$profilTor/personnalisation" # 1ere ligne, url + if [[ "$REPLY" =~ /kyodev/kyopages/ ]]; then # changement git distant + perso_tor_afaire="true" + elif [ "$REPLY" != "$urlPersTor" ]; then # url personnalisée + urlPersTor="$REPLY" + fi fi -userTor="userTor.js" # nom du fichier user.js sur un dépôt distant -chromeTor="userChrome.css" # nom du fichier userChrome.css sur un dépôt distant # paramètres waterfox dirInstallWfx="/opt/usr/share/waterfox" -dirProfilWfx="/home/$fu_user/.waterfox" # emplacement profiles.ini -profilWfx="$dirProfilWfx/waterfox" # profil utilisé - # url chargement fichiers personnalisation, std ou spécifique -if [ -e "$profilWfx/personnalisation" ]; then - urlPersWfx=$( sed -n '1p' $profilWfx/personnalisation ) -else - urlPersWfx="https://framagit.org/kyodev/kyopages/raw/master/scripts" +dirProfilWfx="/home/$fu_user/.waterfox" # emplacement profiles.ini +profilWfx="$dirProfilWfx/waterfox" # profil utilisé +urlPersWfx="https://framagit.org/sdeb/getFirefox/raw/master" # url standard des personnalisations +userWfx="user.js" # nom du fichier user.js sur un dépôt distant +chromeWfxr="userChrome.css" # nom du fichier userChrome.css sur un dépôt distant + + # renommage anciens fichiers personnalisation +if [ -e "$profilWfx/personnalisation.getFirefox" ]; then + mv "$profilWfx/personnalisation.getFirefox" "$profilWfx/personnalisation" +fi + # url personnalisation +if [ -e "$profilWfx/personnalisation" ]; then + read -r < "$profilWfx/personnalisation" # 1ere ligne, url + if [[ ! "$REPLY" =~ /kyodev/kyopages/ ]]; then # changement git distant + perso_wfx_afaire="true" + elif [ "$REPLY" != "$urlPersWfx" ]; then # url personnalisée + urlPersWfx="$REPLY" + fi fi -userWfx="user.js" # nom du fichier user.js sur un dépôt distant -chromeWfxr="userChrome.css" # nom du fichier userChrome.css sur un dépôt distant - -options=$@ +options="$*" # auto-installation script éventuel, si pas de marqueur $fileDev -if [[ $( dirname $0 ) != $( dirname $script_install ) && $( dirname $0 ) != "/usr/bin" && ! -e "$fileDev" ]]; then +if [[ $( dirname "$0" ) != $( dirname "$script_install" ) && $( dirname "$0" ) != "/usr/bin" && ! -e "$fileDev" ]]; then options="-i" # option installation script fi +[ "$options" ] || options="-h" # vide help (si fileDev) for j in $options; do # première passe options case $j in - -i | --install | -r | --remove | ri | i-* | m-* | r-* | u-* ) - if [ "$EUID" -ne 0 ]; then - f__info "vous devez être$RED ROOT$BLUE pour cette opération" - f__sudo "exec $0 $@" - exit - fi - ;;& --sauve ) dl_to_svg="ok" ;;& @@ -1108,11 +1173,15 @@ for j in $options; do # première passe options done options=${options//--sauve/ } -[ "$options" ] || options="-h" # vide? help - for j in $options; do # deuxième passe options, actions case $j in - + -i | --install | -r | --remove | ri | i-* | m-* | r-* | u-* ) + if [ "$EUID" -ne 0 ]; then + f__info "vous devez être$RED ROOT$BLUE pour cette opération" + f__sudo "exec $0 $*" + exit + fi + ;;& version | versions ) # versions en ligne & installées fscript_get_version f_tor_get_version @@ -1198,5 +1267,9 @@ exit ### END CONTROL (contrôle chargement) -wget -nv -O getXfox https://framagit.org/kyodev/kyopages/raw/master/scripts/getXfox +wget -nv -O getXfox https://framaclic.org/h/getxfox +curl -L -o getXfox https://framaclic.org/h/getxfox chmod +x getXfox && ./getXfox + +wget -nv -O getXfox https://framagit.org/sdeb/getXfox/raw/master/getXfox +curl -O https://framagit.org/sdeb/getXfox/raw/master/getXfox diff --git a/scripts/getXfox_changelog.md b/scripts/getXfox_changelog.md deleted file mode 100644 index af1a47d..0000000 --- a/scripts/getXfox_changelog.md +++ /dev/null @@ -1,84 +0,0 @@ -# getXfox - -*todo - * Default dans profiles.ini à implanter pour le futur? - -## getXfox 4.15.0 04/03/2018 - -* synchro: f__color, f__info, f__sudo, f__user, f__wget_test -* synchro fscript_install, fscript_remove, fscript_update -* révision: prg_init, f_help -* révision: général ubuntu 16.04, f_tor_install, f_wfx_install -* fix: f_wfx_install, collision architecture si installation groupée wfx & tor - -## getXfox 4.14.2 11/02/2018 - -* syncro: f__color - -## getXfox 4.14.1 29/01/2018 - -révision: +requis awk>gawk - -## getXfox 4.14.0 26/01/2018 - -* révision: mineur, fscript_cronAnacron fscript_install fscript_remove fscript_update -* révision: f__requis -* fix: f__sudo, extraction nb tentatives - -## getXfox 4.12.0 24/01/2018 - -* révision: f_help, f_affichage -* révision: f_tor_install, f_wfx_install -* révision: général wget_log: fscript_get_version, fscript_update - -## getXfox 4.11.0 16/01/2018 - -* nouveau: cumul options (opérations) possibles (sauf opés scripts) -* nouveau: option --sauve pour conserver le téléchargement à l'installation -* révision: ffx_lanceur_desktop, mimetype, plus de xul, pas de déclaration images -* révision; f__wget_test -* révision: f_sudo abandonné dans fscript_install et fscript_remove, au profit appel au traitement général des options -* révision: général, invocation f__sudo dans traitement options, plus confortable si su & _all_ -* révision: f_sudo, format nombre de tentatives et options appel possibles > 1 -* révision: menu réparation icône pour tous les canaux installés, menu help en conséquence -* révision: auto-installation, potentiel bug selon conditions appel -* fix: test gnome-www-browser avant installation (erreur kde) - -## getXfox 4.10.0 12/01/2018 - -* fix: correction commentaire fscript_get_version - -## getXfox 4.9.0 29/12/2017 - -* syncro composants - -## getXfox 4.8.0 27/12/2017 - -* suivi getFirefox - -## getXfox 4.7.0 26/12/2017 - -révision: f__info, option combinée raw:log -révision: f_help -remodelage: deux fonctions config_profil, config_system (traitement profil et défaut système) -révision: f_wfx_install, lanceur /usr/bin -révision; f_wfx_lanceur_desktop, chemins icone alternatifs -fix: f_wfx_remove, oubli suppression lien dans /usr/bin - -## getXfox 4.5.0 25/12/2017 - -* cosmétique -* révision: tor_install, wfx_install, wfx_profil_user -* révision: général, plus de variables composées avec variable dans local - - -## getXfox 4.3.0 24/12/2017 - -* cosmétique -* fix: f__wget_test, incompatible avec redirection logs -* fix: typo fscript_update - -## getXfox 4.1.0 23/12/2017 - -* base getFirefox v4.1.0 -* prise en charge waterfox et tor browser