#!/bin/bash version=4.9.0 date="04/03/2018" projet="simpledeb" contact="IRC freenode ##sdeb ou https://framagit.org/kyodev/kyopages/issues/" script="getFlashPlayer" ##### license LPRAB/WTFPL # auteur: simpledeb # contributeurs: kyodev, coyotus, naguam ##### # 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 x_architecture=1 case "$(uname -m)" in amd64 | x86_64 ) fu_archi="x86_64";; i?86 | x86 ) fu_archi="i386";; * ) case "$(getconf LONG_BIT)" in 64 ) fu_archi="x86_64";; 32 ) fu_archi="i386";; *) return 1 esac ;; esac } # 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 ) 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?!! } f__color(){ # 01/03/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 ) 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 fi } # affichage $1 en rouge, $1++ optionnels en bleu, sortie script sur erreur, log $1 si $operation=upgrade f__error(){ # 18/12/2017 local depart=1 i echo -e "\n$RED $script $version, erreur critique: $1 $STD" for (( i=2 ; i<=$# ; i++ )); do echo -e " $BLUE${!i}$STD" done echo [ "$operation" == "upgrade" ] && f__log "$script $version: $1" exit 1 } # 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 [[ "$1" =~ "raw" || "$1" =~ "log" ]] && depart=2 [[ "$1" =~ "log" ]] && f__log "$( sed -E 's/\\t//;s/\\n// ' <<< "$2" | xargs )" 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 if [ -w "$script_logs" ]; 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" fi fi } # 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 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 "$command" &>/dev/null ; then unset commandsMissing packagesMissing break else # inexistant commandsMissing+="$command " packagesMissing+="$package " fi done done # dédoublonnage & triage 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% } # affichage final if [ "$commandsMissing" ] && [ "$ENV_DEBIAN" ]; then $c_echo "${RED}erreur critique, manquant: $STD$BOLD$commandsMissing" \ "vous devriez exécuter:$GREEN apt install $packagesMissing" elif [ "$commandsMissing" ]; then $c_echo "${RED}erreur critique, manquant: $STD$BOLD$commandsMissing" fi [ "$commandsMissing" ] && return 1 || return 0 } # $@=cmd à lancer en root avec su ou sudo. si $@ contient [':x:'] x=nombre de tentatives, 3 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 # 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 " else sudo="su --shell $toBash --preserve-environment -c " fi # extraction nb de tentatives éventuel if [[ "$@" =~ :.{1,2}: ]]; then nb="$@" nb=${nb#*:} nb=${nb%:*} options=${@//:$nb:/ } (( ${nb}+1 )) 2>/dev/null || nb="$nbDefault" # test si numérique, sinon, else nb="$nbDefault" 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 [ "$isudo" == "$nb" ] && return 1 done fi } # 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= script f__user(){ # 24/02/2018 local user userid test 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 fu_user="$USER_INSTALL"; return 0 elif [[ "$TERM" =~ linux ]]; then #debian 9 recovery ou nomodeset TERM=linux if [ "$USER" ]; then user="$USER" elif [ "$EUID" -eq 0 ]; then fu_user="$root_login" return 0 fi fi if [ "$SUDO_UID" ]; then 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 userid=$( grep -Eo '[0-9]+' <<< "$XAUTHORITY" | cut -d'/' -f4 ) fi [ "$userid" ] && user=$( grep $userid /etc/passwd | cut -d ":" -f 1 ) if [ "$user" ] && [ "$user" != "$root_login" ]; then fu_user="$user" return 0 else if [ "$SUDO_USER" ] && [ "$SUDO_USER" != "$root_login" ]; then 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} fi fi fu_user="$user" [ "$fu_user" ] || return 1 [ -d "/home/$fu_user" ] || return 2 return 0 } # test wget, $1=url à tester, $2=''|print|loc|test # par défaut, sortie du script (même si url testée ok) avec affichage erreur ou ok # 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 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" retourWget="$?" [ "$retourWget" == 1 ] && retourWget="1: code erreur générique" [ "$retourWget" == 2 ] && retourWget="2: parse erreur (ligne de commande?)" [ "$retourWget" == 3 ] && retourWget="3: erreur Entrée/sortie fichier" [ "$retourWget" == 4 ] && retourWget="4: défaut réseau" [ "$retourWget" == 5 ] && retourWget="5: défaut vérification SSL" [ "$retourWget" == 6 ] && retourWget="6: défaut authentification" [ "$retourWget" == 7 ] && retourWget="7: erreur de protocole" [ "$retourWget" == 8 ] && retourWget="8: réponse serveur en erreur" retourHttp=$( grep -i 'HTTP/' "$file_test_wget" | tr -d '\n' | xargs ) location=$( grep -i 'location' $file_test_wget | xargs ) if [ "$2" == "test" ]; then rm -f "$file_test_wget" # spécial maintenance frama.link, pas de redirection sur page status framalink grep -q '303' <<< "$retourHttp" && return 1 # 303 See Other [ "$retourWget" == "0" ] && return 0 || return 1 fi if [ "$2" == "print" ]; then if [ "$retourWget" != "0" ]; then echo " erreur wget: erreur $RED$retourWget" echo -e "$BLUE $1$STD\t$RED $retourHttp$STD" else echo -e "$BLUE $1$STD\t$GREEN $retourHttp$STD" fi fi if [ "$2" == "print" ] || [ "$2" == "loc" ]; then [ "$location" ] && echo -n "$YELLOW $location" || echo -n "$YELLOW no location" echo "$STD" rm -f "$file_test_wget" return 0 fi 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 return 1 fi if grep -q '200' <<< "$retourHttp"; then 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=" _ _____ _ _ ____ _ __ _ ___| |_| ___| | __ _ ___| |__ | _ \| | __ _ _ _ ___ _ __ / _' |/ _ \ __| |_ | |/ _' / __| '_ \| |_) | |/ _' | | | |/ _ \ '__| | (_| | __/ |_| _| | | (_| \__ \ | | | __/| | (_| | |_| | __/ | \__, |\___|\__|_| |_|\__,_|___/_| |_|_| |_|\__,_|\__, |\___|_| |___/ |___/" 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" } 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" "" ) tput cuu1 # une ligne plus haut for ligne in "${help[@]}"; do echo -e " $ligne" done echo -e "$STD plus d'infos: $GREEN https://kyodev.frama.io/kyopages/scripts/getFlashPlayer/$STD" echo " -----------------------------------------------------------------------" } fflash_avertissement(){ # 24/01/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" } # version Flash en ligne & installée, si $1="quiet" pas d'affichage, $ver_flash, $plugin_a_jour=ko fflash_get_version(){ # 24/01/2018 local verInstall x_get_version=1 # détection version en ligne ver_flash=$( wget -q --tries=2 --timeout=15 --user-agent="$user_agent" -o /dev/null -O - "$url_online" | \ 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' ) [[ "$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" } # install plugin dans config user mozilla, [$1='manuel', $2 archive] fflash_install(){ # 04/03/2018 local verArchive recup_url file_temp dirTemp="/tmp/$script" [ "$operation" == "upgrade" ] || fflash_avertissement mkdir -p "$dirTemp" if [ "$1" == "manuel" ]; then f__info "installation manuelle de $2 version $verArchive" fileTemp="$2" else (( x_get_version == 1 )) || fflash_get_version "quiet" f__info "installation FlashPlayer, version $ver_flash" fileTemp="$dirTemp/flashplayer_$ver_flash""_npapi_linux$( getconf LONG_BIT ).tar.gz" # détection/chargement/test archive plugin flashplayer 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" 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..." tar -xaf "$fileTemp" -C "$dirTemp/" verArchive=$( grep -m1 -i 'version' "$dirTemp/readme.txt" ) verArchive=${verArchive,,} verArchive=${verArchive#version } # copie de la bibliothèque flash dans plugins/ user mozilla mkdir -p "$dir_install" cp -f "$dirTemp/libflashplayer.so" "$dir_install/" chown -R "$fu_user:" "$dir_install" # svg éventuelle archive, effacement répertoire temporaire if [ "$dl_to_svg" == "ok" ]; then chown "$fu_user:" "$fileTemp" mv "$fileTemp" ./ fi rm -Rf "$dirTemp/" if [ "$1" == "manuel" ]; then f__info "log" "archive FlashPlayer $verArchive installé" else f__info "log:raw" "FlashPlayer $ver_flash installé" fi f__info " Pour tester$YELLOW: http://get.adobe.com/flashplayer/about/" } # installation du plugin chargé manuellement, $1=archive fflash_install_manuel(){ # 27/12//2017 [ -e "$1" ] || f__error "fichier plugin $1 introuvable" fflash_install "manuel" "$1" [ -e "$fileDev" ] || rm -f "$1" ## on n'efface pas si fileDev (dev) } # suppression du plugin fflash_remove(){ # 24/01/2018 local verInstall if [ ! -e "$dir_install/libflashplayer.so" ]; then f__info "FlashPlayer non installé pour $fu_user\n" return 1 fi rm "$dir_install/libflashplayer.so" rm -f "$dir_install/libflashplayer.maj" # ancien fichier éventuel rm -f "$dir_install/libflashplayer.version" # ancien fichier éventuel f__info "log" "FlashPlayer désinstallé pour $fu_user" } # test et mise à jour plugin si plugin outdated fflash_upgrade(){ # 24/01/2018 if [ ! -e "$dir_install/libflashplayer.so" ]; then f__info "FlashPlayer non installé pour $fu_user\n" return 1 fi (( x_get_version == 1 )) || fflash_get_version "quiet" if [[ "$ver_flash" =~ "n/a" ]]; then f__info "log" "version en ligne du plugin flash non accessible" elif [ "$plugin_a_jour" == "ko" ]; then fflash_install else f__info "log" "pas de mise à jour disponible" fi } # tache upgrade dans anacron hebdomadaire, via cron horaire, $1=upgrade|install|remove fscript_cronAnacron(){ # 26/01/2018 local dirAnacron dirSpool fileAnacron 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" [ "$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 $script_install --upgrade 1>/dev/null" > "$fileAnacron" # juste erreurs en syslog ## anacron journalier pour dev logname if [ -e "$fileDev" ]; then echo "1 00 $script""Dev nice $script_install --upgrade 1>/dev/null" >> "$fileAnacron" fi # création spool anacron utilisateur mkdir -p "$dirSpool" chown -R "$fu_user:" "$dirAnacron" "$dirSpool" if [ "$EUID" -eq 0 ]; then # crontab pour activation horaire anacron echo "@hourly $fu_user /usr/sbin/anacron -t $fileAnacron -S $dirSpool" >> /etc/crontab fi 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 ;; esac } # version script, [$1=quiet], assigne $ver_script_install, $ver_script_online, $script_a_jour=ok|KO fscript_get_version(){ # 24/01/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" # version installée if [ -e "$script_install" ]; then ver_script_install=$( grep -m1 '^version=' $script_install | cut -d'=' -f2 ) fi if [[ "$ver_script_online" && "$script_install" ]]; then [ "$ver_script_install" != "$ver_script_online" ] && script_a_jour="KO" || script_a_jour="ok" fi [ "$ver_script_online" ] || ver_script_online="${RED}n/a" [ "$ver_script_install" ] || ver_script_install="Non installé" [ "$1" == "quiet" ] && return 0 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 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 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 # cron/anacron install fscript_cronAnacron "install" # création fichier log touch "$script_logs" chmod 664 "$script_logs" # rw- rw- r--, proprio fu_user 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 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)" return 1 fi if [ ! -x "$script_install" ];then f__info "$RED$script n'est pas installé" return 1 fi 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 # 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 local dirTemp="/tmp/$script-maj" upgradeEnPlace="$1" 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 fi (( x_script_get_version == 1 )) || fscript_get_version if [ "$script_a_jour" == "ok" ]; then f__info "log" "pas de mise à jour disponible pour $script $version" return 0 else 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" 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 chown "$fu_user:" "$script_install" [ -z "$upgradeEnPlace" ] && fscript_cronAnacron "upgrade" f__info "log" "$script mis à jour en version $ver_script_online $updateSpecial" else f_info "log" "$script: échec update" "mauvais téléchargement, réessayer plus tard" fi rm -rf "$dirTemp/" } prg_init(){ # 04/03/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" # architectures possibles f__architecture || f__error "Seules les architecture 32 et/ou 64 bits sont supportée (i686 & amd64)" # détermination user derrière root f__user retourFUser="$?" [ "$retourFUser" -eq 1 ] && f__error "user indéterminé" \ "pour contourner, lancer le script avec:\n$GREEN USER_INSTALL= $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" f__info "user root" fi # définition couleurs f__color # requis pour fonctionnement programme f__requis "awk>gawk file tar strings>binutils getconf>libc-bin" || exit 1 } ######## début script / initialisation # tests au démarrage prg_init # logo et définition couleurs f_affichage # paramètres script 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/kyodev/kyopages/raw/master/scripts/getFlashPlayer" url_notice="https://kyodev.frama.io/kyopages/scripts/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" ;;& esac done options=${options//--sauve/ } [ "$options" ] || options="-h" # vide? help for j in $options; do case $j in install ) # installation plugin fflash_install ;; manuel ) # installation manuelle d'un chargement fflash_install_manuel "$2" shift 1 exit;; remove ) # remove plugin fflash_remove ;; upgrade ) # upgrade plugin si installé operation="upgrade" fflash_upgrade ;; version | versions ) # version plugin en ligne & installée fscript_get_version fflash_get_version ;; -i | --install ) # installation du script dans le système fscript_install ;; -r | --remove ) # désinstallation du script fscript_remove ;; -u | --upgrade ) # upgrade script et plugin operation="upgrade" 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 ;; -h | --help | * ) # affichage help f_help fflash_avertissement ;; esac done exit 0 ### END CONTROL (contrôle chargement) wget -O getFlashPlayer https://framagit.org/kyodev/kyopages/raw/master/scripts/getFlashPlayer chmod +x getFlashPlayer && ./getFlashPlayer