conf_disk: bug fixes, splitted init function to library, language concistancy fixes
This commit is contained in:
@@ -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"
|
||||
|
||||
92
init.sh
92
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 <geoffray.levasseur@obs-mip.fr>
|
||||
|
||||
# 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 <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 ====
|
||||
# ======================
|
||||
@@ -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..."
|
||||
|
||||
62
lib/support.sh
Normal file
62
lib/support.sh
Normal 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 '.')
|
||||
}
|
||||
@@ -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,14 +73,14 @@ 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."
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
# Locale
|
||||
|
||||
export VER_conf_locale="0.0.3
|
||||
"
|
||||
export VER_conf_locale="0.0.3"
|
||||
|
||||
conf_locale()
|
||||
{
|
||||
|
||||
@@ -22,7 +22,7 @@ conf_ssh()
|
||||
|
||||
precheck_conf_ssh()
|
||||
{
|
||||
: # Rien à vérifier
|
||||
: # Nothing to check
|
||||
}
|
||||
|
||||
export -f conf_ssh
|
||||
|
||||
@@ -12,7 +12,7 @@ conf_syslog()
|
||||
|
||||
precheck_conf_syslog()
|
||||
{
|
||||
: # Rien à vérifier
|
||||
: # Nothing to check
|
||||
}
|
||||
|
||||
export -f conf_syslog
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user