mirror of https://framagit.org/kyodev/kyopages.git
381 lines
15 KiB
Bash
Executable File
381 lines
15 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
version=2.8.1
|
|
date="30/07/2017"
|
|
projet="simpledebian"
|
|
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/"
|
|
user_agent="Mozilla/5.0 (X11; Linux $(uname -m); rv:54.0) Gecko/20100101 Firefox/54.0"
|
|
|
|
##### license LPRAB/WTFPL
|
|
# auteur: simpledebian
|
|
# contributeurs: kyodev, coyotus, naguam
|
|
#####
|
|
|
|
PATH='/bin:/usr/bin' ; IFS=' '
|
|
|
|
f__affichage(){
|
|
# définition couleurs
|
|
YELLOW="$(printf "\033[0;33m")" # ?
|
|
GREEN="$(printf "\033[0;32m")" # ok
|
|
BLUE="$(printf "\033[0;34m")" # info
|
|
RED="$(printf "\033[0;31m")" # alerte
|
|
COLOR="$(printf "\033[0m")" # standard
|
|
|
|
clear
|
|
printf "$BLUE"
|
|
cat << 'EOF'
|
|
_ _____ _ _ ____ _
|
|
__ _ ___| |_| ___| | __ _ ___| |__ | _ \| | __ _ _ _ ___ _ __
|
|
/ _' |/ _ \ __| |_ | |/ _' / __| '_ \| |_) | |/ _' | | | |/ _ \ '__|
|
|
| (_| | __/ |_| _| | | (_| \__ \ | | | __/| | (_| | |_| | __/ |
|
|
\__, |\___|\__|_| |_|\__,_|___/_| |_|_| |_|\__,_|\__, |\___|_|
|
|
|___/ |___/
|
|
EOF
|
|
echo -e "$YELLOW pour Firefox, version $version - $date$COLOR\n"
|
|
}
|
|
|
|
# user ayant initié la session graphique, assigne $user_, sortie script sur erreur
|
|
# gestion variable environnement pour personnaliser l'user avec: USER_INSTALL=user script
|
|
f__user(){
|
|
# 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 "répertoire /home/$user_ INEXISTANT"
|
|
else
|
|
f__error "utilisateur indéterminé" " lancer le script avec:\n\tUSER_INSTALL=user $0"
|
|
fi
|
|
}
|
|
|
|
# log spécifique, fichier log limité à 10000octets, $1 message à loguer
|
|
f__log(){
|
|
if [ -w "$fileLogs" ]; then
|
|
if [ "$(stat -c %s $fileLogs)" -ge "10000" ]; then
|
|
echo "$(date +%Y%m%d\ %H%M%S) $1" &>/dev/null > "$fileLogs"
|
|
else
|
|
echo "$(date +%Y%m%d\ %H%M%S) $1" &>/dev/null >> "$fileLogs"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# affichage $1 en rouge, $1++ optionnels en bleu, sortie script sur erreur, log $1 si upgrade($opType)
|
|
f__error() {
|
|
echo -e "\n$RED 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
|
|
exit 1
|
|
}
|
|
|
|
# affichage des paramètres en bleu, ligne vide à la fin
|
|
f__info() {
|
|
for (( i=1 ; i<=$# ; i++ )); do echo -e " $BLUE${!i}"; done
|
|
echo "$COLOR"
|
|
}
|
|
|
|
#test dépendances (commandes disponibles), $1 liste commandes
|
|
f__requis(){
|
|
for i in $@; do
|
|
if [ ! "$(which $i)" ]; then
|
|
local testDepends="ko"
|
|
f__info "$RED vous devez avoir la commande $i pour exploiter ce script"
|
|
fi
|
|
done
|
|
[ -z "$testDepends" ] || f__error "Paquets manquants" " Contacter administrateur pour disposer de ces commandes"
|
|
}
|
|
|
|
# root? return 0 si root else 1
|
|
f__root(){
|
|
if [ $EUID == 0 ]; then return 0; else return 1; fi
|
|
}
|
|
|
|
# test wget, $1 url à tester, sortie script sur erreur
|
|
f__wget_test(){
|
|
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."
|
|
}
|
|
|
|
# test validité archive, $1 fichier (gzip), return 1 si invalide
|
|
f__archive_test(){
|
|
file -b "$1" | grep -q 'gzip compressed data' || return 1
|
|
}
|
|
|
|
# install du script dans le système
|
|
fscript_install(){
|
|
f__root || f__error "vous devez être ROOT pour installer ce script dans le système"
|
|
# si debian on vire 'flashplugin-nonfree' si installé
|
|
if [ "$(which dpkg)" ]; then
|
|
dpkg --get-selections | grep '[[:space:]]install' | grep -q '^flashplugin-nonfree[[:space:]]' \
|
|
&& apt-get purge flashplugin-nonfree
|
|
fi
|
|
# install /opt
|
|
mkdir -p /opt/bin/
|
|
ln -s "/opt/bin/$script" "/usr/bin/$script" &>/dev/null
|
|
cp -d "$(basename $0)" "/opt/bin/$script"
|
|
chmod a+rwx "/opt/bin/$script"
|
|
chown "$user_": "/opt/bin/$script"
|
|
# cron/anacron install
|
|
fscript_cronAnacron install
|
|
# création fichier log
|
|
touch "$fileLogs"
|
|
chmod a+rwx "$fileLogs"
|
|
chown "$user_": "$fileLogs"
|
|
[ -f "$script"_changelog.md ] || rm "$(basename $0)" &>/dev/null ## on efface pas si changelog (dev)
|
|
f__info "$GREEN$script installé dans le système." "maintenant, appel du script par:$GREEN $script$BLUE (sans ./)"
|
|
f__log "$script $version installé dans le système"
|
|
exit 0
|
|
}
|
|
|
|
# suppression du script dans le système
|
|
fscript_remove(){
|
|
f__root || 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
|
|
unlink /usr/local/bin/"$script" &>/dev/null # ancienne localisation
|
|
# cron/anacron remove
|
|
fscript_cronAnacron remove
|
|
f__info "$GREEN$script supprimé du système."
|
|
f__log "$script $version supprimé du système"
|
|
}
|
|
|
|
# version script en ligne, assigne $versionScript, $script_aJour=ok|ko,
|
|
fscript_get_version(){
|
|
versionScript="$(wget -q --tries=2 --timeout=15 --user-agent="$user_agent" -O - "$urlScript" | grep '^version=' | cut -d '=' -f 2)"
|
|
if [ "$version" != "$versionScript" ]; then
|
|
f__info "version script en ligne: $versionScript, mise à jour possible"
|
|
script_aJour="ko"
|
|
else script_aJour="ok"; fi
|
|
}
|
|
|
|
# mise à jour script si dispo
|
|
fscript_dl(){
|
|
if [ "$script_aJour" == "ok" ]; then return 0; fi
|
|
local dirTemp="/tmp/$script-$RANDOM/"
|
|
mkdir -p "$dirTemp"
|
|
wget -q --show-progress --tries=1 --timeout=15 --user-agent="$user_agent" -O "$dirTemp$script" "$urlScript"
|
|
if [ "$?" != "0" ]; then f__wget_test "$urlScript"; fi
|
|
chmod a+rwx "$dirTemp$script"
|
|
chown "$user_": "$dirTemp$script"
|
|
cp -d "$dirTemp$script" /opt/bin/"$script"
|
|
rm -rf "$dirTemp"
|
|
f__info "\n $script mis à jour en version $versionScript"
|
|
f__log "$script mis à jour en version $versionScript"
|
|
$0 upgrade #script mis à jour, on relance le script en upgrade pour le plugin
|
|
exit 0
|
|
}
|
|
|
|
# inscription dans tache upgrade en anacron hebdomadaire, via cron horaire
|
|
fscript_cronAnacron(){
|
|
case "$1" in
|
|
install )
|
|
if [ ! -e "$fileAnacron" ]; then
|
|
# création répertoire plugin/
|
|
mkdir -p "$dirInstall"
|
|
chown "$user_": "$dirInstall"
|
|
# table anacron
|
|
echo "7 15 getFP nice /opt/bin/$script upgrade &>/dev/null" > "$fileAnacron"
|
|
## test: anacron journalier: echo "1 05 getFPtest nice /opt/bin/$script upgrade &>/dev/null" >> "$fileAnacron"
|
|
chown "$user_": "$fileAnacron"
|
|
# création spool anacron utilisateur
|
|
mkdir -p "/home/$user_/.config/anacron/spool"
|
|
chown "$user_": "/home/$user_/.config/anacron/spool"
|
|
# cron tab pour activation horaire anacron
|
|
echo "@hourly $user_ /usr/sbin/anacron -t $fileAnacron -S /home/$user_/.config/anacron/spool" >> /etc/crontab
|
|
fi
|
|
;;
|
|
remove )
|
|
rm "/home/$user_/.config/anacron/spool/getFP"* &>/dev/null
|
|
sed -i "/^\@hourly.*libflashplayer.anacrontab.*$/d" /etc/crontab
|
|
rm "$fileAnacron"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# version Flash en ligne & installée, si $1="quiet" pas d'affichage, $verFlash=x.y|na, $plugin_aJour=ok|ko
|
|
fflash_get_version(){
|
|
local verInstall="$(strings $dirInstall/libflashplayer.so | grep -Eo '[0-9]+_[0-9]+_[0-9]+_[0-9]+' | sed 's/_/./g')"
|
|
plugin_aJour="ok"
|
|
verFlash="$(wget -q --tries=2 --timeout=15 --user-agent="$user_agent" -O - "$urlOnline" | \
|
|
sed -nr 's/^.*AUTO_ID.*Version[[:blank:]]+([0-9].*[0-9]).*$/\1/p')" || verFlash="na"
|
|
if [ "$?" != "0" ]; then f__wget_test "$urlOnline"; fi # sortie script si erreur wget
|
|
if [ $verFlash == "na" ]; then f__error "version FlashPlayer non accessible";
|
|
else [ "$1" == "quiet" ] || f__info "version FlashPlayer en ligne: $verFlash"; fi
|
|
if [ -z "$verInstall" ]; then
|
|
f__info "FlashPlayer non installé"
|
|
elif [ "$verInstall" == "$verFlash" ]; then
|
|
[ "$1" == "quiet" ] || f__info "FlashPlayer à jour"
|
|
else
|
|
plugin_aJour="ko"
|
|
[ "$1" == "quiet" ] || f__info "version FlashPlayer installée: $verInstall, mise à jour possible"
|
|
fi
|
|
}
|
|
|
|
# pas beau ce soft :(
|
|
fflash_avertissement(){
|
|
cat << 'EOF'
|
|
FlashPlayer n'est pas libre, c'est un programme propriétaire dont on
|
|
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 cela...
|
|
Il sera bloqué 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$COLOR\n"
|
|
}
|
|
|
|
# affichage help
|
|
fflash_help(){
|
|
printf "$BLUE"
|
|
cat << 'EOF'
|
|
-----------------------------------------------------------------------
|
|
./getFlashPlayer : installation du script dans le système, en ROOT
|
|
|
|
getFlashPlayer install : téléchargement & installation & update Flash
|
|
getFlashPlayer remove : désinstallation de FlashPlayer
|
|
getFlashPlayer version : version en ligne de FlashPlayer
|
|
getFlashPlayer upgrade : MAJ si disponible, cron hebdomadaire
|
|
----
|
|
getFlashPlayer manuel fichier.tar.gz : installation d'une archive manuellement
|
|
----
|
|
getFlashPlayer sysremove : désinstall du script du système, en ROOT
|
|
EOF
|
|
printf "$COLOR"
|
|
cat << 'EOF'
|
|
-----------------------------------------------------------------------
|
|
Ce script doit être exécuté avec les droits root uniquement pour
|
|
l'installation et la suppression du script dans le système.
|
|
Il désinstallera le paquet flashplugin-nonfree si présent.
|
|
Seul le plugin sera installé, en tant que plugin Mozilla Firefox.
|
|
-----------------------------------------------------------------------
|
|
EOF
|
|
echo -e "plus d'infos:$GREEN https://kyodev.frama.io/kyopages/scripts/getFlashPlayer/$COLOR\n"
|
|
}
|
|
|
|
# calcul url téléchargement plugin, assigne $recup_url,
|
|
fflash_recup_url_v1(){
|
|
local recup1="https://fpdownload.adobe.com/get/flashplayer/pdc/"
|
|
if [ "$(uname -m)" == "i686" ] || [ "$(uname -m)" == "i386" ]; then local recup2='i386';
|
|
elif [ "$(uname -m)" == "x86_64" ] || [ "$(uname -m)" == "amd64" ]; then local recup2='x86_64';
|
|
else f__error "architecture non reconnue" ; fi
|
|
recup_url="$recup1$verFlash/flash_player_npapi_linux.$recup2.tar.gz"
|
|
}
|
|
|
|
# installation du plugin chargé manuellement, $1
|
|
fflash_install_manuel(){
|
|
if [ ! -e "$1" ]; then f__error "fichier plugin $1 introuvable"; fi
|
|
f__archive_test "$1" || f__error "Le fichier $1 n'est pas une archive tar.gz valide"
|
|
f__info "installation manuelle $1"
|
|
fflash_install "manuel" "$1"
|
|
}
|
|
|
|
# install plugin dans config user mozilla, $1 manuel (install manuelle), $2 script à installer si install manuelle
|
|
fflash_install(){
|
|
[ "$opType" == "upgrade" ] || fflash_avertissement
|
|
if [ "$1" == "manuel" ]; then
|
|
local dirTemp="$(dirname $2)/$script-$RANDOM/"
|
|
local file="$(basename $2)"
|
|
mkdir -p "$dirTemp"
|
|
else
|
|
local file="flash_player_npapi_linux.$(getconf LONG_BIT).tar.gz"
|
|
local dirTemp="/tmp/$script-$RANDOM/"
|
|
if [ $verFlash == "na" ]; then fflash_get_version "quiet"; fi
|
|
f__info "installation FlashPlayer, version $verFlash"
|
|
mkdir -p "$dirTemp"
|
|
|
|
# détection/chargement/test archive plugin flashplayer
|
|
fflash_recup_url_v1
|
|
wget -q -c --show-progress --tries=1 --timeout=15 --user-agent="$user_agent" --referer="$urlOnline" -O "$dirTemp$file" "$recup_url"
|
|
if [ "$?" != "0" ]; then f__wget_test "$recup_url"; fi
|
|
f__archive_test "$dirTemp$file" || f__error " Le fichier $dirTemp$file n'est pas une archive tar.gz valide"
|
|
fi
|
|
# décompression archive téléchargée dans dossier de travail
|
|
if [ -e "$file" ]; then tar -xaf "$file" -C "$dirTemp"; else tar -xaf "$dirTemp$file" -C "$dirTemp"; fi
|
|
if [ "$1" == "manuel" ]; then verFlash="$(strings $dirTemp/libflashplayer.so | grep -Eo '[0-9]+_[0-9]+_[0-9]+_[0-9]+' | sed 's/_/./g')"; fi
|
|
|
|
# copie de la bibliothèque flash dans plugins/ user mozilla, effacement répertoire temporaire
|
|
mkdir -p "$dirInstall"
|
|
cp -f "$dirTemp"libflashplayer.so "$dirInstall/"
|
|
rm -Rf "$dirTemp"
|
|
# droits user si jamais installation par root
|
|
chown -R "$user_": "$dirInstall"
|
|
|
|
f__info "\n FlashPlayer $verFlash installé pour $user_" "\tPour tester: http://get.adobe.com/flashplayer/about/"
|
|
f__log "FlashPlayer $verFlash installé pour $user_"
|
|
}
|
|
|
|
# test et mise à jour plugin si plugin outdated
|
|
fflash_upgrade(){
|
|
if [ "$plugin_aJour" == "ko" ]; then fflash_install; fi
|
|
}
|
|
|
|
# suppression du plugin
|
|
fflash_remove(){
|
|
[ -e /home/kyodev/.mozilla/plugins/libflashplayer.so ] || f__error "FlashPlayer inexistant pour $user_\n"
|
|
local verInstall="$(strings $dirInstall/libflashplayer.so | grep -Eo '[0-9]+_[0-9]+_[0-9]+_[0-9]+' | sed 's/_/./g')"
|
|
rm "$dirInstall/libflashplayer.so"
|
|
rm "$dirInstall/libflashplayer.maj" &>/dev/null # ancien fichier éventuel
|
|
rm "$dirInstall/libflashplayer.version" &>/dev/null # ancien fichier éventuel
|
|
f__info "$GREEN FlashPlayer $verInstall désinstallé pour $user_"
|
|
f__log "FlashPlayer $verInstall désinstallé pour $user_"
|
|
}
|
|
|
|
#initialisation
|
|
f__affichage
|
|
f__user
|
|
verFlash="na"
|
|
f__requis "wget file tar"
|
|
fileLogs="/var/log/sdeb_getFlash.log"
|
|
dirInstall="/home/$user_/.mozilla/plugins"
|
|
fileAnacron="$dirInstall/libflashplayer.anacrontab"
|
|
|
|
urlOnline="https://get.adobe.com/fr/flashplayer/" # test version & referer
|
|
[ -e "$dirInstall/libflashplayer.so" ] && flash_installed="ok" || flash_installed="ko"
|
|
|
|
# installation du script si appel pas fait depuis le système
|
|
dirname "$0" | grep -q 'bin' || fscript_install
|
|
# détection droits inappropriés sur le script, cas de figure sur version de dev
|
|
[ "$1" != "sysremove" ] && [ -e "/opt/bin/$script" ] && ls -l "/opt/bin/$script" | grep -q 'root' && f__error "bug sécu 01" \
|
|
"veuillez désinstaller le script et le réinstaller" "voir: $urlNotice#supprimer-le-script"
|
|
# détection ancien système de logs via syslog
|
|
[ -w "$fileLogs" ] || f__info "pour bénéficier de la nouvelle version des logs, vous devriez réinstaller manuellement $script" \
|
|
"voir https://kyodev.frama.io/kyopages/scripts/getFlashPlayer/#installation-rapide-du-script"
|
|
|
|
case "$1" in
|
|
"install" )
|
|
fflash_install;; # installation plugin
|
|
"remove" )
|
|
fflash_remove ;; # désinstallation plugin
|
|
"version" )
|
|
fflash_get_version
|
|
fscript_get_version ;; # version plugin en ligne & installée
|
|
"sysremove" )
|
|
fscript_remove ;; # désinstallation du script
|
|
"upgrade" )
|
|
opType="upgrade"
|
|
f__log="tests mise à jour"
|
|
fscript_get_version
|
|
fscript_dl
|
|
[ "$flash_installed" == "ko" ] && exit 0
|
|
fflash_get_version
|
|
fflash_upgrade ;; # upgrade script et plugin si installé
|
|
"manuel" )
|
|
fflash_install_manuel "$2" ;; # installation manuelle d'un chargement
|
|
* )
|
|
fflash_help
|
|
fflash_avertissement ;; # affichage help par défaut
|
|
esac
|
|
|
|
exit 0
|