This commit is contained in:
kyodev 2018-06-11 05:00:09 +02:00
parent ccec3eb45a
commit 020799c5fc
2 changed files with 286 additions and 252 deletions

View File

@ -1,7 +1,14 @@
# getFlashPlayer # 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 > script bash qui télécharge et installe la version officielle du plugin FlashPlayer
pour Firefox (NPAPI) 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 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 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é > le script se mettra éventuellement à jour, sans influence sur le plugin installé
@ -17,19 +24,19 @@
* privilèges **root** requis * privilèges **root** requis
```shell ```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 chmod +x getFlashPlayer && ./getFlashPlayer
``` ```
```text ```text
_ _____ _ _ ____ _ _ _____ _ _ ____ _
__ _ ___| |_| ___| | __ _ ___| |__ | _ \| | __ _ _ _ ___ _ __ __ _ ___| |_| ___| | __ _ ___| |__ | _ \| | __ _ _ _ ___ _ __
/ _' |/ _ \ __| |_ | |/ _' / __| '_ \| |_) | |/ _' | | | |/ _ \ '__| / _' |/ _ \ __| |_ | |/ _' / __| '_ \| |_) | |/ _' | | | |/ _ \ '__|
| (_| | __/ |_| _| | | (_| \__ \ | | | __/| | (_| | |_| | __/ | | (_| | __/ |_| _| | | (_| \__ \ | | | __/| | (_| | |_| | __/ |
\__, |\___|\__|_| |_|\__,_|___/_| |_|_| |_|\__,_|\__, |\___|_| \__, |\___|\__|_| |_|\__,_|___/_| |_|_| |_|\__,_|\__, |\___|_|
|___/ |___/ |___/ version 4.10.0 - 10/06/2018 |___/ pour Firefox
pour Firefox, version 4.0.0 - 27/12/2017
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 ./) 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 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. 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... c'est à dire Firefox et Chrom(ium). Préparez vous à cela...
voir: https://developer.mozilla.org/fr/docs/Plugins/Roadmap 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... - 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... - décompression...
FlashPlayer 28.0.0.161 installé FlashPlayer 30.0.0.113 installé
Pour tester: http://get.adobe.com/flashplayer/about/ 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 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 remove : désinstallation de Flashplayer
getFlashPlayer upgrade : mise à jour plugin si disponible 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 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 (ou ./getFlashPlayer -i) : installation du script dans le système (root)
getFlashPlayer -h, --help : affichage aide getFlashPlayer -h, --help : affichage aide
getFlashPlayer -r, --remove : désinstallation du script (root) getFlashPlayer -r, --remove : désinstallation du script (root)
getFlashPlayer -u, --upgrade : mise à jour script & Flashplayer getFlashPlayer -u, --upgrade : mise à jour script & Flashplayer
getFlashPlayer -v, --version : version du script 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 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. 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 place: 4.10.0
script en ligne: 4.8.2 script en ligne: 4.10.0
FlashPlayer en place: 28.0.0.161 FlashPlayer en place: 30.0.0.113
FlashPlayer en ligne: 28.0.0.161 FlashPlayer en ligne: 30.0.0.113
``` ```
@ -215,22 +226,25 @@ getFlashPlayer -r
## sources ## sources
sur [framagit](https://framagit.org/kyodev/kyopages/blob/master/scripts/getFlashPlayer) sur [framagit](https://framagit.org/sdeb/getFlashPlayer/blob/master/getFlashPlayer)
## changelog ## 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 ## contact
pour tout problème ou suggestion concernant ce script, n'hésitez pas à ouvrir une issue 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 IRC freenode: ##sdeb
## license ## 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)

View File

@ -1,9 +1,9 @@
#!/bin/bash #!/bin/bash
version=4.9.0 version=4.10.0
date="04/03/2018" date="10/06/2018"
script="getFlashPlayer" 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 ##### license LPRAB/WTFPL
# auteur: simpledeb # 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 # détecte architecture système, assign $fu_archi: i386|x86_64
# return 1 on unknown architecture # return 1 on unknown architecture
# remarque, debian: dpkg --print-architecture affiche i386 # 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 case "$(uname -m)" in
amd64 | x86_64 ) amd64 | x86_64 ) fu_archi="x86_64";;
fu_archi="x86_64";; i?86 | x86 ) fu_archi="i386";;
i?86 | x86 )
fu_archi="i386";;
* ) * )
case "$(getconf LONG_BIT)" in case "$(getconf LONG_BIT)" in
64 ) 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 # test validité archive, $1 archive, assigne $archive_detect (gzip|xz|deb|zip), return 1 si inconnue
f__archive_test(){ # 19/12/2017 f__archive_test(){ # O9/03/2018
local filetest=$( file -b $1 ) local filetest
filetest=$( file -b "$1" )
grep -q 'gzip compressed data' <<< "$filetest" && archive_detect="gzip" grep -q 'gzip compressed data' <<< "$filetest" && archive_detect="gzip"
grep -q 'bzip2 compressed data' <<< "$filetest" && archive_detect="bzip2" grep -q 'bzip2 compressed data' <<< "$filetest" && archive_detect="bzip2"
grep -q 'Debian binary package' <<< "$filetest" && archive_detect="deb" grep -q 'Debian binary package' <<< "$filetest" && archive_detect="deb"
grep -q 'Zip archive data' <<< "$filetest" && archive_detect="zip" grep -q 'Zip archive data' <<< "$filetest" && archive_detect="zip"
grep -q 'XZ compressed data' <<< "$filetest" && archive_detect="xz" 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 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 ) 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" STD=$( tput sgr0 ) # retour "normal"
BOLD=$( tput bold ) BOLD=$( tput bold )
ITAL=$( tput sitm ) ITAL=$( tput sitm )
SOUL=$( tput smul ) SOUL=$( tput smul )
else else
YELLOW=$( echo -n "\033[0;33m" ) # ? YELLOW=$'\033[0;33m' # ?
GREEN=$( echo -n "\033[0;32m" ) # ok GREEN=$'\033[0;32m' # ok
BLUE=$( echo -n "\033[0;34m" ) # info BLUE=$'\033[0;34m' # info
RED=$( echo -n "\033[0;31m" ) # alerte RED=$'\033[0;31m' # alerte
COLOR=$( echo -n "\033[0m" ) # standard STD=$'\033[0m' # standard
STD=$( echo -n "\033[0m" ) # standard
fi fi
} }
# affichage $1 en rouge, $1++ optionnels en bleu, sortie script sur erreur, log $1 si $operation=upgrade # 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 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 for (( i=2 ; i<=$# ; i++ )); do
echo -e " $BLUE${!i}$STD" echo -e " $BLUE${!i}$STD" >&2
done done
echo echo
[ "$operation" == "upgrade" ] && f__log "$script $version: $1" [ "$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" # affichage en bleu, si $1=raw pas de ligne vide à la fin, si $1=log alors uniquement $2 logué, combiné: $1="log:raw"
f__info(){ # 22/02/2018 f__info(){ # 07/06/2018
local depart=1 i local depart=1 log i
[[ "$1" =~ "raw" || "$1" =~ "log" ]] && depart=2 if [[ "$1" =~ "raw" || "$1" =~ "log" ]]; then
[[ "$1" =~ "log" ]] && f__log "$( sed -E 's/\\t//;s/\\n// ' <<< "$2" | xargs )" depart=2
for (( i=$depart ; i<=$# ; i++ )); do 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" echo -e " $BLUE${!i}$STD"
done done
[[ "$1" =~ raw ]] || echo [[ "$1" =~ raw ]] || echo
} }
# log spécifique, fichier log limité à 10000 octets, $1 message à loguer # 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 [ -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" echo "$(date +%Y%m%d\ %H%M%S) $1" &>/dev/null > "$script_logs"
else else
echo "$(date +%Y%m%d\ %H%M%S) $1" &>/dev/null >> "$script_logs" 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" # 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) # si manque, return 1 & affiche commandes manquantes (si debian, ajout proposition paquet à installer)
f__requis(){ # 26/01/2018 f__requis(){ # 06/06/2018
local ENV_DEBIAN ireq table package commands command commandsMissing packagesMissing local ENV_DEBIAN c_echo ireq cmds package commands command commandsMissing packagesMissing
type -p "dpkg" &>/dev/null && ENV_DEBIAN="oui" # debian if type -p dpkg &>/dev/null ; then
type -t f__info &>/dev/null && c_echo="f__info" || c_echo="echo -e" # f__info existe? sinon echo ENV_DEBIAN="oui" # debian
fi
for ireq in $1; do # pour tous les composants de la liste $1 if type -t f__info &>/dev/null; then
table=( ${ireq//>/ } ) # séparation sur >, split avec double bashisme, mais évite manip $IFS c_echo="f__info"
else
commands=( ${table[0]//|/ } ) # séparation sur | c_echo="echo -e" # f__info existe? sinon echo
if [ ${table[1]} ]; then fi
package=${table[1]} for ireq in $1; do
else IFS='>' read -r cmds package <<< "$ireq" # ex: "awk|gawk>gawk wget file tar killall>psmisc"
package="$commands" # pas de oackages dans les options, donc idem commands[0] mapfile -t -d '|' commands <<< "${cmds}"
fi [ -z "$package" ] && package=${commands[0]%$'\n'} # pas de packages dans les options, donc = commands[0
for command in "${commands[@]%$'\n'}"; do
for command in ${commands[@]}; do # pour toutes les commandes
if type -p "$command" &>/dev/null ; then if type -p "$command" &>/dev/null ; then
unset commandsMissing packagesMissing unset commandsMissing packagesMissing
break break
@ -136,8 +141,8 @@ f__requis(){ # 26/01/2018
done done
# dédoublonnage & triage # dédoublonnage & triage
commandsMissing=$( echo $commandsMissing | tr ' ' '\n' | sort --unique | tr '\n' ' ' ) commandsMissing=$( echo "$commandsMissing" | tr ' ' '\n' | sort --unique | tr '\n' ' ' )
packagesMissing=$( echo $packagesMissing | tr ' ' '\n' | sort --unique | tr '\n' ' ' ) packagesMissing=$( echo "$packagesMissing" | tr ' ' '\n' | sort --unique | tr '\n' ' ' )
# suppression éventuel espace final # suppression éventuel espace final
commandsMissing=${commandsMissing% } commandsMissing=${commandsMissing% }
packagesMissing=${packagesMissing% } packagesMissing=${packagesMissing% }
@ -152,50 +157,57 @@ f__requis(){ # 26/01/2018
[ "$commandsMissing" ] && return 1 || return 0 [ "$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 sudo si possible sera utilisé.
# si su &2 redirigé sur &1 # si su &2 redirigé sur &1
# si bash inexistant, return 2 # si bash inexistant, return 2
f__sudo(){ # 24/02/2018 f__sudo(){ # 10/06/2018
local nb sudo isudo toBash options nbDefault=3 local nb sudo isudo options nbDefault=2
# détermination sudo possible # 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 if sudo -v &>/dev/null && [ $EUID -ne 0 ] ; then
sudo="sudo su --shell $toBash --preserve-environment -c " sudo="sudo su --preserve-environment -c "
else else
sudo="su --shell $toBash --preserve-environment -c " sudo="su --preserve-environment -c "
fi fi
# extraction nb de tentatives éventuel # extraction nb de tentatives éventuel
if [[ "$@" =~ :.{1,2}: ]]; then if [[ "$*" =~ :.{1,2}: ]]; then
nb="$@" nb="$*"
nb=${nb#*:} nb=${nb#*:}
nb=${nb%:*} nb=${nb%:*}
options=${@//:$nb:/ } options=${*//:$nb:/ }
(( ${nb}+1 )) 2>/dev/null || nb="$nbDefault" # test si numérique, sinon, (( nb+1 )) 2>/dev/null || nb="$nbDefault" # test si numérique, sinon,
else else
nb="$nbDefault" nb="$nbDefault"
options="$@" options="$*"
fi fi
# lancement cmds # lancement cmds
if [[ "$sudo" =~ ^sudo ]]; then if [[ "$sudo" =~ ^sudo ]]; then
$sudo "$options" $sudo "$options"
else else
for (( isudo=1 ; isudo<="$nb" ; isudo++ )); do for (( isudo=1 ; isudo<="$nb" ; isudo++ )); do
echo -n "[su] Root, " echo -e "[su] Mot de passe root :"
$sudo "$options" 2>&1 # redirection demande pass (et erreur) sur &1 (utile quand &2 est redirigé en amont) $sudo "$options" 2>/dev/null && break
[ "$?" == 0 ] && break
[ "$isudo" == "$nb" ] && return 1 [ "$isudo" == "$nb" ] && return 1
done done
echo
fi 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 # user ayant initié la session graphique, assigne $fu_user
# return 1 sur échec identification user, return 2 sur absence home/ # return 1 sur échec identification user, return 2 sur absence home/
# gestion variable environnement user avec: USER_INSTALL=<user> script # gestion variable environnement user avec: USER_INSTALL=<user> script
f__user(){ # 24/02/2018 f__user(){ # 08/03/2018
local user userid test root_login local user userid root_login
root_login="$(grep ':0:' /etc/passwd | cut -d':' -f1)" || root_login="root" 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 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"; userid="$SUDO_UID";
elif grep -qEo '[0-9]+' <<< "$XDG_RUNTIME_DIR" ; then elif grep -qEo '[0-9]+' <<< "$XDG_RUNTIME_DIR" ; then
userid=$( grep -Eo '[0-9]+' <<< "$XDG_RUNTIME_DIR" | cut -d'/' -f4 ) 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 ) userid=$( grep -Eo '[0-9]+' <<< "$XAUTHORITY" | cut -d'/' -f4 )
fi 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 if [ "$user" ] && [ "$user" != "$root_login" ]; then
fu_user="$user" fu_user="$user"
return 0 return 0
@ -225,8 +237,8 @@ f__user(){ # 24/02/2018
user="$SUDO_USER"; user="$SUDO_USER";
elif who | grep -qv 'root'; then 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}' 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 else
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} user=$( grep -m1 'hourly.*get[A-Z].*\.anacrontab.*\.config/anacron/spool' /etc/crontab | cut -d' ' -f2 );
fi fi
fi fi
fu_user="$user" 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=print affiche url testée & entêtes http & location, return 0
# si $2=loc affiche seulement location, return 0 # si $2=loc affiche seulement location, return 0
# si $2=test return 0 si ok, return 1 si KO # 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 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" 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 [ "$2" == "print" ]; then
if [ "$retourWget" != "0" ]; then if [ "$retourWget" != "0" ]; then
echo " erreur wget: erreur $RED$retourWget" 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 else
echo -e "$BLUE $1$STD\t$GREEN $retourHttp$STD" echo -e "$BLUE $1$STD\\t$GREEN $retourHttp$STD"
fi fi
fi fi
if [ "$2" == "print" ] || [ "$2" == "loc" ]; then if [ "$2" == "print" ] || [ "$2" == "loc" ]; then
@ -278,72 +290,73 @@ f__wget_test(){ # 22/02/2018
if [ "$retourWget" != "0" ]; then if [ "$retourWget" != "0" ]; then
rm -f "$file_test_wget" rm -f "$file_test_wget"
f__error "wget, erreur $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 echo -e "$RED erreur wget, $retourWget \\n $1 \\n $YELLOW$retourHttp \\n $location$STD" # pour les diags
return 1 return 1
fi fi
if grep -q '200' <<< "$retourHttp"; then 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 fi
rm -f "$file_test_wget" rm -f "$file_test_wget"
exit 0 exit 0
} }
f_affichage(){ # 24/01/2018 # shellcheck disable=SC1117
local affichage_text=" _ _____ _ _ ____ _ 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 end
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"
} }
f_help(){ # 04/03/2018 f_help(){ # 11/06/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"
""
)
tput cuu1 # une ligne plus haut tput cuu1 # une ligne plus haut
for ligne in "${help[@]}"; do cat <<- end
echo -e " $ligne" -----------------------------------------------------------------------
done $BLUE$script install :$STD installation de $appli
echo -e "$STD plus d'infos: $GREEN$url_notice$STD" $BLUE$script remove :$STD désinstallation de $appli
echo " -----------------------------------------------------------------------" $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' cat <<- end
FlashPlayer n'est pas libre, c'est un programme propriétaire dont on ne peut pas connaître 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. 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 souffre de nombreuses vulnérabilités chroniques, depuis des années...
Il sera plus ou moins bloqué à terme pas les navigateurs majeurs, Il sera plus ou moins bloqué à terme pas les navigateurs majeurs,
c'est à dire Firefox et Chrom(ium). Préparez vous à cela... c'est à dire Firefox et Chrom(ium). Préparez vous à cela...
EOF voir:$GREEN https://developer.mozilla.org/fr/docs/Plugins/Roadmap$STD
echo -e " voir:$GREEN https://developer.mozilla.org/fr/docs/Plugins/Roadmap$STD\n"
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 fflash_get_version(){ # 24/01/2018
local verInstall 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' ) sed -nr 's/^.*AUTO_ID.*Version[[:blank:]]+([0-9].*[0-9]).*$/\1/p' )
# détection version installée # détection version installée
if [ -e "$dir_install/libflashplayer.so" ]; then 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" [[ "$ver_flash" && "$verInstall" == "$ver_flash" ]] || plugin_a_jour="ko"
else else
verInstall="Non Installé" verInstall="Non Installé"
fi fi
[ "$ver_flash" ] || ver_flash="${RED}n/a" [ "$ver_flash" ] || ver_flash="${RED}n/a"
[ "$1" == "quiet" ] && return 0 [ "$1" == "quiet" ] && return 0
f__info "raw" "FlashPlayer en place: $GREEN$verInstall" f__info "raw" "FlashPlayer en place: $GREEN$verInstall$STD"
f__info "FlashPlayer en ligne: $YELLOW$ver_flash" f__info "FlashPlayer en ligne: $YELLOW$ver_flash$STD"
} }
# install plugin dans config user mozilla, [$1='manuel', $2 archive] # install plugin dans config user mozilla, [$1='manuel', $2 archive]
fflash_install(){ # 04/03/2018 fflash_install(){ # 11/06/2018
local verArchive recup_url file_temp dirTemp="/tmp/$script" local verArchive recup_url dirTemp="/tmp/$script"
[ "$operation" == "upgrade" ] || fflash_avertissement [ "$operation" == "upgrade" ] || fflash_avertissement
mkdir -p "$dirTemp" mkdir -p "$dirTemp"
@ -383,12 +395,14 @@ fflash_install(){ # 04/03/2018
f__info " - téléchargement..." f__info " - téléchargement..."
recup_url="https://fpdownload.adobe.com/get/flashplayer/pdc/" recup_url="https://fpdownload.adobe.com/get/flashplayer/pdc/"
recup_url+="$ver_flash/flash_player_npapi_linux.$fu_archi.tar.gz" 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" if ! wget -q -c --show-progress --tries=2 --timeout=15 --user-agent="$user_agent" \
[ "$?" -eq 0 ] || f__wget_test "$recup_url" --referer="$url_online" -o /dev/null -O "$fileTemp" "$recup_url" ; then
f__wget_test "$recup_url"
fi
fi fi
f__archive_test "$fileTemp" || f__error " Le fichier $fileTemp n'est pas une archive tar.gz valide" 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 # 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/" tar -xaf "$fileTemp" -C "$dirTemp/"
verArchive=$( grep -m1 -i 'version' "$dirTemp/readme.txt" ) verArchive=$( grep -m1 -i 'version' "$dirTemp/readme.txt" )
verArchive=${verArchive,,} verArchive=${verArchive,,}
@ -402,7 +416,7 @@ fflash_install(){ # 04/03/2018
chown "$fu_user:" "$fileTemp" chown "$fu_user:" "$fileTemp"
mv "$fileTemp" ./ mv "$fileTemp" ./
fi fi
rm -Rf "$dirTemp/" rm -fr "$dirTemp"
if [ "$1" == "manuel" ]; then if [ "$1" == "manuel" ]; then
f__info "log" "archive FlashPlayer $verArchive installé" f__info "log" "archive FlashPlayer $verArchive installé"
@ -421,11 +435,11 @@ fflash_install_manuel(){ # 27/12//2017
} }
# suppression du plugin # suppression du plugin
fflash_remove(){ # 24/01/2018 fflash_remove(){ # 11/06/2018
local verInstall local verInstall
if [ ! -e "$dir_install/libflashplayer.so" ]; then 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 return 1
fi fi
rm "$dir_install/libflashplayer.so" rm "$dir_install/libflashplayer.so"
@ -436,10 +450,10 @@ fflash_remove(){ # 24/01/2018
} }
# test et mise à jour plugin si plugin outdated # 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 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 return 1
fi fi
(( x_get_version == 1 )) || fflash_get_version "quiet" (( x_get_version == 1 )) || fflash_get_version "quiet"
@ -453,11 +467,11 @@ fflash_upgrade(){ # 24/01/2018
fi fi
} }
# tache upgrade dans anacron hebdomadaire, via cron horaire, $1=upgrade|install|remove # anacron hebdomadaire, via cron horaire, $1=upgrade|install|remove
fscript_cronAnacron(){ # 26/01/2018 fscript_cronAnacron(){ # 09/06/2018
local dirAnacron dirSpool fileAnacron 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" dirAnacron="/home/$fu_user/.config/anacron"
dirSpool="$dirAnacron/spool" dirSpool="$dirAnacron/spool"
fileAnacron="$dirAnacron/$script.anacrontab" fileAnacron="$dirAnacron/$script.anacrontab"
@ -481,63 +495,72 @@ fscript_cronAnacron(){ # 26/01/2018
grep -q "$script" "/etc/crontab" || echo f__error "inscription crontab" grep -q "$script" "/etc/crontab" || echo f__error "inscription crontab"
;; ;;
remove ) remove )
rm -f "$dirSpool/$script"* &>/dev/null rm -f "${dirSpool:?}/$script"*
rm -f "$fileAnacron" &>/dev/null rm -f "$fileAnacron"
rmdir "$dirSpool" "$dirAnacron" &>/dev/null rmdir "$${dirSpool:?}" "${dirAnacron:?}" 2>/dev/null
;; ;;
esac esac
} }
# version script, [$1=quiet], assigne $ver_script_install, $ver_script_online, $script_a_jour=ok|KO # assigne $ver_script_install, $ver_script_online, $script_a_jour=ok|KO
fscript_get_version(){ # 24/01/2018 fscript_get_version(){ # 09/06/2018
x_script_get_version=1 x_script_get_version=1
# version online # version online
ver_script_online=$( wget -q --timeout=15 -o /dev/null -O - "$url_script" | grep -m1 '^version=' | cut -d'=' -f2 ) if ver_script_online=$( wget -q --timeout=15 -o /dev/null -O - "$url_script" ); then
[ "$?" -ne 0 ] && f__wget_test "$url_script" 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 # version installée
if [ -e "$script_install" ]; then 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 fi
# maj ?
if [[ "$ver_script_online" && "$script_install" ]]; then 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 fi
[ "$ver_script_online" ] || ver_script_online="${RED}n/a" # affichage
[ "$ver_script_install" ] || ver_script_install="Non installé" ver_script_online=${ver_script_online:="${RED}n/a$STD"}
[ "$1" == "quiet" ] && return 0 ver_script_install=${ver_script_install:="Non installé"}
f__info "raw" "script en place: $GREEN$ver_script_install" f__info "raw" "script en place: $GREEN$ver_script_install"
f__info "script en ligne: $YELLOW$ver_script_online" f__info "script en ligne: $YELLOW$ver_script_online"
} }
# installation du script dans le système fscript_install(){ # 09/06/2018
fscript_install(){ # 24/02/2018
if grep -Eq "$script_install|/usr/bin/$script" <<< "$0"; then 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 )" f__info "${RED}l'installation dans le système doit se faire depuis le script non installé $GREEN(./$script -i )"
return 1 return 1
fi 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 f__requis "wget anacron cron" || exit 1
# install /opt # install /opt
mkdir -p /opt/bin/ mkdir -p /opt/bin/
cp -d "$0" "$script_install" cp "$0" "$script_install"
ln -s "$script_install" "/usr/bin/$script" &>/dev/null ln -s "$script_install" "/usr/bin/$script" 2>/dev/null
chmod 775 "$script_install" # rwx rwx r-x, proprio fu_user chmod 755 "$script_install"
# cron/anacron install # cron/anacron install
fscript_cronAnacron "install" fscript_cronAnacron "install"
# création fichier log # création fichier log
touch "$script_logs" touch "$script_logs"
chmod 664 "$script_logs" # rw- rw- r--, proprio fu_user chmod 644 "$script_logs"
chown "$fu_user:" "$script_logs" "$script_install" chown "$fu_user:" "$script_logs" "$script_install"
[ -e "$fileDev" ] || rm -f "$0" ## on efface pas si fileDev (dev) [ -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 ./)" 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(){ # 09/06/2018
fscript_remove(){ # 24/02/2018
if ! grep -Eq "$script_install|/usr/bin/$script" <<< "$0"; then 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)" 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 return 1
fi 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 # suppression /opt, lien /usr/bin
rm -f "$script_install" rm -f "$script_install"
unlink "/usr/bin/$script" &>/dev/null unlink "/usr/bin/$script" 2>/dev/null
# cron/anacron remove # cron/anacron remove
fscript_cronAnacron "remove" fscript_cronAnacron "remove"
f__info "log" "$script $version supprimé du système." f__info "log" "$script $version supprimé du système."
} }
# mise à jour script, [$1 != "" si upgrade en place, $1 dans message info] # si upgrade en place, $1 != "", [$1 message info]
fscript_update(){ # 01/03/2018 # shellcheck disable=SC2120
# function references arguments, but none are ever passed.
fscript_update(){ # 09/06/2018
local dirTemp="/tmp/$script-maj" upgradeEnPlace="$1" 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 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)" f__info "${RED}cette fonction doit être appelée depuis le script installé dans le système $GREEN($script -u)"
return 1 return 1
@ -575,33 +600,31 @@ fscript_update(){ # 01/03/2018
f__info "mise à jour en cours" f__info "mise à jour en cours"
fi fi
mkdir -p "$dirTemp" mkdir -p "$dirTemp"
wget -q --tries=2 --timeout=15 -o /dev/null -O "$dirTemp/$script" "$url_script" if ! wget -q --tries=2 --timeout=15 -o /dev/null -O "$dirTemp/$script" "$url_script"; then
if [ "$?" -ne 0 ]; then rm -fr "$dirTemp"
rm -rf "$dirTemp"
f__wget_test "$url_script" f__wget_test "$url_script"
fi fi
if grep -q '#!/bin/bash' "$dirTemp/$script" && grep -q '^### END CONTROL' "$dirTemp/$script"; then if grep -q '#!/bin/bash' "$dirTemp/$script" && grep -q '^### END CONTROL' "$dirTemp/$script"; then
cp -d "$dirTemp/$script" "$script_install" cp "$dirTemp/$script" "$script_install"
chmod 775 "$script_install" # rwx rwx r-x, proprio fu_user chmod 755 "$script_install"
chown "$fu_user:" "$script_install" chown "$fu_user:" "$script_install"
[ -z "$upgradeEnPlace" ] && fscript_cronAnacron "upgrade" [ -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 else
f_info "log" "$script: échec update" "mauvais téléchargement, réessayer plus tard" f_info "log" "$script: échec update" "mauvais téléchargement, réessayer plus tard"
fi fi
rm -rf "$dirTemp/" rm -fr "$dirTemp"
} }
prg_init(){ # 04/03/2018 prg_init(){ # 11/06/2018
PATH='/usr/sbin:/usr/bin:/sbin:/bin' PATH='/usr/sbin:/usr/bin:/sbin:/bin'
TERM=xterm TERM=xterm
IFS_INI="$IFS"
IFS=$' \t\n' IFS=$' \t\n'
export PATH TERM IFS export PATH TERM IFS
# test bash v4 # 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 # architectures possibles
f__architecture || f__error "Seules les architecture 32 et/ou 64 bits sont supportée (i686 & amd64)" 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 f__user
retourFUser="$?" retourFUser="$?"
[ "$retourFUser" -eq 1 ] && f__error "user indéterminé" \ [ "$retourFUser" -eq 1 ] && f__error "user indéterminé" \
"pour contourner, lancer le script avec:\n$GREEN USER_INSTALL=<user> $0 \n" "pour contourner, lancer le script avec:\\n$GREEN USER_INSTALL=<user> $0 \\n"
if [ "$retourFUser" -eq 2 ]; then 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" f__info "user root"
fi fi
@ -636,78 +663,71 @@ user_agent="Mozilla/5.0 Firefox"
fileDev="/opt/bin/fileDev" fileDev="/opt/bin/fileDev"
script_install="/opt/bin/$script" script_install="/opt/bin/$script"
script_logs="/var/log/sdeb_$script.log" script_logs="/var/log/sdeb_$script.log"
url_script="https://framagit.org/sdeb/getIp/raw/master/getIp" url_script="https://framagit.org/sdeb/getFlashPlayer/raw/master/getFlashPlayer"
url_notice="https://framaclic.org/h/doc-getip" url_notice="https://framaclic.org/h/doc-getflashplayer"
# paramètres flash # paramètres flash
appli="Flashplayer" appli="Flashplayer"
dir_install="/home/$fu_user/.mozilla/plugins" dir_install="/home/$fu_user/.mozilla/plugins"
url_online="https://get.adobe.com/fr/flashplayer/" # test version & referer url_online="https://get.adobe.com/fr/flashplayer/" # test version & referer
options=$@ script_options="$*"
# auto-installation script éventuel, si pas de marqueur $fileDev # options
if [[ $( dirname $0 ) != $( dirname $script_install ) && $( dirname $0 ) != "/usr/bin" && ! -e "$fileDev" ]]; then while (( $# )) ; do
options="-i" # option installation script case "$1" in
fi --sauve ) dl_to_svg="ok" ;;
--dev ) url_script=${url_script//\/master\///dev/} ;;
for j in $options; do # première passe options * ) options+=( "$1" ) ;;
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"
;;&
esac esac
shift
done 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 #actions
case $j in 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 install ) # installation plugin
fflash_install fflash_install ;;
;;
manuel ) # installation manuelle d'un chargement manuel ) # installation manuelle d'un chargement
fflash_install_manuel "$2" fflash_install_manuel "${options[((i+1))]}"
shift 1 exit ;;
exit;;
remove ) # remove plugin remove ) # remove plugin
fflash_remove fflash_remove ;;
;;
upgrade ) # upgrade plugin si installé upgrade ) # upgrade plugin si installé
operation="upgrade" operation="upgrade"
fflash_upgrade fflash_upgrade ;;
;;
version | versions ) # version plugin en ligne & installée version | versions ) # version plugin en ligne & installée
fscript_get_version fscript_get_version
fflash_get_version fflash_get_version ;;
;;
-i | --install ) # installation du script dans le système -i | --install ) # installation du script dans le système
fscript_install fscript_install ;;
;;
-r | --remove ) # désinstallation du script -r | --remove ) # désinstallation du script
fscript_remove fscript_remove ;;
;;
-u | --upgrade ) # upgrade script et plugin -u | --upgrade ) # upgrade script et plugin
operation="upgrade" operation="upgrade"
# shellcheck disable=SC2119
fscript_update fscript_update
$0 upgrade # on relance le script en upgrade pour le plugin $0 upgrade # on relance le script en upgrade pour le plugin
exit ;; exit ;;
-v | --version ) # version du script, en ligne et en place -v | --version ) # version du script, en ligne et en place
fscript_get_version fscript_get_version ;;
;;
-h | --help | * ) # affichage help -h | --help | * ) # affichage help
f_help f_help
fflash_avertissement fflash_avertissement ;;
;;
esac esac
done done
@ -715,8 +735,8 @@ exit 0
### END CONTROL (contrôle chargement) ### END CONTROL (contrôle chargement)
wget -nv -O getFlashPlayer https://framaclic.org/h/getip wget -nv -O getFlashPlayer https://framaclic.org/h/getflashplayer
curl -L -o getFlashPlayer https://framaclic.org/h/getip curl -L -o getFlashPlayer https://framaclic.org/h/getflashplayer
chmod +x getFlashPlayer && ./getFlashPlayer chmod +x getFlashPlayer && ./getFlashPlayer
wget -nv -O getFlashPlayer https://framagit.org/sdeb/getFlashPlayer/raw/master/getFlashPlayer wget -nv -O getFlashPlayer https://framagit.org/sdeb/getFlashPlayer/raw/master/getFlashPlayer