From 020799c5fcf03fe0b4a52615bc75226ea9476942 Mon Sep 17 00:00:00 2001 From: kyodev Date: Mon, 11 Jun 2018 05:00:09 +0200 Subject: [PATCH] maj --- docs/scripts/getFlashPlayer.md | 72 +++-- scripts/getFlashPlayer | 466 +++++++++++++++++---------------- 2 files changed, 286 insertions(+), 252 deletions(-) diff --git a/docs/scripts/getFlashPlayer.md b/docs/scripts/getFlashPlayer.md index e55312d..db31581 100644 --- a/docs/scripts/getFlashPlayer.md +++ b/docs/scripts/getFlashPlayer.md @@ -1,7 +1,14 @@ # getFlashPlayer + +![version: 4.10.0](https://img.shields.io/badge/version-4.10.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) + + > script bash qui télécharge et installe la version officielle du plugin FlashPlayer pour Firefox (NPAPI) +> le script installé sera disponible pour les différents canaux en place, pour un utilisateur donné > le script installe le plugin pour l'utilisateur en cours, comme plugin utilisateur. > le script surveillera et mettra à jour le plugin lors d'une nouvelle version de FlashPlayer > le script se mettra éventuellement à jour, sans influence sur le plugin installé @@ -17,19 +24,19 @@ * privilèges **root** requis ```shell -wget -O getFlashPlayer https://framagit.org/kyodev/kyopages/raw/master/scripts/getFlashPlayer +wget -nv -O getFlashPlayer https://framaclic.org/h/getflashplayer chmod +x getFlashPlayer && ./getFlashPlayer ``` ```text - _ _____ _ _ ____ _ - __ _ ___| |_| ___| | __ _ ___| |__ | _ \| | __ _ _ _ ___ _ __ - / _' |/ _ \ __| |_ | |/ _' / __| '_ \| |_) | |/ _' | | | |/ _ \ '__| - | (_| | __/ |_| _| | | (_| \__ \ | | | __/| | (_| | |_| | __/ | - \__, |\___|\__|_| |_|\__,_|___/_| |_|_| |_|\__,_|\__, |\___|_| - |___/ |___/ - pour Firefox, version 4.0.0 - 27/12/2017 + _ _____ _ _ ____ _ + __ _ ___| |_| ___| | __ _ ___| |__ | _ \| | __ _ _ _ ___ _ __ + / _' |/ _ \ __| |_ | |/ _' / __| '_ \| |_) | |/ _' | | | |/ _ \ '__| + | (_| | __/ |_| _| | | (_| \__ \ | | | __/| | (_| | |_| | __/ | + \__, |\___|\__|_| |_|\__,_|___/_| |_|_| |_|\__,_|\__, |\___|_| + |___/ version 4.10.0 - 10/06/2018 |___/ pour Firefox + - getFlashPlayer 4.0.0 installé dans le système. + getFlashPlayer 4.10.0 installé dans le système. maintenant, appel du script par: getFlashPlayer (sans ./) ``` @@ -51,7 +58,8 @@ getFlashPlayer install / _' |/ _ \ __| |_ | |/ _' / __| '_ \| |_) | |/ _' | | | |/ _ \ '__| | (_| | __/ |_| _| | | (_| \__ \ | | | __/| | (_| | |_| | __/ | \__, |\___|\__|_| |_|\__,_|___/_| |_|_| |_|\__,_|\__, |\___|_| - |___/ pour Firefox, version 4.9.0 - 04/03/2018 |___/ + |___/ version 4.10.0 - 10/06/2018 |___/ pour Firefox + FlashPlayer n'est pas libre, c'est un programme propriétaire dont on ne peut pas connaître le code source, que l'on ne peut utiliser sans conditions, ni même distribuer librement. @@ -60,15 +68,15 @@ getFlashPlayer install c'est à dire Firefox et Chrom(ium). Préparez vous à cela... voir: https://developer.mozilla.org/fr/docs/Plugins/Roadmap - installation FlashPlayer, version 28.0.0.161 + installation FlashPlayer, version 30.0.0.113 - téléchargement... -/tmp/getFlashPlayer/flashplayer_28. 100%[=====================================>] 8,61M 5,09MB/s ds 1,7s +/tmp/getFlashPlayer/flashplayer_30.0.0.113_npapi 100%[========================>] 8,63M 7,53MB/s ds 1,1s - décompression... - FlashPlayer 28.0.0.161 installé + FlashPlayer 30.0.0.113 installé Pour tester: http://get.adobe.com/flashplayer/about/ ``` @@ -94,24 +102,26 @@ getFlashPlayer -h / _' |/ _ \ __| |_ | |/ _' / __| '_ \| |_) | |/ _' | | | |/ _ \ '__| | (_| | __/ |_| _| | | (_| \__ \ | | | __/| | (_| | |_| | __/ | \__, |\___|\__|_| |_|\__,_|___/_| |_|_| |_|\__,_|\__, |\___|_| - |___/ pour Firefox, version 4.9.0 - 04/03/2018 |___/ + |___/ version 4.10.0 - 10/06/2018 |___/ pour Firefox + ----------------------------------------------------------------------- getFlashPlayer install : installation de Flashplayer - avec option --sauve l'archive téléchargée est sauvegardée dans le répertoire courant - getFlashPlayer remove : désinstallation de Flashplayer getFlashPlayer upgrade : mise à jour plugin si disponible - getFlashPlayer version : versions de Flashplayer et du script, en ligne et installée - + getFlashPlayer version : versions de Flashplayer et du script, en ligne et en place + getFlashPlayer manuel archive.tar.gz : installation d'une archive téléchargée manuellement + + --dev : une version de dev du script (si existante) est recherchée + --sauve : le téléchargement est sauvegardé dans le répertoire courant en plus de l'installation ----------------------------------------------------------------------- ./getFlashPlayer (ou ./getFlashPlayer -i) : installation du script dans le système (root) getFlashPlayer -h, --help : affichage aide getFlashPlayer -r, --remove : désinstallation du script (root) getFlashPlayer -u, --upgrade : mise à jour script & Flashplayer getFlashPlayer -v, --version : version du script - - plus d'infos: https://kyodev.frama.io/kyopages/scripts/getFlashPlayer/ + ----------------------------------------------------------------------- + plus d'infos: https://framaclic.org/h/doc-getflashplayer ----------------------------------------------------------------------- FlashPlayer n'est pas libre, c'est un programme propriétaire dont on ne peut pas connaître le code source, que l'on ne peut utiliser sans conditions, ni même distribuer librement. @@ -134,13 +144,14 @@ getFlashPlayer version / _' |/ _ \ __| |_ | |/ _' / __| '_ \| |_) | |/ _' | | | |/ _ \ '__| | (_| | __/ |_| _| | | (_| \__ \ | | | __/| | (_| | |_| | __/ | \__, |\___|\__|_| |_|\__,_|___/_| |_|_| |_|\__,_|\__, |\___|_| - |___/ pour Firefox, version 4.9.0 - 04/03/2018 |___/ + |___/ version 4.10.0 - 10/06/2018 |___/ pour Firefox + - script en place: 4.9.0 - script en ligne: 4.8.2 + script en place: 4.10.0 + script en ligne: 4.10.0 - FlashPlayer en place: 28.0.0.161 - FlashPlayer en ligne: 28.0.0.161 + FlashPlayer en place: 30.0.0.113 + FlashPlayer en ligne: 30.0.0.113 ``` @@ -215,22 +226,25 @@ getFlashPlayer -r ## sources -sur [framagit](https://framagit.org/kyodev/kyopages/blob/master/scripts/getFlashPlayer) +sur [framagit](https://framagit.org/sdeb/getFlashPlayer/blob/master/getFlashPlayer) ## changelog -sur [framagit](https://framagit.org/kyodev/kyopages/blob/master/scripts/getFlashPlayer_changelog.md) +sur [framagit](https://framagit.org/sdeb/getFlashPlayer/blob/master/CHANGELOG.md) ## contact pour tout problème ou suggestion concernant ce script, n'hésitez pas à ouvrir une issue -[Framagit](https://framagit.org/kyodev/kyopages/issues) +[Framagit](https://framagit.org/sdeb/getFlashPlayer/issues) IRC freenode: ##sdeb ## license -[LPRAB/WTFPL](https://framagit.org/kyodev/kyopages/blob/master/scripts/LICENSE.md) +[LPRAB/WTFPL](https://framagit.org/sdeb/getFlashPlayer/blob/master/LICENSE.md) + + +![compteur](https://framaclic.org/h/getflashplayer-gif) diff --git a/scripts/getFlashPlayer b/scripts/getFlashPlayer index 5edbd69..b9fd994 100755 --- a/scripts/getFlashPlayer +++ b/scripts/getFlashPlayer @@ -1,9 +1,9 @@ #!/bin/bash -version=4.9.0 -date="04/03/2018" +version=4.10.0 +date="10/06/2018" script="getFlashPlayer" -contact="IRC ##sdeb@freenode.net ou https://framagit.org/sdeb/getFlashPlayer/issues" +# contact="IRC ##sdeb@freenode.net ou https://framagit.org/sdeb/getFlashPlayer/issues" ##### license LPRAB/WTFPL # auteur: simpledeb @@ -13,14 +13,11 @@ contact="IRC ##sdeb@freenode.net ou https://framagit.org/sdeb/getFlashPlayer/iss # détecte architecture système, assign $fu_archi: i386|x86_64 # return 1 on unknown architecture # remarque, debian: dpkg --print-architecture affiche i386 -f__architecture(){ # 14/12/2017 SPECIFIQUE +f__architecture(){ # 11/06/2018 SPECIFIQUE - x_architecture=1 case "$(uname -m)" in - amd64 | x86_64 ) - fu_archi="x86_64";; - i?86 | x86 ) - fu_archi="i386";; + amd64 | x86_64 ) fu_archi="x86_64";; + i?86 | x86 ) fu_archi="i386";; * ) case "$(getconf LONG_BIT)" in 64 ) @@ -34,48 +31,49 @@ f__architecture(){ # 14/12/2017 SPECIFIQUE } # 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,72 +290,73 @@ f__wget_test(){ # 22/02/2018 if [ "$retourWget" != "0" ]; then rm -f "$file_test_wget" f__error "wget, erreur $retourWget" "$1" "$YELLOW$retourHttp" "$location" - echo -e "$RED erreur wget, $retourWget \n $1 \n $YELLOW$retourHttp \n $location$STD" # pour les diags + echo -e "$RED erreur wget, $retourWget \\n $1 \\n $YELLOW$retourHttp \\n $location$STD" # pour les diags return 1 fi if grep -q '200' <<< "$retourHttp"; then - echo -e "$GREEN\ntout est ok, réessayer$STD\n" + echo -e "$GREEN\\ntout est ok, réessayer$STD\\n" fi rm -f "$file_test_wget" exit 0 } -f_affichage(){ # 24/01/2018 - local affichage_text=" _ _____ _ _ ____ _ +# shellcheck disable=SC1117 +f_affichage(){ # 11/06/2018 + + clear 2>/dev/null || tput clear 2>/dev/null + echo -n "$BLUE" + cat <<- end + _ _____ _ _ ____ _ __ _ ___| |_| ___| | __ _ ___| |__ | _ \| | __ _ _ _ ___ _ __ / _' |/ _ \ __| |_ | |/ _' / __| '_ \| |_) | |/ _' | | | |/ _ \ '__| | (_| | __/ |_| _| | | (_| \__ \ | | | __/| | (_| | |_| | __/ | \__, |\___|\__|_| |_|\__,_|___/_| |_|_| |_|\__,_|\__, |\___|_| - |___/ |___/" + |___/ ${YELLOW}version $version - $date$STD |___/ ${RED}pour Firefox$STD + - clear - echo "$BLUE$affichage_text" - tput cuu1 # une ligne plus haut - tput cuf 10 # 10 caractères à droite - echo -e "${YELLOW}pour Firefox, version $version - $date$STD\n" + end } -f_help(){ # 04/03/2018 - local ligne help=( - "-----------------------------------------------------------------------" - "$BLUE$script install$STD : installation de $appli" - " avec option $GREEN--sauve$STD l'archive téléchargée est sauvegardée dans le répertoire courant" - "" - "$BLUE$script remove$STD : désinstallation de $appli" - "$BLUE$script upgrade$STD : mise à jour plugin si disponible" - "$BLUE$script version$STD : versions de $appli et du script, en ligne et installée" - "" - "$BLUE$script manuel$GREEN archive.tar.gz$STD : installation d'une archive téléchargée manuellement" - "-----------------------------------------------------------------------" - "$BLUE./$script$STD (ou $BLUE./$script -i$STD) : installation du script dans le système (root)" - "$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 script & $appli" - "$BLUE$script -v$STD, --version : version du script" - "" - ) +f_help(){ # 11/06/2018 tput cuu1 # une ligne plus haut - for ligne in "${help[@]}"; do - echo -e " $ligne" - done - echo -e "$STD plus d'infos: $GREEN$url_notice$STD" - echo " -----------------------------------------------------------------------" + cat <<- end + ----------------------------------------------------------------------- + $BLUE$script install :$STD installation de $appli + $BLUE$script remove :$STD désinstallation de $appli + $BLUE$script upgrade :$STD mise à jour plugin si disponible + $BLUE$script version :$STD versions de $appli et du script, en ligne et en place + + $BLUE$script manuel ${GREEN}archive.tar.gz :$STD installation d'une archive téléchargée manuellement + + $GREEN--dev :$STD une version de dev du script (si existante) est recherchée + $GREEN--sauve :$STD le téléchargement est sauvegardé dans le répertoire courant en plus de l'installation + ----------------------------------------------------------------------- + $BLUE./$script$STD (ou $BLUE./$script -i$STD) : installation du script dans le système (root) + $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 script & $appli + $BLUE$script -v$STD, --version : version du script + ----------------------------------------------------------------------- + $STD plus d'infos: $GREEN$url_notice$STD + ----------------------------------------------------------------------- + end } -fflash_avertissement(){ # 24/01/2018 +fflash_avertissement(){ # 11/06/2018 -cat << 'EOF' - FlashPlayer n'est pas libre, c'est un programme propriétaire dont on ne peut pas connaître - le code source, que l'on ne peut utiliser sans conditions, ni même distribuer librement. - Il souffre de nombreuses vulnérabilités chroniques, depuis des années... - Il sera plus ou moins bloqué à terme pas les navigateurs majeurs, - c'est à dire Firefox et Chrom(ium). Préparez vous à cela... -EOF - echo -e " voir:$GREEN https://developer.mozilla.org/fr/docs/Plugins/Roadmap$STD\n" + cat <<- end + FlashPlayer n'est pas libre, c'est un programme propriétaire dont on ne peut pas connaître + le code source, que l'on ne peut utiliser sans conditions, ni même distribuer librement. + Il souffre de nombreuses vulnérabilités chroniques, depuis des années... + Il sera plus ou moins bloqué à terme pas les navigateurs majeurs, + c'est à dire Firefox et Chrom(ium). Préparez vous à cela... + voir:$GREEN https://developer.mozilla.org/fr/docs/Plugins/Roadmap$STD + + end } - # version Flash en ligne & installée, si $1="quiet" pas d'affichage, $ver_flash, $plugin_a_jour=ko + # version Flash en ligne & installée, si $1="quiet" pas d'affichage, assigne $ver_flash, $plugin_a_jour=ko fflash_get_version(){ # 24/01/2018 local verInstall @@ -353,22 +366,21 @@ fflash_get_version(){ # 24/01/2018 sed -nr 's/^.*AUTO_ID.*Version[[:blank:]]+([0-9].*[0-9]).*$/\1/p' ) # détection version installée if [ -e "$dir_install/libflashplayer.so" ]; then - verInstall=$( strings $dir_install/libflashplayer.so | grep -Eo '[0-9]+_[0-9]+_[0-9]+_[0-9]+' | sed 's/_/./g' ) + verInstall=$( strings "$dir_install"/libflashplayer.so | grep -Eo '[0-9]+_[0-9]+_[0-9]+_[0-9]+' | sed 's/_/./g' ) [[ "$ver_flash" && "$verInstall" == "$ver_flash" ]] || plugin_a_jour="ko" else verInstall="Non Installé" fi - [ "$ver_flash" ] || ver_flash="${RED}n/a" [ "$1" == "quiet" ] && return 0 - f__info "raw" "FlashPlayer en place: $GREEN$verInstall" - f__info "FlashPlayer en ligne: $YELLOW$ver_flash" + f__info "raw" "FlashPlayer en place: $GREEN$verInstall$STD" + f__info "FlashPlayer en ligne: $YELLOW$ver_flash$STD" } # install plugin dans config user mozilla, [$1='manuel', $2 archive] -fflash_install(){ # 04/03/2018 - local verArchive recup_url file_temp dirTemp="/tmp/$script" +fflash_install(){ # 11/06/2018 + local verArchive recup_url dirTemp="/tmp/$script" [ "$operation" == "upgrade" ] || fflash_avertissement mkdir -p "$dirTemp" @@ -383,12 +395,14 @@ fflash_install(){ # 04/03/2018 f__info " - téléchargement..." recup_url="https://fpdownload.adobe.com/get/flashplayer/pdc/" recup_url+="$ver_flash/flash_player_npapi_linux.$fu_archi.tar.gz" - wget -q -c --show-progress --tries=2 --timeout=15 --user-agent="$user_agent" --referer="$url_online" -o /dev/null -O "$fileTemp" "$recup_url" - [ "$?" -eq 0 ] || f__wget_test "$recup_url" + if ! wget -q -c --show-progress --tries=2 --timeout=15 --user-agent="$user_agent" \ + --referer="$url_online" -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.gz valide" # décompression archive téléchargée dans dossier de travail - f__info "\n - décompression..." + f__info "\\n - décompression..." tar -xaf "$fileTemp" -C "$dirTemp/" verArchive=$( grep -m1 -i 'version' "$dirTemp/readme.txt" ) verArchive=${verArchive,,} @@ -402,7 +416,7 @@ fflash_install(){ # 04/03/2018 chown "$fu_user:" "$fileTemp" mv "$fileTemp" ./ fi - rm -Rf "$dirTemp/" + rm -fr "$dirTemp" if [ "$1" == "manuel" ]; then f__info "log" "archive FlashPlayer $verArchive installé" @@ -421,11 +435,11 @@ fflash_install_manuel(){ # 27/12//2017 } # suppression du plugin -fflash_remove(){ # 24/01/2018 +fflash_remove(){ # 11/06/2018 local verInstall if [ ! -e "$dir_install/libflashplayer.so" ]; then - f__info "FlashPlayer non installé pour $fu_user\n" + f__info "FlashPlayer non installé pour $fu_user\\n" return 1 fi rm "$dir_install/libflashplayer.so" @@ -436,10 +450,10 @@ fflash_remove(){ # 24/01/2018 } # test et mise à jour plugin si plugin outdated -fflash_upgrade(){ # 24/01/2018 +fflash_upgrade(){ # 11/06/2018 if [ ! -e "$dir_install/libflashplayer.so" ]; then - f__info "FlashPlayer non installé pour $fu_user\n" + f__info "FlashPlayer non installé pour $fu_user\\n" return 1 fi (( x_get_version == 1 )) || fflash_get_version "quiet" @@ -453,11 +467,11 @@ fflash_upgrade(){ # 24/01/2018 fi } - # 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" @@ -481,63 +495,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)" @@ -548,21 +571,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 @@ -575,33 +600,31 @@ 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(){ # 11/06/2018 PATH='/usr/sbin:/usr/bin:/sbin:/bin' TERM=xterm - IFS_INI="$IFS" IFS=$' \t\n' export PATH TERM IFS # test bash v4 - [ "$BASH_VERSINFO" == 4 ] || f__error "bash v4 requis" "version installée: $BASH_VERSION" + [ "${BASH_VERSINFO[0]}" == 4 ] || f__error "bash v4 requis" "version installée: $BASH_VERSION" # architectures possibles f__architecture || f__error "Seules les architecture 32 et/ou 64 bits sont supportée (i686 & amd64)" @@ -610,9 +633,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 @@ -636,78 +663,71 @@ user_agent="Mozilla/5.0 Firefox" fileDev="/opt/bin/fileDev" script_install="/opt/bin/$script" script_logs="/var/log/sdeb_$script.log" -url_script="https://framagit.org/sdeb/getIp/raw/master/getIp" -url_notice="https://framaclic.org/h/doc-getip" +url_script="https://framagit.org/sdeb/getFlashPlayer/raw/master/getFlashPlayer" +url_notice="https://framaclic.org/h/doc-getflashplayer" # paramètres flash appli="Flashplayer" dir_install="/home/$fu_user/.mozilla/plugins" url_online="https://get.adobe.com/fr/flashplayer/" # test version & referer -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 ) - 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 - case $j in + #actions +for i in "${!options[@]}"; do # deuxième passe options, actions + # shellcheck disable=SC2221,SC2222 + case ${options[$i]} in + -i | --install | -r | --remove ) + 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 ;;& install ) # installation plugin - fflash_install - ;; + fflash_install ;; manuel ) # installation manuelle d'un chargement - fflash_install_manuel "$2" - shift 1 - exit;; + fflash_install_manuel "${options[((i+1))]}" + exit ;; remove ) # remove plugin - fflash_remove - ;; + fflash_remove ;; upgrade ) # upgrade plugin si installé operation="upgrade" - fflash_upgrade - ;; + fflash_upgrade ;; version | versions ) # version plugin en ligne & installée fscript_get_version - fflash_get_version - ;; + fflash_get_version ;; -i | --install ) # installation du script dans le système - fscript_install - ;; + fscript_install ;; -r | --remove ) # désinstallation du script - fscript_remove - ;; + fscript_remove ;; -u | --upgrade ) # upgrade script et plugin operation="upgrade" + # shellcheck disable=SC2119 fscript_update $0 upgrade # on relance le script en upgrade pour le plugin exit ;; -v | --version ) # version du script, en ligne et en place - fscript_get_version - ;; + fscript_get_version ;; -h | --help | * ) # affichage help f_help - fflash_avertissement - ;; + fflash_avertissement ;; esac done @@ -715,8 +735,8 @@ exit 0 ### END CONTROL (contrôle chargement) -wget -nv -O getFlashPlayer https://framaclic.org/h/getip -curl -L -o getFlashPlayer https://framaclic.org/h/getip +wget -nv -O getFlashPlayer https://framaclic.org/h/getflashplayer +curl -L -o getFlashPlayer https://framaclic.org/h/getflashplayer chmod +x getFlashPlayer && ./getFlashPlayer wget -nv -O getFlashPlayer https://framagit.org/sdeb/getFlashPlayer/raw/master/getFlashPlayer