Écriture des fonctions de préparation des disques, partie 1
This commit is contained in:
29
init.conf.sh
29
init.conf.sh
@@ -1,6 +1,9 @@
|
|||||||
# Domaine LEGOS
|
# Domaine LEGOS
|
||||||
export MAINDOM="legos.obs-mip.fr"
|
export MAINDOM="legos.obs-mip.fr"
|
||||||
|
|
||||||
|
# Utilisateur de la machine
|
||||||
|
export MAINUSER="levasseu"
|
||||||
|
|
||||||
# Proxy LEGOS
|
# Proxy LEGOS
|
||||||
export PROXYSRV="proxy.legos.obs-mip.fr"
|
export PROXYSRV="proxy.legos.obs-mip.fr"
|
||||||
export PROXYPORT="3128"
|
export PROXYPORT="3128"
|
||||||
@@ -13,22 +16,32 @@ export APTBLACKLIST="apparmor chafa resolvconf"
|
|||||||
export LOCALESET="en_US.UTF-8 fr_FR.UTF-8"
|
export LOCALESET="en_US.UTF-8 fr_FR.UTF-8"
|
||||||
|
|
||||||
# Liste des paquets de base, utiles dans tous les cas
|
# Liste des paquets de base, utiles dans tous les cas
|
||||||
export INSTLIST_BASE="bc curl dc debconf-utils deborphan dos2unix dump emacs-nox ethtool figlet gawk gpm htop ntp ifstat iftop iotop \
|
export INSTLIST_BASE="bc curl dc debconf-utils deborphan dos2unix dump \
|
||||||
libpam-krb5 libnss-ldap libpam-ldap ltrace mailutils mc mtr-tiny multitail neofetch nmap nscd openssh-server oping p7zip-full \
|
emacs-nox ethtool figlet gawk gpm htop ntp ifstat iftop iotop \
|
||||||
p7zip-rar pbzip2 perl-doc pigz plzip postfix pv qemu-guest-agent resolvconf rsync screen snmpd strace tcpdump tmux traceroute \
|
libpam-krb5 libnss-ldap libpam-ldap ltrace mailutils mc mtr-tiny \
|
||||||
unrar unzip whois xinetd zip"
|
multitail neofetch nmap nscd openssh-server oping p7zip-full p7zip-rar \
|
||||||
|
pbzip2 perl-doc pigz plzip postfix pv qemu-guest-agent resolvconf rsync \
|
||||||
|
screen snmpd strace tcpdump tmux traceroute unrar unzip whois xinetd zip"
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------------------------------------------------------------------
|
# Booléen indiquant une ou plusieurs futures VM
|
||||||
|
export WITH_VM=true
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
# 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"
|
||||||
|
|
||||||
|
|
||||||
# Niveau : mirror (RAID1), raidz1 (RAID5), raidz2 (RAID6), laisser vide pour RAID0, valable seulement pour ZFS
|
# Niveau : mirror (RAID1), raidz1 (RAID5), raidz2 (RAID6)
|
||||||
|
# Laisser vide pour RAID0 valable seulement pour ZFS
|
||||||
export CALCLEVEL=""
|
export CALCLEVEL=""
|
||||||
|
|
||||||
# Liste de lecteurs à utiliser (voir dans /dev/disk/by-id), un seul tolléré pour ext4 et xfs
|
# Liste de lecteurs à utiliser (voir dans /dev/disk/by-id)
|
||||||
|
# Un seul tolléré pour Ext4 et XFS, plusieurs séparés par des espaces pour ZFS
|
||||||
export CALCDRV="/dev/disk/by-id/xxxxx"
|
export CALCDRV="/dev/disk/by-id/xxxxx"
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------------------------------------------------------------------
|
# Doit on forcer l'effacement du disque ?
|
||||||
|
export FORCEBLANK="no"
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
export MODULE_LIST="upgrade_dist conf_disk"
|
export MODULE_LIST="upgrade_dist conf_disk"
|
||||||
|
|||||||
10
init.sh
10
init.sh
@@ -106,6 +106,7 @@ backupdist()
|
|||||||
|
|
||||||
for file in $@; do
|
for file in $@; do
|
||||||
if [[ -e ${file} ]]; then
|
if [[ -e ${file} ]]; then
|
||||||
|
prnt I "Création d'une copie de sauvegarde de ${file}..."
|
||||||
cp -av $file $file.dist.$(date --rfc-3339=seconds | sed -e 's/ /-/' -e 's/://g')
|
cp -av $file $file.dist.$(date --rfc-3339=seconds | sed -e 's/ /-/' -e 's/://g')
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@@ -194,7 +195,6 @@ apt_blacklist()
|
|||||||
#}
|
#}
|
||||||
|
|
||||||
# Locale
|
# Locale
|
||||||
FUNCLIST="$FUNCLIST conf_locale"
|
|
||||||
conf_locale()
|
conf_locale()
|
||||||
{
|
{
|
||||||
backupdist /etc/locale.gen
|
backupdist /etc/locale.gen
|
||||||
@@ -279,11 +279,15 @@ conf_mail()
|
|||||||
# ======================
|
# ======================
|
||||||
|
|
||||||
# Vérifie qu'on soit root
|
# Vérifie qu'on soit root
|
||||||
if [[ $
|
if [[ $EUID -ne 0 ]];
|
||||||
|
prnt E "Ce script doit être démarré en root. Arrêt."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# Chargement de la configuration
|
# Chargement de la configuration
|
||||||
[[ -s init.sh.conf ]] && . init.sh.conf || (
|
[[ -s init.sh.conf ]] && . init.sh.conf || (
|
||||||
|
prnt E "Impossible de charger la configuration."
|
||||||
|
exit 1
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,128 @@
|
|||||||
|
#!/bin/bash
|
||||||
# Configuration du disque de calcul
|
# Configuration du disque de calcul
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Cas de ZFS
|
||||||
conf_zfs()
|
conf_zfs()
|
||||||
{
|
{
|
||||||
|
prnt I "Création du volume calcul en ZFS."
|
||||||
|
|
||||||
# On crée les répertoires d'accueil
|
# On crée les répertoires d'accueil
|
||||||
mkdir -pv /calcul/$HOSTNAME
|
mkdir -pv /calcul/$HOSTNAME
|
||||||
|
|
||||||
# Installation de ZFS
|
# Installation de ZFS
|
||||||
|
apt -y install zfsutils-linux
|
||||||
|
|
||||||
|
# Chargement du module et vérification
|
||||||
|
modprobe zfs || (
|
||||||
|
prnt E "Échec de chargement du module noyau, abandon."
|
||||||
|
return 2
|
||||||
|
)
|
||||||
|
sleep 1
|
||||||
|
|
||||||
# Mount Ceph volumes if required
|
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
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ zpool create zcalc -m /calcul/$HOSTNAME $CALCLEVEL $opt $CALCDRV ]]; then
|
||||||
|
# On active la compression par défaut
|
||||||
|
zpool set zcalc compression=lz4
|
||||||
|
|
||||||
|
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"
|
||||||
|
return 3
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Création des partitions pour XFS et Ext4
|
||||||
|
mkpart()
|
||||||
|
{
|
||||||
|
prnt I "Création d'une nouvelle table de partition GPT..."
|
||||||
|
#fdisk -g
|
||||||
|
}
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
conf_ext4()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
conf_xfs()
|
||||||
|
{
|
||||||
|
prnt I "Installation des outils XFS..."
|
||||||
|
apt install -y xfsprogs
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
conf_disk()
|
conf_disk()
|
||||||
{
|
{
|
||||||
case $CALCTYPE
|
[[ $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..."
|
||||||
|
apt install -y parted
|
||||||
|
|
||||||
|
conf_$CALCTYPE && (
|
||||||
|
prnt I "Attribution des droits sur le disque de calcul."
|
||||||
|
chown -Rv $MAINUSER:$MAINUSER /calcul/$HOSTNAME
|
||||||
|
)
|
||||||
|
else
|
||||||
|
}
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
precheck_conf_disk()
|
||||||
|
{
|
||||||
|
if [[ ! $(type -t conf_$CALCTYPE) == "function" ]]; then
|
||||||
|
prnt E "Format de disque inconnu ($CALCTYPE) !"
|
||||||
|
exit 1
|
||||||
|
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."
|
||||||
|
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."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
(( drvcount+=1 ))
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ ! $CALCTYPE=="zfs" && drvcount -gt 1 ]]; then
|
||||||
|
prnt E "Plusieurs diques impossibles avec Ext4 ou XFS !"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export -f conf_disk
|
export -f conf_disk
|
||||||
|
export -f precheck_conf_disk
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ upgrade_dist()
|
|||||||
|
|
||||||
prnt I "Configuration du proxy pour APT..."
|
prnt I "Configuration du proxy pour APT..."
|
||||||
if [[ $PROXYSRV ]]; then
|
if [[ $PROXYSRV ]]; then
|
||||||
if [[ $PROXYPORT ]]; then
|
|
||||||
if [[ ! -d $(basedir $proxyfile) ]]; then
|
if [[ ! -d $(basedir $proxyfile) ]]; then
|
||||||
mkdir -pv /etc/apt/apt.conf.d || (
|
mkdir -pv /etc/apt/apt.conf.d || (
|
||||||
prnt E "Impossiblle de créer le répertoire d'accueil pour la configuration d'APT."
|
prnt E "Impossiblle de créer le répertoire d'accueil pour la configuration d'APT."
|
||||||
@@ -18,10 +17,7 @@ upgrade_dist()
|
|||||||
fi
|
fi
|
||||||
backupdist $proxyfile
|
backupdist $proxyfile
|
||||||
echo "# Generated automatically on $(date $DATEFORMAT) by $0" > $proxyfile
|
echo "# Generated automatically on $(date $DATEFORMAT) by $0" > $proxyfile
|
||||||
echo "Acquire::http::Proxy \"http://${ACNGSRV}:3142\";" >> $proxyfile
|
echo "Acquire::http::Proxy \"http://${PROXYSRV}:${PROXYPORT}\";" >> $proxyfile
|
||||||
else
|
|
||||||
prnt E "Un serveur proxy a été spécifié mais pas son port d'usage."
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
prnt I "Pas de proxy configuré, ne fait rien."
|
prnt I "Pas de proxy configuré, ne fait rien."
|
||||||
fi
|
fi
|
||||||
@@ -36,5 +32,22 @@ upgrade_dist()
|
|||||||
apt autoremove --purge -y
|
apt autoremove --purge -y
|
||||||
}
|
}
|
||||||
|
|
||||||
export -f upgrade_dist
|
precheck_upgrade_dist()
|
||||||
|
{
|
||||||
|
prnt I "Vérification du réseau..."
|
||||||
|
wget -q --tries=10 --timeout=20 --spider http://google.com
|
||||||
|
if [[ ! $? -eq 0 ]]; then
|
||||||
|
prnt E "Réseau non fonctionnel ! Abandon."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [[ $PROXYSRV ]]; then
|
||||||
|
[[ ! $PROXYPORT ]] && (
|
||||||
|
prnt E "Un serveur proxy a été spécifié mais pas son port d'usage."
|
||||||
|
exit 1
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export -f upgrade_dist
|
||||||
|
export -f precheck_upgrade_dist
|
||||||
|
|||||||
Reference in New Issue
Block a user