diff --git a/scripts/getIp b/scripts/getIp index ff9a1d7..2ea728d 100755 --- a/scripts/getIp +++ b/scripts/getIp @@ -1,7 +1,7 @@ #!/bin/bash -version=0.7.9 -date="20/08/2017" +version=0.8.0 +date="21/08/2017" projet="simpledeb" contact="IRC freenode ##sdeb ou https://framagit.org/kyodev/kyopages/issues" script="getIp" @@ -31,9 +31,11 @@ f__error() { # v16/08/2017 } # 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; + # si $1=log, uniquement $2 logué +f__info() { # v21/08/2017 + if [ "$1" == "raw" ] || [ "$1" == "log" ]; then depart=2; else local espace=" "; local depart=1; fi + [ "$1" == "log" ] && f__log "$(sed -E 's/\\t//;s/\\n// ' <<< $2 | xargs )" for (( i=$depart ; i<=$# ; i++ )); do echo -e "$espace$BLUE${!i}"; done [ "$1" == raw ] && printf "$COLOR" || echo "$COLOR" } @@ -83,30 +85,38 @@ f__log(){ # v08/2017 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 + # user ayant initié la session graphique, assigne $user_ + # return 1 sur échec identification user, return 2 sur absence home/ # gestion variable environnement user avec: USER_INSTALL=user script -f__user(){ # v17/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))"; fi +f__user(){ # v21/08/2017-4 + if [ "$USER_INSTALL" ]; then # user_ via variable environnement, moyen d'injecter root + user_="$USER_INSTALL"; + return 0 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 + local user_id test + local root_login="$(grep ':0:' /etc/passwd | cut -d':' -f1)" || local root_login="root" + if [ "$SUDO_UID" ]; then + user_id="$SUDO_UID"; + elif grep -qEo '[0-9]+' <<< "$XDG_RUNTIME_DIR" ; then + user_id="$(grep -Eo '[0-9]+' <<< $XDG_RUNTIME_DIR | cut -d'/' -f4)" + elif grep -qEo '[0-9]+' <<< "$XAUTHORITY" ; then + user_id="$(grep -Eo '[0-9]+' <<< $XAUTHORITY | cut -d'/' -f4)" fi - if [ ! -d "/home/$user_" ]; then - echo -e "répertoire '/home/$user_' INEXISTANT" - return 2 + [ "$user_id" ] && user_="$(grep $user_id /etc/passwd | cut -d ":" -f 1 )" + if [ "$user_" ] && [ "$user_" != "$root_login" ]; then + return 0 + else + if [ "$SUDO_USER" ] && [ "$SUDO_USER" != "$root_login" ]; then + user_="$SUDO_USER"; + elif grep -qv 'root' <<< "$(who)"; then + user_="$(grep -v 'root' <<< $(who) | head -n1 | cut -d ' ' -f1)"; + 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)"; + fi fi + if [ -z "$user_" ]; then return 1; fi + if [ ! -d "/home/$user_" ]; then return 2; fi + return 0 } # test wget, $1 url à tester, sortie script sur erreur @@ -151,9 +161,12 @@ fscript_cronAnacron(){ # v20/08/2017 } # mise à jour script si dispo -fscript_dl(){ # v20/08/2017 +fscript_dl(){ # v21/08/2017 f__requis "wget" - if [ "$script_aJour" == "ok" ]; then return 0; fi + if [ "$script_aJour" == "ok" ]; then + f__log "pas de mise à jour disponible pour $script" + return 0 + fi local dirTemp="/tmp/$script-$RANDOM/" mkdir -p "$dirTemp" wget -q --tries=2 --timeout=15 -O "$dirTemp$script" "$urlScript" @@ -163,8 +176,7 @@ fscript_dl(){ # v20/08/2017 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" + f__info "log" "\n $script mis à jour en version $versionScript" } # version script en ligne, assigne $versionScript, $script_aJour=ok|ko @@ -184,7 +196,7 @@ fscript_get_version(){ # v19/08/2017 } # installation du script dans le système -fscript_install(){ # v19/08/2017 +fscript_install(){ # v21/08/2017 if dirname "$0" | grep -q 'bin' ; then f__info "\n $script $version est déjà installé" return 1 @@ -203,21 +215,18 @@ fscript_install(){ # v19/08/2017 chmod 644 "$fileLogs" chown "$user_": "$fileLogs" "/opt/bin/$script" [ -f "$script"_changelog.md ] || rm "$(basename $0)" &>/dev/null ## on efface pas si changelog (dev) - f__info "$GREEN$script $version 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 + 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(){ # v08/2017 +fscript_remove(){ # v21/08/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 unlink /usr/bin/"$script" &>/dev/null # cron/anacron remove fscript_cronAnacron "remove" - f__info "$GREEN$script $version supprimé du système." - f__log "$script $version supprimé du système" + f__info "log" "$script $version supprimé du système." } f_help(){ @@ -346,6 +355,11 @@ get_ip_public(){ # $1=IPv4|IPv6, assigne $ip_public # v18/08/2017 fi } +testuser(){ + f__user && retourFUser=0 || retourFUser="$?" + [ "$retourFUser" -eq 1 ] && f__error "user indéterminé, pour contourner, lancer le script avec:\n USER_INSTALL=user $0 \n" + [ "$retourFUser" -eq 2 ] && f__error "user détecté, mais pas de home: /home/$user_" +} # initialisation PATH='/usr/sbin:/usr/bin:/sbin:/bin' ; IFS=' '; TERM=xterm @@ -357,10 +371,10 @@ f__requis "gawk wget ip>iproute2" # pour fonctionnement programme options="$@" for i in "$options"; do case $i in - --install | -i ) f__user && fscript_install ;; # installation du script dans le système - --remove | -r ) f__user && fscript_remove ;; # suppression du script dans le système + --install | -i ) testuser && fscript_install ;; # installation du script dans le système + --remove | -r ) testuser && fscript_remove ;; # suppression du script dans le système --upgrade | -u ) - f__user || f__error "user indéterminé ou home inexistant" + testuser opType="upgrade" fscript_get_version fscript_dl ;; # upgrade script si maj possible diff --git a/scripts/getIp_changelog b/scripts/getIp_changelog index b43609b..faa6ce7 100644 --- a/scripts/getIp_changelog +++ b/scripts/getIp_changelog @@ -1,5 +1,10 @@ # changelog getIp +## 0.8.0 21/08/2017 + +* révison f__user +* log: pas de maj script +* maj fscript_dl, fscript_install, fscript_remove, f__info ## 0.7.9 20/08/2017