Commit e5f98ed5 authored by fenwe's avatar fenwe
Browse files

notifs

parent bdfef820
......@@ -62,4 +62,4 @@ Thumbs.db
##########
# projet #
##########
*.legite
......@@ -25,5 +25,6 @@ Les fichiers de configurations sont:
* $HOME/.legite/legite-install.etc.sh
UTILISATION:
legite-install.sh #lib#
legite-install.sh [--conf=fichier_de_conf.sh] lib1 [lib..]
legite-install.sh install_firefox install_firefoxBeta install_firefoxDev
......@@ -14,6 +14,7 @@ fonction_Test(){
else
echo "Appeller par un user."
fi
notifsAdd "$FUNCNAME"
}
fonctionsTbl['fonction_Test']=fonction_Test;
......@@ -24,6 +25,7 @@ configure_clavier(){
evalCmd "dpkg-reconfigure console-setup"
evalCmd "dpkg-reconfigure keyboard-configuration"
evalCmd "loadkeys fr"
notifsAdd "$FUNCNAME"
}
fonctionsTbl['configure_clavier']=configure_clavier;
......@@ -31,6 +33,7 @@ configure_french_console(){
if [ $IS_ROOT -eq 0 ];then return; fi
echo $BOLD${INFO}mise en francais du systeme$NORMAL$NOBOLD
evalCmd "aptitude -y install task-french"
notifsAdd "$FUNCNAME"
}
fonctionsTbl['configure_french_console']=configure_french_console;
......@@ -38,6 +41,7 @@ configure_french_desktop(){
if [ $IS_ROOT -eq 0 ];then return; fi
echo $BOLD${INFO}mise en francais du systeme$NORMAL$NOBOLD
evalCmd "aptitude -y install task-french task-french-desktop"
notifsAdd "$FUNCNAME"
}
fonctionsTbl['configure_french_desktop']=configure_french_desktop;
......@@ -201,6 +205,8 @@ install_firefox(){
mkdir -p $INSTALL_ROOT;
fi
local ancienneVersion=$(/usr/local/bin/firefox -v);
# - Telechargement - #
if [ ! -f "/tmp/firefox.tar.gz" ];
then
......@@ -241,10 +247,15 @@ install_firefox(){
# - Affichage de la version - #
if [ $IS_ROOT -eq 1 ];
then
evalCmd " /usr/local/bin/firefox -v"
newVersion=$(/usr/local/bin/firefox -v)
else
evalCmd "$INSTALL_ROOT/firefox/firefox -v"
newVersion=$($INSTALL_ROOT/firefox/firefox -v)
fi
local notif="Mise a jours de la version $ancienneVersion vers $newVersion"
echo "$notif";
notifsAdd "$notif"
return 0;
}
fonctionsTbl['install_firefox']=install_firefox;
......@@ -258,6 +269,8 @@ install_firefoxBeta(){
mkdir -p $INSTALL_ROOT;
fi
local ancienneVersion=$(/usr/local/bin/firefoxBeta -v);
# - Telechargement - #
if [ ! -f "/tmp/firefoxBeta.tar.gz" ];
then
......@@ -311,10 +324,14 @@ install_firefoxBeta(){
# - Affichage de la version - #
if [ $IS_ROOT -eq 1 ];
then
evalCmd " /usr/local/bin/firefoxBeta -v"
newVersion=$(/usr/local/bin/firefoxBeta -v)
else
evalCmd "$INSTALL_ROOT/firefoxBeta/firefoxBeta -v"
newVersion=$($INSTALL_ROOT/firefox/firefoxBeta -v)
fi
local notif="Mise a jours de la version $ancienneVersion vers $newVersion"
echo "$notif";
notifsAdd "$notif"
return 0;
}
fonctionsTbl['install_firefoxBeta']=install_firefoxBeta;
......@@ -328,6 +345,8 @@ install_firefoxDev(){
mkdir -p $INSTALL_ROOT;
fi
local ancienneVersion=$(/usr/local/bin/firefoxDev -v);
# - Telechargement - #
if [ ! -f "/tmp/firefoxDev.tar.gz" ];
then
......@@ -359,12 +378,13 @@ install_firefoxDev(){
evalCmd "rm -R $INSTALL_ROOT/firefoxDev"
fi
# - deplacment du repertoire temporaire vers $INSTALL_ROOT - #
# - deplacement du repertoire temporaire vers $INSTALL_ROOT - #
evalCmd "mv /tmp/firefoxDev/firefox /tmp/firefoxDev/firefoxDev"
evalCmd "mv /tmp/firefoxDev/firefoxDev $INSTALL_ROOT"
# - Suppression du repertoire temporaire d'installation - #
evalCmd "rmdir /tmp/firefoxDev"
echo $LINENO
#evalCmd "rmdir /tmp/firefoxDev"
# - Creation du lien symbolique vers /usr/lib - #
if [ $IS_ROOT -eq 1 ];
......@@ -381,14 +401,26 @@ install_firefoxDev(){
# - Affichage de la version - #
if [ $IS_ROOT -eq 1 ];
then
evalCmd " /usr/local/bin/firefoxDev -v"
newVersion=$(/usr/local/bin/firefoxDev -v)
else
evalCmd "$INSTALL_ROOT/firefoxDev/firefox -v"
newVersion=$($INSTALL_ROOT/firefox/firefoxDev -v)
fi
local notif="Mise a jours de la version $ancienneVersion vers $newVersion"
echo "$notif";
notifsAdd "$notif"
return 0;
}
fonctionsTbl['install_firefoxDev']=install_firefoxDev;
install_firefoxAll(){
install_firefox
install_firefoxBeta
install_firefoxDev
}
fonctionsTbl['install_firefoxAll']=install_firefoxAll;
install_visualCode(){
if [ $IS_ROOT -eq 0 ];
then
......
#!/bin/bash
set -u;
declare -r SCRIPT_PATH=`realpath $0`; # chemin absolu complet du script rep + nom
#style
#https://abs.traduc.org/abs-5.0-fr/ch32.html#unofficialst
#http://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html#The-Set-Builtin
set -u
declare -r SCRIPT_PATH=`realpath $0`; # chemin absolu complet du script rep + nom
declare -r SCRIPT_REP=`dirname $SCRIPT_PATH`; # repertoire absolu du script (pas de slash de fin)
declare -r SCRIPT_FILENAME=${0##*/}; # nom.ext
declare -r SCRIPT_NAME=${SCRIPT_FILENAME%.*} # uniquement le nom
declare -r SCRIPT_EXT="sh" # uniquement l'extention
declare -r SCRIPT_FILENAME=${0##*/}; # /path/nom.pasext.ext -> nom.pasext.ext
declare -r SCRIPT_NAME=${SCRIPT_FILENAME%.*} # nom.pasext.ext -> nom.pasext # uniquement le nom
declare -r SCRIPT_EXT=${SCRIPT_FILENAME##*.} # nom.pasext.ext -> ext # uniquement l'extention
declare -r VERSION="v0.0.3";
#$?: retour de la derniere commande shell
#$LINENO
declare -r VERSION="v0.0.4";
################
......@@ -37,10 +40,59 @@ DEBUG_COLOR=$MAGENTA
####################
# codes de sorties #
# CODES DE SORTIES #
####################
declare -r E_ARG_NONE=65
declare -r E_ARG_BAD=66 #perso
#http://www.gnu.org/software/bash/manual/html_node/Exit-Status.html#Exit-Status
#https://abs.traduc.org/abs-5.0-fr/apd.html#exitcodesref
#https://tldp.org/LDP/abs/html/exitcodes.html
declare -r -i E_MISC=1
declare -r -i E_INTERNE=2
declare -r -i E_CMD_CANT_EXEC=126
declare -r -i E_CMD_NOT_FOUND=127
declare -r -i E_EXIT_BAD=128 # valeur d'exit invalide
#>=129.255 FATAL_ERROR
declare -r -i E_CTRL_C=130
declare -r -i E_EXIT_EOR=255
# 64..113: USER EXIT
declare -r -i E_ARG_NONE=65
declare -r -i E_ARG_BAD=66
#################
# NOTIFICATIONS #
#################
declare -a notifs; # tableau contenant la pile de notifications
declare -i notifsIndex=0; # index utilisé pour le remplissage de la pile de notifs
#notifsAdd($txt) # ajoute une notif dans la pile de notifs
notifsAdd(){
local notif="$1"
if [ -z "$notif" ]
then
return 1;
fi
notifs[$notifsIndex]="$notif"
((notifsIndex++))
return 0;
}
#notifsShow($separateur="\n") # affiche la pile des notifs
notifsShow(){
if [ -z "${notifs[*]}" ]
then
return 1;
fi
local separateur=${1:-"\n"}
local index=0;
for notif in "${notifs[@]}"
do
echo -ne "$notif$separateur";
done
return 0;
}
#############
......@@ -48,18 +100,24 @@ declare -r E_ARG_BAD=66 #perso
# init #
#############
# --- Definir si root ou user --- #
[ "$(id -u)" == "0" ] && declare -r IS_ROOT=1 || declare -r IS_ROOT=0;
[ "$(id -u)" == "0" ] && declare -r -i IS_ROOT=1 || declare -r -i IS_ROOT=0;
# --- tag d'interuption --- #
declare -i isTrapCAsk=0; # demande d'interuption par control C
# --- variables generiques --- #
argNb=$#;
isUpdate=0; # demande de update
verbose=0;
isDebug=0;
isDebugShowVars=0; # montrer les variables
declare -r -i argNb=$#;
declare argument; # argument actuel ($1)
declare parametre; # parametre actuel ($2)
declare -i isUpdate=0; # demande de update
declare -i verbose=0; # niveau de verbosité
declare -i isDebug=0;
declare -i isDebugShowVars=0; # montrer les variables
# --- variables des includes --- #
declare -r UPDATE_HTTP="http://updates.legite.org/legite-install";
declare -i isConf=0;
declare -r CONF_ETC_ROOT="/etc/legite";
declare -r CONF_ETC_FILENAME="$SCRIPT_NAME.etc.$SCRIPT_EXT";
declare -r CONF_ETC_PATH="$CONF_ETC_ROOT/$CONF_ETC_FILENAME";
......@@ -68,6 +126,7 @@ declare -r CONF_ETC_PATH="$CONF_ETC_ROOT/$CONF_ETC_FILENAME";
declare -r CONF_USER_ROOT="$HOME/.legite";
declare -r CONF_USER_FILENAME="$SCRIPT_NAME.sh";
declare -r CONF_USER_PATH="$CONF_USER_ROOT/$CONF_USER_FILENAME";
declare conf_run=""; # fichier de configuration donné par --conf
# le fichier origine est copier lors de chaque installation
declare -r CONF_ORI_FILENAME="$SCRIPT_NAME.ori.sh";
......@@ -75,16 +134,23 @@ declare -r CONF_ORI_PATH="$CONF_USER_ROOT/$CONF_ORI_FILENAME";
#isConf=0; # chargement d'un fichier de configuration(CONF_USER_FILENAME) doit il etre lancé?
# --- variables des parametres supplementaires --- #
PSP_sup=""; # parametre supplementaire($@) => $1 $2 $n "$@""
#declare PSP_sup=""; # parametre supplementaire($@) => $1 $2 $n "$@""
declare -A fonctionsTbl; # tableau contenant les fonctions (venant de PSP_sup)
isShowLibs=0; # affiche une liste des fonctions defini
# --- variables du projet --- #
declare -A fonctionsTbl; # tableau contenant les fonctions (remplis par les fichiers de configuration)
declare -i isShowLibs=0; # affiche une liste des fonctions definies
#librairieRep="$CONF_USER_ROOT/collections";
declare -a librairiesTbl; # (array) liste des librairies appellées
declare -i librairiesTblIndex=0 # index pour construire le tableau
declare librairie=""; # librairie en cours
#declare collectionPath=""; # chemin d'acce a la collection en cours (inutile est un index de fonctionsTbl)
# #################### #
# functions generiques #
# FONCTIONS GENERIQUES #
# #################### #
usage (){
if [ $argNb -eq 0 ];
......@@ -97,7 +163,7 @@ usage (){
echo "Fichiers de configuration"
echo "$CONF_ETC_PATH: est copier a chaque installation et mise a jours (ne pas editer)"
echo "$CONF_ORI_PATH: est un exemple d'utilisation"
echo "$CONF_USER_PATH: se lance avec --conf"
#echo "$CONF_USER_PATH: se lance avec --conf"
echo "programme: si fournis execute la fonction (contennu dans un fichier de conf) . 1 seule pour l'instant"
exit $E_ARG_NONE;
fi
......@@ -126,9 +192,10 @@ if [ $isDebugShowVars -eq 1 ];
showDebug " CONF_USER_PATH=$CONF_USER_PATH";
showDebug " CONF_ORI_FILENAME=$CONF_ORI_FILENAME";
showDebug " CONF_ORI_PATH=$CONF_ORI_PATH";
showDebug " conf_run=$conf_run"
showDebug " isShowLibs=$isShowLibs"
showDebug " PSP_sup=$PSP_sup"
#showDebug " PSP_sup=$PSP_sup"
isDebug=$isDebugOld;
fi
......@@ -140,26 +207,42 @@ if [ $isDebugShowVars -eq 1 ];
#########
#evalCmd($cmd $ligneNu $txt)
evalCmd(){
local ligneNu=""; if [ ! -z ${2+x} ]; then ligneNu="[$2]:"; fi
local txt=""; if [ ! -z ${3+x} ]; then txt="$3"; fi
if [ $# -gt 0 ]
then
local ligneNu=${2:-""}
local txt=${3:-""}
echo "${DEBUG_COLOR}$ligneNu$CMD$1$NORMAL$txt";
eval "$1";
return $?
echo "${DEBUG_COLOR}$ligneNu$CMD$1$NORMAL$txt";
eval "$1";
return $?
fi
}
#showDebug(texte)
#showDebug(texte pre post)
showDebug(){
if [ $isDebug -eq 1 ];
then
#ligneNo=$1;
texte="$1";
if [ $# -eq 2 ]; then
texte=$2;
if [ $isDebug -eq 1 -a $# -gt 0 ]
then
texte="$1";
local pre=${2:-""}
local post=${3:-""}
echo "${DEBUG_COLOR}$pre$texte$post$NORMAL"
fi
echo "${DEBUG_COLOR}$texte$NORMAL"
fi
}
# ############ #
# INTERUPTIONS #
# ############ #
#http://www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Builtins.html#Bourne-Shell-Builtins
#trap -l #trap --help
#https://linuxhint.com/bash_error_handling/
trap ctrl_c INT
function ctrl_c() {
isTrapCAsk=1;
showDebug "** Trapped CTRL-C"
}
......@@ -171,23 +254,33 @@ fi
updateProg(){
if [ $isUpdate -eq 1 ]
then
src=$1; dest=$2
src="$1"; dest="$2"
local -i isRootNeeded=1;
if [ $# -ge 3 ]
then
isRootNeeded=$3;
fi
if [ $IS_ROOT -eq 0 -a $isRootNeeded -eq 1 ]
then
echo "${WARN}root est requis pour updater (ecrire dans /usr/local/bin/)"
return -1
fi
echo "${INFO}Update de $src$NORMAL"
if [ $IS_ROOT -eq 1 ]
if [ -f "$dest" ]
then
evalCmd "cp '$dest' '$dest.bak'" $LINENO; # Fait une sauvegarde
evalCmd "rm '$dest'";
fi
evalCmd "wget -O $dest $src"
evalCmd "chmod +x $dest"
if [ $? -ne 0 ];
then
echo "${WARN}Erreur lors de l'instalation de $dest.$NORMAL"
evalCmd "mv '$dest.bak' '$dest' "
fi
evalCmd "wget -O \"$dest\" \"$src\""
if [ -f "$dest" ]
then
chmod +x $dest
else
echo "${WARN}Seul root peut updater (ecrire dans /usr/local/bin/, /root/.legite/)"
echo "${WARN}Erreur lors de l'instalation de $dest.$NORMAL"
evalCmd "mv '$dest.bak' '$dest' " # on restaure la sauvegarde
fi
fi
}
......@@ -210,7 +303,6 @@ selfUpdate (){
###############################
# GESTION DE LA CONFIGURATION #
###############################
# creer et execute les fichiers locaux
# LocalFileExec(localName){
execFile(){
......@@ -227,14 +319,17 @@ execFile(){
fi
}
# ################### #
# FONCTIONS DU PROJET #
# ################### #
##########################
# GESTION DES LIBRAIRIES #
##########################
showLibs(){
echo "Librairies possibles:";
if [ $isShowLibs -eq 1 ];
then
echo "Librairies possibles:";
#trie du tableau de librairies
IFS=$'\n' sorted=($(sort <<<"${fonctionsTbl[*]}"))
unset IFS
......@@ -258,17 +353,15 @@ isLibExist(){
}
# ################### #
# functions du projet #
# ################### #
# ########## #
# parametres #
# PARAMETRES #
# ########## #
TEMP=`getopt \
--options v::dVhn \
--long verbose::,debug,showVars,showLibs,version,help,update,conf \
--options v::dVhnS \
--long verbose::,debug,showVars,version,help,update,listeFormats,listeCollections,conf::,convert:: \
-- "$@"`
# Note the quotes around `$TEMP': they are essential!
......@@ -278,8 +371,17 @@ eval set -- "$TEMP"
#echo "${INFO}argNb:$NORMAL $#"
#echo "${INFO}arg:$NORMAL $?"
while true ; do
case "$1" in
while true
do
if [ $isTrapCAsk -eq 1 ]
then
break;
fi
argument=${1:-""}
parametre=${2:-""}
#echo "argument:'$argument', parametre='$parametre'"
case "$argument" in
# - fonctions generiques - #
-h|--help) usage; exit 0; shift ;;
......@@ -306,39 +408,40 @@ while true ; do
--showLibs) isShowLibs=1; shift ;;
# - Chargement d'un fichier de configuration - #
#--conf) isConf=1; shift ;;
--conf)
isConf=1;
conf_run="$2"
shift 2
;;
#--) # parcours des arguments supplementaires
--)
if [ -z "$parametre" ]
then
shift;
break;
fi
#echo "--)"
librairie="$parametre";
librairiesTbl[librairiesTblIndex]="$librairie"
((librairiesTblIndex++))
shift 2;
;;
# - parametres liés au projet - #
# - Les paraletres supplementaires - #
--)
if [ -z ${2+x} ];
*)
if [ -z "$argument" ]
then
PSP_sup="";
else
PSP_sup="$2";
# Methode avec plusieurs push donné (plus tard)
# - explode - #
#IFSold=$IFS;
#IFS=" ";
##echo "IFS actuel:" `set | grep ^IFS=`
##echo "chaineAvecVirgule=$chaineAvecVirgule";
#for valeur in $pushRecut;
#do
# pushList[$pushIndex]=$valeur;
# ((pushIndex++));
#done
#IFS="$IFSold";
shift 1;
break;
fi
#librairie=${2:-""}
librairie="$argument";
librairiesTbl[librairiesTblIndex]="$librairie"
((librairiesTblIndex++))
shift 1;
;;
shift ; break ;;
*)
echo "option $1 non reconnu"; shift; exit 1 ;; # sans exit: si la derniere option est inconnu -> boucle sans fin
esac
done
......@@ -374,23 +477,43 @@ fi
execFile "$CONF_ETC_PATH";
# - Chargement du conf USER - #
#if [ $isConf -eq 1 ]; then
execFile "$CONF_USER_PATH"
#fi
if [ $isConf -eq 1 ]
then
execFile "$CONF_USER_PATH"
fi
# - Chargement du conf run (PSP) - #
if [ ! -z "$conf_run" ]
then
if [ -x "$conf_run" ]
then
execFile "$conf_run"
fi
fi
showLibs;
# - Traitement du PSP - #
isLibExist "$PSP_sup"
if [ $? -eq 1 ];
then
showDebug "Lancement de $PSP_sup";
evalCmd "$PSP_sup";
fi
#if [ "$PSP_sup" != "" ]; then
# evalCmd "$PSP_sup";
#fi
#echo $LINENO ${librairiesTbl[*]}
# - Execution des librairies appellées - #
for librairie in ${librairiesTbl[*]}
do #echo $LINENO"librairie:"$librairie
isLibExist "$librairie"
if [ $? -eq 1 ];
then
showDebug "Lancement de $librairie";
evalCmd "$librairie";
else
echo $WARN"librairie $librairie: inexistante!"$NORMAL
fi
done #for librairie in ${librairiesTbl[*]}
echo "Résumé: "
notifsShow;
if [ $isTrapCAsk -eq 1 ]
then
exit E_CTRL_C
fi
\ No newline at end of file
......@@ -4,10 +4,19 @@
* correction mauvaise indice tableau dans install_visualCode
* ajout de VSCodium
11.01.2021: v0.0.3
11.01.2021:v0.0.3
* desactivation de isConf qui etait mal utilisé
* chargement systematique de CONF_USER_PATH si existant
* affichage trié lors de --showLibs
* debianNetboot
2021.02.01
* etc: affichage de la version avant/apres dans l'installation de firefox*
2021.04.04
* appelle multiples aux librairies
2021.04.05
* ajout de conf_run, fichier de configuration appellé par --conf
2021.04.10:v0.0.4
* notifs
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment