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
![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)

View File

@ -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=<user> 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=<user> $0 \n"
"pour contourner, lancer le script avec:\\n$GREEN USER_INSTALL=<user> $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