reworked on error code, create associated doc, module list checks

This commit is contained in:
levasseur
2021-07-12 12:25:26 +02:00
parent 09c94af407
commit 573c2cde5c
10 changed files with 179 additions and 146 deletions

View File

@@ -162,5 +162,24 @@ precheck_@template@()
export -f @template@
export -f precheck_@template@
```
## Error code table
The following table is giving a list of error code with explanation:
| Code | Meaning |
|:----------|:----------------------------------------|
| 0 | No error |
| 1 | Command line syntax error |
| 2 | Unable to find configuration |
| 3 | Missing library file or function |
| 4 | No root rights |
| 5 | Malformed module list |
| 10 | Function call error |
| 11 | Bad function call |
| 12 | Error copying files |
| 13 | Bad target filesystem |
| 50..100 | Error in module execution |
| 128 | Abortion due to external cause |
| 150..200 | Error in module checks |
## Contact and more information

111
init.sh
View File

@@ -45,7 +45,7 @@ function_exists() {
function_exists prnt || (
echo "*** ERREUR FATALE !"
echo "*** Il manque des fonctions vitales venant des bibliothèques."
exit 2
exit 3
)
# ======================
@@ -62,51 +62,51 @@ export RESUME=false
want_module=false
for opt in $@; do
if [[ $want_module == false ]]; then
case $opt in
"-h"|"--help")
disp_help
exit 0
;;
"-v"|"--version")
show_version
exit 0
;;
"-m"|"--module")
want_module=true
;;
"-c"|"--check-only")
export CHECK_ONLY=true
;;
"-j"|"--jump")
export JUMP=true
;;
"-k"|"--keep-going")
export KEEPGOING=true
;;
"-r"|"--resume")
if [[ -s $MYPATH/stage ]]; then
export RESUME=true
else
prnt E "Le fichier d'état n'existe pas ou est vide !"
prnt E "Sans ce fichier, la reprise n'est pas possible."
die 1 --force
fi
;;
*)
prnt E "Paramètre \'$opt\' non géré."
disp_help
exit 1
;;
esac
case $opt in
"-h"|"--help")
disp_help
exit 0
;;
"-v"|"--version")
show_version
exit 0
;;
"-m"|"--module")
want_module=true
;;
"-c"|"--check-only")
export CHECK_ONLY=true
;;
"-j"|"--jump")
export JUMP=true
;;
"-k"|"--keep-going")
export KEEPGOING=true
;;
"-r"|"--resume")
if [[ -s $MYPATH/stage ]]; then
export RESUME=true
else
prnt E "Le fichier d'état n'existe pas ou est vide !"
prnt E "Sans ce fichier, la reprise n'est pas possible."
die 1 --force
fi
;;
*)
prnt E "Paramètre \'$opt\' non géré."
disp_help
exit 1
;;
esac
else
if [[ ! $MANUAL_MODULE_LIST ]]; then
MANUAL_MODULE_LIST=$opt
want_module=false
else
prnt E "Une liste de module à déjà été fournie !"
prnt E "La ligne de commande ne tolère qu'un paramètre --module."
die 1 --force
fi
if [[ ! $MANUAL_MODULE_LIST ]]; then
MANUAL_MODULE_LIST=$opt
want_module=false
else
prnt E "Une liste de module à déjà été fournie !"
prnt E "La ligne de commande ne tolère qu'un paramètre --module."
die 1 --force
fi
fi
done
@@ -114,7 +114,7 @@ done
# (--help and --version are allowed as unprivileged user)
if [[ $EUID -ne 0 ]]; then
prnt E "Ce script doit être démarré en tant que root. Arrêt."
die 1 --force
die 4 --force
fi
# Logfile variable treatment
@@ -163,12 +163,12 @@ if [[ $CHECK_ONLY == true ]]; then
fi
if [[ $RESUME == true ]]; then
[[ $CHECK_ONLY == true ]] && (
prnt E "La reprise n'a pas de sens avec --check-only."
die 1 --force
prnt E "La reprise n'a pas de sens avec --check-only."
die 1 --force
)
[[ $MANUAL_MODULE_LIST ]] && (
prnt E "Le mode reprise ne fonctionne pas avec une liste de modules passé manuellement."
die 1 --force
prnt E "Le mode reprise ne fonctionne pas avec une liste de modules passé manuellement."
die 1 --force
)
fi
@@ -178,6 +178,17 @@ if [[ $MANUAL_MODULE_LIST ]]; then
export MODULE_LIST=$(echo $MANUAL_MODULE_LIST | sed "s/,/ /g")
fi
# Check for module list existance en basic syntax
if [[ -n $MODULE_LIST ]]; then
if [[ $(echo $MODULE_LIST | grep '-') ]]; then
prnt E "Le tiret est interdit dans les noms de module."
die 5
fi
else
prnt E "Aucun module à exécuter !"
die 5
fi
# Run prechecks
[[ JUMP != true ]] && for mod in $MODULE_LIST; do
. modules/$mod.sh

View File

@@ -11,14 +11,14 @@ export -f stdtime
backupdist()
{
[[ $# -lt 1 ]] &&
prnt E "backupdist(): Au moins un argument requis." &&
exit 129
prnt E "backupdist(): Au moins un argument requis." &&
exit 11
for file in $@; do
if [[ -e ${file} ]]; then
local tmpstmp=$(stdtime)
prnt I "Création d'une sauvegarde de ${file} du $tmpstmp..."
cp -av $file $file.dist.$tmpstmp
if [[ -e ${file} ]]; then
local tmpstmp=$(stdtime)
prnt I "Création d'une sauvegarde de ${file} du $tmpstmp..."
cp -av $file $file.dist.$tmpstmp
fi
done
}
@@ -31,32 +31,35 @@ installfile()
local i=0
[[ $# -lt 2 ]] && (
prnt E "installfile(): Au moins deux arguments requis."
exit 129
prnt E "installfile(): Au moins deux arguments requis."
die 11
)
[[ $(echo $@ | grep "\*\|\?") ]] && (
prnt E "installfile(): Les wildcards sont interdits."
exit 10
prnt E "installfile(): Les wildcards sont interdits."
die 10
)
for arg in $@; do
if [[ -f $MYPATH/repo/hosts/$HOSTNAME/$arg ]]; then
filelist="$filelist $MYPATH/repo/hosts/$HOSTNAME/$arg"
elif [[ -f $MYPATH/repo/common/$arg ]]; then
filelist="$filelist $MYPATH/repo/common/$arg"
else
# Not found in repository, we expect full name
filelist="$filelist $arg"
fi
if [[ -f $MYPATH/repo/hosts/$HOSTNAME/$arg ]]; then
filelist="$filelist $MYPATH/repo/hosts/$HOSTNAME/$arg"
elif [[ -f $MYPATH/repo/common/$arg ]]; then
filelist="$filelist $MYPATH/repo/common/$arg"
else
# Not found in repository, we expect full name
filelist="$filelist $arg"
fi
done
for i in $filelist; do :; done
if [[ ! $i==/* ]]; then
prnt E "installfile(): Target must be on the root filesystem."
exit 3
prnt E "installfile(): Target must be on the root filesystem."
die 13
fi
prnt I "Création du répertoire $(dirname $i) si nécessaire..."
mkdir -pv $(dirname $i)
prnt I "Copie des fichiers ${filelist}..."
cp -av $filelist
cp -av $filelist || (
prnt E "installfile(): Couldn't copy some required files..." &&
die 12
)
}
export -f installfile

View File

@@ -4,8 +4,8 @@
exec_serv()
{
[[ $# -lt 2 ]] && (
prnt E "exec_serv(): Erreur de syntaxe !"
exit 130
prnt E "exec_serv(): Erreur de syntaxe !"
exit 11
)
local svcname=$1 command=$2

View File

@@ -9,7 +9,7 @@
# * CALCDRV: Target drives, preferably through ID.
# ------------------------------------------------------------------------------
export VER_conf_disks="0.0.7"
export VER_conf_disks="0.0.8"
# ------------------------------------------------------------------------------
# ZFS case
@@ -25,39 +25,39 @@ conf_zfs()
# Load ZFS module to check it works
modprobe zfs || (
prnt E "Échec de chargement du module noyau, abandon."
die 2
prnt E "Échec de chargement du module noyau, abandon."
die 50
)
sleep 1
# Create filesystem
prnt I "Création du pool zcalc..."
if [[ $FORCEBLANK ]]; then
local opt="--force"
for drv in $CALCDRV; do
if [[ ! $(sfdisk -d $drv 2>&1) == "" ]]; then
prnt I "Effacement des donnée de $drv..."
dd if=/dev/zero of=$drv bs=1024 count 1000000
fi
local opt="--force"
for drv in $CALCDRV; do
if [[ ! $(sfdisk -d $drv 2>&1) == "" ]]; then
prnt I "Effacement des donnée de $drv..."
dd if=/dev/zero of=$drv bs=1024 count 1000000
fi
# Empty cache and inform kernel of the change
sync
partprobe
done
# Empty cache and inform kernel of the change
sync
partprobe
done
fi
if [[ $(zpool create zcalc -m $CALCMOUNTPOINT $CALCLEVEL $opt $CALCDRV) ]]; then
# We activate lz4 compression by default
zpool set zcalc compression=lz4
# We activate lz4 compression by default
zpool set zcalc compression=lz4
# If a VM is projected we create associated volume
if [[ $WITH_VM == true ]]; then
prnt I "Création du conteneur pour la future VM..."
zfs create zcalc/vm
fi
if [[ $WITH_VM == true ]]; then
prnt I "Création du conteneur pour la future VM..."
zfs create zcalc/vm
fi
else
prnt E "Erreur de création du pool zcalc ($CALCLEVEL) avec les disques $CALCDRV"
die 3
prnt E "Erreur de création du pool zcalc ($CALCLEVEL) avec les disques $CALCDRV"
die 51
fi
}
@@ -92,16 +92,16 @@ conf_disks()
[[ -n $STOP_CONF_DISK ]] && return 0
if [[ ! $CALCDRV ]]; then
prnt I "Pas de disque de calcul défini, rien à faire."
return 0
prnt I "Pas de disque de calcul défini, rien à faire."
return 0
fi
prnt I "Installation des outils de partitionnement..."
pkginst parted
conf_$CALCTYPE && (
prnt I "Attribution des droits sur le disque de calcul."
chown -Rv $MAINUSER:$MAINUSER /calcul/$HOSTNAME
prnt I "Attribution des droits sur le disque de calcul."
chown -Rv $MAINUSER:$MAINUSER /calcul/$HOSTNAME
)
}
@@ -109,35 +109,35 @@ conf_disks()
precheck_conf_disks()
{
if [[ ! $(type -t conf_$CALCTYPE) == "function" ]]; then
prnt E "Format de disque inconnu ($CALCTYPE) !"
die 5
prnt E "Format de disque inconnu ($CALCTYPE) !"
die 150
fi
prnt I "Vérification des lecteurs pour disque de calcul."
local drvcount=0
for drv in $CALCDRV; do
if [[ -e $drv ]]; then
if [[ $(/sbin/sfdisk -d $drv 2>&1) == "" ]]; then
prnt I "Le dique $drv est vierge, il sera formaté en $CALCTYPE."
else
prnt W "Le disque $drv n'est pas vierge !"
if [[ $FORCEBLANK==true ]]; then
prnt W "Le disque $drv sera réinitialisé !"
else
prnt E "La réinitialisation de $drv n'est pas autorisé, rien ne sera fait !"
export STOP_CONF_DISK=1
fi
fi
else
prnt E "Le disque $drv n'existe pas. Abandon."
die 5
fi
(( drvcount+=1 ))
if [[ -e $drv ]]; then
if [[ $(/sbin/sfdisk -d $drv 2>&1) == "" ]]; then
prnt I "Le dique $drv est vierge, il sera formaté en $CALCTYPE."
else
prnt W "Le disque $drv n'est pas vierge !"
if [[ $FORCEBLANK==true ]]; then
prnt W "Le disque $drv sera réinitialisé !"
else
prnt E "La réinitialisation de $drv n'est pas autorisé, rien ne sera fait !"
export STOP_CONF_DISK=1
fi
fi
else
prnt E "Le disque $drv n'existe pas. Abandon."
die 150
fi
(( drvcount+=1 ))
done
if [[ ! $CALCTYPE=="zfs" && drvcount -gt 1 ]]; then
prnt E "Plusieurs diques impossibles avec Ext4 ou XFS !"
die 5
prnt E "Plusieurs diques impossibles avec Ext4 ou XFS !"
die 150
fi
}

View File

@@ -20,8 +20,8 @@ conf_locale()
{
backupdist /etc/locale.gen
for loc in $LOCALESET; do
prnt I "Activation de la locale ${loc}..."
sed -i "/^# $loc /s/^# //" /etc/locale.gen
prnt I "Activation de la locale ${loc}..."
sed -i "/^# $loc /s/^# //" /etc/locale.gen
done
prnt I "Régénération du cache de locale..."
locale-gen
@@ -34,21 +34,21 @@ conf_locale()
echo "LANG=$SYSLOCALE" >> $fname
for cfg in ADDRESS IDENTIFICATION MEASUREMENT MONETARY NAME NUMERIC PAPER \
TELEPHONE TIME; do
echo "LC_$cfg=$SYSLOCALE"
echo "LC_$cfg=$SYSLOCALE"
done
}
precheck_conf_locale()
{
if [[ -z $LOCALESET ]]; then
prnt W "Aucune locale définie !"
prnt W "Aucune locale définie !"
else
prnt m "Les locales disponibles seront : $LOCALESET"
prnt m "Les locales disponibles seront : $LOCALESET"
fi
if [[ -z $SYSLOCALE ]]; then
prnt W "Pas de locale systême définie, C sera utilié."
export SYSLOCALE="C"
prnt W "Pas de locale systême définie, C sera utilié."
export SYSLOCALE="C"
fi
prnt m "La locale par défaut sera : $SYSLOCALE"
}

View File

@@ -5,7 +5,7 @@
# * NTPSERVERS: list of NTP servers
# ------------------------------------------------------------------------------
export VER_conf_ntp="0.0.5"
export VER_conf_ntp="0.0.6"
conf_ntp()
{
@@ -25,11 +25,11 @@ conf_ntp()
installfile ntp.conf $dest
local line=""
for srv in $NTPSERVERS; do
line="${line}server $srv iburst\n"
line="${line}server $srv iburst\n"
done
sed -i -e "s/@SERVERLIST@/$line/" $dest &&
echo "# Generated on $(stdtime)" >> $dest &&
mv -fv $dest /etc/ntp.conf
echo "# Generated on $(stdtime)" >> $dest &&
mv -fv $dest /etc/ntp.conf
prnt I "Démarrage du service ntp..."
svc_start ntp
@@ -39,10 +39,10 @@ conf_ntp()
precheck_conf_ntp()
{
if [[ -z $NTPSERVERS ]]; then
prnt E "Pas de serveur NTP configuré !"
die 5
prnt E "Pas de serveur NTP configuré !"
die 151
else
prnt m "Les serveurs ntp utilisés seront : $NTPSERVERS"
prnt m "Les serveurs ntp utilisés seront : $NTPSERVERS"
fi
}

View File

@@ -17,8 +17,8 @@ conf_ssh()
prnt I "Installation des fichiers de configuration de SSH..."
for f in /etc/ssh/ssh{,d}_config; do
backupdist $f
installfile $(basename $f) /etc/ssh/$(basename $f)
backupdist $f
installfile $(basename $f) /etc/ssh/$(basename $f)
done
prnt I "Démarrage du sevice ssh..."

View File

@@ -14,22 +14,22 @@ export VER_install_desktop="0.0.2"
install_desktop()
{
[[ $X11_DRV ]] &&
prnt I "Installation de pilotes supplémentaires X11..." &&
pkginst $X11_DRV
prnt I "Installation de pilotes supplémentaires X11..." &&
pkginst $X11_DRV
[[ $UBUNTU_FLAVOR ]] &&
prnt I "Installation de l'environnement $UBUNTU_FLAVOR..." &&
pkginst ${UBUNTU_FLAVOR}-desktop
prnt I "Installation de l'environnement $UBUNTU_FLAVOR..." &&
pkginst ${UBUNTU_FLAVOR}-desktop
}
precheck_install_desktop()
{
if [[ -z $UBUNTU_FLAVOR ]]; then
prnt W "Pas de saveur Ubuntu choisie, aucun environnement de bureau ne sera installé !"
prnt W "Pas de saveur Ubuntu choisie, aucun environnement de bureau ne sera installé !"
else
prnt m "La saveur $UBUNTU_FLAVOR sera installée..."
prnt m "La saveur $UBUNTU_FLAVOR sera installée..."
fi
if [[ -n $X11_DRV ]]; then
prnt W "Des pilotes non libres seront installé."
prnt W "Des pilotes non libres seront installé."
fi
}

View File

@@ -7,7 +7,7 @@
# * PROXYAPTPORT: Working port for APT proxy
# ------------------------------------------------------------------------------
export VER_upgrade_dist="0.0.6"
export VER_upgrade_dist="0.0.7"
upgrade_dist()
{
@@ -18,7 +18,7 @@ upgrade_dist()
if [[ ! -d $(basedir $proxyfile) ]]; then
mkdir -pv /etc/apt/apt.conf.d || (
prnt E "Impossiblle de créer le répertoire d'accueil pour la configuration d'APT."
exit 10
die 60
)
fi
backupdist $proxyfile
@@ -42,11 +42,11 @@ precheck_upgrade_dist()
wget -q --tries=10 --timeout=20 --spider http://www.cnrs.fr
if [[ ! $? -eq 0 ]]; then
prnt E "Réseau non fonctionnel ! Abandon."
die 5
die 160
fi
if [[ -n $PROXYAPT && -z $PROXYAPTPORT ]]; then
prnt E "Un serveur proxy a été spécifié mais pas son port d'usage."
die 5
die 160
fi
}