diff --git a/docs/scripts/getFirefox.md b/docs/scripts/getFirefox.md index b671bec..81f0840 100644 --- a/docs/scripts/getFirefox.md +++ b/docs/scripts/getFirefox.md @@ -6,7 +6,7 @@ * les extensions incompatibles avec WebExtension seront désacivées, malheureusement les plus pointues n'ont pas d"équivalent dans à cause des limitations de WebExtension qui se cantonne à essayer de suivre les préconisation de Google * gestion des utilisateurs différente -* les processeurs aussi anciens que Intel Pentium 4 et AMD Opteron ne sont plus pris en charge +* les processeurs **plus** anciens que Intel Pentium 4 et AMD Opteron ne sont plus pris en charge > Ceux qui ne croient pas en l'avenir marketé _fabuleux_ de Quantum (publicité intégrée à venir, webextension limitées chez Mozilla, etc), qui présage plutôt un suivi sans saveur de Google Chrome, en attendant son abandon après une longue agonie déjà amorcée depuis longtemps, peuvent [tester Waterfox](https://framaclic.org/h/doc-getxfox) > Waterfox est un fork basé sur l'ancien moteur avec tout les extensions fonctionnelles et une bien plus grande liberté de personnalisation diff --git a/docs/scripts/getThunderbird.md b/docs/scripts/getThunderbird.md index 43f9cb9..b40e6a7 100644 --- a/docs/scripts/getThunderbird.md +++ b/docs/scripts/getThunderbird.md @@ -1,7 +1,7 @@ # getThunderbird -![version: 2.8.0](https://img.shields.io/badge/version-2.8.0-blue.svg?longCache=true&style=for-the-badge) +![version: 2.9.0](https://img.shields.io/badge/version-2.9.0-blue.svg?longCache=true&style=for-the-badge) ![bash langage](https://img.shields.io/badge/bash-4-brightgreen.svg?longCache=true&style=for-the-badge) ![license LPRAB / WTFPL](https://img.shields.io/badge/license-LPRAB%20%2F%20WTFPL-blue.svg?longCache=true&style=for-the-badge) @@ -62,7 +62,7 @@ getThunderbird i-canal / _' |/ _ \ __|| | | '_ \| | | | '_ \ / _' |/ _ \ '__| '_ \| | '__/ _' | | (_| | __/ |_ | | | | | | |_| | | | | (_| | __/ | | |_) | | | | (_| | \__, |\___|\__||_| |_| |_|\__,_|_| |_|\__,_|\___|_| |_.__/|_|_| \__,_| - |___/ version 2.8.0 - 05/03/2018 + |___/ version 2.9.0 - 09/06/2018 installation Thunderbird-latest @@ -105,29 +105,31 @@ getThunderbird -h / _' |/ _ \ __|| | | '_ \| | | | '_ \ / _' |/ _ \ '__| '_ \| | '__/ _' | | (_| | __/ |_ | | | | | | |_| | | | | (_| | __/ | | |_) | | | | (_| | \__, |\___|\__||_| |_| |_|\__,_|_| |_|\__,_|\___|_| |_.__/|_|_| \__,_| - |___/ version 2.8.0 - 05/03/2018 - ---------------------------------------------------------------------- - canaux possibles: latest, beta - = tous les canaux + |___/ version 2.9.0 - 09/06/2018 + + canaux possibles: latest, beta ( = tous les canaux ) + exemple, installation version Release (latest): getThunderbird i-latest - + ---------------------------------------------------------------------- getThunderbird i-canal : installation de Thunderbird (root) - avec option --sauve l'archive téléchargée est sauvegardée dans le répertoire courant - - getThunderbird d-canal : copier un éventuel profil .default existant sur + getThunderbird d-canal : copier un profil .default existant sur getThunderbird m-canal archi : installation sur le d'une ve téléchargée manuellement (root) getThunderbird r-canal : désinstallation (remove) du (root) - getThunderbird ri : réparation icône(s) et lanceur(s) dans le menu (root) + getThunderbird ri : réparation icône(s) dans le menu + getThunderbird t-canal : téléchargement du dans le répertoire courant (sans installation) getThunderbird u-canal : profil pour l'utilisateur en cours et comme défaut système (root) - + getThunderbird version : versions installées et en ligne + + --dev : une version de dev du script (si existante) est recherché + --sauve: le téléchargement est sauvegardé dans le répertoire courant en plus de l'installation ---------------------------------------------------------------------- ./getThunderbird (ou ./getThunderbird -i) : installation du script dans le système (root) getThunderbird -h, --help : affichage aide getThunderbird -r, --remove : désinstallation du script (root) getThunderbird -u, --upgrade : mise à jour du script getThunderbird -v, --version : version du script - + ---------------------------------------------------------------------- plus d'infos: https://framaclic.org/h/doc-getthunderbird ``` @@ -139,18 +141,18 @@ getThunderbird -h getThunderbird version ``` ```text - _ _____ _ _ _ _ _ + _ _____ _ _ _ _ _ __ _ ___| ||_ _| |__ _ _ _ __ __| | ___ _ __| |__ (_)_ __ __| | / _' |/ _ \ __|| | | '_ \| | | | '_ \ / _' |/ _ \ '__| '_ \| | '__/ _' | | (_| | __/ |_ | | | | | | |_| | | | | (_| | __/ | | |_) | | | | (_| | \__, |\___|\__||_| |_| |_|\__,_|_| |_|\__,_|\___|_| |_.__/|_|_| \__,_| - |___/ version 2.8.0 - 05/03/2018 + |___/ version 2.9.0 - 09/06/2018 - script en place: 2.8.0 - script en ligne: 2.8.0 + script en place: 2.9.0 + script en ligne: 2.9.0 - Thunderbird en place: latest : 52.6.0 - Thunderbird en ligne: latest : 52.6.0 beta : 59.0b2 + Thunderbird en place: latest : 52.8.0 + Thunderbird en ligne: latest : 52.8.0 beta : 60.0b7 ``` diff --git a/docs/scripts/getXfox.md b/docs/scripts/getXfox.md index 607019e..85cb7f8 100644 --- a/docs/scripts/getXfox.md +++ b/docs/scripts/getXfox.md @@ -13,6 +13,12 @@ > script testé sur debian / ubuntu, mais devrait être compatible avec d'autres distributions +* **ce script n'est pas l'installeur officiel de TorBrowser** + * son but n'est pas la sécurisation avant tout, d'autres moyens sont plus adaptés [Tails live](https://tails.boum.org/index.fr.html) par exemple + * la signature et l'empreinte de l'archive ne sont pas vérifiés + * cela permet juste d'atteindre l'oignon sans difficultés et sans pleurs ;) + + * les installations/désinstallations doivent être faites avec les privilèges **root** * les opérations sur l'utilisateur, ou sur la mise à jour du script, peuvent être faites en utilisateur. diff --git a/scripts/getThunderbird b/scripts/getThunderbird index 7e7ba8d..1bb0d38 100755 --- a/scripts/getThunderbird +++ b/scripts/getThunderbird @@ -1,9 +1,9 @@ #!/bin/bash -version=2.8.0 -date="05/03/2018" +version=2.9.0 +date="09/06/2018" script="getThunderbird" -contact="IRC ##sdeb@freenode.net ou https://framagit.org/sdeb/getThunderbird/issues" +# contact="IRC ##sdeb@freenode.net ou https://framagit.org/sdeb/getThunderbird/issues" ##### license LPRAB/WTFPL # auteur: simpledeb @@ -13,14 +13,11 @@ contact="IRC ##sdeb@freenode.net ou https://framagit.org/sdeb/getThunderbird/iss # détection architecture système, assigne $fu_archi: linux|linux64 # return 1 on unknown architecture # remarque, debian: dpkg --print-architecture affiche i386 -f__architecture(){ # 14/12/2017 SPÉCIFIQUE +f__architecture(){ # 09/06/2018 SPÉCIFIQUE - x_architecture=1 case "$(uname -m)" in - amd64 | x86_64 ) - fu_archi="linux64";; - i?86 | x86 ) - fu_archi="linux";; + amd64 | x86_64 ) fu_archi="linux64";; + i?86 | x86 ) fu_archi="linux";; * ) case "$(getconf LONG_BIT)" in 64 ) @@ -34,48 +31,49 @@ f__architecture(){ # 14/12/2017 SPÉCIFIQUE } # test validité archive, $1 archive, assigne $archive_detect (gzip|xz|deb|zip), return 1 si inconnue -f__archive_test(){ # 19/12/2017 - local filetest=$( file -b $1 ) +f__archive_test(){ # O9/03/2018 + local filetest + filetest=$( file -b "$1" ) grep -q 'gzip compressed data' <<< "$filetest" && archive_detect="gzip" grep -q 'bzip2 compressed data' <<< "$filetest" && archive_detect="bzip2" grep -q 'Debian binary package' <<< "$filetest" && archive_detect="deb" grep -q 'Zip archive data' <<< "$filetest" && archive_detect="zip" grep -q 'XZ compressed data' <<< "$filetest" && archive_detect="xz" - [[ -z "$archive_detect" || "$archive_detect" == "empty" ]] && return 1 || return 0 # laisser return 0 final sinon erreur, toujours return 1?!! + if [[ -z "$archive_detect" || "$archive_detect" == "empty" ]]; then return 1; fi } -f__color(){ # 01/03/2018 +# shellcheck disable=SC2034 +f__color(){ # 29/05/2018 if type -p tput &>/dev/null && tput setaf 1 &>/dev/null; then - BLACK=$( tput setaf 0 ) - RED=$( tput setaf 1 ) # alerte - GREEN=$( tput setaf 2 ) # ok - YELLOW=$( tput setaf 3 ) # question - BLUE=$( tput setaf 4 ) # info - CYAN=$( tput setaf 6 ) MAGENTA=$( tput setaf 5 ) + BLACK=$( tput setaf 0 ) + CYAN=$( tput setaf 6 ) + YELLOW=$( tput setaf 3 ) # question + GREEN=$( tput setaf 2 ) # ok + BLUE=$( tput setaf 4 ) # info + RED=$( tput setaf 1 ) # alerte STD=$( tput sgr0 ) # retour "normal" BOLD=$( tput bold ) ITAL=$( tput sitm ) SOUL=$( tput smul ) else - YELLOW=$( echo -n "\033[0;33m" ) # ? - GREEN=$( echo -n "\033[0;32m" ) # ok - BLUE=$( echo -n "\033[0;34m" ) # info - RED=$( echo -n "\033[0;31m" ) # alerte - COLOR=$( echo -n "\033[0m" ) # standard - STD=$( echo -n "\033[0m" ) # standard + YELLOW=$'\033[0;33m' # ? + GREEN=$'\033[0;32m' # ok + BLUE=$'\033[0;34m' # info + RED=$'\033[0;31m' # alerte + STD=$'\033[0m' # standard fi } # affichage $1 en rouge, $1++ optionnels en bleu, sortie script sur erreur, log $1 si $operation=upgrade -f__error(){ # 18/12/2017 +f__error(){ # 07/O6/2018 local depart=1 i - echo -e "\n$RED $script $version, erreur critique: $1 $STD" + echo -e "\\n$RED $script $version, erreur critique: $1 $STD" >&2 for (( i=2 ; i<=$# ; i++ )); do - echo -e " $BLUE${!i}$STD" + echo -e " $BLUE${!i}$STD" >&2 done echo [ "$operation" == "upgrade" ] && f__log "$script $version: $1" @@ -83,22 +81,30 @@ f__error(){ # 18/12/2017 } # affichage en bleu, si $1=raw pas de ligne vide à la fin, si $1=log alors uniquement $2 logué, combiné: $1="log:raw" -f__info(){ # 22/02/2018 - local depart=1 i +f__info(){ # 07/06/2018 + local depart=1 log i - [[ "$1" =~ "raw" || "$1" =~ "log" ]] && depart=2 - [[ "$1" =~ "log" ]] && f__log "$( sed -E 's/\\t//;s/\\n// ' <<< "$2" | xargs )" - for (( i=$depart ; i<=$# ; i++ )); do + if [[ "$1" =~ "raw" || "$1" =~ "log" ]]; then + depart=2 + fi + if [[ "$1" =~ "log" ]]; then + log="$2" + log=${log//$'\t'} + log=${log//$'\n'} + f__trim log + f__log "$log" + fi + for (( i=depart ; i<=$# ; i++ )); do echo -e " $BLUE${!i}$STD" done [[ "$1" =~ raw ]] || echo } # log spécifique, fichier log limité à 10000 octets, $1 message à loguer -f__log(){ # 4/12/2017 +f__log(){ # 05/03/2018 if [ -w "$script_logs" ]; then - if [ "$(stat -c %s $script_logs)" -ge "10000" ]; then + if [ "$( stat -c %s "$script_logs" )" -ge "10000" ]; then echo "$(date +%Y%m%d\ %H%M%S) $1" &>/dev/null > "$script_logs" else echo "$(date +%Y%m%d\ %H%M%S) $1" &>/dev/null >> "$script_logs" @@ -108,23 +114,22 @@ f__log(){ # 4/12/2017 # recherche commandes/paquets, $1 liste: cmd1|cmd2[>paquet] (séparées par espaces) ex: "gawk|mawk>gawk wget" # si manque, return 1 & affiche commandes manquantes (si debian, ajout proposition paquet à installer) -f__requis(){ # 26/01/2018 - local ENV_DEBIAN ireq table package commands command commandsMissing packagesMissing +f__requis(){ # 06/06/2018 + local ENV_DEBIAN c_echo ireq cmds package commands command commandsMissing packagesMissing - type -p "dpkg" &>/dev/null && ENV_DEBIAN="oui" # debian - type -t f__info &>/dev/null && c_echo="f__info" || c_echo="echo -e" # f__info existe? sinon echo - - for ireq in $1; do # pour tous les composants de la liste $1 - table=( ${ireq//>/ } ) # séparation sur >, split avec double bashisme, mais évite manip $IFS - - commands=( ${table[0]//|/ } ) # séparation sur | - if [ ${table[1]} ]; then - package=${table[1]} - else - package="$commands" # pas de oackages dans les options, donc idem commands[0] - fi - - for command in ${commands[@]}; do # pour toutes les commandes + if type -p dpkg &>/dev/null ; then + ENV_DEBIAN="oui" # debian + fi + if type -t f__info &>/dev/null; then + c_echo="f__info" + else + c_echo="echo -e" # f__info existe? sinon echo + fi + for ireq in $1; do + IFS='>' read -r cmds package <<< "$ireq" # ex: "awk|gawk>gawk wget file tar killall>psmisc" + mapfile -t -d '|' commands <<< "${cmds}" + [ -z "$package" ] && package=${commands[0]%$'\n'} # pas de packages dans les options, donc = commands[0 + for command in "${commands[@]%$'\n'}"; do if type -p "$command" &>/dev/null ; then unset commandsMissing packagesMissing break @@ -136,8 +141,8 @@ f__requis(){ # 26/01/2018 done # dédoublonnage & triage - commandsMissing=$( echo $commandsMissing | tr ' ' '\n' | sort --unique | tr '\n' ' ' ) - packagesMissing=$( echo $packagesMissing | tr ' ' '\n' | sort --unique | tr '\n' ' ' ) + commandsMissing=$( echo "$commandsMissing" | tr ' ' '\n' | sort --unique | tr '\n' ' ' ) + packagesMissing=$( echo "$packagesMissing" | tr ' ' '\n' | sort --unique | tr '\n' ' ' ) # suppression éventuel espace final commandsMissing=${commandsMissing% } packagesMissing=${packagesMissing% } @@ -152,50 +157,57 @@ f__requis(){ # 26/01/2018 [ "$commandsMissing" ] && return 1 || return 0 } - # $@=cmd à lancer en root avec su ou sudo. si $@ contient [':x:'] x=nombre de tentatives, 3 par défaut + # $@=cmd à lancer en root avec su ou sudo. si $@ contient [':x:'] x=nombre de tentatives, 2 par défaut # si sudo si possible sera utilisé. # si su &2 redirigé sur &1 # si bash inexistant, return 2 -f__sudo(){ # 24/02/2018 - local nb sudo isudo toBash options nbDefault=3 +f__sudo(){ # 10/06/2018 + local nb sudo isudo options nbDefault=2 # détermination sudo possible - type -p bash &>/dev/null && toBash=$( type -p bash ) || return 2 - # sudo --shell bash équivalent su ? if sudo -v &>/dev/null && [ $EUID -ne 0 ] ; then - sudo="sudo su --shell $toBash --preserve-environment -c " + sudo="sudo su --preserve-environment -c " else - sudo="su --shell $toBash --preserve-environment -c " + sudo="su --preserve-environment -c " fi # extraction nb de tentatives éventuel - if [[ "$@" =~ :.{1,2}: ]]; then - nb="$@" + if [[ "$*" =~ :.{1,2}: ]]; then + nb="$*" nb=${nb#*:} nb=${nb%:*} - options=${@//:$nb:/ } - (( ${nb}+1 )) 2>/dev/null || nb="$nbDefault" # test si numérique, sinon, + options=${*//:$nb:/ } + (( nb+1 )) 2>/dev/null || nb="$nbDefault" # test si numérique, sinon, else nb="$nbDefault" - options="$@" + options="$*" fi # lancement cmds if [[ "$sudo" =~ ^sudo ]]; then $sudo "$options" else for (( isudo=1 ; isudo<="$nb" ; isudo++ )); do - echo -n "[su] Root, " - $sudo "$options" 2>&1 # redirection demande pass (et erreur) sur &1 (utile quand &2 est redirigé en amont) - [ "$?" == 0 ] && break + echo -e "[su] Mot de passe root :" + $sudo "$options" 2>/dev/null && break [ "$isudo" == "$nb" ] && return 1 done + echo fi } + # $1=NOM de la variable à trimer (variable et non $variable), [$2=left|right|all], all si vide +f__trim(){ # 07/03/2018 + local trim=${!1} + + [[ "$2" == right || "$2" == all || -z "$2" ]] && trim="${trim%${trim##*[^[:space:]]}}" # fin right + [[ "$2" == left || "$2" == all || -z "$2" ]] && trim="${trim#${trim%%[^[:space:]]*}}" # début left + eval "$1=\"$trim\"" +} + # user ayant initié la session graphique, assigne $fu_user # return 1 sur échec identification user, return 2 sur absence home/ # gestion variable environnement user avec: USER_INSTALL= script -f__user(){ # 24/02/2018 - local user userid test root_login +f__user(){ # 08/03/2018 + local user userid root_login root_login="$(grep ':0:' /etc/passwd | cut -d':' -f1)" || root_login="root" if [ "$USER_INSTALL" ]; then # user via variable environnement, moyen d'injecter root si pb @@ -213,10 +225,10 @@ f__user(){ # 24/02/2018 userid="$SUDO_UID"; elif grep -qEo '[0-9]+' <<< "$XDG_RUNTIME_DIR" ; then userid=$( grep -Eo '[0-9]+' <<< "$XDG_RUNTIME_DIR" | cut -d'/' -f4 ) - elif grep -qEo '[0-9]+' <<< "$XAUTHORITY" ; then + else userid=$( grep -Eo '[0-9]+' <<< "$XAUTHORITY" | cut -d'/' -f4 ) fi - [ "$userid" ] && user=$( grep $userid /etc/passwd | cut -d ":" -f 1 ) + [ "$userid" ] && user=$( grep "$userid" /etc/passwd | cut -d ":" -f 1 ) if [ "$user" ] && [ "$user" != "$root_login" ]; then fu_user="$user" return 0 @@ -225,8 +237,8 @@ f__user(){ # 24/02/2018 user="$SUDO_USER"; elif who | grep -qv 'root'; then user=$( who | grep -v 'root' | head -n1 | cut -d ' ' -f1 ); # who | grep -v 'root' | awk 'FNR==1{print $1}' - elif grep -q 'hourly.*get[A-Z].*\.anacrontab.*\.config/anacron/spool' /etc/crontab; then - user=$( grep 'hourly.*get[A-Z].*\.anacrontab.*\.config/anacron/spool' /etc/crontab | head -n1 | cut -d' ' -f2 ); # grep 'hourly.*get[A-Z].*\.anacrontab.*\.config/anacron/spool' /etc/crontab | awk 'FNR==1{print $2} + else + user=$( grep -m1 'hourly.*get[A-Z].*\.anacrontab.*\.config/anacron/spool' /etc/crontab | cut -d' ' -f2 ); fi fi fu_user="$user" @@ -240,7 +252,7 @@ f__user(){ # 24/02/2018 # si $2=print affiche url testée & entêtes http & location, return 0 # si $2=loc affiche seulement location, return 0 # si $2=test return 0 si ok, return 1 si KO -f__wget_test(){ # 22/02/2018 +f__wget_test(){ # 07/06/2018 local file_test_wget="/tmp/testWget-$script" retourWget retourHttp location wget -Sq --timeout=5 --tries=2 --user-agent="$user_agent" --spider --save-headers "$1" &>"$file_test_wget" @@ -264,9 +276,9 @@ f__wget_test(){ # 22/02/2018 if [ "$2" == "print" ]; then if [ "$retourWget" != "0" ]; then echo " erreur wget: erreur $RED$retourWget" - echo -e "$BLUE $1$STD\t$RED $retourHttp$STD" + echo -e "$BLUE $1$STD\\t$RED $retourHttp$STD" else - echo -e "$BLUE $1$STD\t$GREEN $retourHttp$STD" + echo -e "$BLUE $1$STD\\t$GREEN $retourHttp$STD" fi fi if [ "$2" == "print" ] || [ "$2" == "loc" ]; then @@ -278,59 +290,62 @@ f__wget_test(){ # 22/02/2018 if [ "$retourWget" != "0" ]; then rm -f "$file_test_wget" f__error "wget, erreur $retourWget" "$1" "$YELLOW$retourHttp" "$location" - echo -e "$RED erreur wget, $retourWget \n $1 \n $YELLOW$retourHttp \n $location$STD" # pour les diags + echo -e "$RED erreur wget, $retourWget \\n $1 \\n $YELLOW$retourHttp \\n $location$STD" # pour les diags return 1 fi if grep -q '200' <<< "$retourHttp"; then - echo -e "$GREEN\ntout est ok, réessayer$STD\n" + echo -e "$GREEN\\ntout est ok, réessayer$STD\\n" fi rm -f "$file_test_wget" exit 0 } -f_affichage(){ # 24/01/2018 - local affichage_text=" _ _____ _ _ _ _ _ - __ _ ___| ||_ _| |__ _ _ _ __ __| | ___ _ __| |__ (_)_ __ __| | - / _' |/ _ \ __|| | | '_ \| | | | '_ \ / _' |/ _ \ '__| '_ \| | '__/ _' | - | (_| | __/ |_ | | | | | | |_| | | | | (_| | __/ | | |_) | | | | (_| | - \__, |\___|\__||_| |_| |_|\__,_|_| |_|\__,_|\___|_| |_.__/|_|_| \__,_| - |___/" +# shellcheck disable=SC1117 +f_affichage(){ # 09/06/2018 - clear - echo -e "$BLUE$affichage_text$YELLOW version $version - $date$STD\n" + clear 2>/dev/null || tput clear 2>/dev/null + echo -n "$BLUE" + cat <<- end + _ _____ _ _ _ _ _ + __ _ ___| ||_ _| |__ _ _ _ __ __| | ___ _ __| |__ (_)_ __ __| | + / _' |/ _ \ __|| | | '_ \| | | | '_ \ / _' |/ _ \ '__| '_ \| | '__/ _' | + | (_| | __/ |_ | | | | | | |_| | | | | (_| | __/ | | |_) | | | | (_| | + \__, |\___|\__||_| |_| |_|\__,_|_| |_|\__,_|\___|_| |_.__/|_|_| \__,_| + |___/ $YELLOW version $version - $date$STD + + end } # affichage help -f_help(){ # 04/03/2018 - local ligne help=( - "----------------------------------------------------------------------" - " canaux possibles:$GREEN latest, beta$STD" - " = tous les canaux" - "exemple, installation version Release (latest): $BLUE$script i-latest$STD" - " " - "$BLUE$script i-$STD${GREEN}canal$STD : ${RED}i${STD}nstallation de $appli $RED(root)$STD" - " avec option $GREEN--sauve$STD l'archive téléchargée est sauvegardée dans le répertoire courant" - "" - "$BLUE$script d-$STD${GREEN}canal$STD : copier un profil ${RED}.d${STD}efault existant sur " - "$BLUE$script m-$STD${GREEN}canal archi$STD : installation sur le d'une ve téléchargée ${RED}m${STD}anuellement $RED(root)$STD" - "$BLUE$script r-$STD${GREEN}canal$STD : désinstallation (${RED}r${STD}emove) du $RED(root)$STD" - "$BLUE$script ri$STD : ${RED}r${STD}éparation$RED i${STD}cône(s) dans le menu" - "$BLUE$script u-$STD${GREEN}canal$STD : profil pour l'${RED}u${STD}tilisateur en cours et comme défaut système $RED(root)$STD" - "" - "$BLUE$script version$STD : versions installées et en ligne" - "----------------------------------------------------------------------" - "$BLUE./$script$STD (ou $BLUE./$script -i$STD) : installation du script dans le système $RED(root)$STD" - "$BLUE$script -h$STD, --help : affichage aide" - "$BLUE$script -r$STD, --remove : désinstallation du script $RED(root)$STD" - "$BLUE$script -u$STD, --upgrade : mise à jour du script" - "$BLUE$script -v$STD, --version : version du script" - ) +f_help(){ # 10/06/2018 - tput cuu1 # une ligne plus haut - for ligne in "${help[@]}"; do - echo -e " $ligne" - done - echo -e "\n$STD plus d'infos: $GREEN$url_notice$STD\n" + cat <<- end + canaux possibles:$GREEN latest, beta$STD ( = tous les canaux ) + + exemple, installation version Release (latest): $BLUE$script i-latest$STD + ---------------------------------------------------------------------- + $BLUE$script i-$STD${GREEN}canal$STD : ${RED}i${STD}nstallation de $appli $RED(root)$STD + $BLUE$script d-$STD${GREEN}canal$STD : copier un profil ${RED}.d${STD}efault existant sur + $BLUE$script m-$STD${GREEN}canal archi$STD : installation sur le d'une ve téléchargée ${RED}m${STD}anuellement $RED(root)$STD + $BLUE$script r-$STD${GREEN}canal$STD : désinstallation (${RED}r${STD}emove) du $RED(root)$STD + $BLUE$script ri$STD : ${RED}r${STD}éparation$RED i${STD}cône(s) dans le menu + $BLUE$script t-$STD${GREEN}canal$STD : téléchargement du dans le répertoire courant (sans installation) + $BLUE$script u-$STD${GREEN}canal$STD : profil pour l'${RED}u${STD}tilisateur en cours et comme défaut système $RED(root)$STD + + $BLUE$script version$STD : versions installées et en ligne + + $GREEN --dev$STD : une version de dev du script (si existante) est recherché + $GREEN --sauve$STD: le téléchargement est sauvegardé dans le répertoire courant ${BOLD}en$STD plus de l'installation + ---------------------------------------------------------------------- + $BLUE./$script$STD (ou $BLUE./$script -i$STD) : installation du script dans le système $RED(root)$STD + $BLUE$script -h$STD, --help : affichage aide + $BLUE$script -r$STD, --remove : désinstallation du script $RED(root)$STD + $BLUE$script -u$STD, --upgrade : mise à jour du script + $BLUE$script -v$STD, --version : version du script + ---------------------------------------------------------------------- + ${STD}plus d'infos: $GREEN$url_notice$STD + + end } f_tb_alertIcedove(){ # 25/12/2017 @@ -342,7 +357,7 @@ f_tb_alertIcedove(){ # 25/12/2017 } # traitement utilisateur, $1=canal, [$2='menu' si appel indépendant pour reconfiguration] -f_tb_config_profil(){ # 14/01/2018 +f_tb_config_profil(){ # 09/06/2018 local nbProfiles canal="$1" if [ ! -d "$dirInstall$canal" ] && [ "$2" == "menu" ]; then # pas de répertoire programme @@ -356,27 +371,29 @@ f_tb_config_profil(){ # 14/01/2018 chmod g-rx,o-rx "$dirProfil/$canal/" # droits répertoire fi if [ ! -e "$dirProfil/profiles.ini" ]; then # pas de profile.ini - echo -e "[General]\nStartWithLastProfile=1" > "$dirProfil/profiles.ini" + echo -e "[General]\\nStartWithLastProfile=1" > "$dirProfil/profiles.ini" chown "$fu_user:" "$dirProfil/profiles.ini" # propriété du fichier profile.ini à l'user chmod u+rw,go+r "$dirProfil/profiles.ini" # permissions du fichier profile.ini à l'user fi # inscription canal dans profil.ini, à la fin, si inexistant if ! grep -q "Name=$canal" "$dirProfil/profiles.ini" ; then # comptage profils existants - nbProfiles=$( grep -cEs '\[Profile[0-9]+\]' $dirProfil/profiles.ini ) + nbProfiles=$( grep -cEs '\[Profile[0-9]+\]' "$dirProfil/profiles.ini" ) # création profil dans profile.ini - echo >> "$dirProfil/profiles.ini" - echo "[Profile$nbProfiles]" >> "$dirProfil/profiles.ini" - echo "Name=$canal" >> "$dirProfil/profiles.ini" - echo "IsRelative=1" >> "$dirProfil/profiles.ini" - echo "Path=$canal" >> "$dirProfil/profiles.ini" + { + echo + echo "[Profile$nbProfiles]" + echo "Name=$canal" + echo "IsRelative=1" + echo "Path=$canal" + } >> "$dirProfil/profiles.ini" fi f__info "log:raw" "profil $appli $canal configuré" } # traitement système: lien /usr/bin, default profiles.ini, $1 canal -f_tb_config_system(){ # 14/01/2018 +f_tb_config_system(){ # 09/06/2018 local canal="$1" local ligne numero marqueur stockage profileIni="$dirProfil/profiles.ini" @@ -397,6 +414,7 @@ f_tb_config_system(){ # 14/01/2018 # set default=1 dans profiles.ini while read -r ligne ; do + # shellcheck disable=SC2034 [[ ${ligne} =~ ^\[Profile.*\]$ ]] && numero=${ligne//[\[Profile\]]} # n° profil, pas utilisé [ "$ligne" == "Name=$canal" ] && marqueur="ok" # détection canal recherché? marqueur actif [[ $ligne == "Default=1" ]] && continue # si Default existant, on saute, la ligne ne fera donc pas partie de $stockage (=effacement) @@ -423,7 +441,7 @@ f_tb_config_system(){ # 14/01/2018 } # copie du répertoire .default dans canal, $1=canal -f_tb_copie_default(){ # 25/12/2017 +f_tb_copie_default(){ # 09/03/2018 local canal="$1" profileDefault if [ ! -d "$dirProfil/$canal" ]; then @@ -432,13 +450,14 @@ f_tb_copie_default(){ # 25/12/2017 fi f_tb_alertIcedove - profileDefault=$( sed -En 's/Path=(.*\.default).*$/\1/p' $dirProfil/profiles.ini ) # recherche profil .default + profileDefault=$( sed -En 's/Path=(.*\.default).*$/\1/p' "$dirProfil/profiles.ini" ) # recherche profil .default if [ -z "$profileDefault" ] || [ ! -d "$dirProfil/$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 --preserve "$dirProfil/$profileDefault"/* "$dirProfil/$canal/" 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 @@ -454,71 +473,91 @@ f_tb_get_canalBas(){ # 25/12/2017 [ "$tb_canal_bas" ] && return 0 || return 1 } - # version en ligne et installée, affichage -f_tb_get_versions(){ # 04/03/2018 + # version en ligne et installée, [$1=quiet], affichage & assigne $version_tb_latest $version_tb_beta +f_tb_get_versions(){ # 10/06/2018 local canal recup_url prefixe verOnline verTbOnline verInstall verTbInstall + x_tb_get_version=1 for canal in latest beta; do # version online [ "$canal" == "beta" ] && prefixe="$canal-" recup_url="https://download.mozilla.org/?product=thunderbird-$prefixe""latest&os=$fu_archi&lang=fr" - verOnline=$( sed -E 's#.*thunderbird/releases/(.*)/linux-.*$#\1#' <<< "$( f__wget_test $recup_url loc )" ) - verTbOnline+=$( printf "%-7s: %-12s" $canal $verOnline ) + verOnline=$( sed -E 's#.*thunderbird/releases/(.*)/linux-.*$#\1#' <<< "$( f__wget_test "$recup_url" loc )" ) + verTbOnline+=$( printf "%-7s: %-12s" "$canal" "$verOnline" ) + case "$canal" in + latest ) version_tb_latest="$verOnline" ;; + beta ) version_tb_beta="$verOnline" ;; + esac # version installée if [ -x "$dirInstall$canal/thunderbird" ]; then - verInstall=$( $dirInstall$canal/thunderbird -v | grep -Eo '[0-9].*' ) - verTbInstall+=$( printf "%-7s: %-12s" $canal $verInstall ) + verInstall=$( "$dirInstall$canal"/thunderbird -v | grep -Eo '[0-9].*' ) + verTbInstall+=$( printf "%-7s: %-12s" "$canal" "$verInstall" ) else verTbInstall+=$( printf " %.s" $( seq 21 ) ) fi done + [ "$1" == "quiet" ] && return 0 - [[ "$( xargs <<< "$verTbInstall" )" ]] || verTbInstall="Non installé" - [[ -z "$( xargs <<< "$verTbOnline" )" || "$verTbOnline" =~ location ]] && verTbOnline="${RED}n/a" - + f__trim verTbInstall + f__trim verTbOnline + verTbInstall=${verTbInstall:="Non installé"} + verTbOnline=${verTbOnline:="${RED}n/a$STD"} + [[ "$verTbOnline" =~ location ]] && verTbOnline="${RED}n/a$STD" f__info "raw" "$appli en place: $GREEN$verTbInstall" f__info "$appli en ligne: $YELLOW$verTbOnline" } # installation, $1 canal [$2='manuel', $3 archive] -f_tb_install(){ # 04/03/2018 +f_tb_install(){ # 10/06/2018 local versArchive fileTemp prefixe canal="$1" dirTemp="/tmp/$script-install_tb" if [ "$2" == "manuel" ]; then - versArchive=$( sed -E 's/.*thunderbird-(.*)\.tar\.bz2.*$/\1/' <<< "$( basename $3 )" ) - f__info "installation manuelle dans $canal de thunderbird version $versArchive ($3)" + versArchive=${3%\.tar*} # version mozilla thunderbird-52.8.0.tar.bz2 + versArchive=${versArchive%\.linux*} # ancienne version thunderbird-52.0.0.linux64.tar.bz2 + versArchive=${versArchive%_*} # version encours + versArchive=${versArchive#*-} + f__info raw "installation manuelle dans $canal de thunderbird version $versArchive ($3)" fileTemp="$3" mkdir -p "$dirTemp" else - f__info "installation $appli-$canal" - fileTemp="$dirTemp/${appli,,}-$canal.$fu_archi.tar.bz2" + [ -z "$dl_only" ] && f__info "installation $appli-$canal" + (( x_tb_get_version == 1 )) || f_tb_get_versions quiet + case "$1" in + latest ) tbVersion="$version_tb_latest" ;; + beta ) tbVersion="$version_tb_beta" ;; + esac + fileTemp="$dirTemp/${appli,,}-${tbVersion}_$canal.$fu_archi.tar.bz2" # téléchargement & test archive f__info " - téléchargement..." [ "$canal" == "beta" ] && prefixe="$canal-" recup_url="https://download.mozilla.org/?product=thunderbird-$prefixe""latest&os=$fu_archi&lang=fr" mkdir -p "$dirTemp" - wget -q -c --show-progress --tries=2 --timeout=15 --user-agent="$user_agent" -o /dev/null -O "$fileTemp" "$recup_url" - [ "$?" -ne 0 ] && f__wget_test "$recup_url" + if ! wget -q -c --show-progress --tries=2 --timeout=15 --user-agent="$user_agent" -o /dev/null -O "$fileTemp" "$recup_url" ; then + f__wget_test "$recup_url" + fi fi f__archive_test "$fileTemp" || f__error "Le fichier $fileTemp n'est pas une archive tar.bz2 valide" + if [[ "$dl_to_svg" || "$dl_only" ]]; then + chown "$fu_user:" "$fileTemp" + cp "$fileTemp" ./ + fi echo + if [ "$dl_only" ]; then + return 0 + 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 "$dirInstall$canal/" # effacement éventuel répertoire existant + rm -fr "$dirInstall$canal" # effacement éventuel répertoire existant mkdir -p "$dirInstall$canal" mv -f "$dirTemp/thunderbird/"* "$dirInstall$canal/" chown -R "$fu_user:" "$dirInstall$canal/" chmod -R g+wrs,a+r "$dirInstall$canal/" # svg éventuelle archive, effacement répertoire temporaire - if [ "$dl_to_svg" == "ok" ]; then - chown "$fu_user:" "$fileTemp" - mv "$fileTemp" ./ - fi - rm -rf "$dirTemp/" + rm -fr "$dirTemp" # traitement finaux système ln -sf "$dirInstall$canal/chrome/icons/default/default48.png" "/usr/share/pixmaps/thunderbird-$canal.png" @@ -529,10 +568,13 @@ f_tb_install(){ # 04/03/2018 # lanceur dans /usr/bin echo '#!/bin/sh' > "/usr/bin/thunderbird-$canal" - echo >> "/usr/bin/thunderbird-$canal" - echo "echo \"\$@\" | grep -qE '\-P|\-\-ProfileManager' && exec $dirInstall$canal/thunderbird -P || \\" >> "/usr/bin/thunderbird-$canal" - echo " exec $dirInstall$canal/thunderbird -P $canal \"\$@\"" >> "/usr/bin/thunderbird-$canal" - chmod a+x "/usr/bin/thunderbird-$canal" + { + echo + # shellcheck disable=SC1117 + echo "echo \"\$@\" | grep -qE '\-P|\-\-ProfileManager' && exec $dirInstall$canal/thunderbird -P || \\" + echo " exec $dirInstall$canal/thunderbird -P $canal \"\$@\"" + } >> "/usr/bin/thunderbird-$canal" + chmod 755 "/usr/bin/thunderbird-$canal" f_tb_config_profil "$canal" # profiles.ini, répertoire profil f_tb_config_system "$canal" # lien /usr/bin, default dans le profile @@ -553,38 +595,40 @@ f_tb_install_manuel(){ # 25/12/2017 } # création lanceur.desktop, $1=canal à traiter -f_tb_lanceur_desktop(){ # 14/01/2018 +f_tb_lanceur_desktop(){ # 09/03/2018 local canal="$1" fileDesktop="/usr/share/applications/thunderbird-$1.desktop" [ -d "$dirInstall$canal" ] || return 0 # pas d'installation? sortie 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=$dirInstall$canal/thunderbird %u" >> "$fileDesktop" + { + echo "Name=$appli $canal" + echo "Name[fr]=$appli $canal" + echo "X-GNOME-FullName=$appli-$canal Web Browser" + echo "X-GNOME-FullName[fr]=$appli-$canal Navigateur Web" + echo "StartupWMClass=$appli-$canal" + echo "Exec=/usr/bin/thunderbird %u" if [ -e "$dirInstall$canal/chrome/icons/default/default256.png" ]; then - echo "Icon=$dirInstall$canal/chrome/icons/default/default256.png" >> "$fileDesktop" + echo "Icon=$dirInstall$canal/chrome/icons/default/default256.png" else - echo "Icon=$dirInstall$canal/chrome/icons/default/default48.png" >> "$fileDesktop" + echo "Icon=$dirInstall$canal/chrome/icons/default/default48.png" fi - echo "Comment=Read/Write Mail/News with $appli" >> "$fileDesktop" - echo "Comment[fr]=Lire/écrire des mails/news avec $appli" >> "$fileDesktop" - echo "GenericName=Mail Client" >> "$fileDesktop" - echo "GenericName[fr]=Client de messagerie" >> "$fileDesktop" - echo "Terminal=false" >> "$fileDesktop" - echo "X-MultipleArgs=false" >> "$fileDesktop" - echo "Type=Application" >> "$fileDesktop" - echo "Categories=Network;Email;News;" >> "$fileDesktop" - echo "MimeType=message/rfc822;x-scheme-handler/mailto;text/calendar;text/x-vcard;" >> "$fileDesktop" - echo "StartupNotify=true" >> "$fileDesktop" - echo "Keywords=EMail;E-mail;Contact;Addressbook;News;" >> "$fileDesktop" + echo "Comment=Read/Write Mail/News with $appli" + echo "Comment[fr]=Lire/écrire des mails/news avec $appli" + echo "GenericName=Mail Client" + echo "GenericName[fr]=Client de messagerie" + echo "Terminal=false" + echo "X-MultipleArgs=false" + echo "Type=Application" + echo "Categories=Network;Email;News;" + echo "MimeType=message/rfc822;x-scheme-handler/mailto;text/calendar;text/x-vcard;" + echo "StartupNotify=true" + echo "Keywords=EMail;E-mail;Contact;Addressbook;News;" + } >> "$fileDesktop" } # désinstallation, $1=canal -f_tb_remove(){ # 14/01/2018 +f_tb_remove(){ # 09/06/2018 local canal="$1" fileDesktop="/usr/share/applications/thunderbird-$1.desktop" if [ ! -d "$dirInstall$canal" ]; then @@ -594,7 +638,7 @@ f_tb_remove(){ # 14/01/2018 killall "$dirInstall$canal/thunderbird" &>/dev/null # suppression du répertoire - rm -rf "$dirInstall$canal/" + rm -fr "$dirInstall$canal" # suppression lanceurs rm -f "/usr/share/applications/thunderbird-$canal.desktop" rm -f "/usr/bin/thunderbird-$canal" @@ -606,16 +650,16 @@ f_tb_remove(){ # 14/01/2018 f_tb_get_canalBas && f_tb_config_system "$tb_canal_bas" # nouveau canal par défaut f__info "log" "thunderbird-$canal désinstallé, mais le profil est toujours en place" \ - "\tle supprimer manuellement si nécessaire, pour cela:" \ + "\\tle supprimer manuellement si nécessaire, pour cela:" \ "fermer toutes les instances ouvertes de thunderbird" \ "et lancer en console, en user:$GREEN thunderbird -P" } - # tache upgrade dans anacron hebdomadaire, via cron horaire, $1=upgrade|install|remove -fscript_cronAnacron(){ # 26/01/2018 + # anacron hebdomadaire, via cron horaire, $1=upgrade|install|remove +fscript_cronAnacron(){ # 09/06/2018 local dirAnacron dirSpool fileAnacron - type -t fscript_cronAnacron_special &>/dev/null && fscript_cronAnacron_special # test, si fonction spécifique, appel + type -t fscript_cronAnacron_special &>/dev/null && fscript_cronAnacron_special # test, si fonction spécifique, appel dirAnacron="/home/$fu_user/.config/anacron" dirSpool="$dirAnacron/spool" fileAnacron="$dirAnacron/$script.anacrontab" @@ -639,63 +683,72 @@ fscript_cronAnacron(){ # 26/01/2018 grep -q "$script" "/etc/crontab" || echo f__error "inscription crontab" ;; remove ) - rm -f "$dirSpool/$script"* &>/dev/null - rm -f "$fileAnacron" &>/dev/null - rmdir "$dirSpool" "$dirAnacron" &>/dev/null + rm -f "${dirSpool:?}/$script"* + rm -f "$fileAnacron" + rmdir "$${dirSpool:?}" "${dirAnacron:?}" 2>/dev/null ;; esac } - # version script, [$1=quiet], assigne $ver_script_install, $ver_script_online, $script_a_jour=ok|KO -fscript_get_version(){ # 24/01/2018 + # assigne $ver_script_install, $ver_script_online, $script_a_jour=ok|KO +fscript_get_version(){ # 09/06/2018 x_script_get_version=1 # version online - ver_script_online=$( wget -q --timeout=15 -o /dev/null -O - "$url_script" | grep -m1 '^version=' | cut -d'=' -f2 ) - [ "$?" -ne 0 ] && f__wget_test "$url_script" + if ver_script_online=$( wget -q --timeout=15 -o /dev/null -O - "$url_script" ); then + ver_script_online=${ver_script_online#*version=} + read -r ver_script_online <<< "$ver_script_online" + else + f__wget_test "$url_script" + fi # version installée if [ -e "$script_install" ]; then - ver_script_install=$( grep -m1 '^version=' $script_install | cut -d'=' -f2 ) + while read -r ; do + if [[ "$REPLY" =~ ^version= ]]; then + ver_script_install=${REPLY#*=} + fi + done < "$script_install" fi - + # maj ? if [[ "$ver_script_online" && "$script_install" ]]; then - [ "$ver_script_install" != "$ver_script_online" ] && script_a_jour="KO" || script_a_jour="ok" + if [ "$ver_script_install" != "$ver_script_online" ]; then + script_a_jour="KO" + else + script_a_jour="ok" + fi fi - [ "$ver_script_online" ] || ver_script_online="${RED}n/a" - [ "$ver_script_install" ] || ver_script_install="Non installé" - [ "$1" == "quiet" ] && return 0 - + # affichage + ver_script_online=${ver_script_online:="${RED}n/a$STD"} + ver_script_install=${ver_script_install:="Non installé"} f__info "raw" "script en place: $GREEN$ver_script_install" f__info "script en ligne: $YELLOW$ver_script_online" } - # installation du script dans le système -fscript_install(){ # 24/02/2018 +fscript_install(){ # 09/06/2018 if grep -Eq "$script_install|/usr/bin/$script" <<< "$0"; then f__info "${RED}l'installation dans le système doit se faire depuis le script non installé $GREEN(./$script -i )" return 1 fi - type -t fscript_install_special &>/dev/null && fscript_install_special # test, si fonction spécifique, appel + type -t fscript_install_special &>/dev/null && fscript_install_special # test, si fonction spécifique, appel f__requis "wget anacron cron" || exit 1 # install /opt mkdir -p /opt/bin/ - 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 + cp "$0" "$script_install" + ln -s "$script_install" "/usr/bin/$script" 2>/dev/null + chmod 755 "$script_install" # cron/anacron install fscript_cronAnacron "install" # création fichier log touch "$script_logs" - chmod 664 "$script_logs" # rw- rw- r--, proprio fu_user + chmod 644 "$script_logs" chown "$fu_user:" "$script_logs" "$script_install" [ -e "$fileDev" ] || rm -f "$0" ## on efface pas si fileDev (dev) f__info "log" "$script $version installé dans le système." "maintenant, appel du script par: $GREEN$script$BLUE (sans ./)" } - # suppression du script dans le système -fscript_remove(){ # 24/02/2018 +fscript_remove(){ # 09/06/2018 if ! grep -Eq "$script_install|/usr/bin/$script" <<< "$0"; then f__info "${RED}cette fonction doit être appelée depuis le script installé dans le système $GREEN($script -r)" @@ -706,21 +759,23 @@ fscript_remove(){ # 24/02/2018 return 1 fi - type -t fscript_remove_special &>/dev/null && fscript_remove_special # test, si fonction spécifique, appel + type -t fscript_remove_special &>/dev/null && fscript_remove_special # test, si fonction spécifique, appel # suppression /opt, lien /usr/bin rm -f "$script_install" - unlink "/usr/bin/$script" &>/dev/null + unlink "/usr/bin/$script" 2>/dev/null # cron/anacron remove fscript_cronAnacron "remove" f__info "log" "$script $version supprimé du système." } - # mise à jour script, [$1 != "" si upgrade en place, $1 dans message info] -fscript_update(){ # 01/03/2018 + # si upgrade en place, $1 != "", [$1 message info] +# shellcheck disable=SC2120 +# function references arguments, but none are ever passed. +fscript_update(){ # 09/06/2018 local dirTemp="/tmp/$script-maj" upgradeEnPlace="$1" - type -t fscript_update_special &>/dev/null && fscript_update_special # test, si fonction spécifique, appel + type -t fscript_update_special &>/dev/null && fscript_update_special # test, si fonction spécifique, appel if [ -z "$upgradeEnPlace" ] && ! grep -Eq "$script_install|/usr/bin/$script" <<< "$0"; then f__info "${RED}cette fonction doit être appelée depuis le script installé dans le système $GREEN($script -u)" return 1 @@ -733,28 +788,26 @@ fscript_update(){ # 01/03/2018 f__info "mise à jour en cours" fi mkdir -p "$dirTemp" - wget -q --tries=2 --timeout=15 -o /dev/null -O "$dirTemp/$script" "$url_script" - if [ "$?" -ne 0 ]; then - rm -rf "$dirTemp" + if ! wget -q --tries=2 --timeout=15 -o /dev/null -O "$dirTemp/$script" "$url_script"; then + rm -fr "$dirTemp" f__wget_test "$url_script" fi if grep -q '#!/bin/bash' "$dirTemp/$script" && grep -q '^### END CONTROL' "$dirTemp/$script"; then - cp -d "$dirTemp/$script" "$script_install" - chmod 775 "$script_install" # rwx rwx r-x, proprio fu_user + cp "$dirTemp/$script" "$script_install" + chmod 755 "$script_install" chown "$fu_user:" "$script_install" [ -z "$upgradeEnPlace" ] && fscript_cronAnacron "upgrade" - f__info "log" "$script mis à jour en version $ver_script_online $updateSpecial" + f__info "log" "$script mis à jour en version $ver_script_online $upgradeEnPlace" else f_info "log" "$script: échec update" "mauvais téléchargement, réessayer plus tard" fi - rm -rf "$dirTemp/" + rm -fr "$dirTemp" } -prg_init(){ # 04/03/2018 +prg_init(){ # 09/06/2018 PATH='/usr/sbin:/usr/bin:/sbin:/bin' TERM=xterm - IFS_INI="$IFS" IFS=$' \t\n' export PATH TERM IFS @@ -763,7 +816,7 @@ prg_init(){ # 04/03/2018 shopt -u force_fignore execfail failglob # test bash v4 - [ "$BASH_VERSINFO" == 4 ] || f__error "bash v4 requis" "version installée: $BASH_VERSION" + [ "${BASH_VERSINFO[0]}" == 4 ] || f__error "bash v4 requis" "version installée: $BASH_VERSION" # architectures possibles f__architecture || f__error "Seules les architecture 32 et 64 bits sont supportée (i686 & amd64) par Thunderbird" @@ -772,9 +825,13 @@ prg_init(){ # 04/03/2018 f__user retourFUser="$?" [ "$retourFUser" -eq 1 ] && f__error "user indéterminé" \ - "pour contourner, lancer le script avec:\n$GREEN USER_INSTALL= $0 \n" + "pour contourner, lancer le script avec:\\n$GREEN USER_INSTALL= $0 \\n" if [ "$retourFUser" -eq 2 ]; then - [ "$EUID" -eq 0 ] && fu_user="root" || f__error "user détecté, mais pas de home: /home/$fu_user" + if [ "$EUID" -eq 0 ]; then + fu_user="root" + else + f__error "user détecté, mais pas de home: /home/$fu_user" + fi f__info "user root" fi @@ -790,7 +847,7 @@ prg_init(){ # 04/03/2018 # tests au démarrage prg_init - # logo et définition couleurs + # logo f_affichage # paramètres script @@ -808,78 +865,74 @@ dirProfil="/home/$fu_user/.thunderbird" # emplacement profiles.ini produit_all="latest beta" produit_all_inverse="beta latest" - -options=$@ - # auto-installation script éventuel, si pas de marqueur $fileDev -if [[ $( dirname $0 ) != $( dirname $script_install ) && $( dirname $0 ) != "/usr/bin" && ! -e "$fileDev" ]]; then - options="-i" # option installation script -fi - -for j in $options; do # première passe options - case $j in - -i | --install | -r | --remove | ri | i-* | m-* | r-* | u-* ) - if [ "$EUID" -ne 0 ]; then - f__info "vous devez être$RED ROOT$BLUE pour cette opération" - f__sudo "exec $0 $@" - exit - fi - ;;& - --sauve ) - dl_to_svg="ok" - ;;& +script_options="$*" + # options +while (( $# )) ; do + case "$1" in + --sauve ) dl_to_svg="ok" ;; + --dev ) url_script=${url_script//\/master\///dev/} ;; + * ) options+=( "$1" ) ;; esac + shift done -options=${options//--sauve/ } -[ "$options" ] || options="-h" # vide? help + # auto-installation script éventuel, si pas de marqueur $fileDev +if [[ $( dirname "$0" ) != $( dirname "$script_install" ) && $( dirname "$0" ) != "/usr/bin" && ! -e "$fileDev" ]]; then + options=( -i ) # option installation script +fi +(( ${#options} == 0 )) && options=( -h ) # vide help (si fileDev), sinon install -for j in $options; do # deuxième passe options, actions - case $j in + #actions +for i in "${!options[@]}"; do # deuxième passe options, actions + produit=${options[$i]#*-} + # shellcheck disable=SC2221,SC2222 + case ${options[$i]} in + -i | --install | -r | --remove | ri | i-* | m-* | r-* | u-* ) + if [ "$EUID" -ne 0 ]; then + f__info raw "vous devez être$RED ROOT$BLUE pour cette opération" + f__sudo "exec $0 $script_options" + exit + fi ;;& d-latest | d-beta | d-all ) - produit=${j#*-} [ "$produit" == "all" ] && produit="$produit_all" for k in $produit; do f_tb_copie_default "$k" # copier un profil default sur un canal - done - ;; + done ;; i-latest | i-beta | i-all ) - produit=${j#*-} [ "$produit" == "all" ] && produit="$produit_all" for k in $produit; do f_tb_install "$k" # installation canal - done - ;; + done ;; m-latest | m-beta ) - produit=${j#*-} - f_tb_install_manuel "$produit" "$2" # installation manuelle d'une archive, $2=archive + f_tb_install_manuel "$produit" "${options[((i+1))]}" # installation manuelle d'une archive, $2=archive exit ;; r-latest | r-beta | r-all ) - produit=${j#*-} [ "$produit" == "all" ] && produit="$produit_all" for k in $produit; do f_tb_remove "$k" # remove - done - ;; + done ;; ri ) produit="$produit_all" for k in $produit; do f_tb_lanceur_desktop "$k" # réparation icône de tous les canaux installés - done - ;; + done ;; + t-latest | t-beta | t-all ) + [ "$produit" == "all" ] && produit="$produit_all" + for k in $produit; do + dl_only="ok" + f_tb_install "$k" # installation canal + done ;; u-latest | u-beta | u-all ) - produit=${j#*-} [ "$produit" == "all" ] && produit="$produit_all" for k in $produit; do f_tb_config_profil "$k" "menu" # configurer un canal pour user en cours f_tb_config_system "$k" # défaut système echo - done - ;; + done ;; version | versions ) # affiche versions thunderbird en ligne & installées, script fscript_get_version - f_tb_get_versions - ;; + f_tb_get_versions ;; -i | --install ) # installation du script dans le système fscript_install @@ -889,14 +942,13 @@ for j in $options; do # deuxième passe options, actions exit ;; -u | --upgrade ) # upgrade script operation="upgrade" + # shellcheck disable=SC2119 fscript_update exit ;; -v | --version ) # version du script, en ligne et exécuté - fscript_get_version - ;; + fscript_get_version ;; -h | --help | * ) # affichage help - f_help - ;; + f_help ;; esac done