Déplacement de la création du répertoire de la machine virtuel dans la fonction d'initialisation de l'environnement
+ Correction d'une faute dans le paramètre CPU + Raccourcissement du paramètre cdrom + Ajout d'un commentaire INTERFACE permettant la récupération de cette information à la création de cette dernière + Ajout de l'option KVM + Mise en commentaire du paramètre -f + Ajout des fonctions de récupération des informations réseau + Ébauche de lancement de la machine virtuelle
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
#set -x
|
||||
|
||||
base_chemin_mv="/tmp/ramdisk/qemu-adm"
|
||||
bin_qemu="/usr/bin/qemu-system-x86_64"
|
||||
bin_qemu_img="/usr/bin/qemu-img"
|
||||
@@ -34,6 +36,10 @@ initEnv()
|
||||
die "La création du sous-volume dans le système de fichier cible n'est pas possible." 7
|
||||
fi
|
||||
esac
|
||||
;;
|
||||
"repMV")
|
||||
mkdir -p ${base_chemin_mv}/${nom_mv}
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
@@ -47,7 +53,7 @@ nouvMV()
|
||||
echo "-name ${1} \\" > ${chemin_mv}
|
||||
;;
|
||||
"cpu")
|
||||
echo "-cpu ${1} -smp cores=${2},theads=${3},sockets=1 \\" >> ${chemin_mv}
|
||||
echo "-cpu ${1} -smp cores=${2},threads=${3},sockets=1 \\" >> ${chemin_mv}
|
||||
;;
|
||||
"memoire")
|
||||
echo "-m ${1} \\" >> ${chemin_mv}
|
||||
@@ -72,7 +78,7 @@ nouvMV()
|
||||
echo "-drive file=${1},if=virtio \\" >> ${chemin_mv}
|
||||
;;
|
||||
"iso")
|
||||
echo "--cdrom ${1} \\" >> ${chemin_mv}
|
||||
echo "-cdrom ${1} \\" >> ${chemin_mv}
|
||||
;;
|
||||
"reseau")
|
||||
if [[ "${4}" != "false" ]]; then
|
||||
@@ -86,9 +92,13 @@ nouvMV()
|
||||
echo "#8021Q=${7}" >> ${chemin_mv}
|
||||
;;
|
||||
esac
|
||||
echo "#INTERFACE=${1}" >> ${chemin_mv}
|
||||
|
||||
echo "-device ${2},netdev=${1} -netdev tap,id=${1},ifname=${1},script=no,downscript=no \\" >> ${chemin_mv}
|
||||
;;
|
||||
"kvm")
|
||||
echo "-enable-kvm \\" >> ${chemin_mv}
|
||||
;;
|
||||
"parametres")
|
||||
echo "$@ \\" >> ${chemin_mv}
|
||||
;;
|
||||
@@ -386,16 +396,25 @@ creeMV()
|
||||
die "L'option ${1} a déjà été renseignée." 3
|
||||
fi
|
||||
;;
|
||||
"-f") # Force
|
||||
# Permet d'eviter la demande de confirmation de création
|
||||
echo "force" # Debogage
|
||||
if [[ ${temoin_f} -ne 1 ]]; then
|
||||
#commandes_a_executer+=( "nouvMV ${nom_mv}")
|
||||
temoin_s=f
|
||||
"-k") # KVM
|
||||
echo "KVM"
|
||||
if [[ ${temoin_k} -ne 1 ]]; then
|
||||
commandes_a_executer+=( "nouvMV kvm")
|
||||
temoin_k=1
|
||||
else
|
||||
die "L'option ${1} a déjà été renseignée." 3
|
||||
fi
|
||||
;;
|
||||
# "-f") # Force
|
||||
# # Permet d'eviter la demande de confirmation de création
|
||||
# echo "force" # Debogage
|
||||
# if [[ ${temoin_f} -ne 1 ]]; then
|
||||
# #commandes_a_executer+=( "nouvMV ${nom_mv}")
|
||||
# temoin_s=f
|
||||
# else
|
||||
# die "L'option ${1} a déjà été renseignée." 3
|
||||
# fi
|
||||
# ;;
|
||||
'-h') # Aide
|
||||
usage "cree"
|
||||
exit 0
|
||||
@@ -419,13 +438,127 @@ creeMV()
|
||||
die "Les parametres -c et -m sont obligatoires." 2
|
||||
fi
|
||||
#verifMVExiste ${nom_mv}
|
||||
commandes_init_a_executer+=( "initEnv repMV" )
|
||||
execCmd "${commandes_init_a_executer[@]}"
|
||||
mkdir -p ${base_chemin_mv}/${nom_mv}
|
||||
execCmd "${commandes_a_executer[@]}"
|
||||
echo "########## FICHIER ##########" # Debogage
|
||||
cat ${chemin_mv} # Debogage
|
||||
}
|
||||
|
||||
genCmdIntRzo(){
|
||||
# Création d'une interface non étiqueté (access)
|
||||
if [[ "${pont_init}" -eq 1 && "${vlan_init}" -eq 1 && "${interface_init}" -eq 1 ]]; then
|
||||
commandes_a_executer+=( "ip tuntap add ${interface} mode tap" )
|
||||
commandes_a_executer+=( "ip link set ${interface} up" )
|
||||
commandes_a_executer+=( "ip link set ${interface} master ${pont}" )
|
||||
commandes_a_executer+=( "bridge vlan del dev ${interface} vid 1 PVID untagged master" )
|
||||
commandes_a_executer+=( "bridge vlan add dev ${interface} vid ${vlan} pvid untagged master" )
|
||||
|
||||
# Réinitialisation des variables témoins
|
||||
pont_init=0
|
||||
vlan_init=0
|
||||
interface_init=0
|
||||
|
||||
# Création d'une interface étiqueté (trunk)
|
||||
elif [[ "${pont_init}" -eq 1 && "${ieee8021q_init}" -eq 1 && "${interface_init}" -eq 1 ]]; then
|
||||
commandes_a_executer+=( "ip tuntap add ${interface} mode tap" )
|
||||
commandes_a_executer+=( "ip link set ${interface} up" )
|
||||
commandes_a_executer+=( "ip link set ${interface} master ${pont}" )
|
||||
commandes_a_executer+=( "bridge vlan del dev ${interface} vid 1 PVID untagged master" )
|
||||
for ((id_label_vlan=0 ; "${nb_params_label}" - "${id_label_vlan}" ; id_label_vlan++)); do
|
||||
commandes_a_executer+=( "bridge vlan add dev ${interface} vid ${label_vlan[${id_label_vlan}]} tagged master" )
|
||||
done
|
||||
|
||||
# Réinitialisation des variables témoins
|
||||
pont_init=0
|
||||
ieee8021q_init=0
|
||||
interface_init=0
|
||||
|
||||
fi
|
||||
echo "commandes_a_executer=${commandes_a_executer[@]}" # Debogage
|
||||
}
|
||||
|
||||
# Fonction exécuté en premier. Récupère les paramètres du fichier de configuration du conteneur
|
||||
recupParams(){
|
||||
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
|
||||
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
|
||||
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
|
||||
fi
|
||||
elif [ "${nom_param}" == "8021Q" ]; then
|
||||
declare -a label_vlan=( $(echo ${val_param} | sed 's/,/\n/g') )
|
||||
nb_params_label="${#label_vlan[*]}"
|
||||
|
||||
for ((id_label_vlan=0 ; "${nb_params_label}" - "${id_label_vlan}" ; id_label_vlan++)); do
|
||||
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
|
||||
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
|
||||
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
|
||||
else
|
||||
echo "Erreur: le paramètre \"#VLAN=votreVLAN\" est manquant."
|
||||
exit 1
|
||||
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
|
||||
fi
|
||||
fi
|
||||
|
||||
# Génération des commandes de création des interfaces réseau du conteneur
|
||||
genCmdIntRzo
|
||||
done
|
||||
}
|
||||
|
||||
usage()
|
||||
{
|
||||
case ${1} in
|
||||
@@ -496,10 +629,24 @@ case ${1} in
|
||||
if [[ "${1}" == "-h" ]]; then
|
||||
usage "demarre"
|
||||
fi
|
||||
nom_mv="${1}"
|
||||
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
|
||||
shift
|
||||
echo 1 "$#" # Debogage
|
||||
if [[ $# -eq 0 ]]; then
|
||||
echo "Demarrage de la MV..." # Debogage
|
||||
#recupParams
|
||||
#execCmd "${commandes_a_executer[@]}"
|
||||
commande_qemu=$(grep -Ev '^#|^$' ${chemin_mv} | tr -d '\n' | tr -d '\\')
|
||||
echo "${bin_qemu} ${commande_qemu}" # Debogage
|
||||
${bin_qemu} ${commande_qemu}
|
||||
fi
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "${1}" in
|
||||
'-d') #demon
|
||||
|
||||
Reference in New Issue
Block a user