Ajout de variables globales
+ Discrimination du nom de la MV du nom du fichier de la MV + Création de la fonction localiserMV + Suppression de lignes de débogage + Ajout de conditions de vérification du réseau dans la fonction recupParams + Reformulation de certains messages d'erreur + Création de la fonction genService + Création de la fonction demarreService + Évacuation d'un bloc de code pour le paramètre démarre en l'absence d'option + Écriture de la fonctionnalité d'arrêt
This commit is contained in:
@@ -5,7 +5,10 @@
|
||||
base_chemin_mv="/tmp/ramdisk/qemu-adm"
|
||||
bin_qemu="/usr/bin/qemu-system-x86_64"
|
||||
bin_qemu_img="/usr/bin/qemu-img"
|
||||
chemin_services_demons="/usr/local/etc/systemd/system"
|
||||
chemin_services_production="/etc/systemd/system"
|
||||
nom_script=$(basename $0)
|
||||
nom_complet_script="$(dirname $0)/${nom_script}"
|
||||
|
||||
die()
|
||||
{
|
||||
@@ -14,8 +17,8 @@ die()
|
||||
|
||||
verifMVExiste()
|
||||
{
|
||||
if [ -e "${base_chemin_mv}/${nom_mv}" ]; then
|
||||
die "Le répertoire de la machine virtuelle ${base_chemin_mv}/${nom_mv} existe déjà." 4
|
||||
if [ -e "${base_chemin_mv}/${nom_fichier_mv}" ]; then
|
||||
die "Le répertoire de la machine virtuelle ${base_chemin_mv}/${nom_fichier_mv} existe déjà." 4
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -38,7 +41,7 @@ initEnv()
|
||||
esac
|
||||
;;
|
||||
"repMV")
|
||||
mkdir -p ${base_chemin_mv}/${nom_mv}
|
||||
mkdir -p ${base_chemin_mv}
|
||||
;;
|
||||
esac
|
||||
}
|
||||
@@ -132,13 +135,7 @@ presenceParametre()
|
||||
|
||||
creeMV()
|
||||
{
|
||||
nom_mv="$(basename ${1})"
|
||||
if [[ "$(dirname ${1})" != "." ]];then
|
||||
base_chemin_mv="$(dirname ${1})"
|
||||
fi
|
||||
chemin_mv="${base_chemin_mv}/${nom_mv}/qemu-${nom_mv}.mv"
|
||||
echo "nom_mv=${nom_mv}" # Debogage
|
||||
echo "base_chemin_mv=${base_chemin_mv}" # Debogage
|
||||
localiserMV ${1}
|
||||
commandes_a_executer+=("nouvMV nom ${nom_mv}")
|
||||
shift # On retire le nom de la machine virtuelle passé en argument
|
||||
echo 1 "$#" # Debogage
|
||||
@@ -225,7 +222,7 @@ creeMV()
|
||||
die "Le disque n'est pas renseigné.\nSyntaxe attendue : <chemin disque>|(<chemin disque>|<nom disque>):(raw|qcow2):<capacité>)." 5
|
||||
fi
|
||||
if [[ "$(dirname ${1})" == "." ]];then
|
||||
disque_nom="${base_chemin_mv}/${nom_mv}/${disque_nom}"
|
||||
disque_nom="${base_chemin_mv}/${disque_nom}"
|
||||
fi
|
||||
|
||||
|
||||
@@ -480,45 +477,41 @@ genCmdIntRzo(){
|
||||
interface_init=0
|
||||
|
||||
fi
|
||||
echo "commandes_a_executer_on=${commandes_a_executer_on[@]}" # Debogage
|
||||
}
|
||||
|
||||
# Fonction exécuté en premier. Récupère les paramètres du fichier de configuration du conteneur
|
||||
recupParams(){
|
||||
verif_params=${1}
|
||||
declare -a params_int=( $(grep -B 3 "^-device" ${chemin_mv}) )
|
||||
nb_params="${#params_int[*]}"
|
||||
echo "nb_params=${nb_params}" # Debogage
|
||||
|
||||
for ((id_param_fichier=0 ; "${nb_params}" - "${id_param_fichier}" ; id_param_fichier++)); do
|
||||
nom_param=$(echo "${params_int[${id_param_fichier}]}" | grep -v '#.*-device' | sed "s/=.*//" | sed "s/#//")
|
||||
val_param=$(echo "${params_int[${id_param_fichier}]}" | sed "s/.*=//")
|
||||
echo "nom_param=${nom_param}" # Debogage
|
||||
echo "val_param=${val_param}" # Debogage
|
||||
|
||||
# Récupération des données d'après le fichier de configuration
|
||||
if [ "${nom_param}" == "PONT" ]; then
|
||||
echo "ip link show ${val_param}" # Debogage
|
||||
if [[ $(ip link show "${val_param}" 2> /dev/null) ]]; then
|
||||
if [[ ${verif_params} == "vrai" ]]; then
|
||||
if [[ $(ip link show "${val_param}" 2> /dev/null) ]]; then
|
||||
pont="${val_param}"
|
||||
pont_init=1
|
||||
else
|
||||
die "Le pont ${val_param} n'existe pas." 8
|
||||
fi
|
||||
else
|
||||
pont="${val_param}"
|
||||
pont_init=1
|
||||
echo "pont_init=1" # Debogage
|
||||
else
|
||||
echo "Erreur: le pont ${val_param} n'existe pas. Arrêt immédiat du script \"${0}\" sans aucune modification du système."
|
||||
exit 1
|
||||
fi
|
||||
elif [ "${nom_param}" == "VLAN" ]; then
|
||||
if [[ "${val_param}" =~ ^-?[0-9]+$ && "${val_param}" -ge 1 && "${val_param}" -le 4094 && $(echo -n "${val_param}" | cut -c 1) -ne 0 ]]; then
|
||||
if [[ "${pont_init}" -eq 1 ]]; then
|
||||
vlan="${val_param}"
|
||||
vlan_init=1
|
||||
echo "vlan_init=1" # Debogage
|
||||
else
|
||||
echo "Erreur: le paramètre \"#PONT=votrePont\" est manquant."
|
||||
exit 1
|
||||
die "Le paramètre \"#PONT=votrePont\" est manquant dans le fichier ${chemin_mv}." 9
|
||||
fi
|
||||
else
|
||||
echo "Erreur: le VLAN \"${val_param}\" n'est pas un entier compris entre 1 et 4094. Arrêt immédiat du script \"${0}\" sans aucune modification du système."
|
||||
exit 1
|
||||
die "Le VLAN \"${val_param}\" n'est pas un entier compris entre 1 et 4094. Veuillez verifier le fichier ${chemin_mv}." 9
|
||||
fi
|
||||
elif [ "${nom_param}" == "8021Q" ]; then
|
||||
declare -a label_vlan=( $(echo ${val_param} | sed 's/,/\n/g') )
|
||||
@@ -528,34 +521,33 @@ recupParams(){
|
||||
if [[ "${label_vlan[${id_label_vlan}]}" =~ ^-?[0-9]+$ && "${label_vlan[${id_label_vlan}]}" -ge 1 && "${label_vlan[${id_label_vlan}]}" -le 4094 && $(echo -n "${label_vlan[${id_label_vlan}]}" | cut -c 1) -ne 0 ]]; then
|
||||
if [[ "${pont_init}" -eq 1 ]]; then
|
||||
ieee8021q_init=1
|
||||
echo "ieee8021q_init=1" # Debogage
|
||||
else
|
||||
echo "Erreur: le paramètre \"#PONT=votrePont\" est manquant."
|
||||
exit 1
|
||||
die "Le paramètre \"#PONT=votrePont\" est manquant dans le fichier ${chemin_mv}." 9
|
||||
fi
|
||||
else
|
||||
echo "Erreur: le tronc 802.1Q comporte un identifiant de VLAN (\"${val_param}\") qui n'est pas un entier compris entre 1 et 4094. Arrêt immédiat du script \"${0}\" sans aucune modification du système."
|
||||
exit 1
|
||||
die "Le tronc 802.1Q comporte un identifiant de VLAN (\"${val_param}\") qui n'est pas un entier compris entre 1 et 4094. Veuillez verifier le fichier ${chemin_mv}." 9
|
||||
fi
|
||||
done
|
||||
elif [ "${nom_param}" == "INTERFACE" ]; then
|
||||
if [[ ! $(ip link show "${val_param}" 2> /dev/null) ]]; then
|
||||
if [[ "${vlan_init}" -eq 1 || "${ieee8021q_init}" -eq 1 ]]; then
|
||||
interface="${val_param}"
|
||||
interface_init=1
|
||||
echo "interface_init=1" # Debogage
|
||||
if [[ ${verif_params} == "vrai" ]]; then
|
||||
if [[ ! $(ip link show "${val_param}" 2> /dev/null) ]]; then
|
||||
if [[ "${vlan_init}" -eq 1 || "${ieee8021q_init}" -eq 1 ]]; then
|
||||
interface="${val_param}"
|
||||
interface_init=1
|
||||
else
|
||||
die "Le paramètre \"#VLAN=votreVLAN\" est manquant dans le fichier ${chemin_mv}." 9
|
||||
fi
|
||||
elif [[ $(ls /run/network/ | sed -e "s/ifstate//g" -e "s/^.//" -e "/^$/d" -e "/^lo$/d" | grep "${val_param}" 2> /dev/null) ]]; then
|
||||
pont_init=0
|
||||
vlan_init=0
|
||||
ieee8021q_init=0
|
||||
interface_init=0
|
||||
else
|
||||
echo "Erreur: le paramètre \"#VLAN=votreVLAN\" est manquant."
|
||||
exit 1
|
||||
die "L'interface ${val_param} est déjà existante." 8
|
||||
fi
|
||||
elif [[ $(ls /run/network/ | sed -e "s/ifstate//g" -e "s/^.//" -e "/^$/d" -e "/^lo$/d" | grep "${val_param}" 2> /dev/null) ]]; then
|
||||
pont_init=0
|
||||
vlan_init=0
|
||||
ieee8021q_init=0
|
||||
interface_init=0
|
||||
else
|
||||
echo "Erreur: l'interface ${val_param} est déjà existante. Arrêt immédiat du script \"${0}\" sans aucune modification du système."
|
||||
exit 1
|
||||
interface="${val_param}"
|
||||
interface_init=1
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -564,6 +556,31 @@ recupParams(){
|
||||
done
|
||||
}
|
||||
|
||||
genService(){
|
||||
echo "genService" # Debogage
|
||||
mkdir -p ${chemin_services_demons}
|
||||
echo "chemin_mv=${chemin_mv}" # Debogage
|
||||
nom_du_service="qemu-${nom_mv}-$(echo -n ${chemin_mv} | sha512sum | cut -c 1-10).service"
|
||||
cat << _EOF_ > ${chemin_services_demons}/${nom_du_service}
|
||||
[Unit]
|
||||
Description=Service pour la machine vituelle ${chemin_mv}
|
||||
After=syslog.target
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
RestartSec=2s
|
||||
Type=simple
|
||||
ExecStart=${nom_complet_script} demarre ${chemin_mv}
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
_EOF_
|
||||
echo "Le service ${chemin_services_demons}/${nom_du_service} a été crée"
|
||||
ln -sf ${chemin_services_demons}/${nom_du_service} ${chemin_services_production}/${nom_du_service}
|
||||
echo "Un lien synbolique vers ${chemin_services_production}/${nom_du_service} a été crée"
|
||||
echo -e "Si vous voulez exécuter votre machine au démarrage du système, veuillez utiliser la commande suivante :\n\t\033[01;30msystemctl enable ${nom_du_service}\033[00m"
|
||||
}
|
||||
|
||||
usage()
|
||||
{
|
||||
case ${1} in
|
||||
@@ -610,6 +627,36 @@ usage()
|
||||
esac
|
||||
}
|
||||
|
||||
localiserMV() {
|
||||
nom_mv="$(basename ${1})"
|
||||
if [[ "$(dirname ${1})" != "." ]];then
|
||||
base_chemin_mv="$(dirname ${1})"
|
||||
nom_fichier_mv="${nom_mv}"
|
||||
else
|
||||
base_chemin_mv+="/${nom_mv}"
|
||||
nom_fichier_mv="qemu-${nom_mv}.mv"
|
||||
fi
|
||||
chemin_mv="${base_chemin_mv}/${nom_fichier_mv}"
|
||||
echo "chemin_mv=${chemin_mv}" # Debogage
|
||||
echo "nom_mv=${nom_mv}" # Debogage
|
||||
echo "base_chemin_mv=${base_chemin_mv}" # Debogage
|
||||
echo "nom_fichier_mv=${nom_fichier_mv}" # Debogage
|
||||
}
|
||||
|
||||
demarreService() {
|
||||
systemctl daemon-reload
|
||||
systemctl start ${nom_du_service}
|
||||
echo "Verification en cours..."
|
||||
sleep 2
|
||||
systemctl is-active --quiet ${nom_du_service}
|
||||
if [[ $? -eq 0 ]]; then
|
||||
echo -e "\033[01;32mLa machine virtuelle ${nom_mv} est bien démarrée.\033[00m"
|
||||
else
|
||||
echo -e "\033[01;31mLa machine virtuelle ${nom_mv} n'a pas démarrée.\033[00m"
|
||||
journalctl --no-pager --lines=10 --output=cat -eu ${nom_du_service}
|
||||
fi
|
||||
}
|
||||
|
||||
case ${1} in
|
||||
cree)
|
||||
echo "Créer" # Debogage
|
||||
@@ -634,46 +681,42 @@ case ${1} in
|
||||
if [[ "${1}" == "-h" ]]; then
|
||||
usage "demarre"
|
||||
fi
|
||||
nom_mv="$(basename ${1})"
|
||||
if [[ "$(dirname ${1})" != "." ]];then
|
||||
base_chemin_mv="$(dirname ${1})"
|
||||
fi
|
||||
chemin_mv="${base_chemin_mv}/${nom_mv}/qemu-${nom_mv}.mv"
|
||||
echo "chemin_mv=${chemin_mv}" # Debogage
|
||||
echo "nom_mv=${nom_mv}" # Debogage
|
||||
echo "base_chemin_mv=${base_chemin_mv}" # Debogage
|
||||
localiserMV ${1}
|
||||
shift
|
||||
echo 1 "$#" # Debogage
|
||||
if [[ $# -eq 0 ]]; then
|
||||
echo "Demarrage de la MV..." # Debogage
|
||||
recupParams
|
||||
recupParams vrai
|
||||
execCmd "${commandes_a_executer_on[@]}"
|
||||
commande_qemu=$(grep -Ev '^#|^$' ${chemin_mv} | tr -d '\n' | tr -d '\\')
|
||||
echo "${bin_qemu} ${commande_qemu}" # Debogage
|
||||
${bin_qemu} ${commande_qemu}
|
||||
execCmd "${commandes_a_executer_off[@]}"
|
||||
fi
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "${1}" in
|
||||
'-d') #demon
|
||||
echo "demon" # Debogage
|
||||
if [[ ${temoin_d} -ne 1 ]]; then
|
||||
#commandes_a_executer+=( "nouvMV ${nom_mv}")
|
||||
temoin_d=1
|
||||
else
|
||||
die "L'option ${1} a déjà été renseignée." 3
|
||||
fi
|
||||
;;
|
||||
'-h') #aide
|
||||
else
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "${1}" in
|
||||
'-d') #demon
|
||||
echo "demon" # Debogage
|
||||
if [[ ${temoin_d} -ne 1 ]]; then
|
||||
commandes_a_executer_demon+=( "genService" )
|
||||
commandes_a_executer_demon+=( "demarreService")
|
||||
temoin_d=1
|
||||
else
|
||||
die "L'option ${1} a déjà été renseignée." 3
|
||||
fi
|
||||
;;
|
||||
'-h') #aide
|
||||
usage "demarre"
|
||||
exit 0
|
||||
;;
|
||||
*) #autre
|
||||
usage "demarre"
|
||||
exit 0
|
||||
;;
|
||||
*) #autre
|
||||
usage "demarre"
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
execCmd "${commandes_a_executer_demon[@]}"
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
|
||||
@@ -683,8 +726,12 @@ case ${1} in
|
||||
if [[ "${1}" == "-h" ]]; then
|
||||
usage "arret"
|
||||
fi
|
||||
nom_mv="${1}"
|
||||
echo "nom_mv=${nom_mv}"
|
||||
localiserMV ${1}
|
||||
shift
|
||||
nom_du_service="qemu-${nom_mv}-$(echo -n ${chemin_mv} | sha512sum | cut -c 1-10).service"
|
||||
systemctl stop ${nom_du_service}
|
||||
recupParams faux
|
||||
execCmd "${commandes_a_executer_off[@]}"
|
||||
;;
|
||||
|
||||
active)
|
||||
|
||||
Reference in New Issue
Block a user