From 651c081b62a7f03a70c3ca72a577da854740f1f7 Mon Sep 17 00:00:00 2001 From: kyodev Date: Fri, 18 Aug 2017 20:16:52 +0200 Subject: [PATCH] 2.0.6 --- scripts/getFirefox | 225 ++++++++++++++++---------------- scripts/getFirefox_changelog.md | 6 + 2 files changed, 120 insertions(+), 111 deletions(-) diff --git a/scripts/getFirefox b/scripts/getFirefox index cbeb065..b6c4836 100755 --- a/scripts/getFirefox +++ b/scripts/getFirefox @@ -8,6 +8,7 @@ script="getFirefox" urlScript="https://framagit.org/kyodev/kyopages/raw/master/scripts/getFirefox" urlNotice="https://kyodev.frama.io/kyopages/scripts/getFirefox/" user_agent="Mozilla/5.0 Firefox" +lognameDev="kyodev" ##### license LPRAB/WTFPL # auteur: simpledeb @@ -90,7 +91,7 @@ f__log(){ # v08/2017 } # test dépendances/paquets, $1 liste commande[>paquet] (ex: killall>psmisc) - # si manque, info commandes manquantes, si debian, proposition paquet à installer et SORTIE + # si manque, SORTIE & info commandes manquantes, si debian, SORTIE & proposition paquet à installer # 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 @@ -155,19 +156,20 @@ f__wget_test(){ # v07/2017 } # inscription dans tache upgrade en anacron hebdomadaire, via cron horaire -fscript_cronAnacron(){ # v17/08/2017 +fscript_cronAnacron(){ # v18/08/2017-2 rm "/home/$user_/.mozilla/$script.anacrontab" &>/dev/null # ancienne localisation éventuelle, spécifique getFirefox rm "/home/$user_/.config/anacron/spool/getFF"* &>/dev/null # ancien job, spécifique getFirefox local dirAnacron="/home/$user_/.config/anacron" local dirSpool="$dirAnacron/spool" local fileAnacron="$dirAnacron/$script.anacrontab" - sed -i "/$script.anacrontab/d" /etc/crontab + [ $EUID -eq 0 ] && sed -i "/$script.anacrontab/d" /etc/crontab case "$1" in install | upgrade ) mkdir -p "$dirAnacron" # table anacron echo "7 01 $script nice /opt/bin/$script --upgrade" > "$fileAnacron" - ## test: anacron journalier: echo "1 01 $script test nice /opt/bin/$script --upgrade" >> "$fileAnacron" + ## dev: anacron journalier: + [ "$user_" == "$lognameDev" ] && echo "1 01 $script""Dev nice /opt/bin/$script --upgrade 1>/dev/null" >> "$fileAnacron" # création spool anacron utilisateur mkdir -p "$dirSpool" chown -R "$user_": "$dirAnacron" "$dirSpool" @@ -189,11 +191,11 @@ fscript_cronAnacron(){ # v17/08/2017 } # mise à jour script si dispo -fscript_dl(){ # v17/08/2017 +fscript_dl(){ # v18/08/2017 + f__requis "wget" if [ "$script_aJour" == "ok" ]; then return 0; fi local dirTemp="/tmp/$script-$RANDOM/" mkdir -p "$dirTemp" - opType="upgrade" wget -q --show-progress --tries=2 --timeout=15 -O "$dirTemp$script" "$urlScript" if [ "$?" != "0" ]; then f__wget_test "$urlScript"; fi chmod 755 "$dirTemp$script" @@ -207,7 +209,8 @@ fscript_dl(){ # v17/08/2017 } # version script en ligne, assigne $versionScript, $script_aJour=ok|ko -fscript_get_version(){ # v08/2017 +fscript_get_version(){ # v18/08/2017 + f__requis "wget" versionScript="$(wget -q --tries=2 --timeout=15 -O - "$urlScript" | grep '^version=' | cut -d '=' -f 2)" if [ "$versionScript" ]; then if [ "$version" != "$versionScript" ]; then @@ -221,14 +224,13 @@ fscript_get_version(){ # v08/2017 } # installation du script dans le système -fscript_install(){ # v08/2017 - [ -e "/var/log/sdeb_getFF.log" ] && mv "/var/log/sdeb_getFF.log" "$fileLogs" # changement ancien logs - if f__requis "firefox-esr firefox" "debOnly" && [ "$debOnlyPresents" ]; then - f__info "paquet(s) installé(s) $debOnlyPresents" \ - "\n à moins d'être certain, vous devriez peut-être le désinstaller:$RED apt remove firefox* $COLOR" \ - "\n Sur Gnome, attention, consulter:$GREEN https://kyodev.frama.io/kyopages/scripts/getFirefox/#gnome $COLOR" +fscript_install(){ # v18/08/2017 + if dirname "$0" | grep -q 'bin' ; then + f__info "$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" @@ -259,6 +261,43 @@ fscript_remove(){ # v08/2017 f__log "$script $version supprimé du système" } + # détermination canal bas Firefox installé, assigne $firefoxCanalBas +ffx_get_canalBas(){ + for ii in nightly dev beta esr latest; do + if [ -d "$dirInstall$ii/" ]; then firefoxCanalBas="$ii"; fi + done + [ "$firefoxCanalBas" ] || return 1 +} + + # version Firefox en ligne +ffx_get_versionsFF(){ + printf "." + local fileTmp="/tmp/getFirefox-wgetVer-$RANDOM" + local recup_url="https://www.mozilla.org/en-US/firefox/notes/" + wget -q --tries=2 --timeout=15 --user-agent=$user_agent -O - "$recup_url" &>"$fileTmp" + local verLatest="$(grep -Eo 'data-latest-firefox="[0-9\.]+"' $fileTmp | grep -Eo '[0-9\.]+')" + local verEsr="$(grep -Eo 'data-esr-versions="[0-9\.]+"' $fileTmp | grep -Eo '[0-9\.]+')" + printf "." + local recup_url="https://download.mozilla.org/?product=firefox-beta-latest&os=linux64&lang=fr" + wget -Sq --tries=1 --timeout=10 --user-agent="$user_agent" --spider --save-headers "$recup_url" &>"$fileTmp" + local verBeta="$(grep -i 'location' $fileTmp | sed -E 's/.*firefox-(.*)\.tar.bz2/\1/')" + printf "." + local recup_url="https://download.mozilla.org/?product=firefox-nightly-latest-l10n-ssl&os=linux64&lang=fr" + wget -Sq --tries=1 --timeout=10 --user-agent="$user_agent" --spider --save-headers "$recup_url" &>"$fileTmp" + local verNightly="$(grep -i 'location' $fileTmp | sed -E 's/.*firefox-(.*)\.fr.linux.*/\1/')" + printf "." + rm "$fileTmp" + for prod in latest esr beta dev nightly; do + if [ -x "$dirInstall$prod/firefox" ]; then + printf "." + versionInstall+="\n $prod: $($dirInstall$prod/firefox -v | grep -Eo '[0-9].*')" + fi + done + printf ".\n" + f__info "Firefox installé(s): $versionInstall" + f__info "version Firefox en ligne:\n Release : $verLatest\n Beta/dev: $verBeta\n Nightly : $verNightly\n ESR : $verEsr" +} + # ascii art godzilla; ligne vide finale ffx_godzilla(){ printf "$RED" @@ -309,33 +348,45 @@ EOF echo -e " plus d'infos:$GREEN https://framagit.org/kyodev/kyopages/raw/master/scripts/getFirefox$COLOR\n" } - # version Firefox en ligne -ffx_get_versionsFF(){ - printf "." - local fileTmp="/tmp/getFirefox-wgetVer-$RANDOM" - local recup_url="https://www.mozilla.org/en-US/firefox/notes/" - wget -q --tries=2 --timeout=15 --user-agent=$user_agent -O - "$recup_url" &>"$fileTmp" - local verLatest="$(grep -Eo 'data-latest-firefox="[0-9\.]+"' $fileTmp | grep -Eo '[0-9\.]+')" - local verEsr="$(grep -Eo 'data-esr-versions="[0-9\.]+"' $fileTmp | grep -Eo '[0-9\.]+')" - printf "." - local recup_url="https://download.mozilla.org/?product=firefox-beta-latest&os=linux64&lang=fr" - wget -Sq --tries=1 --timeout=10 --user-agent="$user_agent" --spider --save-headers "$recup_url" &>"$fileTmp" - local verBeta="$(grep -i 'location' $fileTmp | sed -E 's/.*firefox-(.*)\.tar.bz2/\1/')" - printf "." - local recup_url="https://download.mozilla.org/?product=firefox-nightly-latest-l10n-ssl&os=linux64&lang=fr" - wget -Sq --tries=1 --timeout=10 --user-agent="$user_agent" --spider --save-headers "$recup_url" &>"$fileTmp" - local verNightly="$(grep -i 'location' $fileTmp | sed -E 's/.*firefox-(.*)\.fr.linux.*/\1/')" - printf "." - rm "$fileTmp" - for prod in latest esr beta dev nightly; do - if [ -x "$dirInstall$prod/firefox" ]; then - printf "." - versionInstall+="\n $prod: $($dirInstall$prod/firefox -v | grep -Eo '[0-9].*')" - fi - done - printf ".\n" - f__info "Firefox installé(s): $versionInstall" - f__info "version Firefox en ligne:\n Release : $verLatest\n Beta/dev: $verBeta\n Nightly : $verNightly\n ESR : $verEsr" + # installation Firefox +ffx_install(){ + [ $EUID -eq 0 ] || f__error "vous devez être ROOT pour installer Firefox" + f__info " - installation Firefox-$produit" + local dirTemp="/tmp/$script-$RANDOM/" + local file="firefox-$produit.$architecture.tar.bz2" + mkdir -p "$dirTemp" # dossier temporaire de travail + # téléchargement & test archive + f__info " - téléchargement..." + ffx_recup_url + wget -q -c --show-progress --tries=2 --timeout=15 --user-agent="$user_agent" -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" + # décompression + f__info "\n - décompression..." + tar -xaf "$dirTemp$file" -C "$dirTemp" + # mise en place finale + f__info " - installation..." + rm -rf "/opt/firefox-$produit/" # effacement ancien répertoire éventuel + rm -rf "$dirInstall$produit"/ # effacement éventuel répertoire existant: "vraie" install + mkdir -p "$dirInstall$produit"/ + mv -f "$dirTemp"firefox/* "$dirInstall$produit"/ + chown -R "$user_": "$dirInstall$produit"/ + chmod -R g+wrs,a+r "$dirInstall$produit"/ + rm -rf "$dirTemp" + # lien icône Firefox + ln -sf "$dirInstall$produit/browser/chrome/icons/default/default48.png" "/usr/share/pixmaps/firefox-$produit.png" + # lanceur dans /usr/bin + echo '#!/bin/sh' > "/usr/bin/firefox-$produit" + echo >> "/usr/bin/firefox-$produit" + echo 'echo "$@"'" | grep -qE '\-P|\-\-ProfileManager' && exec $dirInstall$produit/firefox -P || \\" >> "/usr/bin/firefox-$produit" + echo " exec $dirInstall$produit/firefox -P $produit "'$@' >> "/usr/bin/firefox-$produit" + chmod a+x "/usr/bin/firefox-$produit" + ffx_usr_bin + # traitement user + ffx_profil_user + f__info "$GREEN""Firefox-$produit installé." + f__log "Firefox-$produit installé" + ffx_godzilla } # création lanceur.desktop @@ -381,35 +432,6 @@ ffx_profilIni_inscription(){ else echo "" >> "$fileProfileIni"; fi } - # détermination canal bas Firefox installé, assigne $firefoxCanalBas -ffx_get_canalBas(){ - for ii in nightly dev beta esr latest; do - if [ -d "$dirInstall$ii/" ]; then firefoxCanalBas="$ii"; fi - done - [ "$firefoxCanalBas" ] || return 1 -} - - # traitement update-alternatives -ffx_update_alternatives(){ - [ "$(which update-alternatives)" ] || return 0 # update-alternatives n'est pas sur cette distrib - if ffx_get_canalBas ; then - update-alternatives --quiet --install /usr/bin/firefox x-www-browser "/usr/bin/firefox-$firefoxCanalBas" 100 - f__info " - alternatives installées pour <$firefoxCanalBas>" - else # plus aucun canal installé, on efface - if update-alternatives --get-selections | grep firefox | grep -q x-www-browser; then - update-alternatives --quiet --remove-all x-www-browser - fi - fi -} - - # lien /usr/bin/firefox pour le plus bas canal Firefox installé, utile si update-alternatives pas fonctionnel -ffx_usr_bin(){ - if ffx_get_canalBas ; then - ln -sf "/usr/bin/firefox-$firefoxCanalBas" "/usr/bin/firefox" - f__info " - firefox lié à firefox-$firefoxCanalBas" - fi -} - # traitement utilisateur, $1 user si appel indépendant pour reconfiguration ffx_profil_user(){ if [ "$1" == "user" ] && [ ! -x "/usr/bin/firefox-$produit" ]; then @@ -457,47 +479,6 @@ ffx_recup_url(){ recup_url="https://download.mozilla.org/?product=firefox-$produit-latest-l10n-ssl&os=$architecture&lang=fr" ;fi } - # installation Firefox -ffx_install(){ - [ $EUID -eq 0 ] || f__error "vous devez être ROOT pour installer Firefox" - f__info " - installation Firefox-$produit" - local dirTemp="/tmp/$script-$RANDOM/" - local file="firefox-$produit.$architecture.tar.bz2" - mkdir -p "$dirTemp" # dossier temporaire de travail - # téléchargement & test archive - f__info " - téléchargement..." - ffx_recup_url - wget -q -c --show-progress --tries=2 --timeout=15 --user-agent="$user_agent" -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" - # décompression - f__info "\n - décompression..." - tar -xaf "$dirTemp$file" -C "$dirTemp" - # mise en place finale - f__info " - installation..." - rm -rf "/opt/firefox-$produit/" # effacement ancien répertoire éventuel - rm -rf "$dirInstall$produit"/ # effacement éventuel répertoire existant: "vraie" install - mkdir -p "$dirInstall$produit"/ - mv -f "$dirTemp"firefox/* "$dirInstall$produit"/ - chown -R "$user_": "$dirInstall$produit"/ - chmod -R g+wrs,a+r "$dirInstall$produit"/ - rm -rf "$dirTemp" - # lien icône Firefox - ln -sf "$dirInstall$produit/browser/chrome/icons/default/default48.png" "/usr/share/pixmaps/firefox-$produit.png" - # lanceur dans /usr/bin - echo '#!/bin/sh' > "/usr/bin/firefox-$produit" - echo >> "/usr/bin/firefox-$produit" - echo 'echo "$@"'" | grep -qE '\-P|\-\-ProfileManager' && exec $dirInstall$produit/firefox -P || \\" >> "/usr/bin/firefox-$produit" - echo " exec $dirInstall$produit/firefox -P $produit "'$@' >> "/usr/bin/firefox-$produit" - chmod a+x "/usr/bin/firefox-$produit" - ffx_usr_bin - # traitement user - ffx_profil_user - f__info "$GREEN""Firefox-$produit installé." - f__log "Firefox-$produit installé" - ffx_godzilla -} - # désinstallation de Firefox, on laisse le profil user ffx_remove(){ [ $EUID -eq 0 ] || f__error "vous devez être ROOT pour désinstaller firefox" @@ -525,12 +506,33 @@ ffx_remove(){ ffx_godzilla } + # traitement update-alternatives +ffx_update_alternatives(){ + [ "$(which update-alternatives)" ] || return 0 # update-alternatives n'est pas sur cette distrib + if ffx_get_canalBas ; then + update-alternatives --quiet --install /usr/bin/firefox x-www-browser "/usr/bin/firefox-$firefoxCanalBas" 100 + f__info " - alternatives installées pour <$firefoxCanalBas>" + else # plus aucun canal installé, on efface + if update-alternatives --get-selections | grep firefox | grep -q x-www-browser; then + update-alternatives --quiet --remove-all x-www-browser + fi + fi +} + + # lien /usr/bin/firefox pour le plus bas canal Firefox installé, utile si update-alternatives pas fonctionnel +ffx_usr_bin(){ + if ffx_get_canalBas ; then + ln -sf "/usr/bin/firefox-$firefoxCanalBas" "/usr/bin/firefox" + f__info " - firefox lié à firefox-$firefoxCanalBas" + fi +} + # initialisation PATH='/usr/sbin:/usr/bin:/sbin:/bin' ; IFS=' ' f__affichage f__architecture || f__error "Seules les architecture 32 et 64 bits sont supportée (i686 & amd64) par Firefox" f__user || f__error "échec détection user" -f__requis "wget file tar killall>psmisc anacron cron" #syntaxe command>package, /!\ sortie sur erreur +f__requis "file tar killall>psmisc" # pour fonctionnement programme fileLogs="/var/log/sdeb_$script.log" dirInstall="/opt/usr/share/firefox-" @@ -582,6 +584,7 @@ for i in "$options"; do fscript_remove ;; -u | --upgrade | upgrade ) # upgrade script + opType="upgrade" fscript_get_version fscript_dl ;; diff --git a/scripts/getFirefox_changelog.md b/scripts/getFirefox_changelog.md index d922262..640f1da 100644 --- a/scripts/getFirefox_changelog.md +++ b/scripts/getFirefox_changelog.md @@ -8,6 +8,12 @@ * user.pref (autoplay, ...) * peaufiner contexte upgrade lors cron (affichage, requis, user) +## 2.0.6 18/08/2017 + +* maj fscript_cronAnacron lors upgrade et spécial pour dev +* maj fscript_get_version, fscript_dl, fscript_install +* vérification requis pour fonctionnement script + ## 2.0.5 17/08/2017 * test inscription crontab pour recherche bug siduction