This commit is contained in:
kyodev 2017-08-17 09:15:54 +02:00
parent ebaba2c502
commit 215d7bcc56
2 changed files with 79 additions and 74 deletions

View File

@ -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

View File

@ -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