From 7f7fa7639178391d17901187386b7b0335d8be91 Mon Sep 17 00:00:00 2001 From: fatalerrors Date: Fri, 2 Jul 2021 18:11:26 +0200 Subject: [PATCH] conf_disk: bug fixes, splitted init function to library, language concistancy fixes --- conf/includes/legos.conf.sh | 7 +-- init.sh | 92 ++++++------------------------------- lib/support.sh | 62 +++++++++++++++++++++++++ modules/conf_disks.sh | 34 ++++++++------ modules/conf_locale.sh | 3 +- modules/conf_ssh.sh | 2 +- modules/conf_syslog.sh | 2 +- modules/install_pkg.sh | 12 ++++- modules/upgrade_dist.sh | 6 +-- 9 files changed, 117 insertions(+), 103 deletions(-) create mode 100644 lib/support.sh diff --git a/conf/includes/legos.conf.sh b/conf/includes/legos.conf.sh index 0ae830e..a930c0c 100644 --- a/conf/includes/legos.conf.sh +++ b/conf/includes/legos.conf.sh @@ -2,9 +2,9 @@ export MAINDOM="legos.obs-mip.fr" # Proxy LEGOS -export PROXYAPT="acng.legos.obs-mip.fr" +export PROXYAPT="acng.$MAINDOM" export PROXYAPTPORT="3142" -export PROXYSRV="proxy.legos.obs-mip.fr" +export PROXYSRV="proxy.$MAINDOM" export PROXYSRVPORT="3128" # 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é export CALCTYPE="zfs" +export CALCMOUNTPOINT="/calcul/$HOSTNAME" # Liste des serveurs NTP -export NTPSERVERS="ntp1 ntp2" +export NTPSERVERS="ntp1.$MAINDOM ntp2.$MAINDOM" diff --git a/init.sh b/init.sh index 5b5ea5a..575e5a7 100755 --- a/init.sh +++ b/init.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Init : initialise une machine et la met en conformité +# Init: initialise a computer and conform it # Copyright (c) 2021 Geoffray Levasseur # trace ERR through pipes @@ -14,15 +14,20 @@ set -o errexit # set +u : allow undeclared variables 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) -# récupère le nom d'hote +# Get hostname export HOSTNAME=$(hostname) -# Charge les bibliothèques +# Load libraries for lib in $MYPATH/lib/*.sh; do . $lib done @@ -43,72 +48,6 @@ function_exists prnt || ( exit 2 ) -# ================================ -# ==== Main program functions ==== -# ================================ - -# Affiche l'aide -disp_help() -{ - cat << EOF -Utilisation : init.sh [OPTIONS] [-m|--module ] -Initialise une machine pour l'intégrer à un réseau. - -Options : - -m, --module 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 ==== # ====================== @@ -171,27 +110,27 @@ for opt in $@; do fi done -# À ce stade on vérifie qu'on soit root -# (--help et --version sont autorisés en user normal) +# After this we need to be root +# (--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 fi -# Variables globales importantes +# Logfile variable treatment export LOGFILE=${LOGFILE:-"$MYPATH/log/init-$(uname -n)-$(stdtime).log"} prnt I "Création du répertoire d'accueil du fichier log..." [[ ! -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 trap 'exec 2>&4 1>&3' 0 1 2 3 exec > >(tee -a $LOGFILE) exec 2> >(tee -a $LOGFILE >&2) prnt I "Démarrage d'init version $VERSION." -# Récupère la configuration +# Load configuration prnt I "Chargement de la configuration..." if [[ -e $MYPATH/conf/$HOSTNAME.conf ]]; then prnt I "Une configuration spécifique sera utilisé." @@ -255,4 +194,3 @@ fi prnt I "That's all folks !" -#echo "Après vérification des logs, vous devriez redémarrer la machine..." diff --git a/lib/support.sh b/lib/support.sh new file mode 100644 index 0000000..d9836bf --- /dev/null +++ b/lib/support.sh @@ -0,0 +1,62 @@ + +# Display help +disp_help() +{ + cat << EOF +Utilisation : init.sh [OPTIONS] [-m|--module ] +Initialise une machine pour l'intégrer à un réseau. + +Options : + -m, --module 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 '.') +} diff --git a/modules/conf_disks.sh b/modules/conf_disks.sh index 78727c8..4acbbbc 100644 --- a/modules/conf_disks.sh +++ b/modules/conf_disks.sh @@ -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() { prnt I "Création du volume calcul en ZFS." - # On crée les répertoires d'accueil - mkdir -pv /calcul/$HOSTNAME + # Create destination directory + mkdir -pv $CALCMOUNTPOINT - # Installation de ZFS + # Install ZFS pkginst zfsutils-linux - # Chargement du module et vérification + # Load ZFS module to check it works modprobe zfs || ( prnt E "Échec de chargement du module noyau, abandon." die 2 ) sleep 1 + # Create filesystem prnt I "Création du pool zcalc..." if [[ $FORCEBLANK ]]; then local opt="--force" @@ -29,13 +30,18 @@ conf_zfs() 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 fi - if [[ $(zpool create zcalc -m /calcul/$HOSTNAME $CALCLEVEL $opt $CALCDRV) ]]; then - # On active la compression par défaut + if [[ $(zpool create zcalc -m $CALCMOUNTPOINT $CALCLEVEL $opt $CALCDRV) ]]; then + # 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 @@ -47,7 +53,7 @@ conf_zfs() } # ------------------------------------------------------------------------------ -# Création des partitions pour XFS et Ext4 +# Creation partitions for XFS or Ext4 mkpart() { prnt I "Création d'une nouvelle table de partition GPT..." @@ -58,7 +64,7 @@ mkpart() conf_ext4() { mkpart - # A finir + # Todo } # ------------------------------------------------------------------------------ @@ -67,20 +73,20 @@ conf_xfs() prnt I "Installation des outils XFS..." pkginst xfsprogs mkpart - # A finir + # todo } # ------------------------------------------------------------------------------ conf_disks() { - [[ $STOP_CONF_DISK ]] && return 0 + [[ -n $STOP_CONF_DISK ]] && return 0 if [[ ! $CALCDRV ]]; then prnt I "Pas de disque de calcul défini, rien à faire." return 0 fi - + prnt I "Installation des outils de partitionnement..." pkginst parted diff --git a/modules/conf_locale.sh b/modules/conf_locale.sh index 5fbfb3e..eb15536 100644 --- a/modules/conf_locale.sh +++ b/modules/conf_locale.sh @@ -1,7 +1,6 @@ # Locale -export VER_conf_locale="0.0.3 -" +export VER_conf_locale="0.0.3" conf_locale() { diff --git a/modules/conf_ssh.sh b/modules/conf_ssh.sh index 88aae5d..c616af0 100644 --- a/modules/conf_ssh.sh +++ b/modules/conf_ssh.sh @@ -22,7 +22,7 @@ conf_ssh() precheck_conf_ssh() { - : # Rien à vérifier + : # Nothing to check } export -f conf_ssh diff --git a/modules/conf_syslog.sh b/modules/conf_syslog.sh index ae8c792..2fd4d4c 100644 --- a/modules/conf_syslog.sh +++ b/modules/conf_syslog.sh @@ -12,7 +12,7 @@ conf_syslog() precheck_conf_syslog() { - : # Rien à vérifier + : # Nothing to check } export -f conf_syslog diff --git a/modules/install_pkg.sh b/modules/install_pkg.sh index a02a352..6c1c20b 100644 --- a/modules/install_pkg.sh +++ b/modules/install_pkg.sh @@ -1,22 +1,32 @@ # Installation des paquets -export VER_install_pkg="0.1.0" +export VER_install_pkg="0.1.1" install_pkg() { + # Remove unnecessary packages [[ -n $PKGS_RMLIST ]] && prnt I "Suppression de paquets supperflus..." && pkgrem $PKGS_RMLIST + # Blacklist some anoying packages (and remove them if needed) if [[ -n PKGS_BLACKLIST ]]; then for pkg in $PKGS_BLACKLIST; do prnt I "Mise du paquet $pkg en liste noire..." local dest=/usr/apt/preferences.d/blacklist_$pkg.conf installfile blacklist.conf $dest && sed -i -e "s/@pkg@/pkg/" $dest + + # If blacklisted we suppose uninstall as well (if neeeded) + pkgrem $pkg done fi + # Cleaning + prnt I "Suppression des paquets résiduels le cas échéant..." + pkgautorem + + # Install all the configured packages [[ -n $PKGSEL ]] && prnt I "Installation de la sélection de paquets..." && pkginst $PKGSEL diff --git a/modules/upgrade_dist.sh b/modules/upgrade_dist.sh index 14c26cb..f5afe48 100644 --- a/modules/upgrade_dist.sh +++ b/modules/upgrade_dist.sh @@ -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() { @@ -25,8 +25,6 @@ upgrade_dist() pkgupdt prnt I "Application des mises à jour de paquets..." pkgupdg - prnt I "Suppression de paquets indésirables..." - pkgrem $RMLIST prnt I "Suppression des paquets résiduels..." pkgautorem }