From ce72695e09a6f21f82b950b45d307162d2f3d463 Mon Sep 17 00:00:00 2001 From: kyodev <> Date: Thu, 7 Jun 2018 17:56:27 +0200 Subject: [PATCH] maj --- docs/scripts/getFirefox.md | 53 ++++--- docs/scripts/ipupdate.md | 16 +- docs/scripts/nstest.md | 7 +- docs/trucs/ssh/ssh-serveur.md | 10 ++ scripts/getFirefox | 287 +++++++++++++++++++--------------- 5 files changed, 214 insertions(+), 159 deletions(-) diff --git a/docs/scripts/getFirefox.md b/docs/scripts/getFirefox.md index 171c2b3..83eb5bf 100644 --- a/docs/scripts/getFirefox.md +++ b/docs/scripts/getFirefox.md @@ -1,20 +1,31 @@ # getFirefox -![version: 4.20.0](https://img.shields.io/badge/version-4.20.0-blue.svg?longCache=true&style=for-the-badge) + +> avertissement +> la nouvelle version ESR ( version 60.x ), basée sur Quantum, **empêche tout retour en arrière** + +* les extensions incompatibles avec WebExtension seront désacivées, malheureusement les plus pointues n'ont pas d"équivalent dans à cause des limitations de WebExtension qui se cantonne à essayer de suivre les préconisation de Google +* gestion des utilisateurs différente +* les processeurs aussi anciens que Intel Pentium 4 et AMD Opteron ne sont plus pris en charge + +> Ceux qui ne croient pas en l'avenir marketé _fabuleux_ de Quantum (publicité intégrée à venir, webextension limitées chez Mozilla, etc), qui présage plutôt un suivi sans saveur de Google Chrome, en attendant son abandon après une longue agonie déjà amorcée depuis longtemps, peuvent [tester Waterfox](https://framaclic.org/h/doc-getxfox) +> Waterfox est un fork basé sur l'ancien moteur avec tout les extensions fonctionnelles et une bien plus grande liberté de personnalisation + +![version: 4.21.0](https://img.shields.io/badge/version-4.21.0-blue.svg?longCache=true&style=for-the-badge) ![bash langage](https://img.shields.io/badge/bash-4-brightgreen.svg?longCache=true&style=for-the-badge) ![license LPRAB / WTFPL](https://img.shields.io/badge/license-LPRAB%20%2F%20WTFPL-blue.svg?longCache=true&style=for-the-badge) > c'est un script bash qui télécharge les dernières versions officielles de Mozilla Firefox des différents canaux possibles: **latest** la release officielle, mais aussi **ESR** **beta**, **nightly**, et _dev_. -> les versions peuvent coexister et fonctionner en parallèle +> les versions peuvent coexister et fonctionner en parallèle > les mises à jour de Firefox sont par défaut autorisées et gérées par Firefox (corrections mineures permanentes, en tâche de fond, et une version majeure toutes les 6 semaines environ). > le script se mettra éventuellement à jour, sans influence sur les canaux Firefox installés. > le script installe un canal Firefox pour l'utilisateur en cours. > le script peut charger des fichiers de personnalisation et les mettra à jour périodiquement > le script peut désinstaller les canaux Firefox souhaités -> script testé sur debian / ubuntu, mais devrait être compatible avec d'autres distributions +> script testé sur debian / ubuntu, mais devrait être compatible avec d'autres distributions * les installations/désinstallations/opérations système doivent être faites avec les privilèges **root** @@ -38,9 +49,9 @@ chmod +x getFirefox && ./getFirefox / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / | (_| | __/ |_| _| | | | | __/ _| (_) > < \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ - |___/ version 4.20.0 - 06/06/2018 - - getFirefox 4.19.0 installé dans le système. + |___/ version 4.21.0 - 07/06/2018 + + getFirefox 4.21.0 installé dans le système. maintenant, appel du script par: getFirefox (sans ./) ``` @@ -65,8 +76,8 @@ getFirefox i-canal / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / | (_| | __/ |_| _| | | | | __/ _| (_) > < \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ - |___/ version 4.20.0 - 06/06/2018 - + |___/ version 4.21.0 - 07/06/2018 + installation Firefox-latest - téléchargement... @@ -123,8 +134,8 @@ getFirefox -h / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / | (_| | __/ |_| _| | | | | __/ _| (_) > < \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ - |___/ version 4.20.0 - 06/06/2018 - ---------------------------------------------------------------------- + |___/ version 4.21.0 - 07/06/2018 + ---------------------------------------------------------------------- canaux possibles: latest, beta, nightly, dev, esr = tous les canaux exemple, installation version Release (latest): getFirefox i-latest @@ -167,17 +178,17 @@ getFirefox version / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / | (_| | __/ |_| _| | | | | __/ _| (_) > < \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ - |___/ version 4.20.0b - 06/06/2018 + |___/ version 4.21.0 - 07/06/2018 - script en place: 4.20.0b - script en ligne: 4.20.0 + script en place: 4.20.1 + script en ligne: 4.20.1 .....++++ - Firefox en place: esr: 52.6.0 beta: 59.0 - Firefox en ligne: esr: 52.6.0 latest: 58.0.2 beta: 59.0b14 nightly: 60.0a1 + Firefox en place: esr: 52.6.0 beta: 61.0 + Firefox en ligne: esr: n/a latest: 60.0.2 beta: 61.0b11 nightly: 62.0a1 - perso. Firefox en place: Non installé + perso. Firefox en place: esr: 0.6 beta: 0.6 perso. Firefox en ligne: 0.6 ``` @@ -231,12 +242,14 @@ getFirefox p-canal * _userChrome.css_ est ajouté dans le profil du canal souhaité, sous-répertoire _chrome/_ * la version indiquée dans user.js fait référence, la version de userChrome.css est indicative * les personnalisations sont périodiquement mise à jour, comme le script (7jours) -* l'url de base peut être changée aisément, les fichiers modifiés et hébergés ailleurs pour mise à jour - automatique (sur une plateforme git ou un gist par exemple) +* l'url de base peut être changée aisément, les fichiers peuvent être modifiés et hébergés ailleurs pour mise à jour + automatique (sur une plateforme git ou un snippet par exemple) +* **LIMITATION** une seule url de mise à jour pour tous canaux. à voir si intérêt pour changer cela +* la première url personnalisée trouvée est sélectionnée, dans l'ordre: esr latest beta nightly dev * dans chaque canal concerné, la configuration se trouve trouve dans le fichier: `/home/user/.mozilla/firefox/canal/personnalisation` - * l'url (première ligne) peut y être modifiée - * la version est indiquée en seconde ligne + * l'url (**première ligne**) peut y être modifiée + * la version est indiquée en **seconde ligne** * pour figer des fichiers de personnalisations et ne pas les mettre à jour, il suffit d'effacer les fichiers `personnalisation` diff --git a/docs/scripts/ipupdate.md b/docs/scripts/ipupdate.md index 7ebee8a..0c383bf 100644 --- a/docs/scripts/ipupdate.md +++ b/docs/scripts/ipupdate.md @@ -1,6 +1,6 @@ # ipupdate -![version: v1.0](https://img.shields.io/badge/version-1.0%20-blue.svg?longCache=true&style=for-the-badge) +![version: 1.1.1](https://img.shields.io/badge/version-1.1.1-blue.svg?longCache=true&style=for-the-badge) ![bash langage](https://img.shields.io/badge/bash-version4-brightgreen.svg) ![status](https://img.shields.io/badge/status-release-green.svg) ![license LPRAB / WTFPL](https://img.shields.io/badge/license-LPRAB%20%2F%20WTFPL-blue.svg) @@ -69,7 +69,7 @@ cp ipupdate.conf.sample ipupdate.conf * une tâche est inscrite dans `/etc/crontab` pour une exécution toutes les 5 minutes -## help +## usage ```text _ _ _ @@ -77,9 +77,9 @@ cp ipupdate.conf.sample ipupdate.conf | | '_ \| | | | '_ \ / _' |/ _' | __/ _ \ | | |_) | |_| | |_) | (_| | (_| | || __/ |_| .__/ \__,_| .__/ \__,_|\__,_|\__\___| -h - |_| |_| v1.0.0 31/05/2018 + |_| |_| 1.1.0 02/06/2018 - usage : ipupdate [options] + usage : ipupdate [options] ( les options et les arguments doivent etre séparés par 1 espace ) sans option : tous les services configurés sont vérifiés et une éventuelle nouvelle adresse IP est publiée si changement (root requis) @@ -96,8 +96,8 @@ cp ipupdate.conf.sample ipupdate.conf -u, --upgrade: provoque le chargement et le remplacement du script en place (root requis) -v, --version: version du script en ligne et en place - script dir : /home/pi/ - conf file : /home/pi/ipupdate.conf + script dir : /opt/bin/ + conf file : /etc/ipupdate.conf logs file : /var/log/ipupdate.log tracking file : /var/log/track-ipupdate @@ -131,7 +131,7 @@ informations complémentaires: `ipupdate -h` aide succincte avec infos de configurations -`ipupdate -c --service duckdns` efface l'enregistrement, ou active le mode offline auprès de _duckdns_. le service de DNS dynamique doit supporter cette fonctionnalité, et le lancement périodique du script arrêté (désinstallation ou désinsciption crontab, ) +`ipupdate -c --service dynu` efface l'enregistrement, ou active le mode offline auprès de _dynu_. le service de DNS dynamique doit supporter cette fonctionnalité, et le lancement périodique du script arrêté (désinstallation ou désinsciption crontab, ) `ipupdate -c` efface l'enregistrement, ou active le mode offline pour tous les services possibles. @@ -281,7 +281,7 @@ si l'envoi de mails est configuré, voir `ipupdate.conf` et activé `envoi_mail= * publication avec token * facebook, reddit, google+, twitter requis * hn: rustique, peu de fonctionnalité, ipv4 only, temps de mise à jour zone dns un peu lent parfois? - * noip: commercial, obligation maintenir compte tous les 30 jours par validation mail, pas d'effacement record + * noip: commercial, obligation maintenir compte tous les 30 jours par validation mail, pas d'effacement record en gratuit * recalés * dnsdynamic: à l'abandon diff --git a/docs/scripts/nstest.md b/docs/scripts/nstest.md index b5b1459..63910df 100644 --- a/docs/scripts/nstest.md +++ b/docs/scripts/nstest.md @@ -1,10 +1,9 @@ # nstest -![version: v1.6](https://img.shields.io/badge/version-1.6%20-blue.svg?longCache=true&style=for-the-badge) -![bash langage](https://img.shields.io/badge/bash-version4-brightgreen.svg) -![status](https://img.shields.io/badge/status-release-green.svg) -![license LPRAB / WTFPL](https://img.shields.io/badge/license-LPRAB%20%2F%20WTFPL-blue.svg) +![version: 1.6.3](https://img.shields.io/badge/version-1.6.3-blue.svg?longCache=true&style=for-the-badge) +![bash langage](https://img.shields.io/badge/bash-4-brightgreen.svg?longCache=true&style=for-the-badge) +![license LPRAB / WTFPL](https://img.shields.io/badge/license-LPRAB%20%2F%20WTFPL-blue.svg?longCache=true&style=for-the-badge) This script tests several open DNS servers and/or servers which names must be present in `resolv.conf` or in another file. diff --git a/docs/trucs/ssh/ssh-serveur.md b/docs/trucs/ssh/ssh-serveur.md index 75bc51c..e669ee1 100644 --- a/docs/trucs/ssh/ssh-serveur.md +++ b/docs/trucs/ssh/ssh-serveur.md @@ -134,6 +134,16 @@ AddressFamily inet AllowUsers user1 user2 ``` +de manière plus ou moins aléatoire?, la connexion inactive provoque une erreur genre: +```shell +packet_write_wait: Connection to port : Broken pipe +``` + +selon [cette page](https://patrickmn.com/aside/how-to-keep-alive-ssh-sessions/), essai: +```text +ClientAliveInterval 300 +ClientAliveCountMax 2 +``` ## fail2ban diff --git a/scripts/getFirefox b/scripts/getFirefox index 4885198..827c038 100755 --- a/scripts/getFirefox +++ b/scripts/getFirefox @@ -1,10 +1,11 @@ #!/bin/bash -# shellcheck disable=SC2119,SC1117 +# shellcheck disable=SC2119,SC2120 # SC2119 Use function "$@" if function's $1 should mean script's $1 (??) +# SC2120 function references arguments, but none are ever passed. -version=4.20.1 -date="06/06/2018" +version=4.21.0 +date="07/06/2018" #contact="IRC freenode ##sdeb ou https://framagit.org/kyodev/kyopages/issues/" script="getFirefox" @@ -73,12 +74,12 @@ f__color(){ # 29/05/2018 } # affichage $1 en rouge, $1++ optionnels en bleu, sortie script sur erreur, log $1 si $operation=upgrade -f__error(){ # 18/12/2017 +f__error(){ # 07/O6/2018 local depart=1 i - echo -e "\n$RED $script $version, erreur critique: $1 $STD" + echo -e "\\n$RED $script $version, erreur critique: $1 $STD" >&2 for (( i=2 ; i<=$# ; i++ )); do - echo -e " $BLUE${!i}$STD" + echo -e " $BLUE${!i}$STD" >&2 done echo [ "$operation" == "upgrade" ] && f__log "$script $version: $1" @@ -86,14 +87,18 @@ 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(){ # 05/03/2018 - local depart=1 i +f__info(){ # 07/06/2018 + local depart=1 log i if [[ "$1" =~ "raw" || "$1" =~ "log" ]]; then depart=2 fi if [[ "$1" =~ "log" ]]; then - f__log "$( sed -E 's/\\t//;s/\\n// ' <<< "$2" | xargs )" + log="$2" + log=${log//$'\t'} + log=${log//$'\n'} + f__trim log + f__log "$log" fi for (( i="$depart" ; i<=$# ; i++ )); do echo -e " $BLUE${!i}$STD" @@ -162,7 +167,7 @@ f__requis(){ # 06/06/2018 # si sudo si possible sera utilisé. # si su &2 redirigé sur &1 # si bash inexistant, return 2 -f__sudo(){ # 06/03/2018 +f__sudo(){ # 07/06/2018 local nb sudo isudo options nbDefault=3 # détermination sudo possible @@ -187,7 +192,7 @@ f__sudo(){ # 06/03/2018 $sudo "$options" else for (( isudo=1 ; isudo<="$nb" ; isudo++ )); do - echo -en "\n[su] Mot de passe root : " + echo -en "\\n[su] Mot de passe root : " $sudo "$options" 2>/dev/null && break [ "$isudo" == "$nb" ] && return 1 done @@ -195,6 +200,15 @@ f__sudo(){ # 06/03/2018 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 @@ -244,7 +258,7 @@ f__user(){ # 08/03/2018 # si $2=print affiche url testée & entêtes http & location, return 0 # si $2=loc affiche seulement location, return 0 # si $2=test return 0 si ok, return 1 si KO -f__wget_test(){ # 22/02/2018 +f__wget_test(){ # 07/06/2018 local file_test_wget="/tmp/testWget-$script" retourWget retourHttp location wget -Sq --timeout=5 --tries=2 --user-agent="$user_agent" --spider --save-headers "$1" &>"$file_test_wget" @@ -257,8 +271,10 @@ f__wget_test(){ # 22/02/2018 [ "$retourWget" == 6 ] && retourWget="6: défaut authentification" [ "$retourWget" == 7 ] && retourWget="7: erreur de protocole" [ "$retourWget" == 8 ] && retourWget="8: réponse serveur en erreur" - retourHttp=$( grep -i 'HTTP/' "$file_test_wget" | tr -d '\n' | xargs ) - location=$( grep -i 'location' $file_test_wget | xargs ) + retourHttp=$( grep -i 'HTTP/' "$file_test_wget" | tr -d '\n' ) + f__trim retourHttp + location=$( grep -i 'location' $file_test_wget ) + f__trim location if [ "$2" == "test" ]; then rm -f "$file_test_wget" # spécial maintenance frama.link, pas de redirection sur page status framalink @@ -268,9 +284,9 @@ f__wget_test(){ # 22/02/2018 if [ "$2" == "print" ]; then if [ "$retourWget" != "0" ]; then echo " erreur wget: erreur $RED$retourWget" - echo -e "$BLUE $1$STD\t$RED $retourHttp$STD" + echo -e "$BLUE $1$STD\\t$RED $retourHttp$STD" else - echo -e "$BLUE $1$STD\t$GREEN $retourHttp$STD" + echo -e "$BLUE $1$STD\\t$GREEN $retourHttp$STD" fi fi if [ "$2" == "print" ] || [ "$2" == "loc" ]; then @@ -282,70 +298,73 @@ f__wget_test(){ # 22/02/2018 if [ "$retourWget" != "0" ]; then rm -f "$file_test_wget" f__error "wget, erreur $retourWget" "$1" "$YELLOW$retourHttp" "$location" - echo -e "$RED erreur wget, $retourWget \n $1 \n $YELLOW$retourHttp \n $location$STD" # pour les diags + echo -e "$RED erreur wget, $retourWget \\n $1 \\n $YELLOW$retourHttp \\n $location$STD" # pour les diags return 1 fi if grep -q '200' <<< "$retourHttp"; then - echo -e "$GREEN\ntout est ok, réessayer$STD\n" + echo -e "$GREEN\\ntout est ok, réessayer$STD\\n" fi rm -f "$file_test_wget" exit 0 } -f_affichage(){ # 09/03/2018 - local affichage_text=" _ _____ _ __ - __ _ ___| |_| ___(_)_ __ ___ / _| _____ __ - / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / - | (_| | __/ |_| _| | | | | __/ _| (_) > < - \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ - |___/" +# shellcheck disable=SC1117 +f_affichage(){ # 07/06/2018 (( x_logo == 1 )) && return x_logo=1 - 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 + _ _____ _ __ + __ _ ___| |_| ___(_)_ __ ___ / _| _____ __ + / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / + | (_| | __/ |_| _| | | | | __/ _| (_) > < + \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ + |___/ ${YELLOW}version $version - $date$STD + + end } # affichage help -f_help(){ # 09/03/2018 - local ligne help=( - "----------------------------------------------------------------------" - " canaux possibles:$GREEN latest, beta, nightly, dev, esr$STD" - " = tous les canaux" - "exemple, installation version Release (latest): $BLUE$script i-latest$STD" - "" - "$BLUE$script i-$STD${GREEN}canal$STD : ${RED}i${STD}nstallation de $appli $RED(root)$STD" - " avec option $GREEN--sauve$STD l'archive téléchargée est sauvegardée dans le répertoire courant" - "" - "$BLUE$script d-$STD${GREEN}canal$STD : copier un éventuel profil ${RED}.d${STD}efault existant sur " - "$BLUE$script m-$STD${GREEN}canal archi$STD : installation sur le d'une ve téléchargée ${RED}m${STD}anuellement $RED(root)$STD" - "$BLUE$script r-$STD${GREEN}canal$STD : désinstallation (${RED}r${STD}emove) du $RED(root)$STD" - "$BLUE$script ri$STD : ${RED}r${STD}éparation$RED i${STD}cône(s) et lanceur(s) dans le menu $RED(root)$STD" - "$BLUE$script u-$STD${GREEN}canal$STD : profil pour l'${RED}u${STD}tilisateur en cours et comme défaut système $RED(root)$STD" - "" - "$BLUE$script p-$STD${GREEN}canal$STD : ${RED}p${STD}ersonnalisation sur le de user.js & userChrome.css" - "$BLUE$script pr-$STD${GREEN}canal$STD : suppression des ${RED}p${STD}ersonnalisations (${RED}r${STD}emove) sur le " - "$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(){ # 07/06/2018 tput cuu1 # une ligne plus haut - for ligne in "${help[@]}"; do - echo -e " $ligne" - done - echo -e "\n$STD plus d'infos: $GREEN$url_notice$STD" - echo -e "$STD Tor Browser, voir getXfox:$YELLOW https://framaclic.org/h/doc-getxfox\n$STD" + cat <<- end + ---------------------------------------------------------------------- + canaux possibles:$GREEN latest, beta, nightly, dev, esr$STD + = tous les canaux + exemple, installation version Release (latest): $BLUE$script i-latest$STD + + $BLUE$script i-$STD${GREEN}canal$STD : ${RED}i${STD}nstallation de $appli $RED(root)$STD + avec option $GREEN--sauve$STD l'archive téléchargée est sauvegardée dans le répertoire courant + + $BLUE$script d-$STD${GREEN}canal$STD : copier un éventuel profil ${RED}.d${STD}efault existant sur + $BLUE$script m-$STD${GREEN}canal archi$STD : installation sur le d'une ve téléchargée ${RED}m${STD}anuellement $RED(root)$STD + $BLUE$script r-$STD${GREEN}canal$STD : désinstallation (${RED}r${STD}emove) du $RED(root)$STD + $BLUE$script ri$STD : ${RED}r${STD}éparation$RED i${STD}cône(s) et lanceur(s) dans le menu $RED(root)$STD + $BLUE$script u-$STD${GREEN}canal$STD : profil pour l'${RED}u${STD}tilisateur en cours et comme défaut système $RED(root)$STD + + $BLUE$script p-$STD${GREEN}canal$STD : ${RED}p${STD}ersonnalisation sur le de user.js & userChrome.css + $BLUE$script pr-$STD${GREEN}canal$STD : suppression des ${RED}p${STD}ersonnalisations (${RED}r${STD}emove) sur le + $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: $GREEN$url_notice${STD} + ${STD}Tor Browser, voir getXfox:${YELLOW} https://framaclic.org/h/doc-getxfox${STD} + + end } # traitement utilisateur(profiles.ini), $1=canal, [$2='menu'] si appel indépendant pour reconfiguration -ffx_config_profil(){ # 09/03/2018 +ffx_config_profil(){ # 07/06/2018 local nbProfiles canal="$1" if [ ! -d "$dirInstallFfx$canal" ] && [ "$2" == "menu" ]; then # pas de répertoire programme @@ -359,7 +378,7 @@ ffx_config_profil(){ # 09/03/2018 chmod g-rx,o-rx "$dirProfilFfx/$canal/" # droits répertoire fi if [ ! -e "$dirProfilFfx/profiles.ini" ]; then # pas de profile.ini - echo -e "[General]\nStartWithLastProfile=1" > "$dirProfilFfx/profiles.ini" + echo -e "[General]\\nStartWithLastProfile=1" > "$dirProfilFfx/profiles.ini" chown "$fu_user:" "$dirProfilFfx/profiles.ini" # propriété du fichier profile.ini à l'user chmod u+rw,go+r "$dirProfilFfx/profiles.ini" # permissions du fichier profile.ini à l'user fi @@ -463,7 +482,7 @@ ffx_get_canalBas(){ # 18/12/2017 } # version en ligne et installée, affichage -ffx_get_version(){ # 09/03/2018 +ffx_get_version(){ # 07/06/2018 local recup_url ver_latest ver_esr ver_beta ver_nightly ii local verFfxInstall='' verFfxOnline='' pointeur fileTmp="/tmp/$script-getVersion_ffx" @@ -516,38 +535,40 @@ ffx_get_version(){ # 09/03/2018 fi done - [[ "$( xargs <<< "$verFfxInstall" )" ]] || verFfxInstall="Non installé" - [[ "$( xargs <<< "$verFfxOnline" )" ]] || verFfxOnline="${RED}n/a" - - echo -e "\n" + f__trim verFfxInstall + f__trim verFfxOnline + verFfxInstall=${verFfxInstall:="Non installé"} + verFfxOnline=${verFfxOnline:="${RED}n/a$STD"} + echo -e "\\n" f__info "raw" "$appli en place: $GREEN$verFfxInstall" f__info "$appli en ligne: $YELLOW$verFfxOnline" } # ascii art godzilla -ffx_godzilla(){ # 09/03/2018 +# shellcheck disable=SC1117 +ffx_godzilla(){ # 07/06/2018 echo -n "$RED" -cat << 'EOF' - _.-~-. - 7'' Q..\ - _7 (_ - _7 _/ _q. / - _7 . ___ /VVvv-'_ . - 7/ / /~- \_\\ '-._ .-' / // - ./ ( /-~-/||'=.__ '::. '-~'' { ___ / // ./{ - V V-~-~| || __''_ ':::. ''~-~.___.-'' _/ // / {_ / { / - VV/-~-~-|/ \ .'__'. '. ':: _ _ _ ''. - / /~~~~||VVV/ / \ ) \ _ __ ___ ___ ___(_) | | __ _ .::' - / (~-~-~\\.-' / \' \::::. | '_ ' _ \ / _ \_ / | | |/ _' | :::' - /..\ /..\__/ ' '::: | | | | | | (_) / /| | | | (_| | ::' - vVVv vVVv ': |_| |_| |_|\___/___|_|_|_|\__,_| '' -EOF + cat <<- end + _.-~-. + 7'' Q..\ + _7 (_ + _7 _/ _q. / + _7 . ___ /VVvv-'_ . + 7/ / /~- \_\\ '-._ .-' / // + ./ ( /-~-/||'=.__ '::. '-~'' { ___ / // ./{ + V V-~-~| || __''_ ':::. ''~-~.___.-'' _/ // / {_ / { / + VV/-~-~-|/ \ .'__'. '. ':: _ _ _ ''. + / /~~~~||VVV/ / \ ) \ _ __ ___ ___ ___(_) | | __ _ .::' + / (~-~-~\\.-' / \' \::::. | '_ ' _ \ / _ \_ / | | |/ _' | :::' + /..\ /..\__/ ' '::: | | | | | | (_) / /| | | | (_| | ::' + vVVv vVVv ': |_| |_| |_|\___/___|_|_|_|\__,_| '' + end echo "$STD" } # installation, $1 canal [$2='manuel', $3 archive] -ffx_install(){ # 09/03/2018 +ffx_install(){ # 07/06/2018 local fileTemp canal="$1" verArchive dirTemp="/tmp/$script-install_ffx" fileTemp="$dirTemp/flash_player_npapi-linux$(getconf LONG_BIT).tar.gz" @@ -604,9 +625,10 @@ ffx_install(){ # 09/03/2018 unlink "/usr/bin/firefox-$canal" &>/dev/null unlink "/usr/bin/firefox" &>/dev/null # lanceur dans /usr/bin + echo "#!/bin/sh" > "/usr/bin/firefox-$canal" { - echo "#!/bin/sh" echo + # shellcheck disable=SC1117 echo "echo \"\$@\" | grep -qE '\-P|\-\-ProfileManager' && exec $dirInstallFfx$canal/firefox -P || \\" echo " exec $dirInstallFfx$canal/firefox -P $canal \"\$@\"" } >> "/usr/bin/firefox-$canal" @@ -667,30 +689,39 @@ ffx_lanceur_desktop(){ # 09/03/2018 } # version personnalisation en ligne, [$1=quiet], assigne $perso_ffx_afaire -ffx_pers_get_version(){ # 09/03/2018 - local ii verEnPlace persEnPlace verPersOnline +ffx_pers_get_version(){ # 07/06/2018 + local ii verPersEnPlace persEnPlace verPersOnline x_ffx_pers_get_version=1 + if verPersOnline=$( wget -q --tries=2 --timeout=15 -o /dev/null -O - "$urlPersFfx/$userFfx" ) ; then + read -r <<< "$verPersOnline" # lecture 1ere ligne + verPersOnline=${REPLY,,} + verPersOnline=${verPersOnline#*v} + verPersOnline=${verPersOnline%\**} + else + f__wget_test "$urlPersFfx/$userFfx" # si erreur, test url + fi + for ii in $produit_all; do if [ -e "$dirProfilFfx/$ii/personnalisation" ]; then - verEnPlace=$( sed -n '2p' "$dirProfilFfx/$ii/personnalisation" ) - persEnPlace+="$ii: $verEnPlace " - fi - if ! verPersOnline=$( wget -q --tries=2 --timeout=15 -o /dev/null -O - "$urlPersFfx/$userFfx" | sed -En 's/\/\*v(.*)\*\//\1/p' ) ; then - f__wget_test "$urlPersFfx/$userFfx" - fi - if [ -z "$verPersOnline" ]; then - verPersOnline="${RED}non accessible" - fi - if [[ -e "$dirProfilFfx/$ii/personnalisation" && "$verEnPlace" != "$verPersOnline" ]]; then - perso_ffx_afaire="$ii " + verPersEnPlace=$( sed -n '2p' "$dirProfilFfx/$ii/personnalisation" ) + persEnPlace+="$ii: $verPersEnPlace " + if [ -z "$verPersOnline" ]; then + verPersOnline="${RED}non accessible$STD" # si quiet + continue + fi + 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 - [[ "$( xargs <<< "$persEnPlace" )" ]] || persEnPlace="Non installé" - [[ "$( xargs <<< "$verPersOnline" )" ]] || verPersOnline="${RED}n/a" - + persEnPlace=${persEnPlace:="Non installé"} + verPersOnline=${verPersOnline:="${RED}n/a$STD"} f__info "raw" "perso. $appli en place: $GREEN$persEnPlace" f__info "perso. $appli en ligne: $YELLOW$verPersOnline" } @@ -825,10 +856,8 @@ fscript_cronAnacron(){ # 07/03/2018 esac } - # [$1=quiet], assigne $ver_script_install, $ver_script_online, $script_a_jour=ok|KO -# shellcheck disable=SC2120 -# SC2120 function references arguments, but none are ever passed. (quiet) -fscript_get_version(){ # 06/03/2018 + # assigne $ver_script_install, $ver_script_online, $script_a_jour=ok|KO +fscript_get_version(){ # 07/06/2018 x_script_get_version=1 # version online @@ -845,7 +874,6 @@ fscript_get_version(){ # 06/03/2018 fi [ "$ver_script_online" ] || ver_script_online="${RED}n/a" [ "$ver_script_install" ] || ver_script_install="Non installé" - [ "$1" == "quiet" ] && return 0 f__info "raw" "script en place: $GREEN$ver_script_install" f__info "script en ligne: $YELLOW$ver_script_online" @@ -897,9 +925,7 @@ fscript_remove(){ # 24/02/2018 } # si upgrade en place, $1 != "", [$1 message info] -# shellcheck disable=SC2120 -# function references arguments, but none are ever passed. -fscript_update(){ # 09/03/2018 +fscript_update(){ # 07/06/2018 local dirTemp="/tmp/$script-maj" upgradeEnPlace="$1" type -t fscript_update_special &>/dev/null && fscript_update_special # test, si fonction spécifique, appel @@ -931,7 +957,7 @@ fscript_update(){ # 09/03/2018 rm -fr "$dirTemp" } -prg_init(){ # 09/03/2018 +prg_init(){ # 07/06/2018 PATH='/usr/sbin:/usr/bin:/sbin:/bin' TERM=xterm @@ -952,7 +978,7 @@ prg_init(){ # 09/03/2018 f__user retourFUser="$?" [ "$retourFUser" -eq 1 ] && f__error "user indéterminé" \ - "pour contourner, lancer le script avec:\n$GREEN USER_INSTALL= $0 \n" + "pour contourner, lancer le script avec:\\n$GREEN USER_INSTALL= $0 \\n" if [ "$retourFUser" -eq 2 ]; then if [ "$EUID" -eq 0 ]; then fu_user="root" @@ -988,33 +1014,38 @@ url_notice="https://framaclic.org/h/doc-getfirefox" # paramètres firefox appli="Firefox" dirInstallFfx="/opt/usr/share/firefox-" -dirProfilFfx="/home/$fu_user/.mozilla/firefox" # emplacement profiles.ini -produit_all="esr latest beta nightly" # tous les canaux sauf dev (=beta) -produit_all_inverse="nightly beta latest esr" # tous les canaux sauf dev (=beta) - # url chargement fichiers personnalisation, std ou spécifique, une seule url possible, arrêt à la première trouvée -for ii in $produit_all dev; do - if [ -e "$dirProfilFfx/$ii/personnalisation" ]; then - urlPersFfx=$( sed -n '1p' "$dirProfilFfx/$ii/personnalisation" ) - else - urlPersFfx="https://framagit.org/sdeb/getFirefox/raw/master/" +dirProfilFfx="/home/$fu_user/.mozilla/firefox" # emplacement profiles.ini +urlPersFfx="https://framagit.org/sdeb/getFirefox/raw/master" # url standard des personnalisations +userFfx="user.js" # nom du fichier user.js sur un dépôt distant +chromeFfx="userChrome.css" # nom du fichier userChrome.css sur un dépôt distant +produit_all="esr latest beta nightly" # tous les canaux sauf dev (=beta) +produit_all_inverse="nightly beta latest esr" # tous les canaux sauf dev (=beta) + + + # 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" ]; then + [ -z "$urlPersoEnPlace" ] && read -r urlPersoEnPlace < "$dirProfilFfx/$ii/personnalisation" # url 1er fichier + perso_ffx_enPlace+="$ii " fi - [ "$urlPersFfx" ] && break done -userFfx="user.js" # nom du fichier user.js sur un dépôt distant -chromeFfx="userChrome.css" # nom du fichier userChrome.css sur un dépôt distant +if [[ "$urlPersoEnPlace" =~ /kyodev/kyopages/ ]]; then # changement git distant + perso_ffx_afaire="$perso_ffx_enPlace" +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 + [ -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 options="-i" # option installation script fi -[ "$options" ] || options="-h" # vide help +[ "$options" ] || options="-h" # vide help (si fileDev) for j in $options; do # première passe options case $j in @@ -1025,10 +1056,12 @@ for j in $options; do # première passe options done options=${options//--sauve/ } - # shellcheck disable=SC2221,SC2222 for j in $options; do # deuxième passe options, actions case $j in + -t ) + ffx_pers_get_version + exit ;; -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"