Initialisation du projet

main
Nicolas MORIN 12 months ago
commit 99a8fae414

@ -0,0 +1,30 @@
# qemu-adm
Script qui permet...
## Liste des arguments
![Liste des arguments](./liste_des_arguments.svg "Liste des arguments")
Image générée avec l'[exention](https://github.com/ACTom/files_mindmap) `Mind Map` de Nextcloud qui s'appuie sur l'application [Kityminder](https://github.com/fex-team/kityminder-editor) ([Traduction en Anglais](https://github.com/ACTom/kityminder-editor)).
## Codes d'erreurs
|Code|Déscription |
|----|---------------------------------------------------------|
|0 |la commande s'est terminée sans erreur |
|1 |une erreur non spécifiée est survenue |
|2 |une option requise est manquante |
|3 |une option unique a été spécifiée plusieurs fois |
|4 |la machine virtuelle existe déjà à l'emplacement spécifié|
|5 |le paramètre d'une option est manquant |
## Dévelopement
### Mise en place
Nous avons démarré une machine virtuelle pour réaliser nos tests. Pour transférer le script nous avons créé cet alias :
```
alias qemu-adm-dev='cd ~/Projets/qemu-adm/ && rsync -av --delete-after --progress qemu-adm root@10.2.22.203:/usr/local/bin/'
```

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 42 KiB

@ -0,0 +1,58 @@
qemu-adm
cree
<nom machine> | <chemin machine>
-c (cpu)
<type de cpu>:<nombre de coeur>:<nombre de file d'execution>
-m (memoire)
<nombre de memoire>
-b (bios)
<ovmf>
-d (disque) (répétable)
<nom disque> | <chemin disque>:[raw|qcow2]:<capacité>
-i (iso) (répétable)
<chemin iso>
-r (reseau) (répétable)
<nom interface reseau>
[virtio|e1000]
pont=n
pont=o
<nom du pont>
8021q=n
8021q=o
t (trunk)
<serie de numero de vlan>
a (access)
<numero du vlan>
-p (parametres)
<commandes qemu>
-s (sous-volume btrfs)
-f (force)
-h (aide)
demarre
<nom machine>
-d (demon)
<chemin machine>
-d (demon)
-h (aide)
arret
<nom machine>
<chemin machine>
-h (aide)
active
<nom machine>
<chemin machine>
-h (aide)
deactive
<nom machine>
<chemin machine>
-h (aide)
liste
-s (sommaire)
<chemin absolu>
-d (démarré)
-h (aide)
supprime
<nom machine>
<chemin machine>
-h (aide)
-f (force)

