kyopages/scripts/getFlashPlayer

334 lines
12 KiB
Plaintext
Raw Normal View History

2017-06-06 02:43:07 +02:00
#!/bin/bash
2017-07-12 06:35:20 +02:00
version=1.1.1
2017-06-10 00:21:43 +02:00
projet="Kyodev"
contact="https://framagit.org/kyodev/kyopages/issues"
2017-07-12 06:24:41 +02:00
date="12/07/2017"
2017-06-10 00:21:43 +02:00
script="getFlashPlayer"
2017-06-06 20:04:42 +02:00
2017-06-10 21:16:48 +02:00
##### license LPRAB/WTFPL
2017-06-08 14:09:19 +02:00
# auteurs: kyodev
2017-06-21 20:15:27 +02:00
# contibuteur: coyotus
2017-06-08 14:09:19 +02:00
# idée: naguam
2017-06-06 02:43:07 +02:00
#####
2017-06-06 20:04:42 +02:00
#### définition couleurs -----------------------------------------------
YELLOW=`printf "\033[0;33m"` # ?
GREEN=`printf "\033[0;32m"` # ok
BLUE=`printf "\033[0;34m"` # info
COLOR=`printf "\033[0m"` # standard
RED=`printf "\033[0;31m"` # alerte
2017-06-06 02:43:07 +02:00
2017-06-08 14:09:19 +02:00
2017-06-06 20:04:42 +02:00
#### entete ============================================================
2017-06-06 02:43:07 +02:00
clear
2017-06-06 20:04:42 +02:00
echo "$BLUE"
cat << 'EOF'
2017-06-06 02:43:07 +02:00
_ _____ _ _ ____ _
__ _ ___| |_| ___| | __ _ ___| |__ | _ \| | __ _ _ _ ___ _ __
/ _' |/ _ \ __| |_ | |/ _' / __| '_ \| |_) | |/ _' | | | |/ _ \ '__|
| (_| | __/ |_| _| | | (_| \__ \ | | | __/| | (_| | |_| | __/ |
\__, |\___|\__|_| |_|\__,_|___/_| |_|_| |_|\__,_|\__, |\___|_|
|___/ |___/
2017-06-08 14:09:19 +02:00
2017-06-06 02:43:07 +02:00
EOF
2017-06-10 00:21:43 +02:00
echo -e "$YELLOW pour Firefox sur Debian, version $version - $date\n$COLOR"
2017-06-06 02:43:07 +02:00
2017-06-06 20:04:42 +02:00
#### fonctions diverses ================================================
2017-06-06 02:43:07 +02:00
2017-07-12 06:24:41 +02:00
# user ayant initié la session graphique, assigne $user_, testé avec mate, gnome
# sortie script sur erreur, gestion variable environnement pour personnaliser l'user avec:
# USER_INSTALL=user script
2017-06-21 20:15:27 +02:00
f__user(){
2017-07-12 06:24:41 +02:00
# user_ via variable en environnement
test "$USER_INSTALL" && user_="$USER_INSTALL"
# sudo ou gnome: uid
test "$SUDO_UID" && user_id="$SUDO_UID" || user_id="$(echo "$XAUTHORITY" | grep -Eo '[0-9]+')"
# si user_ vide, extraction classique user dans XAUTHORITY, donc priorité à $USER_INSTALL
test "$user_" || user_="$(echo "$XAUTHORITY" | cut -d "/" -f 3)"
# si user_id, extraction via passwd
test "$user_id" && user_="$(grep "$user_" /etc/passwd | cut -d ":" -f 1 )"
# derniers tests, home existant ou user_ défini
if [ "$user_" ]; then
ls "/home/$user_" &>/dev/null || f__error "\trépertoire '/home/$user_' INEXISTANT"
else
f__error "\tuser indéterminé, lancer le script avec:\n\tUSER_INSTALL=user $0"
fi
2017-06-21 20:15:27 +02:00
}
# test cnx réseau et résolution adobe.com, return 0 si ok else 1
f__cnxTest(){
ping -c 1 adobe.com &>/dev/null || return 1
}
2017-06-06 20:04:42 +02:00
# sortie sur erreur
2017-06-21 20:15:27 +02:00
f__error() { # affichage paramètre 1 en rouge pour le premier, les suivants optionnels en bleu, sortie du script
2017-06-06 20:04:42 +02:00
echo -e "\n$RED Erreur critique: $1 $COLOR"
2017-07-02 16:55:31 +02:00
for (( i=2 ; i<=$# ; i++ )); do echo -e " $BLUE${!i}"; done
2017-06-06 20:04:42 +02:00
echo "$COLOR"
2017-06-21 20:15:27 +02:00
logger --id -p user.err "$script $version: <erreur> $*"
2017-06-06 20:04:42 +02:00
exit 1
2017-06-06 02:43:07 +02:00
}
2017-06-06 20:04:42 +02:00
# affichage information
2017-06-21 20:15:27 +02:00
f__info() { # tous les paramètres en ligne en couleur bleue, accepte \n, ligne vide à la fin
2017-06-06 20:04:42 +02:00
echo -e " $BLUE $@ $COLOR\n"
}
2017-06-06 02:43:07 +02:00
2017-06-21 20:15:27 +02:00
# syslog & affichage information
f__syslogInfo() { # inscription syslog $1, en user.info & f__info $1
logger --id -p user.info "$1"
f__info "$1"
}
2017-06-06 20:04:42 +02:00
#debian? return 0 else 1
2017-06-21 20:15:27 +02:00
f__debian(){
2017-06-08 14:09:19 +02:00
if [ -f /etc/debian_version ]; then return 0; else return 1; fi
2017-06-06 20:04:42 +02:00
}
2017-06-06 02:43:07 +02:00
2017-06-06 20:04:42 +02:00
# root? return 0 else 1
2017-06-21 20:15:27 +02:00
f__root(){
2017-06-08 14:09:19 +02:00
if [ $EUID -eq 0 ]; then return 0; else return 1; fi
2017-06-06 20:04:42 +02:00
}
2017-06-06 02:43:07 +02:00
2017-06-08 14:09:19 +02:00
# script en /bin? return 0 si bin, 1 si local
2017-06-21 20:15:27 +02:00
f__scriptBin(){
2017-06-08 14:09:19 +02:00
if [ "$(echo $0 | grep -Eo '\.\/')" != "./" ]; then return 0; else return 1; fi
2017-06-06 20:04:42 +02:00
}
2017-06-06 02:43:07 +02:00
2017-06-08 14:09:19 +02:00
#### fonctions script ==================================================
2017-06-21 20:15:27 +02:00
user_agent="Mozilla/5.0 (X11; Linux $architecture; rv:52.0) Gecko/ Firefox"
# version Flash en ligne & installée, $verFlash=x|na, $verInstall, $uptodate=""|ko, $urlOnline,
2017-06-06 20:04:42 +02:00
f_versionFlash(){
urlOnline="https://get.adobe.com/flashplayer/"
2017-06-21 20:15:27 +02:00
if ! f__cnxTest; then f__error "connection impossible ou site adobe injoignable"; fi
verFlash=$(wget --no-check-certificate --tries=1 --timeout=15 --user-agent="$user_agent" -nv -qO - "$urlOnline" | \
grep "AUTO_ID_columnleft_p_version" | grep -o '[0-9].*[0-9]') || verFlash="na"
verInstall=$(cat /home/"$user_"/.mozilla/plugins/libflashplayer.version 2>/dev/null) || verInstall=""
uptodate=""
if [ $verFlash == "na" ]; then f__info "version FlashPlayer non accessible";
else f__info "version FlashPlayer en ligne: $verFlash"; fi
if [ "$verInstall" != "" ] && [ "$verInstall" != "flashTest" ]; then
if [ "$verInstall" == "$verFlash" ]; then f__info "version à jour";
else
f__info "version installée: $verInstall"", mise à jour possible"
uptodate="ko"
fi
elif [ "$verInstall" == "" ]; then f__info "FlashPlayer non installé";
elif [ "$verInstall" == "flashTest" ]; then f__info "FlashPlayer, version test, installé"; fi
2017-06-06 20:04:42 +02:00
}
2017-06-06 02:43:07 +02:00
2017-06-21 20:15:27 +02:00
# pas beau ce soft :(
2017-06-06 20:04:42 +02:00
f_avertissement(){
cat << 'EOF'
2017-06-22 17:02:42 +02:00
FlashPlayer n'est pas libre, c'est un programme propriétaire dont on
2017-06-06 20:04:42 +02:00
ne peut pas connaître le code source, ni l'utiliser sans conditions,
ni le distribuer librement.
Il souffre de nombreuses vulnérabilités chroniques, depuis des années
sans que l'éditeur fasse beaucoup d'efforts pour corriger cet état
de fait...
Il sera donc bloqué à plus ou moins court terme pas les navigateurs
majeurs, c'est à dire Firefox et Chrom(ium). Préparez vous à cela...
2017-06-06 02:43:07 +02:00
EOF
2017-06-06 20:04:42 +02:00
}
2017-06-06 02:43:07 +02:00
2017-06-08 14:09:19 +02:00
# affichage help
f_help(){
printf $BLUE
2017-06-06 20:04:42 +02:00
cat << 'EOF'
2017-06-07 03:12:35 +02:00
-----------------------------------------------------------------------
2017-06-08 14:09:19 +02:00
./getFlashPlayer : installation du script dans le système, en ROOT
2017-06-16 13:08:58 +02:00
getFlashPlayer install : téléchargement & installation & update Flash
2017-06-07 03:12:35 +02:00
getFlashPlayer remove : désinstallation de FlashPlayer
2017-06-08 14:09:19 +02:00
getFlashPlayer version : version en ligne de FlashPlayer
2017-07-02 16:55:31 +02:00
getFlashPlayer upgrade : MAJ si disponible et si version standard (non test)
utilisé par cron toutes les semaines
2017-06-10 21:16:48 +02:00
----
2017-07-02 16:55:31 +02:00
getFlashPlayer v-test : installation version de test de FlashPlayer
2017-06-10 21:16:48 +02:00
----
2017-06-10 00:21:43 +02:00
getFlashPlayer sysremove : désinstall du script du système, en ROOT
2017-06-06 20:04:42 +02:00
EOF
2017-06-10 21:16:48 +02:00
printf $COLOR; cat << 'EOF'
2017-06-08 14:09:19 +02:00
-----------------------------------------------------------------------
Ce script doit être exécuté avec les droits root uniquement pour
2017-06-22 17:02:42 +02:00
l'installation et la suppression du script dans le système.
2017-06-06 20:04:42 +02:00
Il désinstallera le paquet flashplugin-nonfree si présent.
2017-06-22 17:02:42 +02:00
Seul le plugin sera installé, en tant que plugin Mozilla Firefox.
2017-06-07 03:12:35 +02:00
Ce script devrait fonctionner sur Ubuntu.
-----------------------------------------------------------------------
2017-06-06 20:04:42 +02:00
EOF
2017-06-08 14:09:19 +02:00
printf $COLOR
}
2017-06-06 02:43:07 +02:00
2017-06-21 20:15:27 +02:00
f_cronAnacron(){
case "$1" in
"install" )
# création répertoire plugin/
mkdir -p "/home/$user_/.mozilla/plugins"
chown "$user_": "/home/$user_/.mozilla/plugins"
# table anacron
echo "7 15 getFP nice /opt/bin/$script upgrade &>/dev/null" > /home/"$user_"/.mozilla/plugins/libflashplayer.anacrontab
2017-06-22 17:02:42 +02:00
## test: anacron journalier echo "1 05 getFPtest nice /opt/bin/$script upgrade &>/dev/null" >> /home/"$user_"/.mozilla/plugins/libflashplayer.anacrontab
2017-06-21 20:15:27 +02:00
chown "$user_": /home/"$user_"/.mozilla/plugins/libflashplayer.anacrontab
# création spool anacron utilisateur
mkdir -p /home/"$user_"/.config/anacron/spool
chown "$user_": /home/"$user_"/.config/anacron/spool
# cron tab pour activation horaire anancron
echo "@hourly $user_ /usr/sbin/anacron -t /home/"$user_"/.mozilla/plugins/libflashplayer.anacrontab -S /home/"$user_"/.config/anacron/spool" >> /etc/crontab
;;
"remove" )
rm /home/"$user_"/.config/anacron/spool/getFP
sed -i "\;^\@hourly.*libflashplayer.anacrontab.*$;d" /etc/crontab
;; # désinstallation
esac
}
2017-06-08 14:09:19 +02:00
# install du script dans le système
f_sysinstall(){
2017-06-21 20:15:27 +02:00
if ! f__root ; then f__error "vous devez être ROOT pour installer ce script dans le système"; fi
2017-06-07 03:12:35 +02:00
2017-06-08 14:09:19 +02:00
# on vire 'flashplugin-nonfree' si installé
2017-06-10 10:39:57 +02:00
if [ "$( dpkg-query -l flashplugin-nonfree &>/dev/null | grep -Eo ^ii)" == "ii" ]; then apt-get purge flashplugin-nonfree; fi
2017-06-08 14:09:19 +02:00
2017-06-07 03:12:35 +02:00
# installation dans /opt
mkdir -p /opt/bin/
2017-06-21 20:15:27 +02:00
cp -d "$script" /opt/bin/
2017-06-10 00:21:43 +02:00
ln -s /opt/bin/"$script" /usr/local/bin/"$script" &>/dev/null
2017-07-12 06:24:41 +02:00
## rm "$script" &>/dev/null
2017-06-21 20:15:27 +02:00
# cron/anacron install
f_cronAnacron install
f__info "$GREEN$script est installé dans le système.\n$BLUE appel du script par$GREEN $script$BLUE (sans ./)"
2017-06-07 03:12:35 +02:00
exit 0
2017-06-08 14:09:19 +02:00
}
2017-06-07 03:12:35 +02:00
2017-06-08 14:09:19 +02:00
# suppression du script dans le système
f_sysremove(){
2017-06-21 20:15:27 +02:00
if ! f__root ; then f__error "vous devez être ROOT pour supprimer ce script dans le système"; fi
2017-06-07 03:12:35 +02:00
# suppression de /opt
2017-06-10 00:21:43 +02:00
rm /opt/bin/"$script" &>/dev/null
unlink /usr/local/bin/"$script" &>/dev/null
2017-06-21 20:15:27 +02:00
# cron/anacron install
f_cronAnacron remove
f__info "$GREEN$script est supprimé du système.\n"
2017-06-08 14:09:19 +02:00
}
2017-06-06 03:10:44 +02:00
2017-07-02 16:55:31 +02:00
# install plugin dans config user mozilla, $1 = v-test|release
2017-06-08 14:09:19 +02:00
f_install(){
f_avertissement
2017-06-21 20:15:27 +02:00
# architecture -> $architecture (version release)
2017-06-08 14:09:19 +02:00
if [ "$(dpkg --print-architecture)" = "amd64" ]; then architecture='x86_64'; else architecture='i386'; fi
2017-06-06 02:43:07 +02:00
2017-06-08 14:09:19 +02:00
# calcul $file, affichage version pendant l'install, calcul $url
2017-06-22 17:02:42 +02:00
file="flashplayer_npapi_linux.$architecture.tar.gz"
2017-07-02 16:55:31 +02:00
if [ "$1" == "v-test" ]; then
# on change l'architecture pour la version v-test
2017-06-10 00:21:43 +02:00
if [ "$architecture" == "x86_64" ]; then architecture='linux64'; else architecture='linux32'; fi
2017-07-02 16:55:31 +02:00
verFlash="v-test"
2017-06-21 20:15:27 +02:00
f__info "installation FlashPlayer, version alternative de test"
2017-06-08 14:09:19 +02:00
url="https://fpdownload.macromedia.com/pub/labs/flashruntimes/flashplayer/$architecture/"
else
2017-06-21 20:15:27 +02:00
if [ $verFlash == "na" ] || [ $verFlash == "" ]; then f_versionFlash; fi
f__info "installation FlashPlayer, version $verFlash"
2017-06-08 14:09:19 +02:00
url="https://fpdownload.adobe.com/get/flashplayer/pdc/$verFlash/"
fi
2017-06-06 02:43:07 +02:00
2017-06-10 00:21:43 +02:00
# dossier temporaire de travail, création
2017-06-21 20:15:27 +02:00
dirTemp="/tmp/$script-$RANDOM/"
2017-06-10 00:21:43 +02:00
mkdir -p "$dirTemp"
2017-06-06 02:43:07 +02:00
2017-06-21 20:15:27 +02:00
# chargement archive flashplayer
wget -c --user-agent="$user_agent" -O "$dirTemp""$file" "$url""$file"
2017-06-10 00:21:43 +02:00
# gestion erreur wget / à peaufiner? /
2017-06-08 14:09:19 +02:00
if [ "$?" != "0" ]; then
2017-06-21 20:15:27 +02:00
f__error "problème au chargement, connexion défaillante? réessayer" \
"Si persistance, merci de prévenir $projet" "$contact"
2017-06-08 14:09:19 +02:00
fi
2017-06-06 20:04:42 +02:00
2017-06-08 14:09:19 +02:00
# décompression archive téléchargée dans dossier de travail
2017-06-21 20:15:27 +02:00
tar -xaf "$dirTemp""$file" -C "$dirTemp"
2017-06-06 02:43:07 +02:00
2017-06-21 20:15:27 +02:00
# copie de la bibliothèque flash dans plugins/ user mozilla, effacement dir temporaire
cp -f "$dirTemp"libflashplayer.so "/home/$user_/.mozilla/plugins/"
2017-06-10 00:21:43 +02:00
rm -Rf "$dirTemp"
2017-06-06 20:04:42 +02:00
2017-06-21 20:15:27 +02:00
# marqueur version et maj dans plugins/ user mozilla
2017-07-02 16:55:31 +02:00
if [ "$1" == "v-test" ]; then echo "flashTest" > /home/"$user_"/.mozilla/plugins/libflashplayer.version;
2017-06-21 20:15:27 +02:00
else echo "$verFlash" > /home/"$user_"/.mozilla/plugins/libflashplayer.version; fi
touch /home/"$user_"/.mozilla/plugins/libflashplayer.maj
# droits user si install par root
chown -R "$user_": /home/"$user_"/.mozilla/plugins
2017-06-10 10:39:57 +02:00
2017-06-21 20:15:27 +02:00
if [ "$2" != "upgrade" ]; then f__info "$GREEN""FlashPlayer $verFlash est installé pour $user_\n\t" \
"$BLUE""Pour tester: http://get.adobe.com/flashplayer/about/"; fi
2017-06-08 14:09:19 +02:00
}
2017-06-06 02:43:07 +02:00
2017-06-21 20:15:27 +02:00
# suppression du plugin
2017-06-10 00:21:43 +02:00
f_remove(){
# on efface le plugin et le répertoire si vide
2017-06-21 20:15:27 +02:00
rm -f "/home/$user_/.mozilla/plugins/"libflashplayer.*
rm -d "/home/$user_/.mozilla/plugins/" &>/dev/null
2017-06-10 00:21:43 +02:00
2017-06-21 20:15:27 +02:00
f__info "$GREEN""FlashPlayer $version est désinstallé pour $user_\n"
}
2017-06-06 02:43:07 +02:00
2017-06-10 21:16:48 +02:00
2017-06-21 20:15:27 +02:00
### début script =======================================================
2017-06-06 02:43:07 +02:00
2017-06-21 20:15:27 +02:00
# debian? sinon dehors / utilité? /
if ! f__debian ; then f__error "désolé, vous n'utilisez pas Debian :( adieu o/"; fi
2017-06-06 02:43:07 +02:00
2017-06-21 20:15:27 +02:00
# traitements arguments
if [ "$#" -gt 1 ]; then f__info "$RED trop d'arguments"; f_help; exit 1; fi
#initialisation
f__user
verFlash="na"
2017-06-06 02:43:07 +02:00
2017-06-21 20:15:27 +02:00
#### installation du script si pas dans le système =====================
if ! f__scriptBin ; then f_sysinstall; fi
case "$1" in
"install" )
f_install "release" ;; # installation
2017-07-02 16:55:31 +02:00
"v-test" )
f_install "v-test" ;; # install version test
2017-06-21 20:15:27 +02:00
"remove" )
f_remove ;; # désinstallation
"version" )
f_versionFlash ;; # version en ligne & installée
"sysremove" )
f_sysremove ;; # désinstallation du script
"upgrade" )
f__syslogInfo "$script $version: upgrade"
if [ -e /home/"$user_"/.mozilla/plugins/libflashplayer.maj ]; then touch /home/"$user_"/.mozilla/plugins/libflashplayer.maj; fi
f_versionFlash
if [ "$uptodate" == "ko" ]; then
f_install "release" "upgrade"
f__syslogInfo "FlashPlayer mis à jour en $verFlash pour $user_"
else f__syslogInfo "FlashPlayer non mis à jour pour $user_"; fi
;; # upgrade si MAJ possible
* )
f_help
f_avertissement
;; # affichage help par défaut
esac
2017-06-10 21:16:48 +02:00
2017-06-06 02:43:07 +02:00
exit 0