Compare commits
7 Commits
36887b20c5
...
ycharbi
| Author | SHA1 | Date | |
|---|---|---|---|
| 1d657e728b | |||
| 1477ef8072 | |||
| 521d192e05 | |||
| 3c6e04f845 | |||
| 9b1030bf45 | |||
| 7c91541a83 | |||
| 896c471be7 |
@@ -5,6 +5,8 @@
|
|||||||
base_chemin_mv="/tmp/ramdisk/qemu-adm"
|
base_chemin_mv="/tmp/ramdisk/qemu-adm"
|
||||||
bin_qemu="/usr/bin/qemu-system-x86_64"
|
bin_qemu="/usr/bin/qemu-system-x86_64"
|
||||||
bin_qemu_img="/usr/bin/qemu-img"
|
bin_qemu_img="/usr/bin/qemu-img"
|
||||||
|
bin_ip="/usr/bin/ip"
|
||||||
|
bin_bridge="/usr/sbin/bridge"
|
||||||
chemin_services_demons="/usr/local/etc/systemd/system"
|
chemin_services_demons="/usr/local/etc/systemd/system"
|
||||||
chemin_services_production="/etc/systemd/system"
|
chemin_services_production="/etc/systemd/system"
|
||||||
nom_script=$(basename $0)
|
nom_script=$(basename $0)
|
||||||
@@ -70,38 +72,70 @@ nouvMV()
|
|||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
"disque")
|
"disque")
|
||||||
echo "${2}"
|
echo "${2}" # Debogage
|
||||||
if [[ ! -z ${2} ]]; then
|
if [[ ! -z "${2}" && "${2}" =~ ^(raw|qcow2)$ ]]; then
|
||||||
if [[ ! -f ${bin_qemu_img} ]]; then
|
if [[ ! -f ${bin_qemu_img} ]]; then
|
||||||
die "Le paquet qemu-utils n'est pas installé." 6
|
die "Le paquet qemu-utils n'est pas installé." 6
|
||||||
fi
|
fi
|
||||||
echo "Création du disque..." # Debogage
|
echo "Création du disque..." # Debogage
|
||||||
qemu-img create -f ${2} ${1} ${3}
|
qemu-img create -f ${2} ${1} ${3}
|
||||||
|
else
|
||||||
|
die "Le format du disque doit être raw ou qcow2." 5
|
||||||
|
fi
|
||||||
|
if [[ "${4}" =~ ^(virtio|ide)$ ]]; then
|
||||||
|
echo "-drive file=${1},if=${4} \\" >> ${chemin_mv}
|
||||||
|
else
|
||||||
|
die "Le type du disque doit être virtio ou ide." 5
|
||||||
fi
|
fi
|
||||||
echo "-drive file=${1},if=virtio \\" >> ${chemin_mv}
|
|
||||||
;;
|
;;
|
||||||
"iso")
|
"iso")
|
||||||
echo "-cdrom ${1} \\" >> ${chemin_mv}
|
echo "-cdrom ${1} \\" >> ${chemin_mv}
|
||||||
;;
|
;;
|
||||||
"reseau")
|
"reseau")
|
||||||
if [[ "${4}" != "false" ]]; then
|
if [[ "${1}" != "faux" ]]; then
|
||||||
echo "#PONT=${4}" >> ${chemin_mv}
|
if [[ "${5}" != "faux" ]]; then
|
||||||
|
echo "#PONT=${5}" >> ${chemin_mv}
|
||||||
|
if [[ "${6}" == "n" ]]; then
|
||||||
|
echo "#VLAN=0" >> ${chemin_mv}
|
||||||
fi
|
fi
|
||||||
case "${6}" in
|
fi
|
||||||
|
case "${7}" in
|
||||||
"a")
|
"a")
|
||||||
echo "#VLAN=${7}" >> ${chemin_mv}
|
echo "#VLAN=${8}" >> ${chemin_mv}
|
||||||
;;
|
;;
|
||||||
"t")
|
"t")
|
||||||
echo "#8021Q=${7}" >> ${chemin_mv}
|
echo "#8021Q=${8}" >> ${chemin_mv}
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
echo "#INTERFACE=${1}" >> ${chemin_mv}
|
if [[ "${4}" != "faux" ]]; then
|
||||||
|
echo "#INTERFACE=${2}" >> ${chemin_mv}
|
||||||
echo "-device ${2},netdev=${1} -netdev tap,id=${1},ifname=${1},script=no,downscript=no \\" >> ${chemin_mv}
|
fi
|
||||||
|
echo "-device ${3},netdev=${2} -netdev tap,id=${2},ifname=${2},script=no,downscript=no \\" >> ${chemin_mv}
|
||||||
|
else
|
||||||
|
echo "-net none \\" >> ${chemin_mv}
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
"kvm")
|
"kvm")
|
||||||
echo "-enable-kvm \\" >> ${chemin_mv}
|
echo "-enable-kvm \\" >> ${chemin_mv}
|
||||||
;;
|
;;
|
||||||
|
"series")
|
||||||
|
echo "-serial mon:stdio \\" >> ${chemin_mv}
|
||||||
|
;;
|
||||||
|
"spice")
|
||||||
|
if [[ "${3}" != "faux" ]]; then
|
||||||
|
echo "-object secret,id=spice-mdp,data=${4} -spice addr=${1},port=${2},password-secret=spice-mdp \\" >> ${chemin_mv}
|
||||||
|
else
|
||||||
|
echo "-spice addr=${1},port=${2},disable-ticketing=on \\" >> ${chemin_mv}
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
"gtk")
|
||||||
|
echo "-vga virtio -display sdl,gl=on \\" >> ${chemin_mv}
|
||||||
|
;;
|
||||||
|
"ecran")
|
||||||
|
if [[ ${1} == "faux" ]]; then
|
||||||
|
echo "-display none \\" >> ${chemin_mv}
|
||||||
|
fi
|
||||||
|
;;
|
||||||
"parametres")
|
"parametres")
|
||||||
echo "$@ \\" >> ${chemin_mv}
|
echo "$@ \\" >> ${chemin_mv}
|
||||||
;;
|
;;
|
||||||
@@ -128,7 +162,7 @@ presenceParametre()
|
|||||||
local l_nombre_arguments="${1}"
|
local l_nombre_arguments="${1}"
|
||||||
local l_nom_option="${2}"
|
local l_nom_option="${2}"
|
||||||
local l_nombre_parametres=${l_nombre_arguments}-1 # On soustrait l'option du nombre d'arguments resultant le nombre de parametres
|
local l_nombre_parametres=${l_nombre_arguments}-1 # On soustrait l'option du nombre d'arguments resultant le nombre de parametres
|
||||||
if [[ "${l_nombre_parametres}" -eq 0 ]]; then
|
if [[ "${l_nombre_parametres}" -eq 0 || "${3:0:1}" == "-" ]]; then
|
||||||
die "L'option ${l_nom_option} n'a pas de paramètre." 5
|
die "L'option ${l_nom_option} n'a pas de paramètre." 5
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -145,7 +179,7 @@ creeMV()
|
|||||||
echo "cpu" # Debogage
|
echo "cpu" # Debogage
|
||||||
parametre="${2}"
|
parametre="${2}"
|
||||||
echo "cpu parametre=${parametre}" # Debogage
|
echo "cpu parametre=${parametre}" # Debogage
|
||||||
presenceParametre "$#" "$1"
|
presenceParametre "$#" "${1}" "${parametre}"
|
||||||
shift
|
shift
|
||||||
if [[ ${temoin_c} -ne 1 ]]; then
|
if [[ ${temoin_c} -ne 1 ]]; then
|
||||||
# <type CPU>:<nombres cœurs CPU>:<nombre files d'execution>
|
# <type CPU>:<nombres cœurs CPU>:<nombre files d'execution>
|
||||||
@@ -178,7 +212,7 @@ creeMV()
|
|||||||
echo "memoire" # Debogage
|
echo "memoire" # Debogage
|
||||||
parametre="${2}"
|
parametre="${2}"
|
||||||
echo "memoire parametre=${parametre}" # Debogage
|
echo "memoire parametre=${parametre}" # Debogage
|
||||||
presenceParametre "$#" "$1"
|
presenceParametre "$#" "${1}" "${parametre}"
|
||||||
shift
|
shift
|
||||||
if [[ ${temoin_m} -ne 1 ]]; then
|
if [[ ${temoin_m} -ne 1 ]]; then
|
||||||
commandes_a_executer+=( "nouvMV memoire ${1}")
|
commandes_a_executer+=( "nouvMV memoire ${1}")
|
||||||
@@ -191,7 +225,7 @@ creeMV()
|
|||||||
echo "bios" # Debogage
|
echo "bios" # Debogage
|
||||||
parametre="${2}"
|
parametre="${2}"
|
||||||
echo "bios parametre=${parametre}" # Debogage
|
echo "bios parametre=${parametre}" # Debogage
|
||||||
presenceParametre "$#" "$1"
|
presenceParametre "$#" "${1}" "${parametre}"
|
||||||
shift
|
shift
|
||||||
if [[ ${temoin_b} -ne 1 ]]; then
|
if [[ ${temoin_b} -ne 1 ]]; then
|
||||||
case ${1} in
|
case ${1} in
|
||||||
@@ -210,40 +244,46 @@ creeMV()
|
|||||||
"-d") # Disque
|
"-d") # Disque
|
||||||
echo "disque" # Debogage
|
echo "disque" # Debogage
|
||||||
parametre="${2}"
|
parametre="${2}"
|
||||||
presenceParametre "$#" "$1"
|
presenceParametre "$#" "${1}" "${parametre}"
|
||||||
echo "disque parametre=${parametre}" # Debogage
|
echo "disque parametre=${parametre}" # Debogage
|
||||||
shift
|
shift
|
||||||
|
|
||||||
# <chemin disque>|(<chemin disque>|<nom disque>):(raw|qcow2):<capacité>)
|
# <chemin disque>|(<chemin disque>|<nom disque>):(raw|qcow2):<capacité>:(virtio|ide))
|
||||||
|
|
||||||
disque_nom=$( echo ${1} | awk -F: '{print $1}' )
|
disque_nom=$( echo ${1} | awk -F: '{print $1}' )
|
||||||
echo "disque_nom=${disque_nom}" # Debogage
|
echo "disque_nom=${disque_nom}" # Debogage
|
||||||
|
|
||||||
if [[ -z "${disque_nom}" ]]; then
|
if [[ -z "${disque_nom}" ]]; then
|
||||||
die "Le disque n'est pas renseigné.\nSyntaxe attendue : <chemin disque>|(<chemin disque>|<nom disque>):(raw|qcow2):<capacité>)." 5
|
die "Le disque n'est pas renseigné.\nSyntaxe attendue : <chemin disque>|(<chemin disque>|<nom disque>):(raw|qcow2):<capacité>:(virtio|ide))." 5
|
||||||
fi
|
fi
|
||||||
if [[ "$(dirname ${1})" == "." ]];then
|
if [[ "$(dirname ${1})" == "." ]];then
|
||||||
disque_nom="${base_chemin_mv}/${disque_nom}"
|
disque_nom="${base_chemin_mv}/${disque_nom}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
disque_format=$( echo ${1} | awk -F: '{print $2}' )
|
disque_format=$( echo ${1} | awk -F: '{print $2}' )
|
||||||
echo "disque_format=${disque_format}" # Debogage
|
echo "disque_format=${disque_format}" # Debogage
|
||||||
if [[ -z "${disque_format}" && "$(dirname ${1})" == "." ]]; then
|
if [[ -z "${disque_format}" && "$(dirname ${1})" == "." ]]; then
|
||||||
die "Le format du disque n'est pas renseigné.\nSyntaxe attendue : <chemin disque>|(<chemin disque>|<nom disque>):(raw|qcow2):<capacité>)." 5
|
die "Le format du disque n'est pas renseigné.\nSyntaxe attendue : <chemin disque>|(<chemin disque>|<nom disque>):(raw|qcow2):<capacité>:(virtio|ide))." 5
|
||||||
fi
|
fi
|
||||||
|
|
||||||
disque_capacite=$( echo ${1} | awk -F: '{print $3}' )
|
disque_capacite=$( echo ${1} | awk -F: '{print $3}' )
|
||||||
echo "disque_capacite=${disque_capacite}" # Debogage
|
echo "disque_capacite=${disque_capacite}" # Debogage
|
||||||
if [[ -z "${disque_capacite}" && "$(dirname ${1})" == "." ]]; then
|
if [[ -z "${disque_capacite}" && "$(dirname ${1})" == "." ]]; then
|
||||||
die "La capacité du disque n'est pas renseigné.\nSyntaxe attendue : <chemin disque>|(<chemin disque>|<nom disque>):(raw|qcow2):<capacité>)." 5
|
die "La capacité du disque n'est pas renseigné.\nSyntaxe attendue : <chemin disque>|(<chemin disque>|<nom disque>):(raw|qcow2):<capacité>:(virtio|ide))." 5
|
||||||
fi
|
fi
|
||||||
|
|
||||||
commandes_a_executer+=( "nouvMV disque ${disque_nom} ${disque_format} ${disque_capacite}")
|
disque_type=$( echo ${1} | awk -F: '{print $4}' )
|
||||||
|
echo "disque_type=${disque_type}" # Debogage
|
||||||
|
if [[ -z "${disque_type}" && "$(dirname ${1})" == "." ]]; then
|
||||||
|
die "Le type du disque n'est pas renseigné.\nSyntaxe attendue : <chemin disque>|(<chemin disque>|<nom disque>):(raw|qcow2):<capacité>:(virtio|ide))." 5
|
||||||
|
fi
|
||||||
|
|
||||||
|
commandes_a_executer+=( "nouvMV disque ${disque_nom} ${disque_format} ${disque_capacite} ${disque_type}")
|
||||||
;;
|
;;
|
||||||
"-i") # Iso
|
"-i") # Iso
|
||||||
echo "iso" # Debogage
|
echo "iso" # Debogage
|
||||||
parametre="${2}"
|
parametre="${2}"
|
||||||
presenceParametre "$#" "$1"
|
presenceParametre "$#" "${1}" "${parametre}"
|
||||||
echo "iso parametre=${parametre}" # Debogage
|
echo "iso parametre=${parametre}" # Debogage
|
||||||
shift
|
shift
|
||||||
commandes_a_executer+=( "nouvMV iso ${1}")
|
commandes_a_executer+=( "nouvMV iso ${1}")
|
||||||
@@ -251,40 +291,50 @@ creeMV()
|
|||||||
'-r') # Reseau
|
'-r') # Reseau
|
||||||
echo "reseau" # Debogage
|
echo "reseau" # Debogage
|
||||||
parametre="${2}"
|
parametre="${2}"
|
||||||
presenceParametre "$#" "$1"
|
presenceParametre "$#" "${1}" "${parametre}"
|
||||||
echo "reseau parametre=${parametre}" # Debogage
|
echo "reseau parametre=${parametre}" # Debogage
|
||||||
shift
|
shift
|
||||||
|
|
||||||
|
# Aucune interface réseau (désactive le réseau par défaut de Qemu si non spécifié par l'utilisateur) :
|
||||||
|
# n
|
||||||
# Interface réseau simple :
|
# Interface réseau simple :
|
||||||
## <nom interface>:(virtio|e1000):<activation pont>
|
## (n|o:<nom interface>:(virtio|e1000):<activation pont>)
|
||||||
# <nom interface>:(virtio|e1000):n
|
# (n|o:<nom interface>:(virtio|e1000):n)
|
||||||
#
|
#
|
||||||
# Interface réseau dans un pont
|
# Interface réseau dans un pont
|
||||||
## <nom interface>:(virtio|e1000):o:<nom pont>:<activation 8021q>
|
## (n|o:<nom interface>:(virtio|e1000):o:<nom pont>:<activation 8021q>)
|
||||||
# <nom interface>:(virtio|e1000):o:<nom pont>:n
|
# (n|o:<nom interface>:(virtio|e1000):o:<nom pont>:n)
|
||||||
#
|
#
|
||||||
# Interface réseau dans un pont avec gestion des VLAN
|
# Interface réseau dans un pont avec gestion des VLAN
|
||||||
# <nom interface>:(virtio|e1000):o:<nom pont>:o:(t:<VIDs>|a:<VID>)
|
# (n|o:<nom interface>:(virtio|e1000):o:<nom pont>:o:(t:<VIDs>|a:<VID>))
|
||||||
|
# (n|o:<nom interface>:(virtio|e1000):(n|o:<nom pont>:(n|o:(t:<VIDs>|a:<VID>))))
|
||||||
# <nom interface>:(virtio|e1000):(n|o:<nom pont>:(n|o:(t:<VIDs>|a:<VID>)))
|
|
||||||
|
|
||||||
# Initialisation des variables
|
# Initialisation des variables
|
||||||
reseau_nom_interface=false
|
reseau_nom_interface="faux"
|
||||||
reseau_type=false
|
reseau_type="faux"
|
||||||
reseau_activ_pont=false
|
reseau_activ_pont="faux"
|
||||||
reseau_nom_pont=false
|
reseau_nom_pont="faux"
|
||||||
reseau_activ_8021q=false
|
reseau_activ_8021q="faux"
|
||||||
reseau_mode_8021q=false
|
reseau_mode_8021q="faux"
|
||||||
reseau_vid=false
|
reseau_vid="faux"
|
||||||
|
|
||||||
reseau_nom_interface=$( echo ${1} | awk -F: '{print $1}' )
|
reseau_activ_interface=$( echo ${1} | awk -F: '{print $1}' )
|
||||||
|
if [[ -z "${reseau_activ_interface}" ]]; then
|
||||||
|
die "L'activation du réseau n'est pas renseigné.\nSpécifiez (n|N) pour désactiver le réseau sur la machine virtuelle ou (o|O) pour créer une interface réseau.\nVoici les deux syntaxes minimales posisbles : \n\tSans réseau :\n\t\tn\n\tAvec réseau :\n\t\to:<nom interface>:(virtio|e1000):n." 5
|
||||||
|
fi
|
||||||
|
case ${reseau_activ_interface} in
|
||||||
|
"n"|"N")
|
||||||
|
reseau_activ_interface="faux"
|
||||||
|
;;
|
||||||
|
"o"|"O")
|
||||||
|
reseau_nom_interface=$( echo ${1} | awk -F: '{print $2}' )
|
||||||
if [[ -z "${reseau_nom_interface}" ]]; then
|
if [[ -z "${reseau_nom_interface}" ]]; then
|
||||||
die "L'interface réseau n'est pas renseigné.\nSyntaxe minimum attendue : <nom interface>:(virtio|e1000):n." 5
|
die "L'interface réseau n'est pas renseigné.\nSyntaxe minimale attendue : o:<nom interface>:(virtio|e1000):n." 5
|
||||||
fi
|
fi
|
||||||
|
|
||||||
reseau_type=$( echo ${1} | awk -F: '{print $2}' )
|
reseau_type=$( echo ${1} | awk -F: '{print $3}' )
|
||||||
if [[ -z "${reseau_type}" ]]; then
|
if [[ -z "${reseau_type}" ]]; then
|
||||||
die "Le type d'interface réseau n'est pas renseigné.\nSyntaxe minimum attendue : <nom interface>:(virtio|e1000):n." 5
|
die "Le type d'interface réseau n'est pas renseigné.\nSyntaxe minimale attendue : o:<nom interface>:(virtio|e1000):n." 5
|
||||||
fi
|
fi
|
||||||
case ${reseau_type} in
|
case ${reseau_type} in
|
||||||
"virtio")
|
"virtio")
|
||||||
@@ -293,42 +343,42 @@ creeMV()
|
|||||||
"e1000")
|
"e1000")
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
die "Le type d'interface réseau n'a pas une valeur connue.\nSyntaxe minimum attendue : <nom interface>:(virtio|e1000):n." 5
|
die "Le type d'interface réseau n'a pas une valeur connue.\nSyntaxe minimale attendue : o:<nom interface>:(virtio|e1000):n." 5
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
reseau_activ_pont=$( echo ${1} | awk -F: '{print $3}' )
|
reseau_activ_pont=$( echo ${1} | awk -F: '{print $4}' )
|
||||||
echo "reseau_activ_pont=${reseau_activ_pont}" # Debogage
|
echo "reseau_activ_pont=${reseau_activ_pont}" # Debogage
|
||||||
if [[ -z "${reseau_activ_pont}" ]]; then
|
if [[ -z "${reseau_activ_pont}" ]]; then
|
||||||
die "L'activation du pont n'est pas renseigné.\nVoici les deux syntaxes minimum posisbles : \n\tSans pont :\n\t\t<nom interface>:(virtio|e1000):n\n\tAvec pont :\n\t\t<nom interface>:(virtio|e1000):o:<nom pont>:n" 5
|
die "L'activation du pont n'est pas renseigné.\nVoici les deux syntaxes minimale posisbles : \n\tSans pont :\n\t\to:<nom interface>:(virtio|e1000):n\n\tAvec pont :\n\t\to:<nom interface>:(virtio|e1000):o:<nom pont>:n" 5
|
||||||
fi
|
fi
|
||||||
case ${reseau_activ_pont} in
|
case ${reseau_activ_pont} in
|
||||||
"n"|"N")
|
"n"|"N")
|
||||||
;;
|
;;
|
||||||
"o"|"O")
|
"o"|"O")
|
||||||
reseau_nom_pont=$( echo ${1} | awk -F: '{print $4}' )
|
reseau_nom_pont=$( echo ${1} | awk -F: '{print $5}' )
|
||||||
if [[ -z "${reseau_nom_pont}" ]]; then
|
if [[ -z "${reseau_nom_pont}" ]]; then
|
||||||
die "Le nom du pont réseau n'est pas renseigné.\nSyntaxe minimum attendue : <nom interface>:(virtio|e1000):o:<nom pont>:n." 5
|
die "Le nom du pont réseau n'est pas renseigné.\nSyntaxe minimale attendue : o:<nom interface>:(virtio|e1000):o:<nom pont>:n" 5
|
||||||
fi
|
fi
|
||||||
|
|
||||||
reseau_activ_8021q=$( echo ${1} | awk -F: '{print $5}' )
|
reseau_activ_8021q=$( echo ${1} | awk -F: '{print $6}' )
|
||||||
if [[ -z "${reseau_activ_8021q}" ]]; then
|
if [[ -z "${reseau_activ_8021q}" ]]; then
|
||||||
die "L'activation du VLAN n'est pas renseigné.\nVoici les deux syntaxes minimum posisbles :\n\tSans VLAN :\n\t\t<nom interface>:(virtio|e1000):o:<nom pont>:n\n\tAvec VLAN :\n\t\t<nom interface>:(virtio|e1000):o:<nom pont>:o:(t:<VIDs>|a:<VID>)" 5
|
die "L'activation du VLAN n'est pas renseigné.\nVoici les deux syntaxes minimales posisbles :\n\tSans VLAN :\n\t\to:<nom interface>:(virtio|e1000):o:<nom pont>:n\n\tAvec VLAN :\n\t\to:<nom interface>:(virtio|e1000):o:<nom pont>:o:(t:<VIDs>|a:<VID>)" 5
|
||||||
fi
|
fi
|
||||||
case ${reseau_activ_8021q} in
|
case ${reseau_activ_8021q} in
|
||||||
"n"|"N")
|
"n"|"N")
|
||||||
;;
|
;;
|
||||||
"o"|"O")
|
"o"|"O")
|
||||||
reseau_mode_8021q=$( echo ${1} | awk -F: '{print $6}' )
|
reseau_mode_8021q=$( echo ${1} | awk -F: '{print $7}' )
|
||||||
if [[ -z "${reseau_mode_8021q}" ]]; then
|
if [[ -z "${reseau_mode_8021q}" ]]; then
|
||||||
die "Le mode du 802.1Q n'est pas renseigné.\nSyntaxe attendue : <nom interface>:(virtio|e1000):o:<nom pont>:o:(t:<VIDs>|a:<VID>)" 5
|
die "Le mode du 802.1Q n'est pas renseigné.\nSyntaxe attendue : o:<nom interface>:(virtio|e1000):o:<nom pont>:o:(t:<VIDs>|a:<VID>)" 5
|
||||||
fi
|
fi
|
||||||
case ${reseau_mode_8021q} in
|
case ${reseau_mode_8021q} in
|
||||||
"t"|"T")
|
"t"|"T")
|
||||||
reseau_vid=$( echo ${1} | awk -F: '{print $7}' )
|
reseau_vid=$( echo ${1} | awk -F: '{print $8}' )
|
||||||
echo "reseau_vid=${reseau_vid}" # Debogage
|
echo "reseau_vid=${reseau_vid}" # Debogage
|
||||||
if [[ -z "${reseau_vid}" ]]; then
|
if [[ -z "${reseau_vid}" ]]; then
|
||||||
die "Les identifiants de VLAN ne sont pas renseignés.\nSyntaxe attendue : <nom interface>:(virtio|e1000):o:<nom pont>:o:(t:<VIDs>|a:<VID>).\nExemple pour un accès via trunk aux VLAN 10 et 20 :\n\t qemu-adm [...] -r tap0:virtio:o:br0:o:t:10,20" 5
|
die "Les identifiants de VLAN ne sont pas renseignés.\nSyntaxe attendue : o:<nom interface>:(virtio|e1000):o:<nom pont>:o:(t:<VIDs>|a:<VID>).\nExemple pour un accès via trunk aux VLAN 10 et 20 :\n\t qemu-adm [...] -r tap0:virtio:o:br0:o:t:10,20" 5
|
||||||
fi
|
fi
|
||||||
for vid in $(echo $reseau_vid | sed 's/,/ /g'); do
|
for vid in $(echo $reseau_vid | sed 's/,/ /g'); do
|
||||||
echo "vid=${vid}" # Debogage
|
echo "vid=${vid}" # Debogage
|
||||||
@@ -338,9 +388,9 @@ creeMV()
|
|||||||
done
|
done
|
||||||
;;
|
;;
|
||||||
"a"|"A")
|
"a"|"A")
|
||||||
reseau_vid=$( echo ${1} | awk -F: '{print $7}' )
|
reseau_vid=$( echo ${1} | awk -F: '{print $8}' )
|
||||||
if [[ -z "${reseau_vid}" ]]; then
|
if [[ -z "${reseau_vid}" ]]; then
|
||||||
die "L'identifiant de VLAN n'est pas renseignés.\nSyntaxe attendue : <nom interface>:(virtio|e1000):o:<nom pont>:o:(t:<VIDs>|a:<VID>).\nExemple pour un accès au VLAN 10 :\n\t qemu-adm [...] -r tap0:virtio:o:br0:o:a:10" 5
|
die "L'identifiant de VLAN n'est pas renseignés.\nSyntaxe attendue : o:<nom interface>:(virtio|e1000):o:<nom pont>:o:(t:<VIDs>|a:<VID>).\nExemple pour un accès au VLAN 10 :\n\t qemu-adm [...] -r tap0:virtio:o:br0:o:a:10" 5
|
||||||
fi
|
fi
|
||||||
if [[ ! "${reseau_vid}" =~ ^[0-9]+$ ]]; then
|
if [[ ! "${reseau_vid}" =~ ^[0-9]+$ ]]; then
|
||||||
die "${reseau_vid} n'est pas une valeur correcte. L'attendu est un chiffre compris entre 1 et 4096.\nExemple pour un accès au VLAN 10 :\n\t qemu-adm [...] -r tap0:virtio:o:br0:o:a:10"
|
die "${reseau_vid} n'est pas une valeur correcte. L'attendu est un chiffre compris entre 1 et 4096.\nExemple pour un accès au VLAN 10 :\n\t qemu-adm [...] -r tap0:virtio:o:br0:o:a:10"
|
||||||
@@ -350,36 +400,41 @@ creeMV()
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
die "${reseau_mode_8021q} n'est pas une valeur connue.\nSyntaxe attendue : <nom interface>:(virtio|e1000):o:<nom pont>:o:(t:<VIDs>|a:<VID>)\n"
|
die "${reseau_mode_8021q} n'est pas une valeur connue.\nSyntaxe attendue : o:<nom interface>:(virtio|e1000):o:<nom pont>:o:(t:<VIDs>|a:<VID>)\n"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
die "${reseau_activ_8021q} n'est pas une valeur connue.\nVoici les deux syntaxes minimum posisbles : \n\tSans VLAN :\n\t\t<nom interface>:(virtio|e1000):o:<nom pont>:n\n\tAvec VLAN :\n\t\t<nom interface>:(virtio|e1000):o:<nom pont>:o:(t:<VIDs>|a:<VID>)" 5
|
die "${reseau_activ_8021q} n'est pas une valeur connue.\nVoici les deux syntaxes minimales posisbles : \n\tSans VLAN :\n\t\to:<nom interface>:(virtio|e1000):o:<nom pont>:n\n\tAvec VLAN :\n\t\to:<nom interface>:(virtio|e1000):o:<nom pont>:o:(t:<VIDs>|a:<VID>)" 5
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
die "${reseau_activ_pont} n'est pas une valeur connue.\nVoici les deux syntaxes minimum posisbles : \n\tSans pont :\n\t\t<nom interface>:(virtio|e1000):n\n\tAvec pont :\n\t\t<nom interface>:(virtio|e1000):o:<nom pont>:n" 5
|
die "${reseau_activ_pont} n'est pas une valeur connue.\nVoici les deux syntaxes minimales posisbles : \n\tSans pont :\n\t\to:<nom interface>:(virtio|e1000):n\n\tAvec pont :\n\t\to:<nom interface>:(virtio|e1000):o:<nom pont>:n" 5
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
die "${reseau_activ_interface} n'est pas une valeur connue.\nSpécifiez (n|N) pour désactiver le réseau sur la machine virtuelle ou (o|O) pour créer une interface réseau.\nVoici les deux syntaxes minimales posisbles : \n\tSans réseau :\n\t\tn\n\tAvec réseau :\n\t\to:<nom interface>:(virtio|e1000):n" 5
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
commandes_a_executer+=( "nouvMV reseau ${reseau_nom_interface} ${reseau_type} ${reseau_activ_pont} ${reseau_nom_pont} ${reseau_activ_8021q} ${reseau_mode_8021q} ${reseau_vid}")
|
commandes_a_executer+=( "nouvMV reseau ${reseau_activ_interface} ${reseau_nom_interface} ${reseau_type} ${reseau_activ_pont} ${reseau_nom_pont} ${reseau_activ_8021q} ${reseau_mode_8021q} ${reseau_vid}")
|
||||||
echo "nouvMV reseau ${reseau_nom_interface} ${reseau_type} ${reseau_activ_pont} ${reseau_nom_pont} ${reseau_activ_8021q} ${reseau_mode_8021q} ${reseau_vid}" # Debogage
|
echo "nouvMV reseau ${reseau_activ_interface} ${reseau_nom_interface} ${reseau_type} ${reseau_activ_pont} ${reseau_nom_pont} ${reseau_activ_8021q} ${reseau_mode_8021q} ${reseau_vid}" # Debogage
|
||||||
;;
|
;;
|
||||||
"-p") # VFIO PCI
|
# "-p") # VFIO PCI
|
||||||
echo "pci" # Debogage
|
# echo "pci" # Debogage
|
||||||
# -device vfio-pci,host=0b:10.0,id=hostdev0,bus=pci.0,addr=0xa
|
# # -device vfio-pci,host=0b:10.0,id=hostdev0,bus=pci.0,addr=0xa
|
||||||
shift
|
# shift
|
||||||
;;
|
# ;;
|
||||||
"-s") # Sous-volume
|
"-S") # Sous-volume
|
||||||
echo "sous-volume" # Debogage
|
echo "sous-volume" # Debogage
|
||||||
parametre="${2}"
|
parametre="${2}"
|
||||||
echo "sous-volume parametre=${parametre}" # Debogage
|
echo "sous-volume parametre=${parametre}" # Debogage
|
||||||
presenceParametre "$#" "$1"
|
presenceParametre "$#" "${1}" "${parametre}"
|
||||||
shift
|
shift
|
||||||
if [[ ${temoin_s} -ne 1 ]]; then
|
if [[ ${temoin_S} -ne 1 ]]; then
|
||||||
case ${1} in
|
case ${1} in
|
||||||
"btrfs"|"BTRFS")
|
"btrfs"|"BTRFS")
|
||||||
if [[ ! $(command -v btrfs) ]]; then
|
if [[ ! $(command -v btrfs) ]]; then
|
||||||
@@ -388,19 +443,71 @@ creeMV()
|
|||||||
commandes_init_a_executer+=( "initEnv sousvolume ${1}" )
|
commandes_init_a_executer+=( "initEnv sousvolume ${1}" )
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
temoin_s=1
|
temoin_S=1
|
||||||
else
|
else
|
||||||
die "L'option ${1} a déjà été renseignée." 3
|
die "L'option ${1} a déjà été renseignée." 3
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
"-k") # KVM
|
"-k") # KVM
|
||||||
echo "KVM"
|
echo "KVM" # Debogage
|
||||||
if [[ ${temoin_k} -ne 1 ]]; then
|
if [[ ${temoin_k} -ne 1 ]]; then
|
||||||
commandes_a_executer+=( "nouvMV kvm")
|
commandes_a_executer+=( "nouvMV kvm")
|
||||||
temoin_k=1
|
temoin_k=1
|
||||||
else
|
else
|
||||||
die "L'option ${1} a déjà été renseignée." 3
|
die "L'option ${1} a déjà été renseignée." 3
|
||||||
fi
|
fi
|
||||||
|
;;
|
||||||
|
"-s") # Séries
|
||||||
|
echo "Séries" # Debogage
|
||||||
|
if [[ ${temoin_s} -ne 1 ]]; then
|
||||||
|
commandes_a_executer+=( "nouvMV series")
|
||||||
|
temoin_s=1
|
||||||
|
else
|
||||||
|
die "L'option ${1} a déjà été renseignée." 3
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
"-a") # Affichage
|
||||||
|
echo "Affichage" # Debogage
|
||||||
|
presenceParametre "$#" "${1}" "${parametre}"
|
||||||
|
shift
|
||||||
|
|
||||||
|
# (gtk|(spice:(<adresse ecoute>|<chemin socket>):(<tcp port ecoute>|unix)[:<mot de passe>]))
|
||||||
|
|
||||||
|
affichage_protocole=$( echo ${1} | awk -F: '{print $1}' )
|
||||||
|
if [[ -z "${affichage_protocole}" ]]; then
|
||||||
|
die "Le protocole de gestion de l'affichage n'est pas renseigné.\nSyntaxe attendue : (gtk|(spice:(<adresse ecoute>|<chemin socket>):(<tcp port ecoute>|unix)[:<mot de passe>]))." 5
|
||||||
|
fi
|
||||||
|
case ${affichage_protocole} in
|
||||||
|
"spice"|"SPICE")
|
||||||
|
affichage_spice_adresse_unix=$( echo ${1} | awk -F: '{print $2}' )
|
||||||
|
if [[ -z "${affichage_spice_adresse_unix}" ]]; then
|
||||||
|
die "L'adresse IPv4 ou le chemin unix n'est pas renseigné.\nSyntaxe attendue : (gtk|(spice:(<adresse ecoute>|<chemin socket>):(<tcp port ecoute>|unix)[:<mot de passe>]))." 5
|
||||||
|
fi
|
||||||
|
|
||||||
|
affichage_spice_port_unix=$( echo ${1} | awk -F: '{print $3}' )
|
||||||
|
if [[ -z "${affichage_spice_port_unix}" ]]; then
|
||||||
|
die "Le port ou le mot clé unix n'est pas renseigné.\nSyntaxe attendue : (gtk|(spice:(<adresse ecoute>|<chemin socket>):(<tcp port ecoute>|unix)[:<mot de passe>]))." 5
|
||||||
|
fi
|
||||||
|
|
||||||
|
affichage_spice_activ_mot_de_passe="vrai"
|
||||||
|
affichage_spice_mot_de_passe=$( echo ${1} | awk -F: '{print $4}' )
|
||||||
|
if [[ -z "${affichage_spice_mot_de_passe}" ]]; then
|
||||||
|
affichage_spice_activ_mot_de_passe="faux"
|
||||||
|
fi
|
||||||
|
|
||||||
|
commandes_a_executer+=( "nouvMV spice ${affichage_spice_adresse_unix} ${affichage_spice_port_unix} ${affichage_spice_activ_mot_de_passe} ${affichage_spice_mot_de_passe}")
|
||||||
|
;;
|
||||||
|
"gtk"|"GTK")
|
||||||
|
commandes_a_executer+=( "nouvMV gtk")
|
||||||
|
;;
|
||||||
|
"aucun"|"AUCUN")
|
||||||
|
commandes_a_executer+=( "nouvMV ecran faux")
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
die "${affichage_protocole} n'est pas une valeur connue.\nSyntaxe attendue : (gtk|((vnc|spice):<adresse ecoute>:<port ecoute>))." 5
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
;;
|
;;
|
||||||
# "-f") # Force
|
# "-f") # Force
|
||||||
# # Permet d'eviter la demande de confirmation de création
|
# # Permet d'eviter la demande de confirmation de création
|
||||||
@@ -418,7 +525,7 @@ creeMV()
|
|||||||
;;
|
;;
|
||||||
'--') # Autre parametres (champ libre)
|
'--') # Autre parametres (champ libre)
|
||||||
echo "parametres" # Debogage
|
echo "parametres" # Debogage
|
||||||
presenceParametre "$#" "$1"
|
presenceParametre "$#" "${1}" "${parametre}"
|
||||||
shift
|
shift
|
||||||
parametres="$@"
|
parametres="$@"
|
||||||
echo "parametres=${parametres}" # Debogage
|
echo "parametres=${parametres}" # Debogage
|
||||||
@@ -443,16 +550,30 @@ creeMV()
|
|||||||
}
|
}
|
||||||
|
|
||||||
genCmdIntRzo(){
|
genCmdIntRzo(){
|
||||||
# Création d'une interface non étiqueté (access)
|
# Création d'une interface simple
|
||||||
if [[ "${pont_init}" -eq 1 && "${vlan_init}" -eq 1 && "${interface_init}" -eq 1 ]]; then
|
if [[ "${pont_init}" -eq 1 && "${vlan_init}" -eq 2 && "${interface_init}" -eq 1 ]]; then
|
||||||
# Commandes à executer au demarrage
|
# Commandes à executer au demarrage
|
||||||
commandes_a_executer_on+=( "ip tuntap add ${interface} mode tap" )
|
commandes_a_executer_on+=( "${bin_ip} tuntap add ${interface} mode tap" )
|
||||||
commandes_a_executer_on+=( "ip link set ${interface} up" )
|
commandes_a_executer_on+=( "${bin_ip} link set ${interface} up" )
|
||||||
commandes_a_executer_on+=( "ip link set ${interface} master ${pont}" )
|
commandes_a_executer_on+=( "${bin_ip} link set ${interface} master ${pont}" )
|
||||||
commandes_a_executer_on+=( "bridge vlan del dev ${interface} vid 1 PVID untagged master" )
|
|
||||||
commandes_a_executer_on+=( "bridge vlan add dev ${interface} vid ${vlan} pvid untagged master" )
|
|
||||||
# Commandes à exectuer à l'arrêt
|
# Commandes à exectuer à l'arrêt
|
||||||
commandes_a_executer_off+=( "ip link del ${interface}" )
|
commandes_a_executer_off+=( "${bin_ip} link del ${interface}" )
|
||||||
|
|
||||||
|
# Réinitialisation des variables témoins
|
||||||
|
pont_init=0
|
||||||
|
vlan_init=0
|
||||||
|
interface_init=0
|
||||||
|
|
||||||
|
# Création d'une interface non étiqueté (access)
|
||||||
|
elif [[ "${pont_init}" -eq 1 && "${vlan_init}" -eq 1 && "${interface_init}" -eq 1 ]]; then
|
||||||
|
# Commandes à executer au demarrage
|
||||||
|
commandes_a_executer_on+=( "${bin_ip} tuntap add ${interface} mode tap" )
|
||||||
|
commandes_a_executer_on+=( "${bin_ip} link set ${interface} up" )
|
||||||
|
commandes_a_executer_on+=( "${bin_ip} link set ${interface} master ${pont}" )
|
||||||
|
commandes_a_executer_on+=( "${bin_bridge} vlan del dev ${interface} vid 1 PVID untagged master" )
|
||||||
|
commandes_a_executer_on+=( "${bin_bridge} vlan add dev ${interface} vid ${vlan} pvid untagged master" )
|
||||||
|
# Commandes à exectuer à l'arrêt
|
||||||
|
commandes_a_executer_off+=( "${bin_ip} link del ${interface}" )
|
||||||
|
|
||||||
# Réinitialisation des variables témoins
|
# Réinitialisation des variables témoins
|
||||||
pont_init=0
|
pont_init=0
|
||||||
@@ -461,15 +582,15 @@ genCmdIntRzo(){
|
|||||||
|
|
||||||
# Création d'une interface étiqueté (trunk)
|
# Création d'une interface étiqueté (trunk)
|
||||||
elif [[ "${pont_init}" -eq 1 && "${ieee8021q_init}" -eq 1 && "${interface_init}" -eq 1 ]]; then
|
elif [[ "${pont_init}" -eq 1 && "${ieee8021q_init}" -eq 1 && "${interface_init}" -eq 1 ]]; then
|
||||||
commandes_a_executer_on+=( "ip tuntap add ${interface} mode tap" )
|
commandes_a_executer_on+=( "${bin_ip} tuntap add ${interface} mode tap" )
|
||||||
commandes_a_executer_on+=( "ip link set ${interface} up" )
|
commandes_a_executer_on+=( "${bin_ip} link set ${interface} up" )
|
||||||
commandes_a_executer_on+=( "ip link set ${interface} master ${pont}" )
|
commandes_a_executer_on+=( "${bin_ip} link set ${interface} master ${pont}" )
|
||||||
commandes_a_executer_on+=( "bridge vlan del dev ${interface} vid 1 PVID untagged master" )
|
commandes_a_executer_on+=( "${bin_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
|
for ((id_label_vlan=0 ; "${nb_params_label}" - "${id_label_vlan}" ; id_label_vlan++)); do
|
||||||
commandes_a_executer_on+=( "bridge vlan add dev ${interface} vid ${label_vlan[${id_label_vlan}]} tagged master" )
|
commandes_a_executer_on+=( "${bin_bridge} vlan add dev ${interface} vid ${label_vlan[${id_label_vlan}]} tagged master" )
|
||||||
done
|
done
|
||||||
# Commandes à exectuer à l'arrêt
|
# Commandes à exectuer à l'arrêt
|
||||||
commandes_a_executer_off+=( "ip link del ${interface}" )
|
commandes_a_executer_off+=( "${bin_ip} link del ${interface}" )
|
||||||
|
|
||||||
# Réinitialisation des variables témoins
|
# Réinitialisation des variables témoins
|
||||||
pont_init=0
|
pont_init=0
|
||||||
@@ -492,7 +613,7 @@ recupParams(){
|
|||||||
# Récupération des données d'après le fichier de configuration
|
# Récupération des données d'après le fichier de configuration
|
||||||
if [ "${nom_param}" == "PONT" ]; then
|
if [ "${nom_param}" == "PONT" ]; then
|
||||||
if [[ ${verif_params} == "vrai" ]]; then
|
if [[ ${verif_params} == "vrai" ]]; then
|
||||||
if [[ $(ip link show "${val_param}" 2> /dev/null) ]]; then
|
if [[ $(${bin_ip} link show "${val_param}" 2> /dev/null) ]]; then
|
||||||
pont="${val_param}"
|
pont="${val_param}"
|
||||||
pont_init=1
|
pont_init=1
|
||||||
else
|
else
|
||||||
@@ -510,6 +631,8 @@ recupParams(){
|
|||||||
else
|
else
|
||||||
die "Le paramètre \"#PONT=votrePont\" est manquant dans le fichier ${chemin_mv}." 9
|
die "Le paramètre \"#PONT=votrePont\" est manquant dans le fichier ${chemin_mv}." 9
|
||||||
fi
|
fi
|
||||||
|
elif [[ "${val_param}" -eq 0 ]]; then
|
||||||
|
vlan_init=2
|
||||||
else
|
else
|
||||||
die "Le VLAN \"${val_param}\" n'est pas un entier compris entre 1 et 4094. Veuillez verifier le fichier ${chemin_mv}." 9
|
die "Le VLAN \"${val_param}\" n'est pas un entier compris entre 1 et 4094. Veuillez verifier le fichier ${chemin_mv}." 9
|
||||||
fi
|
fi
|
||||||
@@ -530,8 +653,8 @@ recupParams(){
|
|||||||
done
|
done
|
||||||
elif [ "${nom_param}" == "INTERFACE" ]; then
|
elif [ "${nom_param}" == "INTERFACE" ]; then
|
||||||
if [[ ${verif_params} == "vrai" ]]; then
|
if [[ ${verif_params} == "vrai" ]]; then
|
||||||
if [[ ! $(ip link show "${val_param}" 2> /dev/null) ]]; then
|
if [[ ! $(${bin_ip} link show "${val_param}" 2> /dev/null) ]]; then
|
||||||
if [[ "${vlan_init}" -eq 1 || "${ieee8021q_init}" -eq 1 ]]; then
|
if [[ "${vlan_init}" -eq 1 || "${vlan_init}" -eq 2 || "${ieee8021q_init}" -eq 1 ]]; then
|
||||||
interface="${val_param}"
|
interface="${val_param}"
|
||||||
interface_init=1
|
interface_init=1
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user