conf_disk: bug fixes, splitted init function to library, language concistancy fixes

This commit is contained in:
fatalerrors
2021-07-02 18:11:26 +02:00
parent 6421af70c4
commit 7f7fa76391
9 changed files with 117 additions and 103 deletions

View File

@@ -2,9 +2,9 @@
export MAINDOM="legos.obs-mip.fr" export MAINDOM="legos.obs-mip.fr"
# Proxy LEGOS # Proxy LEGOS
export PROXYAPT="acng.legos.obs-mip.fr" export PROXYAPT="acng.$MAINDOM"
export PROXYAPTPORT="3142" export PROXYAPTPORT="3142"
export PROXYSRV="proxy.legos.obs-mip.fr" export PROXYSRV="proxy.$MAINDOM"
export PROXYSRVPORT="3128" export PROXYSRVPORT="3128"
# Langues supportés et langue du systême # Langues supportés et langue du systême
@@ -13,6 +13,7 @@ export SYSLOCALE="fr_FR.UTF-8"
# Configuration du disque de calcul : zfs, ext4 et xfs accepté # Configuration du disque de calcul : zfs, ext4 et xfs accepté
export CALCTYPE="zfs" export CALCTYPE="zfs"
export CALCMOUNTPOINT="/calcul/$HOSTNAME"
# Liste des serveurs NTP # Liste des serveurs NTP
export NTPSERVERS="ntp1 ntp2" export NTPSERVERS="ntp1.$MAINDOM ntp2.$MAINDOM"

92
init.sh
View File

