From ff993b3800a21b39a48f320d9293f7efcf2e91a0 Mon Sep 17 00:00:00 2001 From: kyodev <> Date: Fri, 26 Jan 2018 20:03:10 +0100 Subject: [PATCH] getXfox 4.14.0 --- scripts/getXfox | 116 ++++++++++++++++++++--------------- scripts/getXfox_changelog.md | 24 +++++--- 2 files changed, 80 insertions(+), 60 deletions(-) diff --git a/scripts/getXfox b/scripts/getXfox index 60317f1..4cdfa7f 100755 --- a/scripts/getXfox +++ b/scripts/getXfox @@ -1,7 +1,7 @@ #!/bin/bash -version=4.12.0 -date="24/01/2018" +version=4.14.0 +date="26/01/2018" projet="simpledeb" contact="IRC freenode ##sdeb ou https://framagit.org/kyodev/kyopages/issues/" script="getXfox" @@ -97,50 +97,58 @@ f__log(){ # 4/12/2017 fi } - # test dépendances/paquets, $1 liste commande[>paquet] (ex: killall>psmisc) - # si manque, return 1 & info commandes manquantes, si debian proposition paquet à installer - # si $2=debOnly et si paquets manquants: return 1 et $debOnlyAbsent ( $1=liste paquets ) - # si $2=debOnly et si paquets présent: return 0 et $debOnlyPresent ( $1=liste paquets ) - # attention priorité $debOnlyAbsent sur $debOnlyPresent -f__requis(){ # 4/12/2017 - local dependsMissing packagesMissing command package ireq compteur pluriel + # recherche commandes/paquets, $1 liste: cmd1|cmd2[>paquet] (séparées par espaces) ex: "gawk|mawk>gawk wget" + # si manque, return 1 & affiche commandes manquantes (si debian, ajout proposition paquet à installer) +f__requis(){ # 26/01/2018 + local ENV_DEBIAN ireq table package commands command commandsMissing packagesMissing - unset debOnlyAbsent debOnlyPresent - for ireq in $1; do - command="$(cut -d '>' -f 1 <<< $ireq)" - package="$(cut -d '>' -f 2 <<< $ireq)" - if [ "$2" == "debOnly" ]; then - if type -p "dpkg" &>/dev/null ; then # package only et debian - LC_ALL=C dpkg --get-selections | grep -qE "^$package[[:space:]]+install" \ - && debOnlyPresent+="$package " || debOnlyAbsent+="$package " + type -p "dpkg" &>/dev/null && ENV_DEBIAN="oui" # debian + type -t f__info &>/dev/null && c_echo="f__info" || c_echo="echo -e" # f__info existe? sinon echo + + for ireq in $1; do # pour tous les composants de la liste $1 + table=( ${ireq//>/ } ) # séparation sur >, split avec double bashisme, mais évite manip $IFS + + commands=( ${table[0]//|/ } ) # séparation sur | + if [ ${table[1]} ]; then + package=${table[1]} + else + package="$commands" # pas de oackages dans les options, donc idem commands[0] + fi + + for command in ${commands[@]}; do # pour toutes les commandes + if type -p "$command" &>/dev/null ; then + unset commandsMissing packagesMissing + break + else # inexistant + commandsMissing+="$command " + packagesMissing+="$package " fi - elif ! type -p "$command" &>/dev/null ; then - dependsMissing+="$command " - packagesMissing+="$package " - fi + done done - [ "$debOnlyAbsent" ] && debOnlyAbsent="$(xargs <<< $debOnlyAbsent)" # trim début & fin - [ "$debOnlyPresent" ] && debOnlyPresent="$(xargs <<< $debOnlyPresent)" # trim début & fin - [ "$debOnlyAbsent" ] && return 1 - [ "$debOnlyPresent" ] && return 0 - if [ "$dependsMissing" ]; then - compteur="$(wc -w <<< $dependsMissing)" - [ "$compteur" -gt "1" ] && pluriel="s" || unset pluriel - if [ -e /etc/debian_version ]; then - f__info "$RED""erreur critique: $compteur paquet"$pluriel" manquant"$pluriel": $STD$BOLD$dependsMissing" \ - "\n vous devriez exécuter:$GREEN apt install $packagesMissing" - else - f__info "$RED""erreur critique: $compteur commande"$pluriel" manquante"$pluriel": $STD$BOLD$dependsMissing" - fi - return 1 + + # dédoublonnage & triage + commandsMissing=$( echo $commandsMissing | tr ' ' '\n' | sort --unique | tr '\n' ' ' ) + packagesMissing=$( echo $packagesMissing | tr ' ' '\n' | sort --unique | tr '\n' ' ' ) + # suppression éventuel espace final + commandsMissing=${commandsMissing% } + packagesMissing=${packagesMissing% } + # affichage final + if [ "$commandsMissing" ] && [ "$ENV_DEBIAN" ]; then + $c_echo "$RED""erreur critique, manquant: $STD$BOLD$commandsMissing" \ + "vous devriez exécuter:$GREEN apt install $packagesMissing" + elif [ "$commandsMissing" ]; then + $c_echo "$RED""erreur critique, manquant: $STD$BOLD$commandsMissing" fi + + [ "$commandsMissing" ] && return 1 || return 0 } # $@=cmd à lancer en root avec su ou sudo. si $@ contient :x: x=nombre de tentatives, sinon 2 tentatives par défaut # si bash inexistant, return 2 -f__sudo(){ # 14/01/2018 - local nb sudo isudo toBash options +f__sudo(){ # 26/01/2018 + local nb sudo isudo toBash options nbDefault=2 + # détermination sudo possible type -p bash &>/dev/null && toBash=$( type -p bash ) || return 2 # sudo --shell bash équivalent su ? if sudo -v &>/dev/null && [ $EUID -ne 0 ] ; then @@ -148,14 +156,18 @@ f__sudo(){ # 14/01/2018 else sudo="su --shell $toBash --preserve-environment -c " fi - if [[ "$@" =~ :??: ]]; then + # extraction nb de tentatives éventuel + if [[ "$@" =~ :.{1,2}: ]]; then nb="$@" nb=${nb#*:} nb=${nb%:*} + options=${@//:$nb:/ } + (( ${nb}+1 )) 2>/dev/null || nb="$nbDefault" # test si numérique, sinon, else - nb=2 + nb="$nbDefault" + options="$@" fi - options=${@//:$nb:/ } + # lancement cmds for (( isudo=1 ; isudo<="$nb" ; isudo++ )); do $sudo " $options" [ "$?" == 0 ] && break @@ -334,7 +346,7 @@ f_tor_get_version(){ # 24/01/2018 } # installation, [$1='manuel', $2 archive] -f_tor_install(){ # 24/01/2018 +f_tor_install(){ # 25/01/2018 local fileDesktop="/usr/share/applications/tor-browser.desktop" appli="Tor Browser" local verArchive fileTemp archi recup_urlTor dirTemp="/tmp/$script-install_tor" @@ -367,6 +379,7 @@ f_tor_install(){ # 24/01/2018 mv -f "$dirTemp/tor-browser_fr/"* "$dirInstallTor/" chown -R "$fu_user:" "$dirInstallTor/" chmod -R g+wrs,a+r "$dirInstallTor/" + # svg éventuelle archive, effacement répertoire temporaire if [ "$dl_to_svg" == "ok" ]; then chown "$fu_user:" "$fileTemp" mv "$fileTemp" ./ @@ -620,7 +633,7 @@ f_wfx_get_version(){ # 24/01/2018 } # installation, [$1='manuel', $2 archive] -f_wfx_install(){ # 24/01/2018 +f_wfx_install(){ # 25/01/2018 local fileDesktop="/usr/share/applications/waterfox.desktop" verArchive dirTemp fileTemp local dirTemp="/tmp/$script-install_wfx" appli="Waterfox" @@ -657,6 +670,7 @@ f_wfx_install(){ # 24/01/2018 mv -f "$dirTemp/waterfox/"* "$dirInstallWfx/" chown -R "$fu_user:" "$dirInstallWfx/" chmod -R g+wrs,a+r "$dirInstallWfx/" + # svg éventuelle archive, effacement répertoire temporaire if [ "$dl_to_svg" == "ok" ]; then chown "$fu_user:" "$fileTemp" mv "$fileTemp" ./ @@ -838,10 +852,10 @@ f_wfx_remove(){ # 14/01/2018 } # tache upgrade dans anacron hebdomadaire, via cron horaire, $1=upgrade|install|remove -fscript_cronAnacron(){ # 29/12/2017 +fscript_cronAnacron(){ # 26/01/2018 local dirAnacron dirSpool fileAnacron - [ "$( type -t fscript_cronAnacron_special )" ] && fscript_cronAnacron_special # test, si fonction spécifique, appel + type -t fscript_cronAnacron_special &>/dev/null && fscript_cronAnacron_special # test, si fonction spécifique, appel dirAnacron="/home/$fu_user/.config/anacron" dirSpool="$dirAnacron/spool" fileAnacron="$dirAnacron/$script.anacrontab" @@ -896,14 +910,14 @@ fscript_get_version(){ # 24/01/2018 } # installation du script dans le système -fscript_install(){ # 15/01/2018 +fscript_install(){ # 26/01/2018 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 fi - [ "$( type -t fscript_install_special )" ] && fscript_install_special # test, si fonction spécifique, appel + type -t fscript_install_special &>/dev/null && fscript_install_special # test, si fonction spécifique, appel f__requis "wget anacron cron" || exit 1 # install /opt mkdir -p /opt/bin/ @@ -922,7 +936,7 @@ fscript_install(){ # 15/01/2018 } # suppression du script dans le système -fscript_remove(){ # 15/01/2018 +fscript_remove(){ # 26/01/2018 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)" @@ -933,7 +947,7 @@ fscript_remove(){ # 15/01/2018 return 1 fi - [ "$( type -t fscript_remove_special )" ] && fscript_remove_special # test, si fonction spécifique, appel + type -t fscript_remove_special &>/dev/null && fscript_remove_special # test, si fonction spécifique, appel # suppression de /opt lien /usr/bin rm -f "$script_install" unlink "/usr/bin/$script" &>/dev/null @@ -944,10 +958,10 @@ fscript_remove(){ # 15/01/2018 } # mise à jour script, [$1 != "" si upgrade en place, $1 dans message info] -fscript_update(){ # 24/01/2018 +fscript_update(){ # 26/01/2018 local dirTemp="/tmp/$script-maj" upgradeEnPlace="$1" - [ "$(type -t fscript_update_special)" ] && fscript_update_special # test, si fonction spécifique, appel + type -t fscript_update_special &>/dev/null && fscript_update_special # test, si fonction spécifique, appel if [ -z "$upgradeEnPlace" ] && ! 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)" return 1 @@ -977,7 +991,7 @@ fscript_update(){ # 24/01/2018 rm -rf "$dirTemp/" } -prg_init(){ # 22/12/2017 +prg_init(){ # 24/01/2018 PATH='/usr/sbin:/usr/bin:/sbin:/bin' TERM=xterm diff --git a/scripts/getXfox_changelog.md b/scripts/getXfox_changelog.md index d152a8f..e6ed271 100644 --- a/scripts/getXfox_changelog.md +++ b/scripts/getXfox_changelog.md @@ -3,13 +3,19 @@ *todo * Default dans profiles.ini à implanter pour le futur? -## getXfox 4.12.0 - 24/01/2018 +## getXfox 4.14.0 26/01/2018 + +* révision: mineur, fscript_cronAnacron fscript_install fscript_remove fscript_update +* révision: f__requis +* fix: f__sudo, extraction nb tentatives + +## getXfox 4.12.0 24/01/2018 * révision: f_help, f_affichage * révision: f_tor_install, f_wfx_install * révision: général wget_log: fscript_get_version, fscript_update -## getXfox 4.11.0 - 16/01/2018 +## getXfox 4.11.0 16/01/2018 * nouveau: cumul options (opérations) possibles (sauf opés scripts) * nouveau: option --sauve pour conserver le téléchargement à l'installation @@ -22,19 +28,19 @@ * révision: auto-installation, potentiel bug selon conditions appel * fix: test gnome-www-browser avant installation (erreur kde) -## getXfox 4.10.0 - 12/01/2018 +## getXfox 4.10.0 12/01/2018 * fix: correction commentaire fscript_get_version -## getXfox 4.9.0 - 29/12/2017 +## getXfox 4.9.0 29/12/2017 * syncro composants -## getXfox 4.8.0 - 27/12/2017 +## getXfox 4.8.0 27/12/2017 * suivi getFirefox -## getXfox 4.7.0 - 26/12/2017 +## getXfox 4.7.0 26/12/2017 révision: f__info, option combinée raw:log révision: f_help @@ -43,20 +49,20 @@ révision: f_wfx_install, lanceur /usr/bin révision; f_wfx_lanceur_desktop, chemins icone alternatifs fix: f_wfx_remove, oubli suppression lien dans /usr/bin -## getXfox 4.5.0 - 25/12/2017 +## getXfox 4.5.0 25/12/2017 * cosmétique * révision: tor_install, wfx_install, wfx_profil_user * révision: général, plus de variables composées avec variable dans local -## getXfox 4.3.0 - 24/12/2017 +## getXfox 4.3.0 24/12/2017 * cosmétique * fix: f__wget_test, incompatible avec redirection logs * fix: typo fscript_update -## getXfox 4.1.0 - 23/12/2017 +## getXfox 4.1.0 23/12/2017 * base getFirefox v4.1.0 * prise en charge waterfox et tor browser