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"
|
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
92
init.sh
@@ -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
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()
|
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,14 +73,14 @@ 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."
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
# Locale
|
# Locale
|
||||||
|
|
||||||
export VER_conf_locale="0.0.3
|
export VER_conf_locale="0.0.3"
|
||||||
"
|
|
||||||
|
|
||||||
conf_locale()
|
conf_locale()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user