From 290273cbfce4b643065a79078139f448c34055f6 Mon Sep 17 00:00:00 2001 From: kyodev Date: Tue, 5 Dec 2017 14:27:54 +0100 Subject: [PATCH] getIp 1.16.0 --- scripts/getIp | 130 ++++++++++++++++++++----------------- scripts/getIp_changelog.md | 8 ++- 2 files changed, 75 insertions(+), 63 deletions(-) diff --git a/scripts/getIp b/scripts/getIp index 9ce38db..8d276f4 100755 --- a/scripts/getIp +++ b/scripts/getIp @@ -1,7 +1,7 @@ #!/bin/bash version=1.16.0 -date="4/12/2017" +date="5/12/2017" projet="simpledeb" contact="IRC freenode ##sdeb ou https://framagit.org/kyodev/kyopages/issues/" script="getIp" @@ -37,7 +37,9 @@ f__color(){ # 08/10/2017 } # affichage $1 en rouge, $1++ optionnels en bleu, sortie script sur erreur, log $1 si $opType=upgrade -f__error(){ # 15/10/2017 +f__error(){ # 4/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" @@ -50,6 +52,7 @@ f__error(){ # 15/10/2017 # affichage des paramètres en bleu, si $1=raw pas de ligne vide à la fin, si $1=log alors uniquement $2 logué f__info(){ # 15/10/2017 local depart=1 i + if [ "$1" == "raw" ] || [ "$1" == "log" ]; then depart=2; fi [ "$1" == "log" ] && f__log "$(sed -E 's/\\t//;s/\\n// ' <<< $2 | xargs )" for (( i=$depart ; i<=$# ; i++ )); do @@ -59,12 +62,12 @@ f__info(){ # 15/10/2017 } # log spécifique, fichier log limité à 10000 octets, $1 message à loguer -f__log(){ # 27/10/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" +f__log(){ # 4/12/2017 + if [ -w "$scriptLogs" ]; then + if [ "$(stat -c %s $scriptLogs)" -ge "10000" ]; then + echo "$(date +%Y%m%d\ %H%M%S) $1" &>/dev/null > "$scriptLogs" else - echo "$(date +%Y%m%d\ %H%M%S) $1" &>/dev/null >> "$fileLogs" + echo "$(date +%Y%m%d\ %H%M%S) $1" &>/dev/null >> "$scriptLogs" fi fi } @@ -76,6 +79,7 @@ f__log(){ # 27/10/2017 # attention priorité $debOnlyAbsent sur $debOnlyPresent f__requis(){ # 4/12/2017 local dependsMissing packagesMissing command package ireq compteur pluriel + unset debOnlyAbsent debOnlyPresent for ireq in $1; do command="$(cut -d '>' -f 1 <<< $ireq)" @@ -131,6 +135,7 @@ f__sudo(){ # 4/12/2017 # gestion variable environnement user avec: USER_INSTALL= script f__user(){ # 3/12/2017 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"; @@ -169,33 +174,34 @@ f__user(){ # 3/12/2017 return 0 } - # test wget, $1 url à tester, sortie du script si $1 seul (même si url testée ok) - # si $2=print affiche url testée & entêtes http & location (si présente) et sortie normale fonction - # si $2=loc affiche seulement location et sortie normale fonction - # si $2=test return 0 si ok, return 1 si ko -f__wget_test(){ # 28/11/2017 + # test wget, $1=url à tester, 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(){ # 5/12/2017 local file_test_wget retourWget retourHttp location + file_test_wget="/tmp/testWget-$$-$RANDOM" wget -Sq --timeout=10 --user-agent="$user_agent" --spider --save-headers "$1" &>"$file_test_wget" retourWget="$?" - [ "$retourWget" == 1 ] && retourWget="code erreur générique" - [ "$retourWget" == 2 ] && retourWget="parse erreur (ligne de commande?)" - [ "$retourWget" == 3 ] && retourWget="erreur Entrée/sortie fichier" - [ "$retourWget" == 4 ] && retourWget="défaut réseau" - [ "$retourWget" == 5 ] && retourWget="défaut vérification SSL" - [ "$retourWget" == 6 ] && retourWget="défaut authentification" - [ "$retourWget" == 7 ] && retourWget="erreur de protocole" - [ "$retourWget" == 8 ] && retourWget="réponse serveur en erreur" - retourHttp="$(grep -i 'HTTP/' "$file_test_wget" | tr -d '\n' | xargs)" + [ "$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 "$file_test_wget" 2>/dev/null - # spécial maintenance frama.link - [ "$(grep -c '303' <<< $retourHttp)" -ne 0 ] && return 1 # 303 See Other + # spécial maintenance frama.link, pas de redirection sur page status framalink + [ "$( grep -c '303' <<< $retourHttp )" -ne 0 ] && return 1 # 303 See Other [ "$retourWget" == "0" ] && return 0 || return 1 fi - location="$(grep -i 'location' $file_test_wget | xargs)" if [ "$2" == "print" ]; then - if [ "$retourWget" ]; then + if [ "$retourWget" != "0" ]; then echo "erreur wget: $RED$retourWget" echo -e "$BLUE $1$STD\t$RED $retourHttp" else @@ -203,14 +209,15 @@ f__wget_test(){ # 28/11/2017 fi fi if [ "$2" == "print" ] || [ "$2" == "loc" ]; then - [ "$location" ] && echo "$YELLOW $location" || echo "$YELLOW no location" + [ "$location" ] && echo -n "$YELLOW $location" || echo -n "$YELLOW no location" echo "$STD" + rm "$file_test_wget" 2>/dev/null return 0 fi - if [ "$retourWget" ]; then - rm "$file_test_wget" - f__error "wget, $retourWget" "$1" "$YELLOW$retourHttp" "$location" -# echo -e "$RED errur wget, $retourWget \n $1 \n $YELLOW$retourHttp \n $location" + if [ "$retourWget" != "0" ]; then + rm "$file_test_wget" 2>/dev/null +# f__error "wget, $retourWget" "$1" "$YELLOW$retourHttp" "$location" + echo -e "$RED erreur wget, $retourWget \n $1 \n $YELLOW$retourHttp \n $location" fi if [ "$(grep -c '200' <<< $retourHttp)" -ne 0 ]; then echo -e "$GREEN\ntout est ok, réessayer\n$STD" @@ -236,9 +243,8 @@ f_affichage(){ / _' |/ _ \ __|| || '_ \ | (_| | __/ |_ | || |_) | \__, |\___|\__|___| .__/ - |___/ |_| -" - echo -e "$GREEN$affichage_text\n $version$STD - $GREEN$date$STD" + |___/ |_| " + echo -e "$GREEN$affichage_text\n $YELLOW$version$STD - $YELLOW$date$STD\n" } f_help(){ # 4/12/2017 @@ -385,8 +391,9 @@ figet_ip_pub(){ # 20/11/2017 } # inscription dans tache upgrade en anacron hebdomadaire, via cron horaire, $1=upgrade|install|remove -fscript_cronAnacron(){ # 2/12/2017 +fscript_cronAnacron(){ # 4/12/2017 local dirAnacron dirSpool fileAnacron + [ "$(type -t fscript_cronAnacron_special)" ] && fscript_cronAnacron_special # test, si fonction spécifique, appel dirAnacron="/home/$fu_user/.config/anacron" dirSpool="$dirAnacron/spool" @@ -396,10 +403,10 @@ fscript_cronAnacron(){ # 2/12/2017 install | upgrade ) mkdir -p "$dirAnacron" # table anacron - echo "7 10 $script nice $fileInstall --upgrade 1>/dev/null" > "$fileAnacron" # juste erreurs en syslog + echo "7 10 $script nice $scriptInstall --upgrade 1>/dev/null" > "$fileAnacron" # juste erreurs en syslog ## anacron journalier pour dev logname if [ -e "$fileDev" ]; then - echo "1 00 $script""Dev nice $fileInstall --upgrade 1>/dev/null" >> "$fileAnacron" + echo "1 00 $script""Dev nice $scriptInstall --upgrade 1>/dev/null" >> "$fileAnacron" fi # création spool anacron utilisateur mkdir -p "$dirSpool" @@ -420,26 +427,26 @@ fscript_cronAnacron(){ # 2/12/2017 } # version script en ligne, [$1=update], assigne $versionScript, $script_aJour=ok|ko -fscript_get_version(){ # 06/11/2017 +fscript_get_version(){ # 5/12/2017 local var_temp - f__info "raw" "$GREEN""version script en cours: $version" + + f__info "raw" "version script en cours: $GREEN$version" versionScript=$(wget -q --timeout=15 -O - "$urlScript" | grep -m1 '^version=' | cut -d'=' -f2) if [ "$versionScript" ]; then if [ "$version" != "$versionScript" ]; then - [ "$1" = "update" ] && var_temp=", mise à jour en cours" - [ "$1" = "update" ] || var_temp=", mise à jour possible" + [ "$1" == "update" ] && var_temp=", mise à jour en cours" || var_temp=", mise à jour possible" script_aJour="ko" else script_aJour="ok" fi - f__info "version script en ligne: $versionScript$var_temp" + f__info "version script en ligne: $YELLOW$versionScript$BLUE$var_temp" else f__info "version script en ligne$RED non accessible" fi } # installation du script dans le système -fscript_install(){ # 2/12/2017 +fscript_install(){ # 4/12/2017 if grep -q 'bin' <<< "$(dirname $0)" ; then f__info "$RED""l'installation dans le système doit se faire depuis un script local $GREEN(./$script -i )" return 1 @@ -453,26 +460,26 @@ fscript_install(){ # 2/12/2017 f__requis "wget anacron cron" || exit 1 # install /opt mkdir -p /opt/bin/ - cp -d "$(basename $0)" "$fileInstall" - ln -s "$fileInstall" "/usr/bin/$script" &>/dev/null - chmod 775 "$fileInstall" # rwx rwx r-x, proprio fu_user + cp -d "$(basename $0)" "$scriptInstall" + ln -s "$scriptInstall" "/usr/bin/$script" &>/dev/null + chmod 775 "$scriptInstall" # rwx rwx r-x, proprio fu_user # cron/anacron install fscript_cronAnacron "install" # création fichier log - touch "$fileLogs" - chmod 664 "$fileLogs" # rw- rw- r--, proprio fu_user - chown "$fu_user:" "$fileLogs" "$fileInstall" + touch "$scriptLogs" + chmod 664 "$scriptLogs" # rw- rw- r--, proprio fu_user + chown "$fu_user:" "$scriptLogs" "$scriptInstall" [ -e "$fileDev" ] || rm "$(basename $0)" &>/dev/null ## 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(){ # 06/11/2017 +fscript_remove(){ # 4/12/2017 if ! grep -q 'bin' <<< "$(dirname $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 "$fileInstall" ];then + if [ ! -x "$scriptInstall" ];then f__info "$RED$script n'est pas installé" return 1 fi @@ -483,7 +490,7 @@ fscript_remove(){ # 06/11/2017 fi [ "$(type -t fscript_remove_special)" ] && fscript_remove_special # test, si fonction spécifique, appel # suppression de /opt - rm "$fileInstall" &>/dev/null + rm "$scriptInstall" &>/dev/null unlink "/usr/bin/$script" &>/dev/null # cron/anacron remove fscript_cronAnacron "remove" @@ -491,8 +498,9 @@ fscript_remove(){ # 06/11/2017 } # mise à jour script si dispo, v2, +update spécifique -fscript_update(){ # 2/11/2017 +fscript_update(){ # 4/12/2017 local dirTemp="/tmp/$script-$RANDOM" + [ $(type -t fscript_update_special) ] && fscript_update_special # test, si fonction spécifique, appel if [ -z "$updateSpecial" ] && ! grep -q 'bin' <<< "$(dirname $0)" ; then f__info "$RED""cette fonction doit être appelée depuis le script installé dans le système $GREEN($script -u)" @@ -507,9 +515,9 @@ fscript_update(){ # 2/11/2017 wget -q --tries=2 --timeout=15 -O "$dirTemp/$script" "$urlScript" if [ "$?" != "0" ]; then f__wget_test "$urlScript"; fi if grep -q '#!/bin/bash' "$dirTemp/$script" ; then - cp -d "$dirTemp/$script" "$fileInstall" - chmod 775 "$fileInstall" # rwx rwx r-x, proprio fu_user - chown "$fu_user:" "$fileInstall" + cp -d "$dirTemp/$script" "$scriptInstall" + chmod 775 "$scriptInstall" # rwx rwx r-x, proprio fu_user + chown "$fu_user:" "$scriptInstall" [ -z "$updateSpecial" ] && fscript_cronAnacron "upgrade" f__info "log" "$script mis à jour en version $versionScript $updateSpecial" else @@ -530,12 +538,14 @@ testuser(){ # 4/12/2017 fi } -prg_init(){ # 2/12/2017 +prg_init(){ # 4/12/2017 + PATH='/usr/sbin:/usr/bin:/sbin:/bin' TERM=xterm IFS_INI="$IFS" IFS=$' \t\n' export PATH TERM IFS + # whereis script retourne vide si installé DIRNAME=$( dirname $0 ) DIRNAME=${DIRNAME#/usr/bin} # suppression /usr/bin éventuel au début ( lien ) @@ -556,7 +566,7 @@ prg_init(){ # 2/12/2017 fi # requis pour fonctionnement programme - f__requis "gawk wget ip>iproute2" + f__requis "gawk wget ip>iproute2" || exit 1 } ######## début script / initialisation @@ -568,9 +578,9 @@ f__color prg_init # paramètres généraux -fileLogs="/var/log/sdeb_$script.log" +scriptInstall="/opt/bin/$script" +scriptLogs="/var/log/sdeb_$script.log" fileDev="/opt/bin/fileDev" -fileInstall="/opt/bin/$script" urlScript="https://frama.link/getip" urlNotice="https://frama.link/doc-getip" @@ -629,7 +639,7 @@ for j in "$options"; do -us ) opType="upgrade" # log si f__error updateSpecial="update spécial actif" - fileInstall="$(dirname $0)/$script" + scriptInstall="$(dirname $0)/$script" fscript_update exit ;; # upgrade spécial -v | --version ) diff --git a/scripts/getIp_changelog.md b/scripts/getIp_changelog.md index 72b5604..52ba0b5 100644 --- a/scripts/getIp_changelog.md +++ b/scripts/getIp_changelog.md @@ -3,20 +3,22 @@ ## todo -* placer ln dans /usr/local/bin au lieu de /usr/bin ? * IP si ethernet non connecté, détecter et ne pas afficher cat /sys/class/net/enp3s0/carrier 0|1 * revoir figet_ip * éviter 169.254.10.12/16 ( enp3s0 ) (ethernet) si non branché --- -## 1.16 04/12/2017 +## 1.16.0 5/12/2017 * nouveau: option - ( ou -46 ), ipv4 & ipv6 * nouveau: prg_init * révision: syncro fonctions communes * révision: renommage $user_ - +* révision: démarrage +* révision: fscript_cronAnacron, fscript_install, fscript_remove, fscript_update + f__log, renommage $fileInstall $fileLogs +* fix: f__wget_test ## 1.15.0 28/10/2017