@ -0,0 +1,313 @@
#!/bin/bash
base_chemin_mv=/tmp/ramdisk/qemu-adm
bin_qemu="qemu-system-x86_64"
die()
{
echo -e "\033[0;31m${1}\033[0m" 1>&2; exit ${2};
}
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
fi
}
nouvMV()
{
local l_option=${1}
local l_parametre=${2}
case "${l_option}" in
"nom")
echo "-name ${l_parametre} \\" > ${chemin_mv}
;;
"cpu")
echo "-cpu ${l_parametre} \\" >> ${chemin_mv}
;;
"memoire")
echo "-memoire ${l_parametre} \\" >> ${chemin_mv}
;;
esac
}
execCmd()
{
#verifEnv
for ((id_commande=0 ; "${#commandes_a_executer[*]}" - "${id_commande}"; id_commande++)); do
${commandes_a_executer["${id_commande}"]}
done
echo "########## FICHIER ##########" # Debogage
cat ${chemin_mv} # Debogage
}
confInteractive()
{
echo "confInteractive" # Debogage
}
presenceParametre()
{
echo "presenceParametre" # Debogage
local l_nombre_arguments="${1}"
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
if [[ "${l_nombre_parametres}" -eq 0 ]]; then
die "L'option ${l_nom_option} n'a pas de paramètre." 5
fi
}
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
commandes_a_executer+=("nouvMV nom ${nom_mv}")
shift # On retire le nom de la machine virtuelle passé en argument
echo 1 "$#" # Debogage
while [[ $# -gt 0 ]]; do
case "${1}" in
"-c") # Cpu (requis)
echo "cpu" # Debogage
parametre="${2}"
echo "cpu parametre=${parametre}" # Debogage
presenceParametre "$#" "$1"
shift
if [[ ${temoin_c} -ne 1 ]]; then
commandes_a_executer+=("nouvMV cpu ${1}")
temoin_c=1
else
die "L'option ${1} a déjà été renseignée." 3
fi
;;
"-m") # Memoire (requis)
echo "memoire" # Debogage
parametre="${2}"
echo "memoire parametre=${parametre}" # Debogage
presenceParametre "$#" "$1"
shift
if [[ ${temoin_m} -ne 1 ]]; then
commandes_a_executer+=( "nouvMV memoire ${1}")
temoin_m=1
else
die "L'option ${1} a déjà été renseignée." 3
fi
;;
"-b") # Bios
echo "bios" # Debogage
parametre="${2}"
echo "bios parametre=${parametre}" # Debogage
presenceParametre "$#" "$1"
shift
if [[ ${temoin_b} -ne 1 ]]; then
#commandes_a_executer+=( "nouvMV ${nom_mv}")
temoin_b=1
else
die "L'option ${1} a déjà été renseignée." 3
fi
;;
"-d") # Disque
echo "disque" # Debogage
parametre="${2}"
presenceParametre "$#" "$1"
echo "disque parametre=${parametre}" # Debogage
shift
;;
"-i") # Iso
echo "iso" # Debogage
parametre="${2}"
presenceParametre "$#" "$1"
echo "iso parametre=${parametre}" # Debogage
shift
;;
'-r') # Reseau
echo "reseau" # Debogage
parametre="${2}"
presenceParametre "$#" "$1"
echo "reseau parametre=${parametre}" # Debogage
shift
;;
'-p') # Parametres
echo "parametres" # Debogage
parametre="${2}"
presenceParametre "$#" "$1"
echo "parametres parametre=${parametre}" # Debogage
shift
;;
"-s") # Sous-volume BTRFS
echo "sous-volume" # Debogage
if [[ ${temoin_s} -ne 1 ]]; then
#commandes_a_executer+=( "nouvMV ${nom_mv}")
temoin_s=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
;;
*) # Autre
usage "cree"
;;
esac
shift
done
if [[ ${temoin_c} -ne 1 || ${temoin_m} -ne 1 ]]; then
die "Les parametres -c et -m sont obligatoires." 2
fi
#verifMVExiste ${nom_mv} &&
mkdir -p ${base_chemin_mv}/${nom_mv}
execCmd
}
usage()
{
case ${1} in
cree)
echo "usage_cree" # Debogage
die "" 0
;;
demarre)
echo "usage_demarre" # Debogage
die "" 0
;;
arret)
echo "usage_arret" # Debogage
die "" 0
;;
active)
echo "usage_active" # Debogage
die "" 0
;;
desactive)
echo "usage_desactive" # Debogage
die "" 0
;;
*)
echo "$(tput bold)Utilisation : $(basename ${0}) {-i|-s N} [OPTION]...$(tput sgr0)" 2>&1
echo -e "Permet de sauvegarder les sous-volumes BTRFS d'un serveur monté selon la procédure décrite par ycharbi.fr. Permet également d'effectuer un roulement des archives.\n"
echo -e "L'option -i ou -s sont requises pour l'exécution du script. Les deux peuvent êtres utilisées simultanément.\n"
echo -e "\n$(tput bold)Options :$(tput sgr0)"
echo -e "L'ordre des paramètres n'a pas d'importance.\n"
echo -e " -i\t\tExécute un instantané des sous-volumes BTRFS répertoriés dans le fichier texte passé en paramètre (via -f ou la variable \$fichierListeSousVolumes du présent script). Les entrées de cette liste doivent êtres conformes au retour de la commande \"btrfs subvolume list /\" pour être interprétés. Toute entrée invalide est ignorée"
echo -e " -s N\t\tSupprime l'instantané le plus ancien de chaque entrée de la liste. Un nombre désignant le seuil maximal d'instantané à conserver doit obligatoirement être passé en paramètre. L'instantané le plus ancien au delà de cette limite sera supprimé. Par sécurité, cette option ne supprime que le plus ancien. Si vous avez beaucoup d'instantanés au dessus de votre seuil, vous devrez répeter l'opération autant de fois que nécessaire"
echo -e " -f\t\tPermet de spécifier le fichier listant les sous-volumes à traiter pour gérer les instantanés. Ce fichier doit contenir des entrées correspondants parfaitement avec celles retournées par la commande \"btrfs subvolume list /\" pour être traités. Cette option est facultative. Si elle n'est pas renseignée, le script utilisera le fichier spécifié dans la variable \$fichierListeSousVolumes"
echo -e " -h\t\tAffiche cette aide. Si passée avec d'autres options, celles-ci seront ignorées pour n'afficher que l'aide"
echo -e "\n$(tput bold)Exemples :$(tput sgr0)"
echo -e "Réalisation d'un instantané avec un seuil de 13 archives (l'ancienne numéro 13 sera supprimée) :\n\t${0} -i -s 13 -f /root/cpt_instents/listeSousVolumes.txt\n"
echo -e "Peut être raccourci en :\n\t${0} -is 13 -f /root/cpt_instents/listeSousVolumes.txt"
echo -e "\nContenu du fichier listeSousVolumes.txt :"
echo -e "\tsystèmes/bullseye/@\n\tsystèmes/bullseye/@boot\n\ttmp/toto\n\tvar/lib/machines/web\n\tvar/lib/machines/courriel\n\tvar/lib/machines/routeur\n\tvar/lib/machines/wireguard"
echo -e "\nLe sous-volume tmp/toto n'existant pas, cette entrée sera ignorée sans entraver l'exécution du script. Il est également possible de commenter des lignes (en les rendant invalides)."
die ""
;;
esac
}
case ${1} in
cree)
echo "Créer" # Debogage
shift # On retire l'argument "cree"
if [[ "$#" -eq 0 ]]; then
confInteractive
creeMV #Ajouter les parametre sous forme de tableau
else
if [[ "${1}" == "-h" ]]; then
usage "cree"
fi
creeMV $*
fi
;;
demarre)
echo "Démarre" # Debogage
shift # On retire l'argument "demarre"
if [[ "$#" -eq 0 ]]; then
usage "demarre"
else
if [[ "${1}" == "-h" ]]; then
usage "demarre"
fi
nom_mv="${1}"
echo "nom_mv=${nom_mv}" # Debogage
shift
echo 1 "$#" # Debogage
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
usage "demarre"
exit 0
;;
*) #autre
usage "demarre"
;;
esac
shift
done
fi
;;
arret)
echo "Arrêt" # Debogage
shift # On retire l'argument "arret"
if [[ "${1}" == "-h" ]]; then
usage "arret"
fi
nom_mv="${1}"
echo "nom_mv=${nom_mv}"
;;
active)
echo "Active" # Debogage
shift # On retire l'argument "active"
if [[ "${1}" == "-h" ]]; then
usage "active"
fi
nom_mv="${1}"
echo "nom_mv=${nom_mv}"
;;
desactive)
echo "Désactive" # Debogage
shift # On retire l'argument "desactive"
if [[ "${1}" == "-h" ]]; then
usage "desactive"
fi
nom_mv="${1}"
echo "nom_mv=${nom_mv}"
;;
liste)
echo "Liste" # Debogage
shift # On retire l'argument "liste"
;;
*)
usage
;;
esac

