mirror of https://framagit.org/kyodev/kyopages.git
getInfo 3.8.0
This commit is contained in:
parent
4c891d523a
commit
81f497431f
133
scripts/getInfo
133
scripts/getInfo
|
@ -1,7 +1,7 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
version=3.7.1
|
version=3.8.0
|
||||||
date="24/01/2018"
|
date="26/01/2018"
|
||||||
projet="simpledeb"
|
projet="simpledeb"
|
||||||
contact="IRC freenode ##sdeb ou https://framagit.org/kyodev/kyopages/issues/"
|
contact="IRC freenode ##sdeb ou https://framagit.org/kyodev/kyopages/issues/"
|
||||||
script="getInfo"
|
script="getInfo"
|
||||||
|
@ -133,43 +133,69 @@ f__log(){ # 4/12/2017
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# test dépendances/paquets, $1 liste commande[>paquet] (ex: killall>psmisc)
|
# recherche commandes/paquets, $1 liste: cmd1|cmd2[>paquet] (séparées par espaces) ex: "gawk|mawk>gawk wget"
|
||||||
# si manque, return 1 & info commandes manquantes, si debian proposition paquet à installer
|
# si manque, return 1 & affiche commandes manquantes (si debian, ajout proposition paquet à installer)
|
||||||
# si $2=debOnly et si paquets manquants: return 1 et $debOnlyAbsent ( $1=liste paquets )
|
f__requis(){ # 26/01/2018
|
||||||
# si $2=debOnly et si paquets présent: return 0 et $debOnlyPresent ( $1=liste paquets )
|
local ENV_DEBIAN ireq table package commands command commandsMissing packagesMissing
|
||||||
# attention priorité $debOnlyAbsent sur $debOnlyPresent
|
|
||||||
f__requis(){ # 4/12/2017
|
|
||||||
local dependsMissing packagesMissing command package ireq compteur pluriel
|
|
||||||
|
|
||||||
unset debOnlyAbsent debOnlyPresent
|
type -p "dpkg" &>/dev/null && ENV_DEBIAN="oui" # debian
|
||||||
for ireq in $1; do
|
type -t f__info &>/dev/null && c_echo="f__info" || c_echo="echo -e" # f__info existe? sinon echo
|
||||||
command="$(cut -d '>' -f 1 <<< $ireq)"
|
|
||||||
package="$(cut -d '>' -f 2 <<< $ireq)"
|
for ireq in $1; do # pour tous les composants de la liste $1
|
||||||
if [ "$2" == "debOnly" ]; then
|
table=( ${ireq//>/ } ) # séparation sur >, split avec double bashisme, mais évite manip $IFS
|
||||||
if type -p "dpkg" &>/dev/null ; then # package only et debian
|
|
||||||
LC_ALL=C dpkg --get-selections | grep -qE "^$package[[:space:]]+install" \
|
commands=( ${table[0]//|/ } ) # séparation sur |
|
||||||
&& debOnlyPresent+="$package " || debOnlyAbsent+="$package "
|
if [ ${table[1]} ]; then
|
||||||
|
package=${table[1]}
|
||||||
|
else
|
||||||
|
package="$commands" # pas de oackages dans les options, donc idem commands[0]
|
||||||
fi
|
fi
|
||||||
elif ! type -p "$command" &>/dev/null ; then
|
|
||||||
dependsMissing+="$command "
|
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 "
|
packagesMissing+="$package "
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
[ "$debOnlyAbsent" ] && debOnlyAbsent="$(xargs <<< $debOnlyAbsent)" # trim début & fin
|
done
|
||||||
[ "$debOnlyPresent" ] && debOnlyPresent="$(xargs <<< $debOnlyPresent)" # trim début & fin
|
|
||||||
[ "$debOnlyAbsent" ] && return 1
|
# dédoublonnage & triage
|
||||||
[ "$debOnlyPresent" ] && return 0
|
commandsMissing=$( echo $commandsMissing | tr ' ' '\n' | sort --unique | tr '\n' ' ' )
|
||||||
if [ "$dependsMissing" ]; then
|
packagesMissing=$( echo $packagesMissing | tr ' ' '\n' | sort --unique | tr '\n' ' ' )
|
||||||
compteur="$(wc -w <<< $dependsMissing)"
|
# suppression éventuel espace final
|
||||||
[ "$compteur" -gt "1" ] && pluriel="s" || unset pluriel
|
commandsMissing=${commandsMissing% }
|
||||||
if [ -e /etc/debian_version ]; then
|
packagesMissing=${packagesMissing% }
|
||||||
f__info "$RED""erreur critique: $compteur paquet"$pluriel" manquant"$pluriel": $STD$BOLD$dependsMissing" \
|
# affichage final
|
||||||
"\n vous devriez exécuter:$GREEN apt install $packagesMissing"
|
if [ "$commandsMissing" ] && [ "$ENV_DEBIAN" ]; then
|
||||||
else
|
$c_echo "$RED""erreur critique, manquant: $STD$BOLD$commandsMissing" \
|
||||||
f__info "$RED""erreur critique: $compteur commande"$pluriel" manquante"$pluriel": $STD$BOLD$dependsMissing"
|
"vous devriez exécuter:$GREEN apt install $packagesMissing"
|
||||||
fi
|
elif [ "$commandsMissing" ]; then
|
||||||
return 1
|
$c_echo "$RED""erreur critique, manquant: $STD$BOLD$commandsMissing"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
[ "$commandsMissing" ] && return 1 || return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# recherche paquet deb (scission f__requis), $1 liste paquets ("paquet1 paquet2"), si un paquet absent return 1
|
||||||
|
# assigne $deb_absent & $deb_present, si hors debian: return 1 mais $deb_present & $deb_absent vides
|
||||||
|
f__requis_deb(){ # 26/01/2018
|
||||||
|
local ireq
|
||||||
|
unset deb_present deb_absent
|
||||||
|
|
||||||
|
type -p "dpkg" &>/dev/null || return 1 # si pas dpkg, sortie return 0
|
||||||
|
|
||||||
|
for ireq in $1; do
|
||||||
|
LC_ALL=C dpkg --get-selections | grep -qE "^$ireq[[:space:]]+install" \
|
||||||
|
&& deb_present+="$ireq " || deb_absent+="$ireq "
|
||||||
|
done
|
||||||
|
|
||||||
|
deb_absent=${deb_absent% } # suppression éventuel espace final
|
||||||
|
deb_present=${deb_present% } # suppression éventuel espace final
|
||||||
|
[ "$deb_absent" ] && return 1
|
||||||
|
[ "$deb_present" ] && return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
# $@=cmd à lancer en root avec su ou sudo. si $@ contient :x: x=nombre de tentatives, sinon 2 tentatives par défaut
|
# $@=cmd à lancer en root avec su ou sudo. si $@ contient :x: x=nombre de tentatives, sinon 2 tentatives par défaut
|
||||||
|
@ -211,7 +237,7 @@ f__unit_human(){ # 5/12/2017
|
||||||
# user ayant initié la session graphique, assigne $fu_user
|
# user ayant initié la session graphique, assigne $fu_user
|
||||||
# return 1 sur échec identification user, return 2 sur absence home/
|
# return 1 sur échec identification user, return 2 sur absence home/
|
||||||
# gestion variable environnement user avec: USER_INSTALL=<user> script
|
# gestion variable environnement user avec: USER_INSTALL=<user> script
|
||||||
f__user(){ # 3/12/2017
|
f__user(){ # 25/01/2018
|
||||||
local user userid test root_login
|
local user userid test root_login
|
||||||
|
|
||||||
root_login="$(grep ':0:' /etc/passwd | cut -d':' -f1)" || root_login="root"
|
root_login="$(grep ':0:' /etc/passwd | cut -d':' -f1)" || root_login="root"
|
||||||
|
@ -241,9 +267,9 @@ f__user(){ # 3/12/2017
|
||||||
if [ "$SUDO_USER" ] && [ "$SUDO_USER" != "$root_login" ]; then
|
if [ "$SUDO_USER" ] && [ "$SUDO_USER" != "$root_login" ]; then
|
||||||
user="$SUDO_USER";
|
user="$SUDO_USER";
|
||||||
elif grep -qv 'root' <<< "$(who)"; then
|
elif grep -qv 'root' <<< "$(who)"; then
|
||||||
user="$(grep -v 'root' <<< $(who) | head -n1 | cut -d ' ' -f1)"; # grep -v 'root' <<< $(who) | gawk 'FNR==1{print $1}'
|
user="$(grep -v 'root' <<< $(who) | head -n1 | cut -d ' ' -f1)"; # grep -v 'root' <<< $(who) | awk 'FNR==1{print $1}'
|
||||||
elif grep -q 'hourly.*get[A-Z].*\.anacrontab.*\.config/anacron/spool' /etc/crontab; then
|
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)"; # grep 'hourly.*get[A-Z].*\.anacrontab.*\.config/anacron/spool' /etc/crontab | gawk 'FNR==1{print $2}
|
user="$(grep 'hourly.*get[A-Z].*\.anacrontab.*\.config/anacron/spool' /etc/crontab | head -n1 | cut -d' ' -f2)"; # grep 'hourly.*get[A-Z].*\.anacrontab.*\.config/anacron/spool' /etc/crontab | awk 'FNR==1{print $2}
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fu_user="$user"
|
fu_user="$user"
|
||||||
|
@ -1574,7 +1600,7 @@ fi_packagers(){ #v2 23/11/2017
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
fi_pkg_apt(){ #v3 30/12/2017
|
fi_pkg_apt(){ #v3 26/01/2018
|
||||||
local dateMaj nb_packages ifile info_update text pluriel
|
local dateMaj nb_packages ifile info_update text pluriel
|
||||||
local sources cmt_sources cmd_sources dir_source result
|
local sources cmt_sources cmd_sources dir_source result
|
||||||
local apt_v apt_version apt_prefs cmt_apt_prefs cmd_apt_prefs
|
local apt_v apt_version apt_prefs cmt_apt_prefs cmd_apt_prefs
|
||||||
|
@ -1642,15 +1668,14 @@ fi_pkg_apt(){ #v3 30/12/2017
|
||||||
# divers
|
# divers
|
||||||
dateMaj=$( date -r /var/cache/apt/pkgcache.bin '+%d/%m/%Y %H:%M %z' 2>/dev/null) || \
|
dateMaj=$( date -r /var/cache/apt/pkgcache.bin '+%d/%m/%Y %H:%M %z' 2>/dev/null) || \
|
||||||
dateMaj=$( date -r /var/cache/apt '+%d/%m/%Y %H:%M %z' 2>/dev/null ) # /var/lib/dpkg/
|
dateMaj=$( date -r /var/cache/apt '+%d/%m/%Y %H:%M %z' 2>/dev/null ) # /var/lib/dpkg/
|
||||||
nb_packages=$( dpkg -l | grep -c '^ii' )
|
nb_packages=$( dpkg -l | grep -c '^ii' ) # alternatif: grep -c '\.list' <<< $(ls -1 /var/lib/dpkg/info/*.list)
|
||||||
#nb_packages alternatif: grep -c '\.list' <<< $(ls -1 /var/lib/dpkg/info/*.list)
|
|
||||||
# https
|
# https
|
||||||
apt_version=$( apt --version ) # apt 1.4.8 (i386)
|
apt_version=$( apt --version ) # apt 1.4.8 (i386)
|
||||||
apt_version=${apt_version#apt } # 1.4.8 (i386)
|
apt_version=${apt_version#apt } # 1.4.8 (i386)
|
||||||
apt_version=${apt_version% (*} # 1.4.8
|
apt_version=${apt_version% (*} # 1.4.8
|
||||||
apt_v=${apt_version%.*} # 1.4
|
apt_v=${apt_version%.*} # 1.4
|
||||||
alert_https=$( gawk '{if ( $1 > 1.5 ) {print "https inutile"}}' <<< $apt_v )
|
alert_https=$( gawk '{if ( $1 > 1.5 ) {print "https inutile"}}' <<< $apt_v )
|
||||||
if f__requis "apt-transport-https" "debOnly" && [ "$alert_https" ]; then
|
if f__requis_deb "apt-transport-https" && [ "$alert_https" ]; then
|
||||||
alert_https="le paquet <apt-transport-https> est inutile maintenant avec la version $apt_v d'apt (depuis 1.6)"
|
alert_https="le paquet <apt-transport-https> est inutile maintenant avec la version $apt_v d'apt (depuis 1.6)"
|
||||||
else
|
else
|
||||||
unset alert_https
|
unset alert_https
|
||||||
|
@ -3414,7 +3439,7 @@ figet_hw(){ #v2 14/12/2017
|
||||||
}
|
}
|
||||||
|
|
||||||
# $1=-4|-6, assigne $fg_ip, $fg_gws6, $fg_ifn, $fg_mac
|
# $1=-4|-6, assigne $fg_ip, $fg_gws6, $fg_ifn, $fg_mac
|
||||||
figet_ip(){ # 15/12/2017
|
figet_ip(){ # 25/01/2018
|
||||||
local target ifn
|
local target ifn
|
||||||
|
|
||||||
x_ip=1
|
x_ip=1
|
||||||
|
@ -3422,7 +3447,7 @@ figet_ip(){ # 15/12/2017
|
||||||
[ "$1" ] && proto="$1" || proto="-4"
|
[ "$1" ] && proto="$1" || proto="-4"
|
||||||
# adresses ip
|
# adresses ip
|
||||||
fg_ip=$(
|
fg_ip=$(
|
||||||
gawk -v proto="$proto" '
|
awk -v proto="$proto" '
|
||||||
BEGIN { if (proto == -6) esp=41; else esp=16 }
|
BEGIN { if (proto == -6) esp=41; else esp=16 }
|
||||||
/scope global/ {
|
/scope global/ {
|
||||||
sub(/wl.*/,$2" (wifi)",$2); sub(/.*en.*|.*eth.*/,$2" (ethernet)",$2);
|
sub(/wl.*/,$2" (wifi)",$2); sub(/.*en.*|.*eth.*/,$2" (ethernet)",$2);
|
||||||
|
@ -3441,14 +3466,14 @@ figet_ip(){ # 15/12/2017
|
||||||
)
|
)
|
||||||
# passerelles
|
# passerelles
|
||||||
fg_gws=$(
|
fg_gws=$(
|
||||||
gawk '
|
awk '
|
||||||
BEGIN { if (proto == -6) esp=42; else esp=12 }
|
BEGIN { if (proto == -6) esp=42; else esp=12 }
|
||||||
/default via/ { printf "%-"esp"s (%s)\n",$3,$5 }
|
/default via/ { printf "%-"esp"s (%s)\n",$3,$5 }
|
||||||
' <<< $( ip $proto route )
|
' <<< $( ip $proto route )
|
||||||
)
|
)
|
||||||
# interface sortante
|
# interface sortante
|
||||||
if [ "$proto" == "-6" ]; then
|
if [ "$proto" == "-6" ]; then
|
||||||
target=$( gawk '/proto ra / { print $1; exit}' <<< $( ip $proto -o route ) )
|
target=$( awk '/proto ra / { print $1; exit}' <<< $( ip $proto -o route ) )
|
||||||
fg_ifn_prior=$( ip $proto route get $target )
|
fg_ifn_prior=$( ip $proto route get $target )
|
||||||
fg_ifn_prior=$( ip $proto route get $target | sed -En 's/.*dev (.*) proto.*src ([0-9a-f:]+).*/\1 (\2)/p' )
|
fg_ifn_prior=$( ip $proto route get $target | sed -En 's/.*dev (.*) proto.*src ([0-9a-f:]+).*/\1 (\2)/p' )
|
||||||
else
|
else
|
||||||
|
@ -3990,10 +4015,10 @@ fipaste_curl_markdownshare(){ # à tester/finir
|
||||||
}
|
}
|
||||||
|
|
||||||
# tache upgrade dans anacron hebdomadaire, via cron horaire, $1=upgrade|install|remove
|
# 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
|
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"
|
dirAnacron="/home/$fu_user/.config/anacron"
|
||||||
dirSpool="$dirAnacron/spool"
|
dirSpool="$dirAnacron/spool"
|
||||||
fileAnacron="$dirAnacron/$script.anacrontab"
|
fileAnacron="$dirAnacron/$script.anacrontab"
|
||||||
|
@ -4048,14 +4073,14 @@ fscript_get_version(){ # 24/01/2018
|
||||||
}
|
}
|
||||||
|
|
||||||
# installation du script dans le système
|
# installation du script dans le système
|
||||||
fscript_install(){ # 15/01/2018
|
fscript_install(){ # 26/01/2018
|
||||||
|
|
||||||
if grep -q 'bin' <<< "$( dirname $0 )" ; then
|
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 )"
|
f__info "$RED""l'installation dans le système doit se faire depuis un script local $GREEN(./$script -i )"
|
||||||
return 1
|
return 1
|
||||||
fi
|
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
|
f__requis "wget anacron cron" || exit 1
|
||||||
# install /opt
|
# install /opt
|
||||||
mkdir -p /opt/bin/
|
mkdir -p /opt/bin/
|
||||||
|
@ -4074,7 +4099,7 @@ fscript_install(){ # 15/01/2018
|
||||||
}
|
}
|
||||||
|
|
||||||
# suppression du script dans le système
|
# suppression du script dans le système
|
||||||
fscript_remove(){ # 15/01/2018
|
fscript_remove(){ # 26/01/2018
|
||||||
|
|
||||||
if ! grep -q 'bin' <<< "$( dirname $0 )" ; then
|
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)"
|
f__info "$RED""cette fonction doit être appelée depuis le script installé dans le système $GREEN($script -r)"
|
||||||
|
@ -4085,7 +4110,7 @@ fscript_remove(){ # 15/01/2018
|
||||||
return 1
|
return 1
|
||||||
fi
|
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
|
# suppression de /opt lien /usr/bin
|
||||||
rm -f "$script_install"
|
rm -f "$script_install"
|
||||||
unlink "/usr/bin/$script" &>/dev/null
|
unlink "/usr/bin/$script" &>/dev/null
|
||||||
|
@ -4096,10 +4121,10 @@ fscript_remove(){ # 15/01/2018
|
||||||
}
|
}
|
||||||
|
|
||||||
# mise à jour script, [$1 != "" si upgrade en place, $1 dans message info]
|
# 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"
|
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
|
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)"
|
f__info "$RED""cette fonction doit être appelée depuis le script installé dans le système $GREEN($script -u)"
|
||||||
return 1
|
return 1
|
||||||
|
@ -4129,7 +4154,7 @@ fscript_update(){ # 24/01/2018
|
||||||
rm -rf "$dirTemp/"
|
rm -rf "$dirTemp/"
|
||||||
}
|
}
|
||||||
|
|
||||||
prg_init(){ # 4/12/2017
|
prg_init(){ # 25/01/2018
|
||||||
|
|
||||||
PATH='/usr/sbin:/usr/bin:/sbin:/bin'
|
PATH='/usr/sbin:/usr/bin:/sbin:/bin'
|
||||||
TERM=xterm
|
TERM=xterm
|
||||||
|
@ -4188,7 +4213,7 @@ prg_init(){ # 4/12/2017
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# requis pour fonctionnement programme
|
# requis pour fonctionnement programme
|
||||||
f__requis "gawk wget ip>iproute2 lspci>pciutils wc>coreutils uptime>procps" || exit 1
|
f__requis "gawk|mawk>gawk wget ip>iproute2 lspci>pciutils wc>coreutils uptime>procps" || exit 1
|
||||||
|
|
||||||
# detect rapide systeme deb
|
# detect rapide systeme deb
|
||||||
[ $( f__which dpkg ) ] && ENV_DEBIAN="oui"
|
[ $( f__which dpkg ) ] && ENV_DEBIAN="oui"
|
||||||
|
|
|
@ -4,7 +4,15 @@ traitements options dans les options :/
|
||||||
* révision: général, invocation f__sudo dans traitement options, plus confortable si su & _all_
|
* révision: général, invocation f__sudo dans traitement options, plus confortable si su & _all_
|
||||||
* mawk à tester
|
* mawk à tester
|
||||||
|
|
||||||
## getInfo 3.7.1 24/01/2018
|
## getInfo 3.8.0 26/01/2018
|
||||||
|
|
||||||
|
* révision: test avec mawk, f__user, figet_ip
|
||||||
|
* révision: plus d'imposition gawk only, prg_init
|
||||||
|
* révision: mineur, fscript_cronAnacron fscript_install fscript_remove fscript_update
|
||||||
|
* révision: f__requis, commandes alternatives possible (gawk|mawk), mawk installé par défaut sur debian :(
|
||||||
|
* révision: f__requis_deb issu de f__requis, fi_pkg_apt
|
||||||
|
|
||||||
|
## getInfo 3.7.0 24/01/2018
|
||||||
|
|
||||||
* nouveau: cumul options (opérations) possibles pour la plupart des opérations
|
* nouveau: cumul options (opérations) possibles pour la plupart des opérations
|
||||||
* révision: invocation f__sudo dans traitement options, plus confortable si su & _all_
|
* révision: invocation f__sudo dans traitement options, plus confortable si su & _all_
|
||||||
|
@ -44,7 +52,7 @@ révision, syncro: f__info, option combinée raw:log
|
||||||
|
|
||||||
## getInfo 2.70.0 18/12/2017
|
## getInfo 2.70.0 18/12/2017
|
||||||
|
|
||||||
*syncro: f__archive_test, f__error, f__info, f__sudo, fscript_cronAnacron, fscript_get_version,
|
* syncro: f__archive_test, f__error, f__info, f__sudo, fscript_cronAnacron, fscript_get_version,
|
||||||
fscript_install, fscript_remove, fscript_update
|
fscript_install, fscript_remove, fscript_update
|
||||||
|
|
||||||
## getInfo 2.69.0 18/12/2017
|
## getInfo 2.69.0 18/12/2017
|
||||||
|
|
Loading…
Reference in New Issue