From 31b17eed60fc53c53cdade0eb09eb3e7bb0dfd2e Mon Sep 17 00:00:00 2001 From: kyodev Date: Sat, 23 Dec 2017 09:53:52 +0100 Subject: [PATCH] getFirefox 4.0.0 --- docs/scripts/getFirefox.md | 516 +++----------- scripts/getFirefox | 1190 +++++++++++++------------------ scripts/getFirefox_changelog.md | 5 + 3 files changed, 611 insertions(+), 1100 deletions(-) diff --git a/docs/scripts/getFirefox.md b/docs/scripts/getFirefox.md index 818a256..4daad5c 100644 --- a/docs/scripts/getFirefox.md +++ b/docs/scripts/getFirefox.md @@ -1,26 +1,25 @@ # getFirefox > 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 **beta**, **nightly**, - _dev_ et _ESR_ + des différents canaux possibles: **latest** la release officielle, mais aussi **ESR** **beta**, **nightly**, + et _dev_. -> **Tor Browser** version stable est aussi pris en charge, basé sur la version Firefox ESR. les mises à jour de -Tor Browser sont gérées par lui-même - -> les mises à jour de Firefox sont gérées par celui-ci. +> 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) -> seul le script se mettra éventuellement à jour, sans influence sur les canaux Firefox installés +> le script se mettra éventuellement à jour, sans influence sur les canaux Firefox installés -> le script installe un canal Firefox pour l'user en cours, mais toutes les installations/désinstallations doivent -être faites avec les privilèges **root** +> le script installe un canal Firefox pour l'utilisateur en cours. +* les installations/désinstallations doivent être faites avec les privilèges **root** +* les opérations sur l'utilisateur, ou update du script peuvent être faites en utilisateur -> le script peut charger des fichiers de personnalisation et les mettre à jour périodiquement +> le script peut charger des fichiers de personnalisation et les mettra à jour périodiquement ## installation rapide du script -**en root**: +* privilèges **root** requis + ```shell wget -O getFirefox https://framagit.org/kyodev/kyopages/raw/master/scripts/getFirefox chmod +x getFirefox && ./getFirefox @@ -31,159 +30,79 @@ chmod +x getFirefox && ./getFirefox / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / | (_| | __/ |_| _| | | | | __/ _| (_) > < \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ - |___/ Tor Browser - version 3.12.0b - 4/12/2017 + |___/ + version 4.0.0 - 22/12/2017 - getFirefox 3.12.0 installé dans le système. + getFirefox 4.0.0 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. -* **Firefox ou Tor Browser ne sont pas encore installés** -* Sur Gnome, attention avant de [désinstaller le paquet _firefox_](https://kyodev.frama.io/kyopages/scripts/getFirefox/#gnome) -* si ce paquet devait être ré-installé, il semble préférable de désinstaller les canaux Firefox installés - auparavant. -* un canal Firefox peut maintenant être choisi et installé (`latest`,`beta`,`nightly`, `dev`, `esr`) +* **Firefox n'est pas encore installé** +* un canal Firefox peut maintenant être choisi et installé (`latest`, `esr`, `beta`, `nightly`, `dev`) ## installation d'un canal Firefox -`getFirefox i-canal` (canal _all_ possible) par exemple, pour la Release officielle, en **root**: ```shell -getFirefox i-latest +getFirefox i-canal ``` +* privilèges **root** requis +* `getFirefox p-canal` possible +* la version stable en cours de Firefox est nommée **latest** + ```text _ _____ _ __ __ _ ___| |_| ___(_)_ __ ___ / _| _____ __ / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / | (_| | __/ |_| _| | | | | __/ _| (_) > < \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ - |___/ Tor Browser - version 3.12.0 - 4/12/2017 + |___/ + version 4.0.0 - 22/12/2017 installation Firefox-latest - téléchargement... -/tmp/getFirefox-6701/firefox-latest.linux 100%[===============================>] 50,85M 2,02MB/s in 18s +/tmp/getFirefox-install-23584/firefox-nig 100%[===============================>] 57,26M 5,09MB/s in 13s - décompression... - installation... - - firefox lié à firefox-latest + Firefox latest est le canal par défaut du système - - récupération du profil default existant - - - alternatives installées pour - - Firefox-latest installé - - _.-~-. - 7'' Q..\ - _7 (_ - _7 _/ _q. / - _7 . ___ /VVvv-'_ . - 7/ / /~- \_\\ '-._ .-' / // - ./ ( /-~-/||'=.__ '::. '-~'' { ___ / // ./{ - V V-~-~| || __''_ ':::. ''~-~.___.-'' _/ // / {_ / { / - VV/-~-~-|/ \ .'__'. '. ':: _ _ _ ''. - / /~~~~||VVV/ / \ ) \ _ __ ___ ___ ___(_) | | __ _ .::' - / (~-~-~\\.-' / \' \::::. | '_ ' _ \ / _ \_ / | | |/ _' | :::' -/..\ /..\__/ ' '::: | | | | | | (_) / /| | | | (_| | ::' -vVVv vVVv ': |_| |_| |_|\___/___|_|_|_|\__,_| '' + Firefox-nightly installé ``` -* la dernière version officielle Firefox est installée, en étant directement chargée sur le site Mozilla +* la dernière version officielle du canal Firefox est installée, en étant directement chargée sur le site Mozilla * un lanceur par canal installé est placé dans les menus (Applications/Internet) * l'installation de Firefox sur un canal existant est refaite en **totalité**, mais **le profil n'est pas modifié** -* si un profil _123xyz.default_ (d'un paquet _firefox-esr_ par exemple) existe, il sera laissé en place, mais - une **copie** sera utilisée pour le profil latest (ou ESR). le passage d'une version paquet Debian à une - version Mozilla Release (ou ESR) utilisera donc une copie du profil en cours. l'éventuel profil default sera - utilisé pour la première installation d'un canal latest ou esr. les réinstallations ultérieures, si les profils - ne sont pas supprimés, n'utiliseront pas de profil défault détecté -* les canaux de Mozilla peuvent coexister avec les paquets Debian * chaque canal peut être lancé en console: `firefox-latest` `firefox-beta` `firefox-dev` `firefox-nightly` `firefox-esr` -* le plus bas canal installé peut lui être lancé avec: `firefox` -* si supporté par la distribution, update-alternatives est configuré pour le plus bas canal installé +* le dernier canal installé est configuré comme défaut dans le système, c'est-à-dire comme: + * cible de la commande `firefox` en console (en plus de firefox-canal) + * prioritaire dans update-alternatives (si supporté) +* pour chaque canal, une option permet basculer cette priorité sur le canal choisi +* les canaux par ordre croissant de versions: +` ESR <= release < beta = developer edition < nightly ` +* le canal **all** est fictif et comprend _esr+latest+beta+nightly_ pour l'installation (pas de _dev_ donc) +* le canal **all** comprend toutes les versions installées pour les autres opérations +* pour chaque canal, une option permet de **copier** un éventuel profil _.default_. + le profil default existant est laissé en place. -* la dernière version officielle de Tor Browser Stable est installée, en étant directement chargée sur le site - [torproject](https://www.torproject.org/projects/torbrowser.html.en) -* l'installation de Tor Browser sur une installation existante est refaite en **totalité**, **le profil - est effacé et recréé**. l'éventuelle personnalisation est à refaire -* Tor Browser peut être lancé en console: `tor-browser` -* Tor Browser n'est pas ajouté aux alternatives et n'est pas destiné à être utilisé comme navigateur par défaut - - -4 autres canaux sont possibles (en dehors de tor, projet indépendant): +4 autres canaux, en dehors de latest: * Beta, qui deviendra la future version Release - * Developer Edition, basée sur la beta avec des outils de développement web * Nightly, réservé aux aventuriers, mise à jour tous les jours [Mozilla Nightly](https://blog.nightly.mozilla.org/) * ESR, mise à jour majeure toutes les ans environ, avec support à plus long terme. en savoir plus [Mozilla ESR](https://developer.mozilla.org/fr/Firefox/Firefox_ESR) - * le _canal_ **all** peut être utilisé et regroupe: latest+beta+nightly + * Developer Edition, basée sur la beta (avec des outils de développement web?) -les canaux par ordre croissant de versions: -` ESR <= release < beta = developer edition < nightly ` - -la version **aurora** est abandonnée et la **developer edition** est basée sur la version beta - - -## messages avertissement - -
- -```text - l'installation du script est obsolète (-1-2-3) - veuillez réinstaller le script manuellement - voir https://kyodev.frama.io/kyopages/scripts/getFirefox/#messages-avertissement -``` -ce message indique qu'une installation obsolète a été détectée. -[Réinstaller ce script manuellement](#installation-rapide-du-script) -(pour avoir les droits **root**). - -* code erreur -1: une version de développement à laissé des droits inappropriés sur le script. une réinstallation - avec les droits **root** est nécessaire -* code erreur -2: le script s'appuie sur _rsyslog_ pas toujours disponible sur les systèmes. une réinstallation - avec les droits **root** est nécessaire pour utiliser un fichier de log spécifique (_/var/log/sdeb_getFirefox.log_) -* code erreur -3: le lanceur `/usr/bin/firefox` ne permet pas d'ouvrir le manager de profil de Firefox. - une réinstallation avec les droits **root** est nécessaire - -
- -```text - Ancien(s) répertoire(s) d'installation détecté(s) - Il faudrait réinstaller les version(s) détectée(s): - getFirefox i-beta - getFirefox i-latest - getFirefox i-nightly - voir: https://kyodev.frama.io/kyopages/scripts/getFirefox/#messages-avertissement -``` -* il serait mieux que Firefox soit installé dans un autre emplacement pour mieux se conformer au - [_Filesystem Hierarchy Standard_](https://wiki.debian.org/FilesystemHierarchyStandard) - pour cela, fermer les versions en cours d'exécution et réinstaller la ou les version(s) mal placée(s), - en **root**: -```shell -getFirefox i-latest -getFirefox i-beta -getFirefox i-nightly -``` -**le profil est conservé, rien ne sera perdu** - -
- - -## désinstallation paquet officiel - -en **root**: -```shell -apt remove firefox* -``` ## help @@ -197,37 +116,36 @@ getFirefox -h / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / | (_| | __/ |_| _| | | | | __/ _| (_) > < \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ - |___/ Tor Browser - version 3.12.0 - 4/12/2017 + |___/ + version 4.0.0 - 22/12/2017 ---------------------------------------------------------------------- - canaux possibles: latest, beta, nightly, dev, esr, tor - = latest, beta, nightly + canaux possibles: latest, beta, nightly, dev, esr + = tous les canaux exemple, installation version Release (latest): getFirefox i-latest - installation version latest, beta, nightly: getFirefox i-all - installation Tor Browser: getFirefox i-tor - - getFirefox i-canal : installation de Firefox ( possible) - getFirefox r-canal : désinstallation de Firefox ( possible) - getFirefox u-canal : ajouter ou configurer un profil firefox pour l'utilisateur en cours - getFirefox d-canal : copier un profil default existant sur ( possible) - - getFirefox m-canal : installation sur le d'une archive téléchargée manuellement - getFirefox p-canal : personnalisation sur le de user.js & userChrome.css ( possible) - getFirefox pu : mise à jour (des) personnalisation(s) installée(s) Firefox et Tor Browser - getFirefox pr-canal : suppression personnalisation sur le de user.js & userChrome.css ( possible) - - getFirefox version : version(s) installée(s) et en ligne des différents canaux Firefox - Tor Browser, version script et personnalisation - ---------------------------------------------------------------------- - ./getFirefox : installation du script dans le système - getFirefox -h, --help : affichage aide - getFirefox -r, --remove, sysremove : désinstallation du script du système - getFirefox -u, --upgrade, upgrade : mise à jour du script - getFirefox -v, --version : versions du script + + getFirefox i-canal : installation de Firefox (root) + + getFirefox d-canal : copier un profil .default existant sur + getFirefox m-canal : installation sur le d'une archive téléchargée manuellement (root) + getFirefox r-canal : désinstallation (remove) de Firefox (root) + getFirefox s-canal : canal comme défaut du système (update-alternatives & commande firefox) (root) + getFirefox u-canal : ajouter un profil pour l'utilisateur en cours + + getFirefox p-canal : personnalisation sur le de user.js & userChrome.css + getFirefox pr-canal : suppression des personnalisations (remove) sur le + getFirefox pu : mise à jour des personnalisations (update) installées + + getFirefox version : versions installées et en ligne ---------------------------------------------------------------------- + ./getFirefox (ou ./getFirefox -i) : installation du script dans le système (root) + getFirefox -h, --help : affichage aide + getFirefox -r, --remove : désinstallation du script du système (root) + getFirefox -u, --upgrade : mise à jour du script + getFirefox -v, --version : versions du script + plus d'infos: https://kyodev.frama.io/kyopages/scripts/getFirefox/ ``` @@ -244,36 +162,24 @@ getFirefox version / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / | (_| | __/ |_| _| | | | | __/ _| (_) > < \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ - |___/ Tor Browser - version 3.12.0b - 4/12/2017 + |___/ + version 4.0.0 - 22/12/2017 - .....+++++ - versions Firefox en ligne : latest : 57.0.1 esr : 52.5.0 beta : 58.0b8 nightly: 59.0a1 - versions Firefox installées: latest : 56.0.2 beta : 56.0 nightly: 57.0a1 + script en place: 4.0.0 + script en ligne: 3.16.0 - version script en cours: 3.12.0b - version script en ligne: 3.12.0, mise à jour possible + .....++++ - personnalisations installées pour latest(v0.6) beta(v0.6) nightly(v0.6) - version personnalisation en ligne: 0.6, pas de mise à jour à faire + Firefox en place: esr : 52.5.2 latest : 56.0.2 beta : 56.0 nightly: 59.0a1 + Firefox en ligne: esr : 52.5.2 latest : 57.0.2 beta : 58.0b12 nightly: 59.0a1 - version Tor Browser installé: 7.0.5 -- September 2 2017 - version Tor Browser en ligne: 7.0.10 - - personnalisation Tor Browser installée 0.2 - version personnalisation Tor Browser en ligne: 0.2, pas de mise à jour à faire + perso. Firefox en place : esr: 0.6 latest: 0.6 beta: 0.6 nightly: 0.6 + perso. Firefox en ligne : 0.6 ``` -* affiche les versions Firefox installées et les versions en ligne -* affiche la version installée du script et la version en ligne du script, avec mise à jour possible éventuelle -* affiche les personnalisations installées ainsi que la version en ligne, avec mise à jour possible éventuelle -* affiche la version Tor Browser stable installée et la version en ligne -* affiche la personnalisation installée pour Tor Browser ainsi que la version en ligne, avec mise à jour - possible éventuelle - -## mise à jour Firefox & Tor Browser +## mise à jour Firefox * Firefox gère ses mise à jour et le script permet cet automatisme. * cette mise à jour se fait en tâche de fond et est disponible au prochain démarrage de Firefox @@ -283,115 +189,53 @@ getFirefox version la version nightly, figée, descend en beta * la nightly est mise à jour quotidiennement, voir plus * si Firefox n'est pas utilisé, il ne se met pas à jour -* Tor Browser gère ses mise à jour et le script permet cet automatisme. ## profil default, copie -dupliquer un profil 123xyz.default existant sur un canal choisi (au lieu de latest ou esr lors de l'installation). -`getFirefox d-canal` (canal _all_ possible) par exemple, pour la version beta: - ```shell -getFirefox d-beta +getFirefox d-canal ``` -```text - _ _____ _ __ - __ _ ___| |_| ___(_)_ __ ___ / _| _____ __ - / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / - | (_| | __/ |_| _| | | | | __/ _| (_) > < - \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ - |___/ Tor Browser - version 3.12.0 - 4/12/2017 - copie d'un profil default sur beta - - copie du profil default sur beta - -``` +* `getFirefox d-all` possible +* duplique un éventuel profil .default existant (paquet distribution par exemple) sur un canal choisi. ## nouvel utilisateur ou reconfiguration profil -ajouter un profil d'un canal Firefox installé pour un nouvel utilisateur en cours ou configurer un canal pour -l'utilisateur en cours - -`getFirefox u-canal` par exemple, pour la version beta: - ```shell -getFirefox u-beta -``` -```text - _ _____ _ __ - __ _ ___| |_| ___(_)_ __ ___ / _| _____ __ - / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / - | (_| | __/ |_| _| | | | | __/ _| (_) > < - \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ - |___/ Tor Browser - version 3.12.0 - 4/12/2017 - - profil configuré pour kyodev - +getFirefox u-canal ``` -* il faut que canal Firefox soit déjà installé +* `getFirefox d-all` possible +* ajoute un profil pour un canal Firefox **installé** * évite de télécharger inutilement une nouvelle fois pour un nouvel utilisateur: - * changer de session en se connectant sous un nouvel utilisateur - * utiliser l'option `u-latest` `u-beta` `u-nightly` `u-esr` `u-dev` selon ce qui est installé - -sans changer de session, on peut utiliser, pour un utilisateur titi et un canal beta, par exemple: -```shell -USER_INSTALL=titi getFirefox u-beta -``` -**attention**: il faut que l'utilisateur souhaité ait déjà un _home/_ - -il n'y a pas de notion d'utilisateur pour Tor Browser, c'est une application _portable_, pouvant être utilisée -par plusieurs utilisateurs, mais le profil est unique et destiné à une navigation privée +* ajout à l'utilisateur en cours +* ajout pour un autre utilisateur, titi pas exemple: `USER_INSTALL=titi getFirefox u-beta` -## personnalisation - -`getFirefox p-canal` (canal _all_ possible) par exemple, pour la version nightly: +## personnalisation (installation) ```shell -getFirefox p-nightly -``` -```text - _ _____ _ __ - __ _ ___| |_| ___(_)_ __ ___ / _| _____ __ - / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / - | (_| | __/ |_| _| | | | | __/ _| (_) > < - \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ - |___/ Tor Browser - version 3.12.0 - 4/12/2017 - - personnalisation 0.6 mise en place pour nightly - +getFirefox p-canal ``` +* `getFirefox p-canal` possible * _user.js_ est ajouté dans le profil du canal souhaité -* _userChrome.css_ est ajouté dans le profil du canal souhaité (ou les canaux "all": latest, beta, nightly), - sous-répertoire _chrome/_ -* le _canal **all** peut être utilisé et correspond à: latest+beta+nightly +* _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 +* 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) * dans chaque canal concerné, la configuration se trouve trouve dans le fichier: - `/home/user/.mozilla/firefox/canalFirefox/personnalisation.getFirefox` + `/home/user/.mozilla/firefox/canal/personnalisation` * 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 le(s) fichier(s) - `personnalisation.getFirefox` -* pour Tor Browser: - * userTor.js est stocké en ligne, mais installé comme user.js, c'est une version expurgée de celle destinée - à Firefox, pour ne pas interférer avec les préférences spécifiques à Tor Browser - * userChrome.css est commun à celui destiné à Firefox, mais l'url de chargement peut être personnalisée - * le profil de Tor Browser est situé dans - `/opt/usr/share/tor-browser/Browser/TorBrowser/Data/Browser/profile.default` +* 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 [userTor.js](https://framagit.org/kyodev/kyopages/blob/master/scripts/userTor.js) ## personnalisation (upgrade) @@ -399,157 +243,62 @@ getFirefox p-nightly ```shell getFirefox pu ``` -```text - _ _____ _ __ - __ _ ___| |_| ___(_)_ __ ___ / _| _____ __ - / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / - | (_| | __/ |_| _| | | | | __/ _| (_) > < - \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ - |___/ Tor Browser - version 3.12.0 - 4/12/2017 - - personnalisation(s) installée(s) pour latest beta nightly - version personnalisation en ligne: 0.6, pas de mise à jour à faire - - personnalisation Tor Browser installée 0.2 - version personnalisation Tor Browser en ligne: 0.2, pas de mise à jour à faire - -``` +* `getFirefox p-canal` possible * cette tâche est exécutée périodiquement par cron/anachron et n'a pas vraiment vocation à être lancée manuellement +* toutes les personnalisations installées sont mise à jour ## personnalisation (suppression) -`getFirefox pr-canal` (canal _all_ possible) par exemple, pour la version beta: +```shell +getFirefox pr-canal +``` + +* `getFirefox p-canal` possible + + +## désinstallation d'un canal Firefox ```shell -getFirefox pr-beta -``` -```text - _ _____ _ __ - __ _ ___| |_| ___(_)_ __ ___ / _| _____ __ - / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / - | (_| | __/ |_| _| | | | | __/ _| (_) > < - \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ - |___/ Tor Browser - version 3.12.0 - 4/12/2017 - - personnalisation pour Firefox nightly désinstallé - -``` - - -## désinstallation d'un canal Firefox ou Tor Browser - -`getFirefox r-canal` (canal _all_ possible) par exemple, pour la version nightly, en **root**: - -```shell -getFirefox r-nightly -``` -```text - _ _____ _ __ - __ _ ___| |_| ___(_)_ __ ___ / _| _____ __ - / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / - | (_| | __/ |_| _| | | | | __/ _| (_) > < - \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ - |___/ Tor Browser - version 3.12.0 - 4/12/2017 - - - firefox lié à firefox-latest - - - alternatives installées pour - - Firefox-nightly désinstallé, mais le profil est toujours en place - le supprimer manuellement si nécessaire, pour cela: - fermer toutes les instances ouvertes de firefox - et lancer en console, en user: firefox -P - - _.-~-. - 7'' Q..\ - _7 (_ - _7 _/ _q. / - _7 . ___ /VVvv-'_ . - 7/ / /~- \_\\ '-._ .-' / // - ./ ( /-~-/||'=.__ '::. '-~'' { ___ / // ./{ - V V-~-~| || __''_ ':::. ''~-~.___.-'' _/ // / {_ / { / - VV/-~-~-|/ \ .'__'. '. ':: _ _ _ ''. - / /~~~~||VVV/ / \ ) \ _ __ ___ ___ ___(_) | | __ _ .::' - / (~-~-~\\.-' / \' \::::. | '_ ' _ \ / _ \_ / | | |/ _' | :::' -/..\ /..\__/ ' '::: | | | | | | (_) / /| | | | (_| | ::' -vVVv vVVv ': |_| |_| |_|\___/___|_|_|_|\__,_| '' - +getFirefox r-canal ``` +* privilèges **root** requis +* `getFirefox p-canal` possible * le profil pour firefox **n'est pas supprimé**, il sera donc utilisable en cas de réinstallation * si firefox-canal est ouvert il sera fermé -* update-alternatives, si supporté, reste configuré sur le plus bas canal installé -* firefox sera aussi configuré pour le plus bas canal installé -* le **profil** de Tor Browser étant dans la hiérarchie du programme, il **est complètement effacé** +* update-alternatives, si supporté, sera configuré sur le plus bas canal installé +* la commande en console `firefox` sera aussi configurée pour le plus bas canal installé ## installation manuelle d'une archive -installer une archive téléchargée manuellement -`getThunderbird m-canal` par exemple, pour la Release officielle, en **root**: ```shell -getFirefox m-nightly firefox-57.0a1.fr.linux-i686.tar.bz2 +getFirefox m-canal firefox-VERSION.fr.linux-ARCHITECTURE.tar.bz2 ``` -```text - _ _____ _ __ - __ _ ___| |_| ___(_)_ __ ___ / _| _____ __ - / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / - | (_| | __/ |_| _| | | | | __/ _| (_) > < - \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ - |___/ Tor Browser - version 3.12.0 - 4/12/2017 - installation manuelle dans nightly de firefox version 57.0a1.fr (firefox-57.0a1.fr.linux-i686.tar.bz2) - - - décompression... - - - installation... - - - firefox lié à firefox-latest - - - alternatives installées pour - - archive Firefox-nightly 57.0a1.fr installée - - _.-~-. - 7'' Q..\ - _7 (_ - _7 _/ _q. / - _7 . ___ /VVvv-'_ . - 7/ / /~- \_\\ '-._ .-' / // - ./ ( /-~-/||'=.__ '::. '-~'' { ___ / // ./{ - V V-~-~| || __''_ ':::. ''~-~.___.-'' _/ // / {_ / { / - VV/-~-~-|/ \ .'__'. '. ':: _ _ _ ''. - / /~~~~||VVV/ / \ ) \ _ __ ___ ___ ___(_) | | __ _ .::' - / (~-~-~\\.-' / \' \::::. | '_ ' _ \ / _ \_ / | | |/ _' | :::' -/..\ /..\__/ ' '::: | | | | | | (_) / /| | | | (_| | ::' -vVVv vVVv ': |_| |_| |_|\___/___|_|_|_|\__,_| '' - -``` +* privilèges **root** requis +* installe une archive téléchargée manuellement ## suppression d'un profil Firefox -**FERMER toutes les instances ouvertes** - -**en user**, lancer en terminal le profil manager de Firefox: `firefox -P` : - +* **FERMER toutes les instances ouvertes** du canal +* **en user**, lancer en terminal le profil manager de Firefox: `firefox -P` : * sélectionner le profil souhaité * cliquer sur _supprimer un profil_ * _supprimer les fichiers_, cela supprimera aussi le répertoire `~/.mozilla/firefox/profilSélectionné` le profil est **définitivement** détruit * quitter + ### suppression manuelle de tous les profils si plus aucun canal de Firefox n'est installé, qu'il n'y a plus de profil manager disponible, et que vous êtes certains de vouloir supprimer tous les profils en place, en **user**: + ```shell rm -rf ~/.mozilla/firefox/ ``` @@ -560,68 +309,35 @@ rm -rf ~/.mozilla/firefox/ ```shell getFirefox -u ``` -```text - _ _____ _ __ - __ _ ___| |_| ___(_)_ __ ___ / _| _____ __ - / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / - | (_| | __/ |_| _| | | | | __/ _| (_) > < - \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ - |___/ Tor Browser - version 3.0.0b - 01/09/2017 - - version script en cours: 3.0.0b - version script en ligne: 3.0.0, mise à jour possible - - getFirefox mis à jour en version 3.0.0 - - personnalisation(s) installée(s) pour latest beta nightly - version personnalisation en ligne: 0.3, pas de mise à jour à faire - - personnalisation Tor Browser installée 0.1 - version personnalisation Tor Browser en ligne: 0.1, pas de mise à jour à faire -``` * test toutes les **semaines** * mise à jour du **script** si une nouvelle version est disponible en ligne. cela n'influe pas sur les - canaux Firefox installés -* pas de nouvelle version: pas de téléchargement + canaux Firefox installés. * cette tâche est exécutée périodiquement par cron/anachron et n'a pas vraiment vocation à ê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 * si une **personnalisation** est mise en place, une mise à jour possible sera elle aussi testée, pour tous les canaux concernés -## vérification +## logs tous les évènements importants sont consignées dans le fichier _/var/log/sdeb_getFirefox.log_ consulter son contenu: ```shell -cat /var/log/sdeb_getFirefox.log +pager /var/log/sdeb_getFirefox.log ``` ## supprimer le script -en **root**: ```shell getFirefox -r ``` -```text - _ _____ _ __ - __ _ ___| |_| ___(_)_ __ ___ / _| _____ __ - / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / - | (_| | __/ |_| _| | | | | __/ _| (_) > < - \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ - |___/ Tor Browser - version 3.12.0 - 4/12/2017 - - getFirefox 3.12.0 supprimé du système. - -``` +* privilèges **root** requis * effacement du script dans le système (_/opt/bin_) * effacement de l'inscription dans crontab/anacron utilisateur -* cela ne **supprime pas** Tor Browser ou les éventuels canaux Firefox installés +* cela ne **supprime pas** les éventuels canaux Firefox installés ## sources diff --git a/scripts/getFirefox b/scripts/getFirefox index c7f0f24..a403430 100755 --- a/scripts/getFirefox +++ b/scripts/getFirefox @@ -1,7 +1,7 @@ #!/bin/bash -version=3.16.0 -date="21/12/2017" +version=4.0.0 +date="22/12/2017" projet="simpledeb" contact="IRC freenode ##sdeb ou https://framagit.org/kyodev/kyopages/issues/" script="getFirefox" @@ -34,19 +34,19 @@ f__architecture(){ # 14/12/2017 SPÉCIFIQUE esac } - # test validité archive, $1 archive, assigne $archive_detect (gzip|xz|deb|zip), return 1 si inconnue -f__archive_test(){ # 30/08/2017 - local filetest="$(file -b $1)" +f__archive_test(){ # 19/12/2017 + local 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" - if [ ! "$archive_detect" ] || [ "$archive_detect" == "empty" ]; then return 1; fi + [[ -z "$archive_detect" || "$archive_detect" == "empty" ]] && return 1 || return 0 # laisser return 0 final sinon erreur, toujours return 1?!! } f__color(){ # 08/10/2017 + YELLOW=$(tput setaf 3) # question GREEN=$(tput setaf 2) # ok BLUE=$(tput setaf 4) # info @@ -59,8 +59,8 @@ f__color(){ # 08/10/2017 SOUL=$(tput smul) } - # affichage $1 en rouge, $1++ optionnels en bleu, sortie script sur erreur, log $1 si $opType=upgrade -f__error(){ # 4/12/2017 + # affichage $1 en rouge, $1++ optionnels en bleu, sortie script sur erreur, log $1 si $operation=upgrade +f__error(){ # 18/12/2017 local depart=1 i echo -e "\n$RED $script $version, erreur critique: $1 $STD" @@ -68,15 +68,15 @@ f__error(){ # 4/12/2017 echo -e " $BLUE${!i}$STD" done echo - if [ "$opType" == "upgrade" ]; then f__log "$script $version: $1"; fi + [ "$operation" == "upgrade" ] && f__log "$script $version: $1" exit 1 } # affichage des paramètres en bleu, si $1=raw pas de ligne vide à la fin, si $1=log alors uniquement $2 logué -f__info(){ # 15/10/2017 +f__info(){ # 18/12/2017 local depart=1 i - if [ "$1" == "raw" ] || [ "$1" == "log" ]; then depart=2; fi + [[ "$1" == "raw" || "$1" == "log" ]] && depart=2 [ "$1" == "log" ] && f__log "$(sed -E 's/\\t//;s/\\n// ' <<< $2 | xargs )" for (( i=$depart ; i<=$# ; i++ )); do echo -e " $BLUE${!i}$STD" @@ -86,11 +86,12 @@ f__info(){ # 15/10/2017 # log spécifique, fichier log limité à 10000 octets, $1 message à loguer f__log(){ # 4/12/2017 - if [ -w "$scriptLogs" ]; then - if [ "$(stat -c %s $scriptLogs)" -ge "10000" ]; then - echo "$(date +%Y%m%d\ %H%M%S) $1" &>/dev/null > "$scriptLogs" + + if [ -w "$script_logs" ]; 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 >> "$scriptLogs" + echo "$(date +%Y%m%d\ %H%M%S) $1" &>/dev/null >> "$script_logs" fi fi } @@ -135,10 +136,10 @@ f__requis(){ # 4/12/2017 } # $1=cmd si $2: nb de tentatives pour s'identifier, sinon 2 tentatives par défaut, suppose bash existant -f__sudo(){ # 4/12/2017 +f__sudo(){ # 18/12/2017 local nb=2 sudo isudo toBash - [ $( type -p bash 2>/dev/null ) ] && toBash="$( type -p bash )" || return 2 + 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 " @@ -201,10 +202,9 @@ f__user(){ # 3/12/2017 # 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(){ # 11/12/2017 - local file_test_wget retourWget retourHttp location +f__wget_test(){ # 21/12/2017 + local file_test_wget="/tmp/testWget-$$-$RANDOM" retourWget retourHttp location - file_test_wget="/tmp/testWget-$$-$RANDOM" wget -Sq --timeout=5 --tries=2 --user-agent="$user_agent" --spider --save-headers "$1" &>"$file_test_wget" retourWget="$?" [ "$retourWget" == 1 ] && retourWget="1: code erreur générique" @@ -220,12 +220,12 @@ f__wget_test(){ # 11/12/2017 if [ "$2" == "test" ]; then rm "$file_test_wget" 2>/dev/null # spécial maintenance frama.link, pas de redirection sur page status framalink - [ "$( grep -c '303' <<< $retourHttp )" -ne 0 ] && return 1 # 303 See Other + grep -q '303' <<< $retourHttp && return 1 # 303 See Other [ "$retourWget" == "0" ] && return 0 || return 1 fi if [ "$2" == "print" ]; then if [ "$retourWget" != "0" ]; then - echo "erreur wget: $RED$retourWget" + echo "erreur wget: erreur $RED$retourWget" echo -e "$BLUE $1$STD\t$RED $retourHttp" else echo -e "$BLUE $1$STD\t$GREEN $retourHttp" @@ -240,19 +240,19 @@ f__wget_test(){ # 11/12/2017 fi if [ "$retourWget" != "0" ]; then rm "$file_test_wget" 2>/dev/null - f__error "wget, $retourWget" "$1" "$YELLOW$retourHttp" "$location" + 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 return 1 fi - if [ "$(grep -c '200' <<< $retourHttp)" -ne 0 ]; then + if grep -q '200' <<< $retourHttp; then echo -e "$GREEN\ntout est ok, réessayer$STD\n" fi rm "$file_test_wget" 2>/dev/null exit 0 } -f_affichage(){ # 4/12/2017 - f__color +f_affichage(){ # 22/12/2017 + clear echo -n "$BLUE" cat << 'EOF' @@ -261,307 +261,137 @@ cat << 'EOF' / _' |/ _ \ __| |_ | | '__/ _ \ |_ / _ \ \/ / | (_| | __/ |_| _| | | | | __/ _| (_) > < \__, |\___|\__|_| |_|_| \___|_| \___/_/\_\ - |___/ Tor Browser + |___/ EOF echo -e "$YELLOW version $version - $date$STD\n" } # affichage help -f_help(){ # 4/12/2017 - echo -n $BLUE -cat << 'EOF' - ---------------------------------------------------------------------- - canaux possibles: latest, beta, nightly, dev, esr, tor - = latest, beta, nightly - - exemple, installation version Release (latest): getFirefox i-latest - installation version latest, beta, nightly: getFirefox i-all - installation Tor Browser: getFirefox i-tor +f_help(){ # 20/12/2017 + local ih 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 Firefox $RED(root)$STD" + " " + " $BLUE$script d-$STD$GREEN""canal$STD : copier un profil $RED"".d$STD""efault existant sur " + " $BLUE$script m-$STD$GREEN""canal$STD : installation sur le d'une archive téléchargée $RED""m$STD""anuellement $RED(root)$STD" + " $BLUE$script r-$STD$GREEN""canal$STD : désinstallation ($RED""r$STD""emove) de Firefox $RED(root)$STD" + " $BLUE$script s-$STD$GREEN""canal$STD : canal comme défaut du $RED""s$STD""ystème (update-alternatives & commande$BLUE firefox$STD) $RED(root)$STD" + " $BLUE$script u-$STD$GREEN""canal$STD : ajouter un profil pour l'$RED""u$STD""tilisateur en cours" + " " + " $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 du système $RED(root)$STD" + " $BLUE$script -u$STD, --upgrade : mise à jour du script" + " $BLUE$script -v$STD, --version : versions du script" + ) - getFirefox i-canal : installation de Firefox ( possible) - getFirefox r-canal : désinstallation de Firefox ( possible) - getFirefox u-canal : ajouter ou configurer un profil firefox pour l'utilisateur en cours - getFirefox d-canal : copier un profil default existant sur ( possible) - - getFirefox m-canal : installation sur le d'une archive téléchargée manuellement - getFirefox p-canal : personnalisation sur le de user.js & userChrome.css ( possible) - getFirefox pu : mise à jour (des) personnalisation(s) installée(s) Firefox et Tor Browser - getFirefox pr-canal : suppression personnalisation sur le de user.js & userChrome.css ( possible) - - getFirefox version : version(s) installée(s) et en ligne des différents canaux Firefox - Tor Browser, version script et personnalisation - ---------------------------------------------------------------------- - ./getFirefox : installation du script dans le système - getFirefox -h, --help : affichage aide - getFirefox -r, --remove, sysremove : désinstallation du script du système - getFirefox -u, --upgrade, upgrade : mise à jour du script - getFirefox -v, --version : versions du script -EOF - echo -e "\n$STD plus d'infos: $GREEN$urlNotice\n$STD" -} - - # assigne $verTorOnline -f_tor_get_version(){ # 5/12/2017 - local fileTmp recup_urlTb verTorInstall - - # version online - fileTmp="/tmp/getFirefox-wgetVer-$RANDOM" - recup_urlTb="https://www.torproject.org/projects/torbrowser.html.en" - wget -q --tries=2 --timeout=15 --user-agent="$user_agent" -O - "$recup_urlTb" &>"$fileTmp" - verTorOnline="$(sed -En 's/^.*torbrowser\/([0-9.]*)\/.*_fr\.tar\.xz.*$/\1/p' $fileTmp | sed -n '1p')" - rm "$fileTmp" - [ "$verTorOnline" ] || verTorOnline="$RED""NA" - # version installée - if [ -e "$dirInstallTB/Browser/TorBrowser/Docs/ChangeLog.txt" ]; then - verTorInstall="$(sed -n '1p' $dirInstallTB/Browser/TorBrowser/Docs/ChangeLog.txt | sed -En 's/^Tor Browser (.*)$/\1/p')" - fi - [ "$verTorInstall" ] || verTorInstall="$GREEN""Non Installé" - f__info "raw" "version Tor Browser en place: $GREEN$verTorInstall" - f__info "version Tor Browser en ligne: $YELLOW$verTorOnline" -} - - # installation TorBrowser, [$1 manuel, $2 archive] -f_tor_install(){ # 18/12/2017 - local dirTemp archi fileTemp recup_urlTb verArchive fileDesktop - - [ "$EUID" -eq 0 ] || f__error "vous devez être ROOT pour installer Tor Browser" - [ "$verTorOnline" ] || f_tor_get_version - if [ "$1" == "manuel" ]; then - verArchive="$(sed -En 's/.*tor-browser-linux[0-9]{2}-(.*)\.tar\.xz.*$/\1/p' <<< $(basename $2))" - f__info "installation manuelle de Tor Browser version $verArchive ($2)" - dirTemp="$(dirname $2)/$script-$RANDOM" - fileTemp=$( dirname $2 )/$( basename $2 ) - mkdir -p "$dirTemp" - else - f__info "installation de Tor Browser" - dirTemp="/tmp/$script-$RANDOM" - [ "$fu_archi" == "linux" ] && archi="linux32" || archi="$fu_archi" - fileTemp="$dirTemp/tor-browser-$archi-$verTorOnline""_fr.tar.xz" - mkdir -p "$dirTemp" - # téléchargement & test archive - f__info " - téléchargement..." - recup_urlTb="https://www.torproject.org/dist/torbrowser/$verTorOnline/tor-browser-$archi-$verTorOnline""_fr.tar.xz" - wget -q -c --show-progress --tries=2 --timeout=15 --user-agent="$user_agent" -O "$fileTemp" "$recup_urlTb" 2>&1 - if [ "$?" != "0" ]; then f__wget_test "$recup_urlTb"; fi - f__archive_test "$fileTemp" || f__error "Le fichier $fileTemp n'est pas une archive tar.gz valide" - echo - fi - # décompression archive téléchargée dans dossier de travail - f__info " - décompression..." - tar -xaf "$fileTemp" -C "$dirTemp/" - # mise en place finale - f__info " - installation..." - rm -rf "$dirInstallTB"/ # effacement éventuel répertoire existant - mkdir -p "$dirInstallTB" - mv -f "$dirTemp/tor-browser_fr/"* "$dirInstallTB/" - chown -R "$fu_user:" "$dirInstallTB/" - chmod -R g+wrs,a+r "$dirInstallTB/" - rm -rf "$dirTemp/" - f_tor_lanceur_desktop - fileDesktop="/usr/share/applications/tor-browser.desktop" - # lien dans /usr/bin - ln -sf "$fileDesktop" "/usr/bin/tor-browser" - # lien icône - ln -sf "$dirInstallTB/Browser/browser/chrome/icons/default/default48.png" "/usr/share/pixmaps/tor-browser.png" - if [ "$1" == "manuel" ]; then - f__info "log" "archive Tor Browser $verArchive installée" - else - f__info "log" "Tor Browser installé $verTorOnline" - fi -} - - # installation Tor Browser chargé manuellement, $1 fichier archive -f_tor_install_manuel(){ # 31/08/2017 - [ -e "$1" ] || f__error "fichier $1 introuvable" - f__archive_test "$1" || f__error "Le fichier $1 n'est pas une archive valide" - f_tor_install "manuel" "$1" - [ -e "$fileDev" ] || rm "$1" &>/dev/null ## on efface pas si fileDev (dev) -} - - # création lanceur.desktop pour tor-browser -f_tor_lanceur_desktop(){ # 4/12/2017 - local fileDesktop="/usr/share/applications/tor-browser.desktop" - - echo "[Desktop Entry]" >> "$fileDesktop" - echo "Name=Tor Browser" >> "$fileDesktop" - echo "X-GNOME-FullName=Tor Browser" >> "$fileDesktop" - echo "StartupWMClass=Tor Browser" >> "$fileDesktop" - echo "Exec=$dirInstallTB/Browser/start-tor-browser --detach" >> "$fileDesktop" - echo "X-TorBrowser-ExecShell=$dirInstallTB/Browser/start-tor-browser --detach" >> "$fileDesktop" - echo "Icon=$dirInstallTB/Browser/browser/chrome/icons/default/default48.png" >> "$fileDesktop" - echo "Comment=Tor Browser is +1 for privacy and -1 for mass surveillance" >> "$fileDesktop" - echo "Comment[fr]=Tor Browser 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" - chown "$fu_user:" "$fileDesktop" - chmod +x "$fileDesktop" -} - - # version personnalisation Tor Browser en ligne, assigne $persTbATraiter -f_tor_pers_get_version(){ # 5/12/2017 - local urlPersTb versPersTbOnline verPersTbInstall - - if [ -e "$profilTor/personnalisation.$script" ]; then - urlPersTb="$(sed -n '1p' $profilTor/personnalisation.$script)" - else - urlPersTb="https://framagit.org/kyodev/kyopages/raw/master/scripts/" - fi - versPersTbOnline="$(wget -q --tries=2 --timeout=15 -O - $urlPersTb'userTor.js' | sed -En 's/\/\*v(.*)\*\//\1/p')" - if [ "$versPersTbOnline" ]; then - if [ -e "$profilTor/personnalisation.$script" ]; then - verPersTbInstall="$(sed -n '2p' $profilTor/personnalisation.$script)" - [ "$verPersTbInstall" != "$versPersTbOnline" ] && persTbATraiter="true" - fi - [ "$verPersTbInstall" ] && f__info "raw" "version personnalisation Tor Browser en place: $GREEN$verPersTbInstall" - if [ "$persTbATraiter" ]; then - f__info "version personnalisation Tor Browser en ligne: $YELLOW$versPersTbOnline, mise à jour possible" - else - f__info "version personnalisation Tor Browser en ligne: $YELLOW$versPersTbOnline, pas de mise à jour à faire" - fi - else f__info "personnalisation Tor Browser en ligne $REDnon accessible"; fi -} - - # recup userTor.js et chrome/userChrome.css pour Tor Browser -f_tor_pers_install(){ # 4/12/2017 - local urlPersTb verPersTbDL dirTemp - - if [ ! -d "$profilTor/" ]; then - f__info "Tor Browser inexistant" - return 1 - fi - # détermination url chargement fichiers personnalisation, std ou spécifique dans personnalisation.getFirefox - if [ -e "$profilTor/personnalisation.$script" ]; then - urlPersTb="$(sed -n '1p' $profilTor/personnalisation.$script)" - else - urlPersTb="https://framagit.org/kyodev/kyopages/raw/master/scripts/" - fi - # chargement fichiers personnalisation - dirTemp="/tmp/$script-$RANDOM" - mkdir -p "$dirTemp" - wget -q --tries=2 --timeout=15 -O "$dirTemp/user.js" "$urlPersTb"userTor.js - if [ "$?" != "0" ]; then f__wget_test "$urlPersTb"userTor.js; fi - verPersTbDL="$(sed -En 's/\/\*v(.*)\*\//\1/p' $dirTemp/user.js)" # uniquement sur user.js - wget -q --tries=1 --timeout=15 -O "$dirTemp/userChrome.css" "$urlPers"userChrome.css - # installation - if [ -d "$profilTor/chrome/" ] && [ "$(stat -c %U $profilTor/chrome/)" == "root" ] && [ "$EUID" -ne 0 ]; then - f__error "root propriétaire sur $profilTor/chrome/" "bug version de développement" \ - "$GREEN""réinstaller la personnalisation avec les privilèges root pour corriger" - fi - mkdir -p "$profilTor/chrome" # répertoire pour userChrome.css - chown "$fu_user:" "$profilTor/chrome/" - if [ -e "$profilTor/user.js" ] && [ "$(stat -c %U $profilTor/user.js)" == "root" ] && [ "$EUID" -ne 0 ]; then - f__error "root propriétaire de $profilTor/user.js" "bug version de développement" \ - "$GREEN""réinstaller la personnalisation avec les privilèges root pour corriger" - fi - cp "$dirTemp/user.js" "$profilTor" - chown "$fu_user:" "$profilTor/user.js" - if [ -e "$profilTor/chrome/userChrome.css" ] && \ - [ "$(stat -c %U $profilTor/chrome/userChrome.css)" == "root" ] && [ "$EUID" -ne 0 ]; then - f__error "root propriétaire de $profilTor/chrome/userChrome.css" "bug version de développement" \ - "$GREEN""réinstaller la personnalisation avec les privilèges root pour corriger" - fi - if [ -e "$dirTemp/userChrome.css" ]; then - cp "$dirTemp/userChrome.css" "$profilTor/chrome/" - chown "$fu_user:" "$profilTor/chrome/userChrome.css" - fi - echo "$urlPersTb" > "$profilTor/personnalisation.$script" - echo "$verPersTbDL" >> "$profilTor/personnalisation.$script" - chown "$fu_user:" "$profilTor/personnalisation.$script" - rm -rf "$dirTemp/" - f__info "log" "personnalisation $verPersTbDL mise en place pour Tor Browser" -} - - # supprime personnalisation pour Tor Browser -f_tor_pers_remove(){ # 06/09/2017 - # "$profilTor/chrome/" volontairement laissé si autres fichiers ajoutés - rm "$profilTor/user.js" "$profilTor/personnalisation.$script" - rm "$profilTor/chrome/userChrome.css" - f__info "log" "personnalisation Tor Browser désinstallé" -} - - # maj userTor.js et chrome/userChrome.css pour Tor Browser -f_tor_pers_upgrade(){ # 06/09/2017 - f_tor_pers_get_version - if [ "$persTbATraiter" ]; then - f_tor_pers_install - fi -} - - # désinstallation de Tor Browser -f_tor_remove(){ # 08/09/2017 - local fileDesktop="/usr/share/applications/tor-browser.desktop" - - [ "$EUID" -eq 0 ] || f__error "vous devez être ROOT pour désinstaller Tor Browser" - if [ ! -d "$dirInstallTB/" ]; then - f__info "$GREEN""Tor Browser n'est pas installé." - return 0 - fi - # suppression lien dans /usr/bin - unlink "/usr/bin/tor-browser" &>/dev/null - # suppression lien icône - unlink "/usr/share/pixmaps/tor-browser.png" &>/dev/null - # supression .desktop - rm "$fileDesktop" - # suppression du répertoire Tor Browser - rm -rf "$dirInstallTB/" - f__info "log" "Tor Browser désinstallé" +# echo -n "$BLUE" + IFS=$'\n' + for ih in ${help[@]}; do + echo -e "$ih" + done + IFS="$$IFS_INI" + echo -e "\n$STD plus d'infos: $YELLOW$url_notice\n$STD" } # copie du répertoire défault dans canal, $1=canal -ffx_default(){ # 4/12/2017 +ffx_copie_default(){ # 22/12/2017 local canal="$1" profileDefault - f__info "copie d'un profil default sur $canal" - [ -d "$dirProfil/$canal" ] || mkdir -p "$dirProfil/$canal" # répertoire du profil - # recherche éventuel profil 123wxyz.default dans profile.ini - profileDefault="$(sed -En 's/Path=(.*\.default).*$/\1/p' $fileProfileIni)" - # si profileDefault existant, on l'utilise pour canal - if [ "$profileDefault" ] && [ -d "$dirProfil/$profileDefault" ]; then - cp -R "$dirProfil/$profileDefault"/* "$dirProfil/$canal/" - chown -R "$fu_user:" "$dirProfil/$canal/" # propriété du répertoire profil à l'user - chmod g-rx,o-rx "$dirProfil/$canal/" # droits répertoire - f__info "copie du profil default <$profileDefault> sur $canal" - else - f__info "pas de profil default existant, opération abandonnée" + if [ ! -d "$dirProfilFfx/$canal" ]; then + f__info "$appli $canal n'a pas de profil et ne peut donc pas recevoir .default" + return 1 fi + profileDefault=$( sed -En 's/Path=(.*\.default).*$/\1/p' "$dirProfilFfx/profiles.ini" ) # recherche profil .default dans profile.ini + if [ -z "$profileDefault" ] || [ ! -d "$dirProfilFfx/$profileDefault" ]; then + f__info "pas de profil .default existant, opération abandonnée" + return 1 + fi + + f__info "copie du profil default <$profileDefault> sur $canal" + cp -R "$dirProfilFfx/$profileDefault/"* "$dirProfilFfx/$canal/" + chown -R "$fu_user:" "$dirProfilFfx/$canal/" # propriété du répertoire profil à l'user + chmod g-rx,o-rx "$dirProfilFfx/$canal/" # droits répertoire } - # détermination canal bas Firefox installé, assigne $firefoxCanalBas -ffx_get_canalBas(){ # 4/12/2017 - for ii in nightly dev beta esr latest; do - if [ -d "$dirInstall$ii/" ]; then firefoxCanalBas="$ii"; fi + # lien /usr/bin/firefox & alternatives, $1 canal +ffx_defaut_system(){ # 22/12/2017 + local canal="$1" appli="Firefox" + + if [ "$EUID" -ne 0 ]; then + f__info "vous devez être$RED ROOT$BLUE pour configurer $canal comme défaut dans le système" + f__sudo "exec $0 s-$canal" + return $? + fi + if [ ! -d "$dirInstallFfx$canal" ]; then + f__info "$appli $canal n'est pas installé" + return 1 + fi + if [ ! -d "$dirProfilFfx/$canal" ]; then # mise en place profil si inexistant, équivalent option u- + ffx_profil_user "$canal" + fi + + unlink "/usr/bin/firefox" &>/dev/null + ln -sf "/usr/bin/firefox-$canal" "/usr/bin/firefox" + # 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' /usr/bin/firefox-$canal 100 # nouvelle alternative + update-alternatives --quiet --install $( type -p gnome-www-browser 2>/dev/null ) 'gnome-www-browser' /usr/bin/firefox-$canal 100 # nouvelle alternative + update-alternatives --quiet --set 'x-www-browser' /usr/bin/firefox-$canal # si le priorité n'est pas suffisante + update-alternatives --quiet --set 'gnome-www-browser' /usr/bin/firefox-$canal # si le priorité n'est pas suffisante + fi + f__info "$appli $canal est le canal par défaut du système" +} + + # détermination canal bas installé, assigne $ffx_canal_bas +ffx_get_canalBas(){ # 18/12/2017 + local ii + + for ii in $produit_all_inverse; do + [ -d "$dirInstallFfx$ii/" ] && ffx_canal_bas="$ii" done - [ "$firefoxCanalBas" ] || return 1 + [ "$ffx_canal_bas" ] && return || return 1 } - # version Firefox en ligne -ffx_get_version(){ # 5/12/2017 - local fileTmp recup_url ver_latest ver_esr ver_beta ver_nightly verFFxInstall='' - local verFFxOnline='' compteur=0 compteur2=0 pointeur pluriel + # version en ligne et installée, affichage, [$1=quiet] +ffx_get_version(){ # 21/12/2017 + local fileTmp="/tmp/$script-getVersion-$RANDOM" recup_url ver_latest ver_esr ver_beta ver_nightly ii + local verFFxInstall='' verFFxOnline='' pointeur appli="Firefox" + x_get_version=1 echo -n " ." - fileTmp="/tmp/getFirefox-wgetVer-$RANDOM" + #recup url # version latest & esr recup_url="https://www.mozilla.org/en-US/firefox/notes/" wget -q --tries=2 --timeout=15 --user-agent="$user_agent" -O - "$recup_url" &>"$fileTmp" - ver_latest="$(grep -Eos 'data-latest-firefox="[0-9\.]+"' $fileTmp | grep -Eo '[0-9\.]+')" + [ "$?" -ne 0 ] && f__wget_test "$recup_url" + ver_latest=$( grep -Eos 'data-latest-firefox="[0-9\.]+"' $fileTmp | grep -Eo '[0-9\.]+' ) echo -n "." - ver_esr="$(grep -Eos 'data-esr-versions="[0-9\.]+"' $fileTmp | grep -Eo '[0-9\.]+')" + ver_esr=$( grep -Eos 'data-esr-versions="[0-9\.]+"' $fileTmp | grep -Eo '[0-9\.]+' ) echo -n "." # version beta recup_url="https://download.mozilla.org/?product=firefox-beta-latest&os=linux64&lang=fr" wget -Sq --tries=1 --timeout=10 --user-agent="$user_agent" --spider --save-headers "$recup_url" &>"$fileTmp" - ver_beta="$(grep -is 'location' $fileTmp | sed -E 's/.*firefox-(.*)\.tar.bz2/\1/')" + [ "$?" -ne 0 ] && f__wget_test "$recup_url" + ver_beta=$( grep -is 'location' $fileTmp | sed -E 's/.*firefox-(.*)\.tar.bz2/\1/' ) echo -n "." # version nightly recup_url="https://download.mozilla.org/?product=firefox-nightly-latest-l10n-ssl&os=linux64&lang=fr" wget -Sq --tries=1 --timeout=10 --user-agent="$user_agent" --spider --save-headers "$recup_url" &>"$fileTmp" - ver_nightly="$(grep -is 'location' $fileTmp | sed -E 's/.*firefox-(.*)\.fr.linux.*/\1/')" + [ "$?" -ne 0 ] && f__wget_test "$recup_url" + ver_nightly=$( grep -is 'location' $fileTmp | sed -E 's/.*firefox-(.*)\.fr.linux.*/\1/' ) echo -n "." rm "$fileTmp" 2>/dev/null @@ -570,34 +400,35 @@ ffx_get_version(){ # 5/12/2017 [ "$ver_beta" ] || ver_beta="$RED""n/a" [ "$ver_nightly" ] || ver_nightly="$RED""n/a" - for ii in latest esr beta nightly dev; do + for ii in $produit_all; do echo -n "+" # versions en ligne [ "$ii" == "dev" ] && continue pointeur="ver_$ii" - verFFxOnline+="$YELLOW$( printf "%-7s: %-10s" $ii ${!pointeur} )" + verFFxOnline+=$( printf "%-7s: %-10s" $ii ${!pointeur} ) [[ "${!pointeur}" != "$RED""n/a" ]] && (( compteur++ )) + # versions installées - if [ -x "$dirInstall$ii/firefox" ]; then - verFFxInstall+="$( printf "%-7s: %-10s" $ii $( $dirInstall$ii/firefox -v | grep -Eo '[0-9].*' ) )" + if [ -x "$dirInstallFfx$ii/firefox" ]; then + verFFxInstall+=$( printf "%-7s: %-10s" $ii $( $dirInstallFfx$ii/firefox -v | grep -Eo '[0-9].*' ) ) (( compteur2++ )) else - verFFxInstall+="$( printf " %.s" $(seq 19) )" + verFFxInstall+=$( printf " %.s" $(seq 19) ) fi done - [ "$compteur" -gt 1 ] && pluriel="s" || unset pluriel - verFFxOnline="version"$pluriel" Firefox en ligne: $verFFxOnline" - [ "$( xargs <<< $verFFxInstall )" ] || verFFxInstall="aucune" - [ "$compteur2" -gt 1 ] && pluriel="s" || unset pluriel - verFFxInstall="version"$pluriel" Firefox en place: $GREEN$verFFxInstall" + verFFxOnline="$appli en ligne: $YELLOW$verFFxOnline" + [ "$( xargs <<< $verFFxInstall )" ] || verFFxInstall="Non installé" + verFFxInstall="$appli en place: $GREEN$verFFxInstall" + [ "$1" == "quiet" ] && return 0 - echo + echo -e "\n" f__info "raw" "$verFFxInstall" f__info "$verFFxOnline" } - # ascii art godzilla; ligne vide finale + # ascii art godzilla ffx_godzilla(){ # 5/12/2017 + echo -n "$RED" cat << 'EOF' _.-~-. @@ -617,322 +448,281 @@ EOF echo "$STD" } - # installation Firefox, $1 produit, $2 manuel, $3 archive -ffx_install(){ # 18/12/2017 - [ "$EUID" -eq 0 ] || f__error "vous devez être ROOT pour installer Firefox" - local verArchive dirTemp fileTemp produit="$1" + # installation, $1 canal [$2='manuel', $3 archive] +ffx_install(){ # 22/12/2017 + local dirTemp fileTemp canal="$1" appli="Firefox" verArchive + + if [ "$EUID" -ne 0 ]; then + f__info "vous devez être$RED ROOT$BLUE pour installer $appli $canal dans le système" + f__sudo "exec $0 i-$canal" + return $? + fi if [ "$2" == "manuel" ]; then - verArchive="$(sed -E 's/.*firefox-(.*)\.linux.*$/\1/' <<< $(basename $3))" - f__info "installation manuelle dans $produit de firefox version $verArchive ($3)" - dirTemp="$(dirname $3)/$script-$RANDOM" - fileTemp=$( dirname $3 )/$( basename $3 ) - mkdir -p "$dirTemp" + verArchive=$( sed -E 's/.*firefox-(.*)\.linux.*$/\1/' <<< $(basename $3) ) + f__info "installation manuelle dans $canal de $appli version $verArchive ($( basename $3 ))" + dirTemp==$( dirname $3 )"/$script-$RANDOM" + fileTemp="$3" + mkdir -p "$dirTemp" else - f__info "installation Firefox-$produit" - dirTemp="/tmp/$script-$RANDOM" - fileTemp="$dirTemp/firefox-$produit.$fu_archi.tar.bz2" + f__info "installation $appli-$canal" + dirTemp="/tmp/$script-install-$RANDOM" + fileTemp="$dirTemp/firefox-$canal.$fu_archi.tar.bz2" mkdir -p "$dirTemp" # téléchargement & test archive f__info " - téléchargement..." - ffx_recup_url + # url téléchargement + if [ "$canal" == "latest" ]; then + recup_url="https://download.mozilla.org/?product=firefox-$canal&os=$fu_archi&lang=fr" + elif [ "$canal" == "esr" ] || [ "$canal" == "beta" ]; then + recup_url="https://download.mozilla.org/?product=firefox-$canal-latest&os=$fu_archi&lang=fr" + elif [ "$canal" == "dev" ]; then + recup_url="https://download.mozilla.org/?product=firefox-$canal""edition-latest-ssl&os=$fu_archi&lang=fr" + elif [ "$canal" == "nightly" ]; then + recup_url="https://download.mozilla.org/?product=firefox-$canal-latest-l10n-ssl&os=$fu_archi&lang=fr" + fi wget -q -c --show-progress --tries=2 --timeout=15 --user-agent="$user_agent" -O "$fileTemp" "$recup_url" - if [ "$?" != "0" ]; then f__wget_test "$recup_url"; fi - f__archive_test "$fileTemp" || f__error "Le fichier $fileTemp n'est pas une archive tar.bz2 valide" - echo + [ "$?" -ne 0 ] && f__wget_test "$recup_url" fi + f__archive_test "$fileTemp" || f__error "Le fichier $fileTemp n'est pas une archive tar.gz valide" + echo # décompression archive téléchargée dans dossier de travail f__info " - décompression..." tar -xaf "$fileTemp" -C "$dirTemp/" + # mise en place finale f__info " - installation..." - rm -rf "/opt/firefox-$produit/" # effacement ancien répertoire éventuel - rm -rf "$dirInstall$produit"/ # effacement éventuel répertoire existant: "vraie" install - mkdir -p "$dirInstall$produit" - mv -f "$dirTemp/firefox/"* "$dirInstall$produit/" - chown -R "$fu_user:" "$dirInstall$produit/" - chmod -R g+wrs,a+r "$dirInstall$produit/" + rm -rf "/opt/firefox-$canal/" # effacement ancien répertoire éventuel + rm -rf "$dirInstallFfx$canal"/ # effacement éventuel répertoire existant + mkdir -p "$dirInstallFfx$canal" + mv -f "$dirTemp/firefox/"* "$dirInstallFfx$canal/" + chown -R "$fu_user:" "$dirInstallFfx$canal/" + chmod -R g+wrs,a+r "$dirInstallFfx$canal/" rm -rf "$dirTemp/" - # lien icône Firefox - ln -sf "$dirInstall$produit/browser/chrome/icons/default/default48.png" "/usr/share/pixmaps/firefox-$produit.png" -# # gestion liens lanceurs paquet debian éventuels -#[ -h "/usr/bin/firefox-esr" ] && unlink "/usr/bin/firefox-esr" -#[ -h "/usr/bin/firefox" ] && unlink "/usr/bin/firefox" - [ -h "/usr/bin/firefox-$produit" ] && unlink "/usr/bin/firefox-$produit" - # lanceur dans /usr/bin - echo '#!/bin/sh' > "/usr/bin/firefox-$produit" - echo >> "/usr/bin/firefox-$produit" - echo 'echo "$@"'" | grep -qE '\-P|\-\-ProfileManager' && exec $dirInstall$produit/firefox -P || \\" >> "/usr/bin/firefox-$produit" - echo " exec $dirInstall$produit/firefox -P $produit "'$@' >> "/usr/bin/firefox-$produit" - echo >> "/usr/bin/firefox-$produit" - chmod a+x "/usr/bin/firefox-$produit" - ffx_usr_bin - # traitement user - ffx_profil_user + + # traitement finaux système + ln -sf "$dirInstallFfx$canal/browser/chrome/icons/default/default48.png" "/usr/share/pixmaps/firefox-$canal.png" + ffx_lanceur_desktop "$canal" + # liens lanceurs + unlink "/usr/bin/firefox-$canal" &>/dev/null # lien éventuel paquet debian + unlink "/usr/bin/firefox" &>/dev/null + # lanceur /usr/bin + echo "#!/bin/sh" > "/usr/bin/firefox-$canal" + echo >> "/usr/bin/firefox-$canal" + echo "echo \"\$@\" | grep -qE '\-P|\-\-ProfileManager' && exec $dirInstallFfx$canal/firefox -P || \\" >> "/usr/bin/firefox-$canal" + echo " exec $dirInstallFfx$canal/firefox -P $canal \"\$@\"" >> "/usr/bin/firefox-$canal" + chmod a+x "/usr/bin/firefox-$canal" + # lien /usr/bin & alternatives + ffx_defaut_system "$canal" + # finalisation utilisateur + ffx_profil_user "$canal" + if [ "$2" == "manuel" ]; then - f__info "log" "archive Firefox-$produit $verArchive installée" + f__info "log" "archive $appli-$canal $verArchive installée" else - f__info "log" "Firefox-$produit installé" + f__info "log" "$appli-$canal installé" fi ffx_godzilla } - # installation d'un FF chargé manuellement, $1 produit, $2 fichier archive -ffx_install_manuel(){ # 30/08/2017 - [ -e "$2" ] || f__error "fichier $2 introuvable" - f__archive_test "$2" || f__error "Le fichier $2 n'est pas une archive valide" + # installation d'une archive manuelle, $1=canal, $2=archive +ffx_install_manuel(){ # 18/12/2017 + + [ -e "$2" ] || f__error "fichier archive $2 introuvable" ffx_install "$1" "manuel" "$2" [ -e "$fileDev" ] || rm "$2" &>/dev/null ## on efface pas si fileDev (dev) } - # création lanceur.desktop -ffx_lanceur_desktop(){ # 22/09/2017 - local fileDesktop="/usr/share/applications/firefox-$produit.desktop" + # création lanceur.desktop, $1=canal +ffx_lanceur_desktop(){ # 18/12/2017 + local fileDesktop="/usr/share/applications/firefox-$1.desktop" canal="$1" appli="Firefox" - echo "[Desktop Entry]" >> "$fileDesktop" - echo "Name=Firefox $produit" >> "$fileDesktop" - echo "Name[fr]=Firefox $produit" >> "$fileDesktop" - echo "X-GNOME-FullName=Firefox-$produit Web Browser" >> "$fileDesktop" - echo "X-GNOME-FullName[fr]=Firefox-$produit Navigateur Web" >> "$fileDesktop" - echo "StartupWMClass=Firefox-$produit" >> "$fileDesktop" - echo "Exec=/usr/bin/firefox-$produit %u" >> "$fileDesktop" - echo "Icon=$dirInstall$produit/browser/icons/mozicon128.png" >> "$fileDesktop" - 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 "[Desktop Entry]" > "$fileDesktop" + echo "Name=$appli $canal" >> "$fileDesktop" + echo "Name[fr]=$appli $canal" >> "$fileDesktop" + echo "X-GNOME-FullName=$appli-$canal Web Browser" >> "$fileDesktop" + echo "X-GNOME-FullName[fr]=$appli-$canal Navigateur Web" >> "$fileDesktop" + echo "StartupWMClass=$appli-$canal" >> "$fileDesktop" + echo "Exec=$dirInstallFfx$canal/firefox %u" >> "$fileDesktop" + echo "Icon=$dirInstallFfx$canal/browser/chrome/icons/default/default128.png" >> "$fileDesktop" + 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/vnd.mozilla.xul+xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https;" >> "$fileDesktop" - echo "StartupNotify=true" >> "$fileDesktop" + echo "StartupNotify=true" >> "$fileDesktop" } - # version personnalisation en ligne, assigne $prodATraiter -ffx_pers_get_version(){ # 5/12/2017 - local urlPers verPersOnline verPersInstall persEnPlace pluriel + # version personnalisation en ligne, [$1=quiet], assigne $perso_ffx_afaire +ffx_pers_get_version(){ # 21/12/2017 + local ii verEnPlace persEnPlace verPersOnline appli="Firefox" - for ii in latest esr beta dev nightly; do - if [ -e "$dirProfil/$ii/personnalisation.$script" ]; then - urlPers="$(sed -n '1p' $dirProfil/$ii/personnalisation.$script)" - else - urlPers="https://framagit.org/kyodev/kyopages/raw/master/scripts/" + x_ffx_pers_get_version=1 + for ii in $produit_all; do + if [ -e "$dirProfilFfx/$ii/personnalisation" ]; then + verEnPlace=$( sed -n '2p' $dirProfilFfx/$ii/personnalisation ) + persEnPlace+="$ii: $verEnPlace " + fi + verPersOnline=$( wget -q --tries=2 --timeout=15 -O - "$urlPersFfx/$userFfx" | sed -En 's/\/\*v(.*)\*\//\1/p' ) + [ "$?" -ne 0 ] && f__wget_test "$urlPersFfx/$userFfx" + if [ -z "$verPersOnline" ]; then + verPersOnline="$RED""non accessible" + fi + if [[ -e "$dirProfilFfx/$ii/personnalisation" && "$verEnPlace" != "$verPersOnline" ]]; then + perso_ffx_afaire="$ii " fi - verPersOnline="$(wget -q --tries=2 --timeout=15 -O - $urlPers'user.js' | sed -En 's/\/\*v(.*)\*\//\1/p')" - if [ "$verPersOnline" ]; then - if [ -e "$dirProfil/$ii/personnalisation.$script" ]; then - verPersInstall="$(sed -n '2p' $dirProfil/$ii/personnalisation.$script)" - if [ "$verPersInstall" != "$verPersOnline" ]; then prodATraiter+="$ii "; fi - persEnPlace+="$ii:v$verPersInstall " - fi - else f__info "version personnalisation en ligne $REDnon accessible"; fi done - [ "$( grep -o ' ' <<< $persEnPlace | grep -c . )" -gt 1 ] && pluriel="s" || unset pluriel - [ "$persEnPlace" ] && f__info "raw" "version$pluriel personnalisation en place $GREEN$persEnPlace" - if [ "$prodATraiter" ]; then - f__info "version personnalisation en ligne : $YELLOW$verPersOnline, mise à jour possible pour $prodATraiter" - else - f__info "version personnalisation en ligne : $YELLOW$verPersOnline, pas de mise à jour à faire" + + [ "$1" == "quiet" ] && return 0 + if [ "$persEnPlace" ]; then + f__info "raw" "perso. $appli en place : $GREEN$persEnPlace" + else + f__info "raw" "perso. $appli en place :$GREEN Non installé" fi + f__info "perso. $appli en ligne : $YELLOW$verPersOnline" } # recup user.js et chrome/userChrome.css, $1=canal à personnaliser ou mettre à jour -ffx_pers_install(){ # 4/12/2017 - local canal="$1" urlPers verPersDL dirTemp +ffx_pers_install(){ # 22/12/2017 + local dirTemp="/tmp/$script-pers-$RANDOM" verPersDL canal="$1" appli="Firefox" - if [ ! -d "$dirProfil/$canal" ]; then - f__info "firefox $canal inexistant" - return - fi - # détermination url chargement fichiers personnalisation, std ou spécifique dans personnalisation.getFirefox - if [ -e "$dirProfil/$canal/personnalisation.$script" ]; then - urlPers="$(sed -n '1p' $dirProfil/$canal/personnalisation.$script)" - else - urlPers="https://framagit.org/kyodev/kyopages/raw/master/scripts/" + if [ ! -d "$dirProfilFfx/$canal" ]; then + f__info "profil $appli $canal inexistant" + return 1 fi # chargement fichiers personnalisation - dirTemp="/tmp/$script-$RANDOM" mkdir -p "$dirTemp" - wget -q --tries=2 --timeout=15 -O "$dirTemp/user.js" "$urlPers"user.js - if [ "$?" != "0" ]; then f__wget_test "$urlPers"user.js; fi - verPersDL="$(sed -En 's/\/\*v(.*)\*\//\1/p' $dirTemp/user.js)" # uniquement sur user.js - wget -q --tries=1 --timeout=15 -O "$dirTemp/userChrome.css" "$urlPers"userChrome.css + wget -q --tries=2 --timeout=15 -O "$dirTemp/user.js" "$urlPersFfx/$userFfx" + [ "$?" -ne 0 ] && f__wget_test "$$urlPersFfx/$userFfx" + verPersDL=$( sed -En 's/\/\*v(.*)\*\//\1/p' $dirTemp/user.js ) # version uniquement sur user.js + wget -q --tries=1 --timeout=15 -O "$dirTemp/userChrome.css" "$urlPersFfx/$chromeFfx" + [ "$?" -ne 0 ] && f__wget_test "$urlPersFfx/$chromeFfx" # installation - if [ -d "$dirProfil/$canal/chrome/" ] && [ "$(stat -c %U $dirProfil/$canal/chrome/)" == "root" ] && [ "$EUID" -ne 0 ]; then - f__error "root propriétaire sur $dirProfil/$canal/chrome/" "bug version de développement" \ - "$GREEN""réinstaller la personnalisation avec les privilèges root pour corriger" + mkdir -p "$dirProfilFfx/$canal/chrome" # répertoire pour userChrome.css + chown "$fu_user:" "$dirProfilFfx/$canal/chrome" + cp "$dirTemp/user.js" "$dirProfilFfx/$canal/" + chown "$fu_user:" "$dirProfilFfx/$canal/user.js" + if [ -e "$dirTemp/userChrome.css" ]; then + "$dirTemp/userChrome.css" "$dirProfilFfx/$canal/chrome" + chown "$fu_user:" "$dirProfilFfx/$canal/chrome/userChrome.css" fi - mkdir -p "$dirProfil/$canal/chrome" # répertoire pour userChrome.css - chown "$fu_user:" "$dirProfil/$canal/chrome" - if [ -e "$dirProfil/$canal/user.js" ] && [ "$(stat -c %U "$dirProfil/$canal/user.js")" == "root" ] && [ "$EUID" -ne 0 ]; then - f__error "root propriétaire de $dirProfil/$canal/user.js" "bug version de développement" \ - "$GREEN""réinstaller la personnalisation avec les privilèges root pour corriger" - fi - cp "$dirTemp/user.js" "$dirProfil/$canal/" - chown "$fu_user:" "$dirProfil/$canal/user.js" - if [ -e "$dirProfil/$canal/chrome/userChrome.css" ] && \ - [ "$(stat -c %U "$dirProfil/$canal/chrome/userChrome.css")" == "root" ] && [ "$EUID" -ne 0 ]; then - f__error "root propriétaire de $dirProfil/$canal/chrome/userChrome.css" "bug version de développement" \ - "$GREEN""réinstaller la personnalisation avec les privilèges root pour corriger" - fi - [ -e "$dirTemp/userChrome.css" ] && cp "$dirTemp/userChrome.css" "$dirProfil/$canal/chrome" - chown "$fu_user:" "$dirProfil/$canal/chrome/userChrome.css" - echo "$urlPers" > "$dirProfil/$canal/personnalisation.$script" - echo "$verPersDL" >> "$dirProfil/$canal/personnalisation.$script" - chown "$fu_user:" "$dirProfil/$canal/personnalisation.$script" + echo "$urlPersFfx" > "$dirProfilFfx/$canal/personnalisation" + echo "$verPersDL" >> "$dirProfilFfx/$canal/personnalisation" + chown "$fu_user:" "$dirProfilFfx/$canal/personnalisation" rm -rf "$dirTemp/" - f__info "log" "personnalisation $verPersDL mise en place pour $canal" + + f__info "log" "personnalisation $verPersDL mise en place pour $appli $canal" } # supprime une personnalisation pour un canal, $1=canal à traiter -ffx_pers_remove(){ # 02/09/2017 - local canal="$1" +ffx_pers_remove(){ # 21/12/2017 + local canal="$1" appli="Firefox" - # "$dirProfil/$canal/chrome/" répertoire laissé en place si autres fichiers - rm "$dirProfil/$canal/user.js" "$dirProfil/$canal/personnalisation.$script" - rm "$dirProfil/$canal/chrome/userChrome.css" - f__info "log" "personnalisation pour Firefox $canal désinstallé" + if [ ! -e "$dirProfilFfx/$canal/personnalisation" ]; then + f__info "personnalisation inexistante pour $appli" + return 0 + fi + rm "$dirProfilFfx/$canal/personnalisation" 2>/dev/null + rm "$dirProfilFfx/$canal/user.js" 2>/dev/null + rm "$dirProfilFfx/$canal/chrome/userChrome.css" 2>/dev/null + + f__info "log" "personnalisation pour $canal désinstallée" # /chrome répertoire laissé en place si autres fichiers } - # maj user.js et chrome/userChrome.css -ffx_pers_upgrade(){ # 4/12/2017 - ffx_pers_get_version - if [ "$prodATraiter" ]; then - for ii in $prodATraiter; do + # maj user.js et chrome/userChrome.css, requiert $perso_ffx_afaire +ffx_pers_upgrade(){ # 21/12/2017 + local ii + + (( x_ffx_pers_get_version == 1 )) || ffx_pers_get_version "quiet" + if [ "$perso_ffx_afaire" ]; then + for ii in $perso_ffx_afaire; do ffx_pers_install "$ii" done fi } - # traitement utilisateur, $1=user si appel indépendant pour reconfiguration -ffx_profil_user(){ # 4/12/2017 - local profileDefault nbProfiles + # traitement utilisateur, $1=canal, [$2='user'] si appel indépendant pour reconfiguration +ffx_profil_user(){ # 22/12/2017 + local nbProfiles canal="$1" appli="Firefox" - if [ "$1" == "user" ] && [ ! -x "/usr/bin/firefox-$produit" ]; then - f__error "firefox <$produit> n'est pas installé" " il faut donc utiliser l'installation et pas l'ajout d'un nouveau profil" + if [ ! -d "$dirInstallFfx$canal" ] && [ "$2" == "user" ]; then + f__info "$appli $canal n'est pas installé" + return 1 fi - if [ -w "$fileProfileIni" ]; then # si profile.ini existe et rw, on traite default - # recherche éventuel profil 123wxyz.default dans profile.ini - profileDefault="$(sed -En 's/Path=(.*\.default).*$/\1/p' $fileProfileIni)" - # si profileDefault existant, on l'utilise pour latest (ou esr) si pas déjà présent - if [ "$profileDefault" ] && [ -d "$dirProfil/$profileDefault" ] && [ "$produit" == "latest" ] || [ "$produit" == "esr" ]; then - if [ ! -d "$dirProfil/$produit" ]; then # le profil cible n'existe pas sinon on écrase pas avec default - f__info " - récupération du profil default existant <$profileDefault>" - mkdir -p "$dirProfil/$produit" - cp -R "$dirProfil/$profileDefault"/* "$dirProfil/$produit/" - fi - fi - else # sinon on crée profile.ini avec minimum d'entête (première installation Firefox) - echo -e "[General]\nStartWithLastProfile=1\n\n" >> "$fileProfileIni" - chown "$fu_user:" "$fileProfileIni" # propriété du fichier profile.ini à l'user - chmod u+rw,go+r "$fileProfileIni" # permissions du fichier profile.ini à l'user + + if [ ! -e "$dirProfilFfx/profiles.ini" ]; then # si profile.ini inexistant, on crée profile.ini avec entête minimum + 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 - mkdir -p "$dirProfil/$produit" # répertoire du profil - chown -R "$fu_user:" "$dirProfil/$produit/" # propriété du répertoire profil à l'user - chmod g-rx,o-rx "$dirProfil/$produit/" # droits répertoire comme Firefox officiel - ## inscription dans profil.ini - # si profil pas déjà existant dans profil.ini - if [ "$(grep -c Name=$produit $fileProfileIni)" == 0 ]; then + if [ ! -d "$dirProfilFfx/$canal" ] ; then # création répertoire cible si existant, test si réinstallation + mkdir -p "$dirProfilFfx/$canal" # répertoire du répertoire profil + chown -R "$fu_user:" "$dirProfilFfx/$canal/" # propriété du répertoire profil à l'user + chmod g-rx,o-rx "$dirProfilFfx/$canal/" # droits répertoire + fi + # inscription dans profil.ini, si profil inexistant dans profil.ini + if ! grep -q "Name=$canal" "$dirProfilFfx/profiles.ini" ; then # comptage profils existants - nbProfiles="$(grep -Ec '\[Profile[0-9]+\]' $fileProfileIni)" + nbProfiles=$( grep -cEs '\[Profile[0-9]+\]' "$dirProfilFfx/profiles.ini" ) # création profil dans profile.ini - echo >> "$fileProfileIni" - echo "[Profile$nbProfiles]" >> "$fileProfileIni" - echo "Name=$produit" >> "$fileProfileIni" - echo "IsRelative=1" >> "$fileProfileIni" - echo "Path=$produit" >> "$fileProfileIni" - # si latest ou esr, attribuer Default=1 - if [ "$produit" == "latest" ] || [ "$produit" == "esr" ]; then - sed -i '/Default=1/d' "$fileProfileIni" - echo "Default=1" >> "$fileProfileIni" - fi + echo >> "$dirProfilFfx/profiles.ini" + echo "[Profile$nbProfiles]" >> "$dirProfilFfx/profiles.ini" + echo "Name=$canal" >> "$dirProfilFfx/profiles.ini" + echo "IsRelative=1" >> "$dirProfilFfx/profiles.ini" + echo "Path=$canal" >> "$dirProfilFfx/profiles.ini" + # Default=1 au dernier installé, si besoin utiliser u- + sed -i '/Default=1/d' "$dirProfilFfx/profiles.ini" # effacement éventuel Default=existant + echo "Default=1" >> "$dirProfilFfx/profiles.ini" # réinscription + echo "$( uniq $dirProfilFfx/profiles.ini )" > "$dirProfilFfx/profiles.ini" # suppression lignes vides en double fi - if [ "$1" != "user" ]; then - ffx_lanceur_desktop - ffx_update_alternatives - fi - [ "$1" == "user" ] && f__info "log" "profil <$produit> configuré pour $fu_user" + [ "$2" == "user" ] && f__info "log" "profil $appli $canal configuré pour $fu_user" } - # calcul url téléchargement, assigne $recup_url -ffx_recup_url(){ # 06/2017 - if [ "$produit" == "latest" ]; then - recup_url="https://download.mozilla.org/?product=firefox-$produit&os=$fu_archi&lang=fr" - elif [ "$produit" == "esr" ] || [ "$produit" == "beta" ]; then - recup_url="https://download.mozilla.org/?product=firefox-$produit-latest&os=$fu_archi&lang=fr" - elif [ "$produit" == "dev" ]; then - recup_url="https://download.mozilla.org/?product=firefox-$produit""edition-latest-ssl&os=$fu_archi&lang=fr" - elif [ "$produit" == "nightly" ]; then - recup_url="https://download.mozilla.org/?product=firefox-$produit-latest-l10n-ssl&os=$fu_archi&lang=fr" ;fi -} + # désinstallation, $1=canal +ffx_remove(){ # 22/12/2017 + local fileDesktop="/usr/share/applications/firefox-$1.desktop" canal="$1" appli="Firefox" - # désinstallation de Firefox, on laisse le profil user -ffx_remove(){ # 08/10/2017 - local canal="$1" - - [ "$EUID" -eq 0 ] || f__error "vous devez être ROOT pour désinstaller firefox" - killall "/opt/usr/share/firefox-$canal/firefox" &>/dev/null - # si pas de lanceur desktop, on considère que ce canal Firefox n'est pas installé, retour - if [ ! -e "/usr/share/applications/firefox-$canal.desktop" ]; then # si test répertoire, on détecterait pas l'ancien répertoire éventuel - f__info "$BLUE""Firefox-$canal n'est pas installé." - return 0 + if [ "$EUID" -ne 0 ]; then + f__info "vous devez être$RED ROOT$BLUE pour désinstaller $appli $canal" + f__sudo "exec $0 r-$canal" + return $? fi - # suppression du répertoire Firefox - rm -rf "/opt/firefox-$canal/" # ancien répertoire éventuel - rm -rf "$dirInstall$canal/" + if [ ! -d "$dirInstallFfx$canal" ]; then + f__info "$appli $canal n'est pas installé" + return 1 + fi + + killall "$dirInstallFfx$canal/firefox" &>/dev/null + # suppression du répertoire + rm -rf "$dirInstallFfx$canal/" # suppression lanceurs rm -f "/usr/share/applications/firefox-$canal.desktop" rm -f "/usr/bin/firefox-$canal" # suppression des liens unlink "/usr/share/pixmaps/firefox-$canal.png" &>/dev/null unlink "/usr/bin/firefox" &>/dev/null - # recréation lanceur Firefox & update-alternatives - ffx_usr_bin - ffx_update_alternatives - f__info "log" "Firefox-$canal désinstallé, mais le profil est toujours en place" \ - "\tle supprimer manuellement si nécessaire, pour cela:" \ - "fermer toutes les instances ouvertes de firefox" \ - "et lancer en console, en user:$GREEN firefox -P" + #finalisation system + update-alternatives --quiet --remove 'x-www-browser' /usr/bin/firefox-$canal &>/dev/null + update-alternatives --quiet --remove 'gnome-www-browser' /usr/bin/firefox-$canal &>/dev/null + ffx_get_canalBas && ffx_defaut_system "$ffx_canal_bas" # nouveau canal par défaut + + f__info "log" "$appli-$canal désinstallé, mais le profil est toujours en place" \ + " le supprimer manuellement si nécessaire, avec un autre caanl, pour cela:" \ + "fermer toutes les instances ouvertes de $appli et lancer en console, en user:" \ + "$GREEN firefox -P" \ + "il est aussi possible de supprimer manuellement le profil:" \ + "$YELLOW$dirProfilFfx/$canal" ffx_godzilla } - # traitement update-alternatives -ffx_update_alternatives(){ # 21/12/2017 - if type -p "update-alternatives" &>/dev/null ; then # update-alternatives existe? - if [ "$firefoxCanalBas" ] ; then - update-alternatives --quiet --install $( type -p x-www-browser 2>/dev/null ) 'x-www-browser' /usr/bin/firefox-$firefoxCanalBas 100 # nouvelle alternative - update-alternatives --quiet --install $( type -p gnome-www-browser 2>/dev/null ) 'gnome-www-browser' /usr/bin/firefox-$firefoxCanalBas 100 # nouvelle alternative - update-alternatives --quiet --set 'x-www-browser' /usr/bin/firefox-$firefoxCanalBas # si le priorité n'est pas suffisante - update-alternatives --quiet --set 'gnome-www-browser' /usr/bin/firefox-$firefoxCanalBas # si le priorité n'est pas suffisante - f__info " - alternatives installées pour <$firefoxCanalBas>" - fi - fi -} - - # lien /usr/bin/firefox pour le plus bas canal Firefox installé -ffx_usr_bin(){ # 08/09/2017 - if ffx_get_canalBas ; then - ln -sf "/usr/bin/firefox-$firefoxCanalBas" "/usr/bin/firefox" - f__info " - firefox lié à firefox-$firefoxCanalBas" - fi -} - - # spécifiques script -fscript_cronAnacron_special(){ # 4/12/2017 - rm "/home/$fu_user/.mozilla/$script.anacrontab" &>/dev/null # ancienne localisation éventuelle - rm "/home/$fu_user/.config/anacron/spool/getFF"* &>/dev/null # ancien job -} - - # spécifique script -fscript_install_special(){ # 2/12/2017 - [ -e "/var/log/sdeb_getFF.log" ] && mv "/var/log/sdeb_getFF.log" "$scriptLogs" # changement ancien logs -} - # inscription dans tache upgrade en anacron hebdomadaire, via cron horaire, $1=upgrade|install|remove -fscript_cronAnacron(){ # 4/12/2017 +fscript_cronAnacron(){ # 22/12/2017 local dirAnacron dirSpool fileAnacron - [ "$(type -t fscript_cronAnacron_special)" ] && fscript_cronAnacron_special # test, si fonction spécifique, appel + [ "$( type -t fscript_cronAnacron_special )" ] && fscript_cronAnacron_special # test, si fonction spécifique, appel dirAnacron="/home/$fu_user/.config/anacron" dirSpool="$dirAnacron/spool" fileAnacron="$dirAnacron/$script.anacrontab" @@ -941,10 +731,10 @@ fscript_cronAnacron(){ # 4/12/2017 install | upgrade ) mkdir -p "$dirAnacron" # table anacron - echo "7 10 $script nice $scriptInstall --upgrade 1>/dev/null" > "$fileAnacron" # juste erreurs en syslog + echo "7 10 $script nice $script_install --upgrade 1>/dev/null" > "$fileAnacron" # juste erreurs en syslog ## anacron journalier pour dev logname if [ -e "$fileDev" ]; then - echo "1 00 $script""Dev nice $scriptInstall --upgrade 1>/dev/null" >> "$fileAnacron" + echo "1 00 $script""Dev nice $script_install --upgrade 1>/dev/null" >> "$fileAnacron" fi # création spool anacron utilisateur mkdir -p "$dirSpool" @@ -953,8 +743,7 @@ fscript_cronAnacron(){ # 4/12/2017 # crontab pour activation horaire anacron echo "@hourly $fu_user /usr/sbin/anacron -t $fileAnacron -S $dirSpool" >> /etc/crontab fi - [ "$(grep "$script" /etc/crontab)" ] || echo f__error "inscription crontab" \ - "certains systèmes semblent poser poser problème, merci de rapporter ce bug à $projet, $contact" + grep -q "$script" "/etc/crontab" || echo f__error "inscription crontab" ;; remove ) rm "$dirSpool/$script"* &>/dev/null @@ -964,28 +753,33 @@ fscript_cronAnacron(){ # 4/12/2017 esac } - # version script en ligne, [$1=update], assigne $versionScript, $script_aJour=ok|ko -fscript_get_version(){ # 5/12/2017 - local var_temp + # version script en ligne, [$1=update], assigne $ver_script_install, $ver_script_online, $script_aJour=ok|KO +fscript_get_version(){ # 22/12/2017 - f__info "raw" "version script en cours: $GREEN$version" - versionScript=$(wget -q --timeout=15 -O - "$urlScript" | grep -m1 '^version=' | cut -d'=' -f2) - if [ "$versionScript" ]; then - if [ "$version" != "$versionScript" ]; then - [ "$1" == "update" ] && var_temp=", mise à jour en cours" || var_temp=", mise à jour possible" - script_aJour="ko" + x_script_get_version=1 + if [ -e "$script_install" ]; then + ver_script_install=$( grep -m1 '^version=' $script_install | cut -d'=' -f2 ) + fi + [ "$ver_script_install" ] || ver_script_install="Non installé" + f__info "raw" "script en place: $GREEN$ver_script_install" + ver_script_online=$( wget -q --timeout=15 -O - "$url_script" | grep -m1 '^version=' | cut -d'=' -f2 ) + [ "$?" -ne 0 ] && f__wget_test "$url_script" + if [ "$ver_script_online" ]; then + if [ "$ver_script_install" != "$ver_script_online" ]; then + script_aJour="KO" else script_aJour="ok" fi - f__info "version script en ligne: $YELLOW$versionScript$BLUE$var_temp" + f__info "script en ligne: $YELLOW$ver_script_online" else f__info "version script en ligne$RED non accessible" fi } - # installation du script dans le système -fscript_install(){ # 4/12/2017 - if grep -q 'bin' <<< "$(dirname $0)" ; then + # installation du script dans le système, fscript_install_special possible +fscript_install(){ # 22/12/2017 + + if grep -q 'bin' <<< "$( dirname $0 )" ; then f__info "$RED""l'installation dans le système doit se faire depuis un script local $GREEN(./$script -i )" return 1 fi @@ -994,30 +788,31 @@ fscript_install(){ # 4/12/2017 f__sudo "exec $0 -i" return $? fi - [ "$(type -t fscript_install_special)" ] && fscript_install_special # test, si fonction spécifique, appel + [ "$( type -t fscript_install_special )" ] && fscript_install_special # test, si fonction spécifique, appel f__requis "wget anacron cron" || exit 1 # install /opt mkdir -p /opt/bin/ - cp -d "$(basename $0)" "$scriptInstall" - ln -s "$scriptInstall" "/usr/bin/$script" &>/dev/null - chmod 775 "$scriptInstall" # rwx rwx r-x, proprio fu_user + cp -d "$0" "$script_install" + ln -s "$script_install" "/usr/bin/$script" &>/dev/null + chmod 775 "$script_install" # rwx rwx r-x, proprio fu_user # cron/anacron install fscript_cronAnacron "install" # création fichier log - touch "$scriptLogs" - chmod 664 "$scriptLogs" # rw- rw- r--, proprio fu_user - chown "$fu_user:" "$scriptLogs" "$scriptInstall" - [ -e "$fileDev" ] || rm "$(basename $0)" &>/dev/null ## on efface pas si fileDev (dev) + touch "$script_logs" + chmod 664 "$script_logs" # rw- rw- r--, proprio fu_user + chown "$fu_user:" "$script_logs" "$script_install" + [ -e "$fileDev" ] || rm "$0" &>/dev/null ## 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(){ # 4/12/2017 - if ! grep -q 'bin' <<< "$(dirname $0)" ; then + # suppression du script dans le système, fscript_remove_special possible +fscript_remove(){ # 22/12/2017 + + if ! grep -q 'bin' <<< "$( dirname $0 )" ; then f__info "$RED""cette fonction doit être appelée depuis le script installé dans le système $GREEN($script -r)" return 1 fi - if [ ! -x "$scriptInstall" ];then + if [ ! -x "$script_install" ];then f__info "$RED$script n'est pas installé" return 1 fi @@ -1026,38 +821,40 @@ fscript_remove(){ # 4/12/2017 f__sudo "exec $0 -r" return $? fi - [ "$(type -t fscript_remove_special)" ] && fscript_remove_special # test, si fonction spécifique, appel - # suppression de /opt - rm "$scriptInstall" &>/dev/null + [ "$( type -t fscript_remove_special )" ] && fscript_remove_special # test, si fonction spécifique, appel + # suppression de /opt lien /usr/bin + rm "$script_install" &>/dev/null unlink "/usr/bin/$script" &>/dev/null # cron/anacron remove fscript_cronAnacron "remove" f__info "log" "$script $version supprimé du système." } - # mise à jour script si dispo, v2, +update spécifique -fscript_update(){ # 6/12/2017 - local dirTemp="/tmp/$script-$RANDOM" + # mise à jour script +fscript_update(){ # 22/12/2017 + local dirTemp="/tmp/$script-maj-$RANDOM" - [ $(type -t fscript_update_special) ] && fscript_update_special # test, si fonction spécifique, appel - if [ -z "$updateSpecial" ] && ! grep -q 'bin' <<< "$(dirname $0)" ; then + [ "$(type -t fscript_update_special)" ] && fscript_update_special # test, si fonction spécifique, appel + if [ -z "$updateSpecial" ] && ! grep -q 'bin' <<< "$( dirname $0 )" ; then f__info "$RED""cette fonction doit être appelée depuis le script installé dans le système $GREEN($script -u)" return 1 fi - fscript_get_version "update" + (( x_script_get_version == 1 )) || fscript_get_version if [ "$script_aJour" == "ok" ]; then f__info "log" "pas de mise à jour disponible pour $script $version" return 0 + else + f__info "mise à jour en cours" fi mkdir -p "$dirTemp" - wget -q --tries=2 --timeout=15 -O "$dirTemp/$script" "$urlScript" - if [ "$?" != "0" ]; then f__wget_test "$urlScript"; fi + wget -q --tries=2 --timeout=15 -O "$dirTemp/$script" "$url_script" + [ "$?" -ne 0 ] && f__wget_test "$url_script" if grep -q '#!/bin/bash' "$dirTemp/$script" && grep -q '^### END CONTROL' "$dirTemp/$script"; then - cp -d "$dirTemp/$script" "$scriptInstall" - chmod 775 "$scriptInstall" # rwx rwx r-x, proprio fu_user - chown "$fu_user:" "$scriptInstall" + cp -d "$dirTemp/$script" "$script_install" + chmod 775 "$script_install" # rwx rwx r-x, proprio fu_user + chown "$fu_user:" "$script_install" [ -z "$updateSpecial" ] && fscript_cronAnacron "upgrade" - f__info "log" "$script mis à jour en version $versionScript $updateSpecial" + f__info "log" "$script mis à jour en version $ver_script_online $updateSpecial" else rm -rf "$dirTemp/" f__error "échec update" "mauvais téléchargement, réessayer plus tard" @@ -1065,7 +862,7 @@ fscript_update(){ # 6/12/2017 rm -rf "$dirTemp/" } -prg_init(){ # 4/12/2017 +prg_init(){ # 22/12/2017 PATH='/usr/sbin:/usr/bin:/sbin:/bin' TERM=xterm @@ -1082,7 +879,7 @@ prg_init(){ # 4/12/2017 [ -z "$DISPLAY" ] && ENV_DISPLAY="no DISPLAY" # architectures possibles - f__architecture || f__error "Seules les architecture 32 et 64 bits sont supportée (i686 & amd64) par Firefox" + f__architecture || f__error "Seules les architecture 32 et/ou 64 bits sont supportée (i686 & amd64)" # détermination user derrière root f__user @@ -1096,141 +893,137 @@ prg_init(){ # 4/12/2017 # requis pour fonctionnement programme f__requis "wget file tar killall>psmisc" || exit 1 + + # définition couleurs + f__color } ######## début script / initialisation - # tests au démarrage -prg_init + # tests ou initialisation au démarrage +prg_init # 1ère fonction à appeler # logo et définition couleurs f_affichage -urlScript="https://framagit.org/kyodev/kyopages/raw/master/scripts/getFirefox/" -urlNotice="https://kyodev.frama.io/kyopages/scripts/getFirefox/" + # paramètres script user_agent="Mozilla/5.0 Firefox" - -scriptInstall="/opt/bin/$script" -scriptLogs="/var/log/sdeb_$script.log" 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/" -dirInstall="/opt/usr/share/firefox-" -dirProfil="/home/$fu_user/.mozilla/firefox" -fileProfileIni="$dirProfil/profiles.ini" + # paramètres firefox +dirInstallFfx="/opt/usr/share/firefox-" +dirProfilFfx="/home/$fu_user/.mozilla/firefox" # emplacement profiles.ini + # url chargement fichiers personnalisation, std ou spécifique, une seule url possible, arret à la première trouvée +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) +for ii in $produit_all dev; do # renommage anciens fichiers personnalisation + [ -e "$dirProfilFfx/$ii/personnalisation.getFirefox" ] && mv "$dirProfilFfx/$ii/personnalisation.getFirefox" "$dirProfilFfx/$ii/personnalisation" # ancien nom +done +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/kyodev/kyopages/raw/master/scripts" + 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 -produitAll="latest beta nightly" -dirInstallTB="/opt/usr/share/tor-browser" -profilTor="$dirInstallTB/Browser/TorBrowser/Data/Browser/profile.default" -ls -d /opt/firefox-* 2>/dev/null && problemOldInstall="detected" # ancienne localisation install firefox -[ "$problemOldInstall" ] && f__info "raw" "$RED""Ancien(s) répertoire(s) d'installation détecté(s)" \ - " Il faudrait réinstaller les version(s) détectée(s):" \ - "$YELLOW""$(ls -d /opt/firefox-* | sed -E 's/.*firefox-(.*)/ getFirefox i-\1/')" \ - "$GREEN voir: $urlNotice#messages-avertissement\n" - -[ -e "scriptInstall" ] && [ "$(stat -c %G scriptInstall)" == "root" ] && problemDetected+="-1" # droits inappropriés sur le script, version de dev -if [ "$(grep -q 'getFirefox' <<< $(ls /opt/bin/))" ] && [ -x "/usr/bin/firefox" ]; then - grep -Eq '^exec.*/firefox -P.*$' '/usr/bin/firefox' && problemDetected+="-3" # raccourci /usr/bin en erreur -fi options=$@ -if [ "$(dirname $0)" == "." ] && [ ! -e "$fileDev" ]; then options="-i" # script install -else - if [ ! -w "$scriptLogs" ] && ls -d "$dirInstall"* &>/dev/null ; then problemDetected+="-2"; fi # ancien système de logs via syslog +if [ "$( dirname $0 )" == "." ] && [ ! -e "$fileDev" ]; then + options="-i" # script install fi -[ "$problemDetected" ] && f__info "$RED""l'installation du script est obsolète ($problemDetected)" \ - "veuillez réinstaller le script manuellement" "$GREEN""voir $urlNotice#messages-avertissement" +[ "$options" ] || options="-h" for j in $options; do case $j in - i-latest | i-esr | i-dev | i-beta | i-nightly | i-all | +latest | +esr | +dev | +beta | +nightly | +all ) - produit="$(sed 's/i-//; s/+//' <<< "$1")" - if [ "$produit" == "all" ]; then produit="$produitAll"; fi - for k in $produit; do + d-latest | d-esr | d-dev | d-beta | d-nightly | d-all ) + produit=${j#*-} + [ "$produit" == "all" ] && produit="$produit_all" + for k in $produit; do # copier un profil default sur un canal + ffx_copie_default "$k" + done + exit ;; + i-latest | i-esr | i-dev | i-beta | i-nightly | i-all ) + produit=${j#*-} + [ "$produit" == "all" ] && produit="$produit_all_inverse" + for k in $produit; do # installation canal ffx_install "$k" done - exit ;; # install: installation canal Firefox $1=produit, (gestion ancien répertoire éventuel) + exit ;; m-latest | m-esr | m-dev | m-beta | m-nightly ) - produit="$(sed 's/m-//' <<< "$1")" - ffx_install_manuel "$produit" "$2" - exit ;; # installation manuelle d'un chargement, $2=fichier archive + produit=${j#*-} + ffx_install_manuel "$produit" "$2" # installation manuelle d'une archive, $2=archive + exit ;; p-latest | p-esr | p-dev | p-beta | p-nightly | p-all ) - produit="$(sed 's/p-//' <<< "$1")" - if [ "$produit" == "all" ]; then produit="$produitAll"; fi - for k in $produit; do + produit=${j#*-} + [ "$produit" == "all" ] && produit="$produit_all" + for k in $produit; do # personnalisation ffx_pers_install "$k" done - exit ;; # mise en place personnalisation + exit ;; pr-latest | pr-esr | pr-dev | pr-beta | pr-nightly | pr-all ) - produit="$(sed 's/pr-//' <<< "$1")" - if [ "$produit" == "all" ]; then produit="$produitAll"; fi - for k in $produit; do + produit=${j#*-} + [ "$produit" == "all" ] && produit="$produit_all" + for k in $produit; do # suppression personnalisation ffx_pers_remove "$k" done - exit ;; # supression personnalisation + exit ;; pu ) - ffx_pers_upgrade - f_tor_pers_upgrade - exit ;; # mise à jour personnalisations - r-latest | r-esr | r-dev | r-beta | r-nightly | r-all | -latest | -esr | -dev | -beta | -nightly | -all ) - produit="$(sed 's/r-//; s/-//' <<< "$1")" - if [ "$produit" == "all" ]; then produit="$produitAll"; fi - for k in $produit; do + ffx_pers_upgrade # mise à jour personnalisations + exit ;; + r-latest | r-esr | r-dev | r-beta | r-nightly | r-all ) + produit=${j#*-} + [ "$produit" == "all" ] && produit="$produit_all" + for k in $produit; do # remove ffx_remove "$k" done - exit ;; # remove: désinstallation Firefox (y compris ancien répertoire éventuel) - u-latest | u-esr | u-dev | u-beta | u-nightly ) - produit="$(sed 's/u-//' <<< "$1")" - [ "$problemOldInstall" ] && f__error "vous devez réinstaller firefox auparavant" - ffx_profil_user "user" - exit ;; # configurer un profil firefox pour un user - d-latest | d-esr | d-dev | d-beta | d-nightly ) - produit="$(sed 's/d-//' <<< "$1")" - [ "$problemOldInstall" ] && f__error "vous devez réinstaller firefox auparavant" - if [ "$produit" == "all" ]; then produit="$produitAll"; fi + exit ;; + s-latest | s-esr | s-dev | s-beta | s-nightly ) + produit=${j#*-} + ffx_defaut_system "$produit" # défaut système + exit ;; + u-latest | u-esr | u-dev | u-beta | u-nightly | -all ) + produit=${j#*-} + [ "$produit" == "all" ] && produit="$produit_all" for k in $produit; do - ffx_default "$k" + ffx_profil_user "$k" "user" # configurer un canal pour user en cours done - exit ;; # copier un profil default sur un canal - version | versions ) - ffx_get_version - fscript_get_version + exit ;; + v-ffx ) + ffx_get_version # versions ffx_pers_get_version - f_tor_get_version - f_tor_pers_get_version - exit ;; # affiche versions Firefox en ligne & installées, script et personnalisation - i-tor ) - f_tor_install - exit ;; # installation tor browser - m-tor ) - f_tor_install_manuel "$2" - exit ;; # installation manuelle archive tor browser, $2 fichier archive - p-tor ) - f_tor_pers_install - exit ;; # personnalisation pour tor browser - pr-tor ) - f_tor_pers_remove - exit ;; # supression personnalisation pour tor browser - r-tor ) - f_tor_remove - exit ;; # désinstallation tor browser - -i ) - fscript_install - exit ;; # installation du script dans le système - -r | --remove | sysremove ) - fscript_remove - exit ;; # désinstallation du script - -u | --upgrade | upgrade ) - opType="upgrade" - fscript_update - ffx_pers_upgrade - f_tor_pers_upgrade - exit ;; # upgrade script & personnalisations - -v | --version ) + exit ;; + + version | versions ) # versions en ligne & installées fscript_get_version - exit ;; # version du script, en ligne et exécuté - -h | --help | * ) + ffx_get_version + ffx_pers_get_version + exit ;; + + -i | --install ) # installation du script dans le système + fscript_install + exit ;; + -r | --remove ) # désinstallation du script + fscript_remove + exit ;; + -u | --upgrade ) # upgrade script & personnalisations + operation="upgrade" + fscript_update 'menu' + ffx_pers_upgrade + exit ;; + -v | --version ) # version du script, en ligne et en place + fscript_get_version + exit ;; + -h | --help | * ) # affichage help f_help - exit ;; # affichage help + exit ;; esac done @@ -1238,8 +1031,5 @@ exit 0 ### END CONTROL (contrôle chargement) - -wget -O getFirefox https://frama.link/getFirefox -chmod +x getFirefox && ./getFirefox - wget -O getFirefox https://framagit.org/kyodev/kyopages/raw/master/scripts/getFirefox +chmod +x getFirefox && ./getFirefox diff --git a/scripts/getFirefox_changelog.md b/scripts/getFirefox_changelog.md index d05e4ba..411f363 100644 --- a/scripts/getFirefox_changelog.md +++ b/scripts/getFirefox_changelog.md @@ -1,6 +1,11 @@ # changelog getFirefox +## getFirefox 4.0.0 22/12/2017 + +* remodelage complet +* Firefox uniquement + ## getFirefox 3.16.0 21/12/2017 * révision: update alternatives