diff --git a/scripts/getFirefox b/scripts/getFirefox index 5e117ac..c901233 100755 --- a/scripts/getFirefox +++ b/scripts/getFirefox @@ -1,6 +1,6 @@ #!/bin/bash -version=2.0.3 +version=2.0.4 date="17/08/2017" projet="simpledeb" contact="IRC freenode ##sdeb ou https://framagit.org/kyodev/kyopages/issues" @@ -14,7 +14,7 @@ user_agent="Mozilla/5.0 (X11; Linux $(uname -m); rv:54.0) Gecko/20100101 Firefox # contributeurs: kyodev ##### -f__affichage(){ +f__affichage(){ # v06/2017 # définition couleurs YELLOW="$(printf "\033[0;33m")" # ? GREEN="$(printf "\033[0;32m")" # ok @@ -36,7 +36,7 @@ EOF } # détection architecture, assigne $architecture : linux|linux64, return 1 si architecture inconnue -f__architecture(){ +f__architecture(){ # v07/2017 case "$(uname -m)" in amd64 | x86_64 ) architecture="linux64";; @@ -54,30 +54,38 @@ f__architecture(){ esac } - # user ayant initié la session graphique, assigne $user_, testé avec mate, gnome, xfce. manque KDE - # return 1 sur echec ident user, return 2 sur absence home - # gestion variable environnement user avec: USER_INSTALL=user script -f__user(){ # v15/08/2017-4 - local user_id - if [ "$USER_INSTALL" ]; then user_="$USER_INSTALL"; fi # user_ via variable environnement - if [ -z "$user_" ]; then # priorité à $USER_INSTALL - if [ "$SUDO_UID" ]; then user_id="$SUDO_UID"; fi # sudo - user_id=$(grep -qEo '[0-9]+' <<< "$XAUTHORITY") || user_id=$(grep -qEo '[0-9]+' <<< $XDG_RUNTIME_DIR) - if [ "$user_id" ]; then user_=$(grep $user_id /etc/passwd | cut -d ":" -f 1 ) - else user_=$(echo $XAUTHORITY | cut -d "/" -f 3); fi - if [ -z "$user_" ] && [ "$LOGNAME" ] ; then user_=$(grep -v 'root' <<< $LOGNAME) - elif [ -z "$user_" ] && [ $(grep -v 'root' <<< $HOME) ]; then user_=$(cut -sd / -f 3 <<< $HOME) - elif [ -z "$user_" ]; then user_=$(grep -v 'root' <<< $(who | head -n1 | cut -d " " -f1)) - elif [ -z "$user_" ] && [ $(grep -v 'not') <<< $(LC_ALL=C tty) ]; then user_=$(stat -c %U $(tty)); fi - fi - if [ -z "$user_" ]; then - echo -e "user indéterminé, pour contourner, lancer le script avec:\n USER_INSTALL=user $0 n" \ - "merci contacter $projet $contact pour corriger ça" - return 1 - fi - if [ ! -d "/home/$user_" ]; then - echo -e "répertoire '/home/$user_' INEXISTANT" - return 2 + # test validité archive, $1 fichier (bzip2), return 1 si invalide +f__archive_test(){ # v07/2017 + file -b "$1" | grep -q 'bzip2 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" + 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, si $1=raw, pas d'espace en début de ligne, pas de ligne vide à la fin +f__info() { # v16/08/2017 + if [ "$1" == "raw" ]; then depart=2; + else local espace=" "; local depart=1; fi + 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 + 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 + else + f__info "$fileLogs doit être activé" fi } @@ -113,50 +121,42 @@ f__requis(){ # v16/08/2017-3 fi } + # user ayant initié la session graphique, assigne $user_, testé avec mate, gnome, xfce. manque KDE + # return 1 sur echec ident user, return 2 sur absence home + # gestion variable environnement user avec: USER_INSTALL=user script +f__user(){ # v15/08/2017-4 + local user_id + if [ "$USER_INSTALL" ]; then user_="$USER_INSTALL"; fi # user_ via variable environnement + if [ -z "$user_" ]; then # priorité à $USER_INSTALL + if [ "$SUDO_UID" ]; then user_id="$SUDO_UID"; fi # sudo + user_id=$(grep -qEo '[0-9]+' <<< "$XAUTHORITY") || user_id=$(grep -qEo '[0-9]+' <<< $XDG_RUNTIME_DIR) + if [ "$user_id" ]; then user_=$(grep $user_id /etc/passwd | cut -d ":" -f 1 ) + else user_=$(echo $XAUTHORITY | cut -d "/" -f 3); fi + if [ -z "$user_" ] && [ "$LOGNAME" ] ; then user_=$(grep -v 'root' <<< $LOGNAME) + elif [ -z "$user_" ] && [ $(grep -v 'root' <<< $HOME) ]; then user_=$(cut -sd / -f 3 <<< $HOME) + elif [ -z "$user_" ]; then user_=$(grep -v 'root' <<< $(who | head -n1 | cut -d " " -f1)) + elif [ -z "$user_" ] && [ $(grep -v 'not') <<< $(LC_ALL=C tty) ]; then user_=$(stat -c %U $(tty)); fi + fi + if [ -z "$user_" ]; then + echo -e "user indéterminé, pour contourner, lancer le script avec:\n USER_INSTALL=user $0 n" \ + "merci contacter $projet $contact pour corriger ça" + return 1 + fi + if [ ! -d "/home/$user_" ]; then + echo -e "répertoire '/home/$user_' INEXISTANT" + return 2 + fi +} + # test wget, $1 url à tester, sortie script sur erreur -f__wget_test(){ +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." } - # test validité archive, $1 fichier (bzip2), return 1 si invalide -f__archive_test(){ - file -b "$1" | grep -q 'bzip2 compressed data' || return 1 -} - - # log spécifique, fichier log limité à 10000octets, $1 message à loguer -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" - else - echo "$(date +%Y%m%d\ %H%M%S) $1" &>/dev/null >> "$fileLogs" - fi - else - f__info "$fileLogs doit être activé" - fi -} - - # affichage $1 en rouge, $1++ optionnels en bleu, sortie script sur erreur, log $1 si upgrade($opType) -f__error() { # v 16/08/2017 - 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, si $1=raw, pas d'espace en début de ligne, pas de ligne vide à la fin -f__info() { # v16/08/2017 - if [ "$1" == "raw" ]; then depart=2; - else local espace=" "; local depart=1; fi - for (( i=$depart ; i<=$# ; i++ )); do echo -e "$espace$BLUE${!i}"; done - [ "$1" == raw ] && printf "$COLOR" || echo "$COLOR" -} - # inscription dans tache upgrade en anacron hebdomadaire, via cron horaire -fscript_cronAnacron(){ +fscript_cronAnacron(){ # v17/08/2017 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" @@ -164,7 +164,7 @@ fscript_cronAnacron(){ local fileAnacron="$dirAnacron/$script.anacrontab" sed -i "/$script.anacrontab/d" /etc/crontab case "$1" in - install ) + install | upgrade ) mkdir -p "$dirAnacron" # table anacron echo "7 01 $script nice /opt/bin/$script --upgrade" > "$fileAnacron" @@ -172,9 +172,11 @@ fscript_cronAnacron(){ # création spool anacron utilisateur mkdir -p "$dirSpool" chown -R "$user_": "$dirAnacron" "$dirSpool" - # crontab pour activation horaire anacron - echo "@hourly $user_ /usr/sbin/anacron -t $fileAnacron -S $dirSpool" >> /etc/crontab - service cron restart &>/dev/null || /etc/init.d/cron restart &>/dev/null || f__info "redémarrer cron ou le PC" + if [ $EUID -eq 0 ]; then + # crontab pour activation horaire anacron + echo "@hourly $user_ /usr/sbin/anacron -t $fileAnacron -S $dirSpool" >> /etc/crontab + service cron restart &>/dev/null || /etc/init.d/cron restart &>/dev/null || f__info "redémarrer cron ou le PC" + 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" ;; @@ -188,7 +190,7 @@ fscript_cronAnacron(){ } # mise à jour script si dispo -fscript_dl(){ +fscript_dl(){ # v17/08/2017 if [ "$script_aJour" == "ok" ]; then return 0; fi local dirTemp="/tmp/$script-$RANDOM/" mkdir -p "$dirTemp" @@ -196,16 +198,18 @@ fscript_dl(){ wget -q --show-progress --tries=2 --timeout=15 -O "$dirTemp$script" "$urlScript" if [ "$?" != "0" ]; then f__wget_test "$urlScript"; fi chmod 755 "$dirTemp$script" - chown "$user_": "$dirTemp$script" # si $user_ indéterminé en cron, non important, cp ne modifie pas les droits de la cible + chown "$user_": "$dirTemp$script" cp -d "$dirTemp$script" /opt/bin/"$script" rm -rf "$dirTemp" + fscript_cronAnacron "upgrade" f__info "\n $script mis à jour en version $versionScript" f__log "$script mis à jour en version $versionScript" + $0 upgrade # spécifique getFlash, script mis à jour, on relance le script en upgrade pour le plugin exit 0 } # version script en ligne, assigne $versionScript, $script_aJour=ok|ko -fscript_get_version(){ +fscript_get_version(){ # v08/2017 versionScript="$(wget -q --tries=2 --timeout=15 -O - "$urlScript" | grep '^version=' | cut -d '=' -f 2)" if [ "$versionScript" ]; then if [ "$version" != "$versionScript" ]; then @@ -219,7 +223,7 @@ fscript_get_version(){ } # installation du script dans le système -fscript_install(){ +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" \ @@ -245,7 +249,7 @@ fscript_install(){ } # suppression du script dans le système -fscript_remove(){ +fscript_remove(){ # v08/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 diff --git a/scripts/getFirefox_changelog.md b/scripts/getFirefox_changelog.md index f983960..c0c6b6c 100644 --- a/scripts/getFirefox_changelog.md +++ b/scripts/getFirefox_changelog.md @@ -8,9 +8,10 @@ * user.pref (autoplay, ...) * peaufiner contexte upgrade lors cron (affichage, requis, user) -## 2.0.3 17/08/2017 +## 2.0.4 17/08/2017 * test inscription crontab pour recherche bug siduction +* test crontab et modif anacrontab lors upgrade ## 2.0.2 16/08/2017