@ -0,0 +1,218 @@
#!/bin/bash
base_chemin_mv=/tmp/ramdisk/qemu-adm/
bin_qemu="qemu-system-x86_64"
die()
{
echo -e "\033[0;31m${1}\033[0m" 1>&2; exit ${2};
}
verifMVExiste()
{
if [ -e "${base_chemin_mv}${nom_mv}" ]; then
die "La machine virtuelle ${base_chemin_mv}${nom_mv} existe déjà." 3
fi
}
nouvMV()
{
verifMVExiste ${nom_mv} && mkdir -p ${base_chemin_mv}${nom_mv}
cat << "_EOF_" >> ${base_chemin_mv}${nom_mv}/qemu-${nom_mv}.mv
-name ${nom_mv} \
_EOF_
}
execCmd()
{
#verifEnv
for ((id_commande=0 ; "${#commandes_a_executer[*]}" - "${id_commande}"; id_commande++)); do
${commandes_a_executer["${id_commande}"]}
done
}
usage()
{
case ${1} in
cree)
echo "usage_cree"
die "" 0
;;
demarre)
echo "usage_demarre"
die "" 0
;;
arret)
echo "usage_arret"
die "" 0
;;
active)
echo "usage_active"
die "" 0
;;
desactive)
echo "usage_desactive"
die "" 0
;;
*)
echo "$(tput bold)Utilisation : $(basename ${0}) {-i|-s N} [OPTION]...$(tput sgr0)" 2>&1
echo -e "Permet de sauvegarder les sous-volumes BTRFS d'un serveur monté selon la procédure décrite par ycharbi.fr. Permet également d'effectuer un roulement des archives.\n"
echo -e "L'option -i ou -s sont requises pour l'exécution du script. Les deux peuvent êtres utilisées simultanément.\n"
echo -e "\n$(tput bold)Options :$(tput sgr0)"
echo -e "L'ordre des paramètres n'a pas d'importance.\n"
echo -e " -i\t\tExécute un instantané des sous-volumes BTRFS répertoriés dans le fichier texte passé en paramètre (via -f ou la variable \$fichierListeSousVolumes du présent script). Les entrées de cette liste doivent êtres conformes au retour de la commande \"btrfs subvolume list /\" pour être interprétés. Toute entrée invalide est ignorée"
echo -e " -s N\t\tSupprime l'instantané le plus ancien de chaque entrée de la liste. Un nombre désignant le seuil maximal d'instantané à conserver doit obligatoirement être passé en paramètre. L'instantané le plus ancien au delà de cette limite sera supprimé. Par sécurité, cette option ne supprime que le plus ancien. Si vous avez beaucoup d'instantanés au dessus de votre seuil, vous devrez répeter l'opération autant de fois que nécessaire"
echo -e " -f\t\tPermet de spécifier le fichier listant les sous-volumes à traiter pour gérer les instantanés. Ce fichier doit contenir des entrées correspondants parfaitement avec celles retournées par la commande \"btrfs subvolume list /\" pour être traités. Cette option est facultative. Si elle n'est pas renseignée, le script utilisera le fichier spécifié dans la variable \$fichierListeSousVolumes"
echo -e " -h\t\tAffiche cette aide. Si passée avec d'autres options, celles-ci seront ignorées pour n'afficher que l'aide"
echo -e "\n$(tput bold)Exemples :$(tput sgr0)"
echo -e "Réalisation d'un instantané avec un seuil de 13 archives (l'ancienne numéro 13 sera supprimée) :\n\t${0} -i -s 13 -f /root/cpt_instents/listeSousVolumes.txt\n"
echo -e "Peut être raccourci en :\n\t${0} -is 13 -f /root/cpt_instents/listeSousVolumes.txt"
echo -e "\nContenu du fichier listeSousVolumes.txt :"
echo -e "\tsystèmes/bullseye/@\n\tsystèmes/bullseye/@boot\n\ttmp/toto\n\tvar/lib/machines/web\n\tvar/lib/machines/courriel\n\tvar/lib/machines/routeur\n\tvar/lib/machines/wireguard"
echo -e "\nLe sous-volume tmp/toto n'existant pas, cette entrée sera ignorée sans entraver l'exécution du script. Il est également possible de commenter des lignes (en les rendant invalides)."
die ""
;;
esac
}
requis=0
case ${1} in
cree)
echo "Créer"
shift
if [[ "${1}" == "-h" ]]; then
usage "cree"
fi
nom_mv="${1}"
echo "nom_mv=${nom_mv}"
shift
echo 1 "$#"
while getopts "c:m:b:d:i:r:p:h" option; do
case "${option}" in
c) #cpu
requis=1
if [[ ${temoin_c} -ne 1 ]]; then
echo "cpu"
#nom_mv="${OPTARG}"
#commandes_a_executer+=( "nouvMV ${nom_mv}")
#echo "${OPTARG}"
temoin_c=1
else
die "L'option -${option} a déjà été renseignée." 2
fi
;;
m) #memoire
requis=1
if [[ ${temoin_m} -ne 1 ]]; then
echo "memoire"
#nom_mv="${OPTARG}"
#commandes_a_executer+=( "nouvMV ${nom_mv}")
#echo "${OPTARG}"
temoin_m=1
else
die "L'option -${option} a déjà été renseignée." 2
fi
;;
b) #bios
requis=1
if [[ ${temoin_b} -ne 1 ]]; then
echo "bios"
#nom_mv="${OPTARG}"
#commandes_a_executer+=( "nouvMV ${nom_mv}")
#echo "${OPTARG}"
temoin_b=1
else
die "L'option -${option} a déjà été renseignée." 2
fi
;;
d) #disque
echo "disque"
;;
i) #iso
echo "iso"
;;
r) #reseau
echo "reseau"
;;
p) #parametres
echo "parametres"
;;
h) #aide
usage "cree"
exit 0
;;
*) #autre
usage "cree"
;;
esac
done
#shift $((OPTIND-1))
# if [[ ${requis} -eq 1 ]]; then
# execCmd
# else
# echo -e "Les options \"-i\" ou \"-s\" doivent êtres fournies.\n" >&2
# usage
# fi
;;
demarre)
echo "Démarre"
shift
if [[ "${1}" == "-h" ]]; then
usage "demarre"
fi
nom_mv="${1}"
echo "nom_mv=${nom_mv}"
shift
echo 1 "$#"
while getopts "d" option; do
case "${option}" in
d) #demon
requis=1
if [[ ${temoin_d} -ne 1 ]]; then
echo "demon"
#nom_mv="${OPTARG}"
#commandes_a_executer+=( "nouvMV ${nom_mv}")
#echo "${OPTARG}"
temoin_d=1
else
die "L'option -${option} a déjà été renseignée." 2
fi
;;
*) #autre
usage "demarre"
;;
esac
done
;;
arret)
echo "Arrêt"
shift
if [[ "${1}" == "-h" ]]; then
usage "arret"
fi
nom_mv="${1}"
echo "nom_mv=${nom_mv}"
;;
active)
echo "Active"
shift
if [[ "${1}" == "-h" ]]; then
usage "active"
fi
nom_mv="${1}"
echo "nom_mv=${nom_mv}"
;;
desactive)
echo "Désactive"
shift
if [[ "${1}" == "-h" ]]; then
usage "desactive"
fi
nom_mv="${1}"
echo "nom_mv=${nom_mv}"
;;
*)
usage
;;
esac
Loading…
Cancel
Save