@@ -1,5 +1,5 @@
#!/bin/bash #!/bin/bash
# Init : initialise une machine et la met en conformité # Init: initialise a computer and conform it
# Copyright (c) 2021 Geoffray Levasseur <geoffray.levasseur@obs-mip.fr> # Copyright (c) 2021 Geoffray Levasseur <geoffray.levasseur@obs-mip.fr>
# trace ERR through pipes # trace ERR through pipes
@@ -14,15 +14,20 @@ set -o errexit
# set +u : allow undeclared variables # set +u : allow undeclared variables
set +o nounset set +o nounset
export VERSION="0.95.1" # We want english messages
export LC_ALL=C
export LANG=C
# Stocke le chemin du script # Version of init
export VERSION="0.95.2"
# Store script's path
export MYPATH=$(dirname $0) export MYPATH=$(dirname $0)
# récupère le nom d'hote # Get hostname
export HOSTNAME=$(hostname) export HOSTNAME=$(hostname)
# Charge les bibliothèques # Load libraries
for lib in $MYPATH/lib/*.sh; do for lib in $MYPATH/lib/*.sh; do
. $lib . $lib
done done
@@ -43,72 +48,6 @@ function_exists prnt || (
exit 2 exit 2
) )
# ================================
# ==== Main program functions ====
# ================================
# Affiche l'aide
disp_help()
{
cat << EOF
Utilisation : init.sh [OPTIONS] [-m|--module <module1,...,moduleN>]
Initialise une machine pour l'intégrer à un réseau.
Options :
-m, --module <liste> Lance les modules indiqués même s'il ne sont pas
dans les fichiers de configuration.
-c, --check-only Lance les procédure de vérification préexecution
sans rien modifier.
-j, --jump Saute les procédures de vérification.
-k, --keep-going L'execution continura en cas d'erreur.
-r, --resume Reprend l'execution la ou elle c'est arrêté.
-h, --help Affiche ce texte d'aide.
-v, --version Show version of that script and version of all
available modules.
Attention : les options courtes ne sont pas concaténable.
Variable d'environnement :
LOGFILE Stocke le nom complet du fichier de log qui sera
utilisé.
Fichiers de configuration :
Le fichier de configuration principal fournira les détails nécessaire
au déploiement de la nouvelle machine. Il doit se situer dans le
répertoire conf/ à coté du script init.sh. Si un fichier appelé
"hostname.sh" (ou hostname est le nom d'hote) existe il sera le fichier
de configuration principal. Dans le cas contraire, le nom générique
"init.conf.sh" sera recherché. En l'absence de fichier de configuration
ce script ne pourra pas fonctionner.
Veuiller consulter les fichiers de configuration fournis en exemple
pour avoir un aperçu des paramêtres disponibles.
EOF
}
# Show version infos
show_version()
{
echo -e "${BWhite}init.sh${DEFAULTCOL} version ${BGreen}$VERSION${DEFAULTCOL}"
echo ""
echo "Available modules:"
for mod in $MYPATH/modules/*.sh; do
. $mod
local modname=$(get_mod_name $mod)
local version=VER_$modname
echo -e "\t$BWhite$modname${DEFAULTCOL}: $BGreen${!version}$DEFAULTCOL"
done
[[ $EUID -ne 0 ]] &&
echo -e "\n${BYellow}Attention :$DEFAULTCOL Ce script requiert les droits d'administration pour fonctionner."
}
# Get module name from module file
get_mod_name()
{
echo $(basename $1 | cut -f 1 -d '.')
}
# ====================== # ======================
# ==== Main Program ==== # ==== Main Program ====
# ====================== # ======================
@@ -171,27 +110,27 @@ for opt in $@; do
fi fi
done done
# À ce stade on vérifie qu'on soit root # After this we need to be root
# (--help et --version sont autorisés en user normal) # (--help and --version are allowed as unprivileged user)
if [[ $EUID -ne 0 ]]; then if [[ $EUID -ne 0 ]]; then
prnt E "Ce script doit être démarré en tant que root. Arrêt." prnt E "Ce script doit être démarré en tant que root. Arrêt."
die 1 --force die 1 --force
fi fi
# Variables globales importantes # Logfile variable treatment
export LOGFILE=${LOGFILE:-"$MYPATH/log/init-$(uname -n)-$(stdtime).log"} export LOGFILE=${LOGFILE:-"$MYPATH/log/init-$(uname -n)-$(stdtime).log"}
prnt I "Création du répertoire d'accueil du fichier log..." prnt I "Création du répertoire d'accueil du fichier log..."
[[ ! -d $(dirname $LOGFILE) ]] && mkdir -pv $(dirname $LOGFILE) [[ ! -d $(dirname $LOGFILE) ]] && mkdir -pv $(dirname $LOGFILE)
# Log toutes les sortie dans le fichier de log # Log all outputs to the logfile
exec 3>&1 4>&2 exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3 trap 'exec 2>&4 1>&3' 0 1 2 3
exec > >(tee -a $LOGFILE) exec > >(tee -a $LOGFILE)
exec 2> >(tee -a $LOGFILE >&2) exec 2> >(tee -a $LOGFILE >&2)
prnt I "Démarrage d'init version $VERSION." prnt I "Démarrage d'init version $VERSION."
# Récupère la configuration # Load configuration
prnt I "Chargement de la configuration..." prnt I "Chargement de la configuration..."
if [[ -e $MYPATH/conf/$HOSTNAME.conf ]]; then if [[ -e $MYPATH/conf/$HOSTNAME.conf ]]; then
prnt I "Une configuration spécifique sera utilisé." prnt I "Une configuration spécifique sera utilisé."
@@ -255,4 +194,3 @@ fi
prnt I "That's all folks !" prnt I "That's all folks !"
#echo "Après vérification des logs, vous devriez redémarrer la machine..."

62
lib/support.sh Normal file
View File

@@ -0,0 +1,62 @@
# Display help
disp_help()
{
cat << EOF
Utilisation : init.sh [OPTIONS] [-m|--module <module1,...,moduleN>]
Initialise une machine pour l'intégrer à un réseau.
Options :
-m, --module <liste> Lance les modules indiqués même s'il ne sont pas
dans les fichiers de configuration.
-c, --check-only Lance les procédure de vérification préexecution
sans rien modifier.
-j, --jump Saute les procédures de vérification.
-k, --keep-going L'execution continura en cas d'erreur.
-r, --resume Reprend l'execution la ou elle c'est arrêté.
-h, --help Affiche ce texte d'aide.
-v, --version Show version of that script and version of all
available modules.
Attention : les options courtes ne sont pas concaténable.
Variable d'environnement :
LOGFILE Stocke le nom complet du fichier de log qui sera
utilisé.
Fichiers de configuration :
Le fichier de configuration principal fournira les détails nécessaire
au déploiement de la nouvelle machine. Il doit se situer dans le
répertoire conf/ à coté du script init.sh. Si un fichier appelé
"hostname.sh" (ou hostname est le nom d'hote) existe il sera le fichier
de configuration principal. Dans le cas contraire, le nom générique
"init.conf.sh" sera recherché. En l'absence de fichier de configuration
ce script ne pourra pas fonctionner.
Veuiller consulter les fichiers de configuration fournis en exemple
pour avoir un aperçu des paramêtres disponibles.
EOF
}
# Show version infos
show_version()
{
echo -e "${BWhite}init.sh${DEFAULTCOL} version ${BGreen}$VERSION${DEFAULTCOL}"
echo ""
echo "Modules disponibles :"
for mod in $MYPATH/modules/*.sh; do
. $mod
local modname=$(get_mod_name $mod)
local version=VER_$modname
echo -e "\t$BWhite$modname${DEFAULTCOL}: $BGreen${!version}$DEFAULTCOL"
done
[[ $EUID -ne 0 ]] &&
echo -e "\n${BYellow}Attention :$DEFAULTCOL Ce script requiert les droits d'administration pour fonctionner."
}
# Get module name from module file
get_mod_name()
{
echo $(basename $1 | cut -f 1 -d '.')
}

View File

@@ -1,26 +1,27 @@
# Configuration du disque de calcul # Secondary drive configuration
export VER_conf_disks="0.0.6" export VER_conf_disks="0.0.7"
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# Cas de ZFS # ZFS case
conf_zfs() conf_zfs()
{ {
prnt I "Création du volume calcul en ZFS." prnt I "Création du volume calcul en ZFS."
# On crée les répertoires d'accueil # Create destination directory
mkdir -pv /calcul/$HOSTNAME mkdir -pv $CALCMOUNTPOINT
# Installation de ZFS # Install ZFS
pkginst zfsutils-linux pkginst zfsutils-linux
# Chargement du module et vérification # Load ZFS module to check it works
modprobe zfs || ( modprobe zfs || (
prnt E "Échec de chargement du module noyau, abandon." prnt E "Échec de chargement du module noyau, abandon."
die 2 die 2
) )
sleep 1 sleep 1
# Create filesystem
prnt I "Création du pool zcalc..." prnt I "Création du pool zcalc..."
if [[ $FORCEBLANK ]]; then if [[ $FORCEBLANK ]]; then
local opt="--force" local opt="--force"
@@ -29,13 +30,18 @@ conf_zfs()
prnt I "Effacement des donnée de $drv..." prnt I "Effacement des donnée de $drv..."
dd if=/dev/zero of=$drv bs=1024 count 1000000 dd if=/dev/zero of=$drv bs=1024 count 1000000
fi fi
# Empty cache and inform kernel of the change
sync
partprobe
done done
fi fi
if [[ $(zpool create zcalc -m /calcul/$HOSTNAME $CALCLEVEL $opt $CALCDRV) ]]; then if [[ $(zpool create zcalc -m $CALCMOUNTPOINT $CALCLEVEL $opt $CALCDRV) ]]; then
# On active la compression par défaut # We activate lz4 compression by default
zpool set zcalc compression=lz4 zpool set zcalc compression=lz4
# If a VM is projected we create associated volume
if [[ $WITH_VM == true ]]; then if [[ $WITH_VM == true ]]; then
prnt I "Création du conteneur pour la future VM..." prnt I "Création du conteneur pour la future VM..."
zfs create zcalc/vm zfs create zcalc/vm
@@ -47,7 +53,7 @@ conf_zfs()
} }
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# Création des partitions pour XFS et Ext4 # Creation partitions for XFS or Ext4
mkpart() mkpart()
{ {
prnt I "Création d'une nouvelle table de partition GPT..." prnt I "Création d'une nouvelle table de partition GPT..."
@@ -58,7 +64,7 @@ mkpart()
conf_ext4() conf_ext4()
{ {
mkpart mkpart
# A finir # Todo
} }
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
@@ -67,20 +73,20 @@ conf_xfs()
prnt I "Installation des outils XFS..." prnt I "Installation des outils XFS..."
pkginst xfsprogs pkginst xfsprogs
mkpart mkpart
# A finir # todo
} }
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
conf_disks() conf_disks()
{ {
[[ $STOP_CONF_DISK ]] && return 0 [[ -n $STOP_CONF_DISK ]] && return 0
if [[ ! $CALCDRV ]]; then if [[ ! $CALCDRV ]]; then
prnt I "Pas de disque de calcul défini, rien à faire." prnt I "Pas de disque de calcul défini, rien à faire."
return 0 return 0
fi fi
prnt I "Installation des outils de partitionnement..." prnt I "Installation des outils de partitionnement..."
pkginst parted pkginst parted

View File

@@ -1,7 +1,6 @@
# Locale # Locale
export VER_conf_locale="0.0.3 export VER_conf_locale="0.0.3"
"
conf_locale() conf_locale()
{ {

View File

@@ -22,7 +22,7 @@ conf_ssh()
precheck_conf_ssh() precheck_conf_ssh()
{ {
: # Rien à vérifier : # Nothing to check
} }
export -f conf_ssh export -f conf_ssh

View File

@@ -12,7 +12,7 @@ conf_syslog()
precheck_conf_syslog() precheck_conf_syslog()
{ {
: # Rien à vérifier : # Nothing to check
} }
export -f conf_syslog export -f conf_syslog

View File

@@ -1,22 +1,32 @@
# Installation des paquets # Installation des paquets
export VER_install_pkg="0.1.0" export VER_install_pkg="0.1.1"
install_pkg() install_pkg()
{ {
# Remove unnecessary packages
[[ -n $PKGS_RMLIST ]] && [[ -n $PKGS_RMLIST ]] &&
prnt I "Suppression de paquets supperflus..." && prnt I "Suppression de paquets supperflus..." &&
pkgrem $PKGS_RMLIST pkgrem $PKGS_RMLIST
# Blacklist some anoying packages (and remove them if needed)
if [[ -n PKGS_BLACKLIST ]]; then if [[ -n PKGS_BLACKLIST ]]; then
for pkg in $PKGS_BLACKLIST; do for pkg in $PKGS_BLACKLIST; do
prnt I "Mise du paquet $pkg en liste noire..." prnt I "Mise du paquet $pkg en liste noire..."
local dest=/usr/apt/preferences.d/blacklist_$pkg.conf local dest=/usr/apt/preferences.d/blacklist_$pkg.conf
installfile blacklist.conf $dest && installfile blacklist.conf $dest &&
sed -i -e "s/@pkg@/pkg/" $dest sed -i -e "s/@pkg@/pkg/" $dest
# If blacklisted we suppose uninstall as well (if neeeded)
pkgrem $pkg
done done
fi fi
# Cleaning
prnt I "Suppression des paquets résiduels le cas échéant..."
pkgautorem
# Install all the configured packages
[[ -n $PKGSEL ]] && [[ -n $PKGSEL ]] &&
prnt I "Installation de la sélection de paquets..." && prnt I "Installation de la sélection de paquets..." &&
pkginst $PKGSEL pkginst $PKGSEL

View File

@@ -1,6 +1,6 @@
# Module mise à jour de la distribution # Distribution upgrade module, should be ran prior any other module
export VER_upgrade_dist="0.0.4" export VER_upgrade_dist="0.0.5"
upgrade_dist() upgrade_dist()
{ {
@@ -25,8 +25,6 @@ upgrade_dist()
pkgupdt pkgupdt
prnt I "Application des mises à jour de paquets..." prnt I "Application des mises à jour de paquets..."
pkgupdg pkgupdg
prnt I "Suppression de paquets indésirables..."
pkgrem $RMLIST
prnt I "Suppression des paquets résiduels..." prnt I "Suppression des paquets résiduels..."
pkgautorem pkgautorem
} }