This commit is contained in:
kyodev 2017-08-26 09:07:14 +02:00
parent 6821f8580c
commit 75d66ed971
2 changed files with 180 additions and 145 deletions

View File

@ -1,9 +1,9 @@
#!/bin/bash
version=3.2.2
date="24/08/2017"
version=3.3.3
date="25/08/2017"
projet="simpledeb"
contact="IRC freenode ##sdeb ou https://framagit.org/kyodev/kyopages/issues"
contact="IRC freenode ##sdeb ou https://framagit.org/kyodev/kyopages/issues/"
script="getFlashPlayer"
urlScript="https://framagit.org/kyodev/kyopages/raw/master/scripts/getFlashPlayer"
urlNotice="https://kyodev.frama.io/kyopages/scripts/getFlashPlayer/"
@ -15,7 +15,7 @@ lognameDev="kyodev"
# contributeurs: kyodev, coyotus, naguam
#####
f__affichage(){ # v06/2017 définition couleurs
f__affichage(){ # v06/2017 définition couleurs
YELLOW="$(printf "\033[0;33m")" # ?
GREEN="$(printf "\033[0;32m")" # ok
BLUE="$(printf "\033[0;34m")" # info
@ -36,13 +36,13 @@ echo -e "$YELLOW pour Firefox, version $version - $date$COLOR\n"
}
# test validité archive, $1 fichier (gzip), return 1 si invalide
f__archive_test(){ # v07/2017
f__archive_test(){ # v07/2017
file -b "$1" | grep -q 'gzip compressed data' || return 1
}
# affichage $1 en rouge, $1++ optionnels en bleu, sortie script sur erreur, log $1 si upgrade($opType)
f__error() { # v16/08/2017
echo -e "\n$RED Erreur critique: $1 $COLOR"
# affichage $1 en rouge, $1++ optionnels en bleu, sortie script sur erreur, log $1 si $opType=upgrade
f__error() { # v25/08/2017
echo -e "\n$RED $script $version, erreur critique: $1 $COLOR"
for (( i=2 ; i<=$# ; i++ )); do echo -e " $BLUE${!i}"; done
echo "$COLOR"
if [ "$opType" == "upgrade" ]; then f__log "$script $version: $1"; fi
@ -51,16 +51,17 @@ f__error() { # v16/08/2017
# affichage des paramètres en bleu, si $1=raw, pas d'espace en début de ligne, pas de ligne vide à la fin
# si $1=log, uniquement $2 logué
f__info() { # v21/08/2017
if [ "$1" == "raw" ] || [ "$1" == "log" ]; then depart=2;
else local espace=" "; local depart=1; fi
f__info() { # v24/08/2017
local espace=" " depart=1
if [ "$1" == "raw" ] || [ "$1" == "log" ]; then depart=2; fi
if [ "$1" == "raw" ]; then espace=""; fi
[ "$1" == "log" ] && f__log "$(sed -E 's/\\t//;s/\\n// ' <<< $2 | xargs )"
for (( i=$depart ; i<=$# ; i++ )); do echo -e "$espace$BLUE${!i}"; done
[ "$1" == raw ] && printf "$COLOR" || echo "$COLOR"
}
# log spécifique, fichier log limité à 10000octets, $1 message à loguer
f__log(){ # v08/2017
f__log(){ # v08/2017
if [ -w "$fileLogs" ]; then
if [ "$(stat -c %s $fileLogs)" -ge "10000" ]; then
echo "$(date +%Y%m%d\ %H%M%S) $1" &>/dev/null > "$fileLogs"
@ -77,7 +78,7 @@ f__log(){ # v08/2017
# si $2=debOnly et si paquets manquants: return 1 et $debOnlyPackages ( $1=liste paquets )
# si $2=debOnly et si paquets présent: return 0 et $debOnlyPresents ( $1=liste paquets )
# attention priorité $debOnlyPackages sur $debOnlyPresents
f__requis(){ # v17/08/2017-3
f__requis(){ # v17/08/2017-3
local dependsMissing packagesMissing
unset debOnlyPackages debOnlyPresents
for i in $1; do
@ -107,7 +108,7 @@ f__requis(){ # v17/08/2017-3
# user ayant initié la session graphique, assigne $user_
# return 1 sur échec identification user, return 2 sur absence home/
# gestion variable environnement user avec: USER_INSTALL=user script
f__user(){ # v21/08/2017-4
f__user(){ # v21/08/2017-4
if [ "$USER_INSTALL" ]; then # user_ via variable environnement, moyen d'injecter root
user_="$USER_INSTALL";
return 0
@ -138,121 +139,22 @@ f__user(){ # v21/08/2017-4
return 0
}
# test wget, $1 url à tester, sortie script sur erreur
f__wget_test(){ # v07/2017
echo " $1"
wget -Sq --tries=1 --timeout=15 --user-agent="$user_agent" -O /dev/null "$1"
f__error "Erreur wget" " réessayer et si persistance, contacter $projet $contact" " en indiquant les messages précédents."
}
# spécifique getFlashPlayer
fscript_cronAnacron_special(){ # v19/08/2017
rm "/home/$user_/.mozilla/plugins/libflashplayer.anacrontab" &>/dev/null # ancienne localisation
rm "/home/$user_/.config/anacron/spool/getFP"* &>/dev/null # ancien job
[ $EUID -eq 0 ] && sed -i "/libflashplayer.anacrontab/d" /etc/crontab # ancienne localisation anacrontab
}
# inscription dans tache upgrade en anacron hebdomadaire, via cron horaire
fscript_cronAnacron(){ # v23/08/2017
[ "$(type -t fscript_cronAnacron_special)" ] && fscript_cronAnacron_special # test, si fonction spécifique, appel
local dirAnacron="/home/$user_/.config/anacron"
local dirSpool="$dirAnacron/spool"
local fileAnacron="$dirAnacron/$script.anacrontab"
[ $EUID -eq 0 ] && sed -i "/$script.anacrontab/d" /etc/crontab
case "$1" in
install | upgrade )
mkdir -p "$dirAnacron"
# table anacron
echo "7 10 $script nice /opt/bin/$script --upgrade 1>/dev/null" > "$fileAnacron" # juste erreurs en syslog
## anacron journalier pour dev logname
if [ "$user_" == "$lognameDev" ]; then
echo "1 00 $script""Dev nice /opt/bin/$script --upgrade 1>/dev/null" >> "$fileAnacron" # juste erreurs en syslog
fi
# création spool anacron utilisateur
mkdir -p "$dirSpool"
chown -R "$user_": "$dirAnacron" "$dirSpool"
if [ $EUID -eq 0 ]; then
# crontab pour activation horaire anacron
echo "@hourly $user_ /usr/sbin/anacron -t $fileAnacron -S $dirSpool" >> /etc/crontab
fi
[ "$(grep "$script" /etc/crontab)" ] || echo f__error "inscription crontab" \
"certains systèmes semblent poser poser problème, merci de rapporter ce bug à $projet $contact"
;;
remove )
rm "$dirSpool/$script"* &>/dev/null
rm "$fileAnacron" &>/dev/null
rmdir "$dirSpool" "$dirAnacron" &>/dev/null
;;
esac
}
# mise à jour script si dispo
fscript_dl(){ # v22/08/2017
f__requis "wget"
if [ "$script_aJour" == "ok" ]; then
f__info "log" "pas de mise à jour disponible pour $script"
return 0
fi
local dirTemp="/tmp/$script-$RANDOM/"
mkdir -p "$dirTemp"
wget -q --tries=2 --timeout=15 -O "$dirTemp$script" "$urlScript"
if [ "$?" != "0" ]; then f__wget_test "$urlScript"; fi
chmod 755 "$dirTemp$script"
chown "$user_": "$dirTemp$script"
cp -d "$dirTemp$script" /opt/bin/"$script"
rm -rf "$dirTemp"
fscript_cronAnacron "upgrade"
f__info "log" "\n $script mis à jour en version $versionScript"
}
# version script en ligne, assigne $versionScript, $script_aJour=ok|ko
fscript_get_version(){ # v19/08/2017
f__requis "wget"
f__info "$GREEN""\n version script en cours: $version"
versionScript="$(wget -q --tries=2 --timeout=15 -O - "$urlScript" | grep '^version=' | cut -d '=' -f 2)"
if [ "$versionScript" ]; then
if [ "$version" != "$versionScript" ]; then
f__info "version script en ligne: $versionScript, mise à jour possible"
script_aJour="ko"
else
f__info "version script en ligne: $versionScript"
script_aJour="ok"
fi
else f__info "version script en ligne non accessible"; fi
}
# installation du script dans le système
fscript_install(){ # v21/08/2017
if dirname "$0" | grep -q 'bin' ; then
f__info "\n $script $version est déjà installé"
return 1
fi
[ $EUID -eq 0 ] || f__error "vous devez être ROOT pour installer ce script dans le système"
f__requis "wget anacron cron"
# install /opt
mkdir -p /opt/bin/
cp -d "$(basename $0)" "/opt/bin/$script"
ln -s "/opt/bin/$script" "/usr/bin/$script" &>/dev/null
chmod 755 "/opt/bin/$script"
# cron/anacron install
fscript_cronAnacron "install"
# création fichier log
touch "$fileLogs"
chmod 644 "$fileLogs"
chown "$user_": "$fileLogs" "/opt/bin/$script"
[ -f "$script"_changelog.md ] || rm "$(basename $0)" &>/dev/null ## on efface pas si changelog (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(){ # v21/08/2017
[ $EUID -eq 0 ] || f__error "vous devez être ROOT pour supprimer ce script dans le système"
# suppression de /opt
rm /opt/bin/"$script" &>/dev/null
unlink /usr/bin/"$script" &>/dev/null
# cron/anacron remove
fscript_cronAnacron "remove"
f__info "log" "$script $version supprimé du système."
# test wget, $1 url à tester affiche url testée & entêtes http, sortie script sur erreur
f__wget_test(){ #v25/08/2017
local file_test_wget="/tmp/testWget-$RANDOM"
wget -Sq --tries=1 --timeout=10 --user-agent="$user_agent" --spider --save-headers "$1" &>"$file_test_wget" || local retourWget="$?"
[ "$retourWget" == 1 ] && retourWget="code erreur générique"
[ "$retourWget" == 2 ] && retourWget="parse erreur (ligne de commande?)"
[ "$retourWget" == 3 ] && retourWget="erreur Entrée/sortie fichier"
[ "$retourWget" == 4 ] && retourWget="défaut réseau"
[ "$retourWget" == 5 ] && retourWget="défaut vérification SSL"
[ "$retourWget" == 6 ] && retourWget="défaut authentification"
[ "$retourWget" == 7 ] && retourWget="erreur de protocole"
[ "$retourWget" == 8 ] && retourWget="réponse serveur en erreur"
retourHttp="$(grep -i 'HTTP/' "$file_test_wget" | tr -d '\n' | xargs)"
f__error "erreur wget: $retourWget" "url: $1" "$retourHttp" \
"Erreur wget" "si persistance, contacter $projet $contact en indiquant les messages précédents"
rm "$file_test_wget"
}
# pas beau ce soft :(
@ -385,17 +287,126 @@ fflash_remove(){
fflash_upgrade(){ #24/08/2017
fflash_get_version
if [ "$plugin_aJour" == "ko" ]; then
opType="upgrade"
fflash_install
else f__info "log" "pas de plugin Flash à mettre à jour"; fi
}
# spécifique getFlashPlayer
fscript_cronAnacron_special(){ # v19/08/2017
rm "/home/$user_/.mozilla/plugins/libflashplayer.anacrontab" &>/dev/null # ancienne localisation
rm "/home/$user_/.config/anacron/spool/getFP"* &>/dev/null # ancien job
[ $EUID -eq 0 ] && sed -i "/libflashplayer.anacrontab/d" /etc/crontab # ancienne localisation anacrontab
}
# inscription dans tache upgrade en anacron hebdomadaire, via cron horaire
fscript_cronAnacron(){ # v23/08/2017
[ "$(type -t fscript_cronAnacron_special)" ] && fscript_cronAnacron_special # test, si fonction spécifique, appel
local dirAnacron="/home/$user_/.config/anacron"
local dirSpool="$dirAnacron/spool"
local fileAnacron="$dirAnacron/$script.anacrontab"
[ $EUID -eq 0 ] && sed -i "/$script.anacrontab/d" /etc/crontab
case "$1" in
install | upgrade )
mkdir -p "$dirAnacron"
# table anacron
echo "7 10 $script nice /opt/bin/$script --upgrade 1>/dev/null" > "$fileAnacron" # juste erreurs en syslog
## anacron journalier pour dev logname
if [ "$user_" == "$lognameDev" ]; then
echo "1 00 $script""Dev nice /opt/bin/$script --upgrade 1>/dev/null" >> "$fileAnacron" # juste erreurs en syslog
fi
# création spool anacron utilisateur
mkdir -p "$dirSpool"
chown -R "$user_": "$dirAnacron" "$dirSpool"
if [ $EUID -eq 0 ]; then
# crontab pour activation horaire anacron
echo "@hourly $user_ /usr/sbin/anacron -t $fileAnacron -S $dirSpool" >> /etc/crontab
fi
[ "$(grep "$script" /etc/crontab)" ] || echo f__error "inscription crontab" \
"certains systèmes semblent poser poser problème, merci de rapporter ce bug à $projet $contact"
;;
remove )
rm "$dirSpool/$script"* &>/dev/null
rm "$fileAnacron" &>/dev/null
rmdir "$dirSpool" "$dirAnacron" &>/dev/null
;;
esac
}
# version script en ligne, assigne $versionScript, $script_aJour=ok|ko
fscript_get_version(){ # v19/08/2017
f__requis "wget"
f__info "$GREEN""\n version script en cours: $version"
versionScript="$(wget -q --tries=2 --timeout=15 -O - "$urlScript" | grep '^version=' | cut -d '=' -f 2)"
if [ "$versionScript" ]; then
if [ "$version" != "$versionScript" ]; then
f__info "version script en ligne: $versionScript, mise à jour possible"
script_aJour="ko"
else
f__info "version script en ligne: $versionScript"
script_aJour="ok"
fi
else f__info "version script en ligne non accessible"; fi
}
# installation du script dans le système
fscript_install(){ # v24/08/2017
if dirname "$0" | grep -q 'bin' ; then
f__info "\n $script $version est déjà installé"
return 1
fi
[ $EUID -eq 0 ] || f__error "vous devez être ROOT pour installer ce script dans le système"
f__requis "wget anacron cron"
# install /opt
mkdir -p /opt/bin/
cp -d "$(basename $0)" "/opt/bin/$script"
ln -s "/opt/bin/$script" "/usr/bin/$script" &>/dev/null
chmod 755 "/opt/bin/$script"
# cron/anacron install
fscript_cronAnacron "install"
# création fichier log
touch "$fileLogs"
chmod 644 "$fileLogs"
chown "$user_": "$fileLogs" "/opt/bin/$script"
[ -e "$script"_changelog.md ] || rm "$(basename $0)" &>/dev/null ## on efface pas si changelog (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(){ # v21/08/2017
[ $EUID -eq 0 ] || f__error "vous devez être ROOT pour supprimer ce script dans le système"
# suppression de /opt
rm /opt/bin/"$script" &>/dev/null
unlink /usr/bin/"$script" &>/dev/null
# cron/anacron remove
fscript_cronAnacron "remove"
f__info "log" "$script $version supprimé du système."
}
# mise à jour script si dispo
fscript_update(){ # v25/08/2017
fscript_get_version
if [ "$script_aJour" == "ok" ]; then
f__info "log" "pas de mise à jour disponible pour $script"
return 0
fi
local dirTemp="/tmp/$script-$RANDOM/"
mkdir -p "$dirTemp"
wget -q --tries=2 --timeout=15 -O "$dirTemp$script" "$urlScript"
if [ "$?" != "0" ]; then f__wget_test "$urlScript"; fi
chmod 755 "$dirTemp$script"
chown "$user_": "$dirTemp$script"
cp -d "$dirTemp$script" /opt/bin/"$script"
rm -rf "$dirTemp"
fscript_cronAnacron "upgrade"
f__info "log" "\n $script mis à jour en version $versionScript"
}
#initialisation
PATH='/usr/sbin:/usr/bin:/sbin:/bin' ; IFS=' '; TERM=xterm
export PATH TERM
f__affichage
f__user || f__error "échec détection user"
f__requis "file tar" # pour fonctionnement programme
f__requis "file tar" # requis pour fonctionnement programme
fileLogs="/var/log/sdeb_$script.log"
dirInstall="/home/$user_/.mozilla/plugins"
@ -403,7 +414,7 @@ urlOnline="https://get.adobe.com/fr/flashplayer/" # test version & referer
[ -e "/opt/bin/$script" ] && [ "$(stat -c %G /opt/bin/$script)" == "root" ] && problemDetected+="-1" # droits inappropriés sur le script, version de dev
options="$@"
if [ "$(dirname $0)" == "." ]; then unset options
if [ "$(dirname $0)" == "." ]; then unset options # induira ascript install
elif ! grep -qE '\-u|\-\-upgrade' <<< "$options"; then
if [ ! -w "$fileLogs" ] && [ -e "$dirInstall/libflashplayer.so" ] ; then problemDetected+="-2"; fi # ancien système de logs via syslog
fi
@ -412,27 +423,43 @@ fi
for i in $options; do
case "$i" in
install ) fflash_install; break ;; # installation plugin
manuel ) fflash_install_manuel "$2"; break ;; # installation manuelle d'un chargement
remove ) fflash_remove; break ;; # désinstallation plugin
upgrade ) fflash_upgrade; break ;; # upgrade plugin si installé
install )
fflash_install
break ;; # installation plugin
manuel )
fflash_install_manuel "$2"
break ;; # installation manuelle d'un chargement
remove )
fflash_remove
break ;; # désinstallation plugin
upgrade )
fflash_upgrade
opType="upgrade"
break ;; # upgrade plugin si installé
version | versions )
fflash_get_version
fscript_get_version; break ;; # version plugin en ligne & installée
"" ) if ! dirname "$0" | grep -q 'bin' ; then
fscript_get_version
break ;; # version plugin en ligne & installée
"" )
if ! dirname "$0" | grep -q 'bin' ; then
fscript_install
else fflash_help; fi ;; # installation du script dans le système
-r | --remove | sysremove ) fscript_remove; break ;; # désinstallation du script
else fflash_help; fi
break ;; # installation du script dans le système
-r | --remove | sysremove )
fscript_remove
break ;; # désinstallation du script
-u | --upgrade )
opType="upgrade"
fscript_update
$0 upgrade # on relance le script en upgrade pour le plugin
break ;; # upgrade script et plugin
-v | --version )
fscript_get_version
fscript_dl
$0 upgrade # si script mis à jour, on relance le script en upgrade pour le plugin
break ;; # upgrade script et plugin
-v | --version ) fscript_get_version; break ;; # version du script, en ligne et exécuté
break ;; # version du script, en ligne et exécuté
-h | --help | * )
fflash_help
fflash_avertissement; break ;; # affichage help
fflash_avertissement
break ;; # affichage help
esac
done

View File

@ -1,5 +1,13 @@
# changelog getFlashPlayer
## 3.3.0 25/08/2017
* renommage fscript_dl en fscript_update
* révision fscript_install, fscript_update
* révision f__wget_test
* révision f__error, f__info
## 3.2.2 24/08/2017
* avertissement pas de maj plugin