From 99a8fae4145674a0bad4f8ad6e528f5d06eb016b Mon Sep 17 00:00:00 2001 From: Nicolas MORIN Date: Fri, 5 Jan 2024 09:17:46 +0100 Subject: [PATCH] Initialisation du projet --- README.md | 30 ++++ liste_des_arguments.km | 1 + liste_des_arguments.svg | 1 + liste_des_arguments.txt | 58 ++++++++ qemu-adm | 313 ++++++++++++++++++++++++++++++++++++++++ qemu-adm getops.sh | 218 ++++++++++++++++++++++++++++ 6 files changed, 621 insertions(+) create mode 100644 README.md create mode 100644 liste_des_arguments.km create mode 100644 liste_des_arguments.svg create mode 100644 liste_des_arguments.txt create mode 100755 qemu-adm create mode 100644 qemu-adm getops.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..7537de0 --- /dev/null +++ b/README.md @@ -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/' +``` \ No newline at end of file diff --git a/liste_des_arguments.km b/liste_des_arguments.km new file mode 100644 index 0000000..3b16d5d --- /dev/null +++ b/liste_des_arguments.km @@ -0,0 +1 @@ +{"root":{"data":{"id":"bopmq7303295","created":1704236115136,"text":"qemu-adm"},"children":[{"data":{"id":"cy4lae3a2g3k","created":1704236130518,"text":"cree","expandState":"expand","layout":null},"children":[{"data":{"id":"cy4lmfff29z4","created":1704237073799,"text":" | ","layout":null},"children":[{"data":{"id":"cy56sexx4ow0","created":1704296786234,"text":"-c (cpu)"},"children":[{"data":{"id":"cy56stpr0dts","created":1704296818392,"text":"::"},"children":[]}]},{"data":{"id":"cy56ti4q4n40","created":1704296871540,"text":"-m (memoire)"},"children":[{"data":{"id":"cy56tmajyvi8","created":1704296880600,"text":""},"children":[]}]},{"data":{"id":"cy56u0mfhjpc","created":1704296911793,"text":"-b (bios)"},"children":[{"data":{"id":"cy56ur9csmio","created":1704296969775,"text":""},"children":[]}]},{"data":{"id":"cy56vdodkx6o","created":1704297018573,"text":"-d (disque) (répétable)"},"children":[{"data":{"id":"cy56voaaco3k","created":1704297041666,"text":" | :[raw|qcow2]:"},"children":[]}]},{"data":{"id":"cy56ynmftgcg","created":1704297275316,"text":"-i (iso) (répétable)"},"children":[{"data":{"id":"cy56ysd7sagw","created":1704297285642,"text":""},"children":[]}]},{"data":{"id":"cy56yzenoo3k","created":1704297300968,"text":"-r (reseau) (répétable)"},"children":[{"data":{"id":"cy56zbbgb7cw","created":1704297326896,"text":""},"children":[]},{"data":{"id":"cy570wkvledc","created":1704297451541,"text":"[virtio|e1000]"},"children":[]},{"data":{"id":"cy571cd31jpc","created":1704297485898,"text":"pont=n"},"children":[]},{"data":{"id":"cy571cd31jpc","created":1704297485898,"text":"pont=o","expandState":"expand"},"children":[{"data":{"id":"cy57cya7rv28","created":1704298395620,"text":"","expandState":"expand"},"children":[{"data":{"id":"cy57chwng8ao","created":1704298359971,"text":"8021q=n"},"children":[]},{"data":{"id":"cy57darorim8","created":1704298422798,"text":"8021q=o"},"children":[{"data":{"id":"cy57dllcn9xc","created":1704298446359,"text":"t (trunk)"},"children":[{"data":{"id":"cy57eksxo9a8","created":1704298523005,"text":""},"children":[]}]},{"data":{"id":"cy57dz9weu4g","created":1704298476142,"text":"a (access)"},"children":[{"data":{"id":"cy57ebpw5fk0","created":1704298503231,"text":""},"children":[]}]}]}]}]}]},{"data":{"id":"cy57f8kq3ym8","created":1704298574751,"text":"-p (parametres)"},"children":[{"data":{"id":"cy57fguwr400","created":1704298592783,"text":""},"children":[]}]},{"data":{"id":"cy5v0rpkod1c","created":1704365147579,"text":"-s (sous-volume btrfs)"},"children":[]},{"data":{"id":"cy5yt4ea4su8","created":1704375832720,"text":"-f (force)"},"children":[]}]},{"data":{"id":"cy57gyfmnta8","created":1704298709404,"text":"-h (aide)"},"children":[]}]},{"data":{"id":"cy4lan6sed4w","created":1704236150322,"text":"demarre","expandState":"expand","layout":null,"note":"- L'execution de la MV ignore les commentaires du fichier de configuration.\n- le (-d) permet de créer un service dans systemed qui appellera le même commande sans le (-d)"},"children":[{"data":{"id":"cy4lmfff29z4","created":1704237073799,"text":"","layout":null},"children":[{"data":{"id":"cy4ludgi0d8g","created":1704237696424,"text":"-d (demon)","layout":null},"children":[]}]},{"data":{"id":"cy4lmkvzy96o","created":1704237085686,"text":"","layout":null},"children":[{"data":{"id":"cy4ludgi0d8g","created":1704237696424,"text":"-d (demon)","layout":null},"children":[]}]},{"data":{"id":"cy57h740fk74","created":1704298728292,"text":"-h (aide)"},"children":[]}]},{"data":{"id":"cy4lt0patclc","created":1704237590294,"text":"arret","layout":null,"expandState":"expand"},"children":[{"data":{"id":"cy4lmfff29z4","created":1704237073799,"text":"","layout":null},"children":[]},{"data":{"id":"cy4lmkvzy96o","created":1704237085686,"text":"","layout":null},"children":[]},{"data":{"id":"cy57h740fk74","created":1704298728292,"text":"-h (aide)"},"children":[]}]},{"data":{"id":"cy4lj7wp7i0w","created":1704236822337,"text":"active","layout":null,"expandState":"expand"},"children":[{"data":{"id":"cy4lmfff29z4","created":1704237073799,"text":"","layout":null},"children":[]},{"data":{"id":"cy4lmkvzy96o","created":1704237085686,"text":"","layout":null},"children":[]},{"data":{"id":"cy57h740fk74","created":1704298728292,"text":"-h (aide)"},"children":[]}]},{"data":{"id":"cy4ljryupurk","created":1704236866003,"text":"deactive","layout":null,"expandState":"expand"},"children":[{"data":{"id":"cy4lmfff29z4","created":1704237073799,"text":"","layout":null},"children":[]},{"data":{"id":"cy4lmkvzy96o","created":1704237085686,"text":"","layout":null},"children":[]},{"data":{"id":"cy57h740fk74","created":1704298728292,"text":"-h (aide)"},"children":[]}]},{"data":{"id":"cy5ut68m3zeo","created":1704364552292,"text":"liste"},"children":[{"data":{"id":"cy5utocqq51c","created":1704364591723,"text":"-s (sommaire)"},"children":[]},{"data":{"id":"cy5utsnbps00","created":1704364601070,"text":""},"children":[]},{"data":{"id":"cy5uu2xo49og","created":1704364623464,"text":"-d (démarré)"},"children":[]},{"data":{"id":"cy5uwdtxwyrk","created":1704364803911,"text":"-h (aide)"},"children":[]}]},{"data":{"id":"cy5uwk252eww","created":1704364817468,"text":"supprime","expandState":"expand"},"children":[{"data":{"id":"cy4lmfff29z4","created":1704237073799,"text":"","layout":null},"children":[]},{"data":{"id":"cy4lmkvzy96o","created":1704237085686,"text":"","layout":null},"children":[]},{"data":{"id":"cy5uwdtxwyrk","created":1704364803911,"text":"-h (aide)"},"children":[]},{"data":{"id":"cy5uxhpkrcao","created":1704364890719,"text":"-f (force)"},"children":[]}]}]},"template":"filetree","theme":"fresh-blue","version":"1.4.43"} \ No newline at end of file diff --git a/liste_des_arguments.svg b/liste_des_arguments.svg new file mode 100644 index 0000000..7d193d4 --- /dev/null +++ b/liste_des_arguments.svg @@ -0,0 +1 @@ +qemu-admcree<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=npont=o<nom du pont>8021q=n8021q=ot (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) \ No newline at end of file diff --git a/liste_des_arguments.txt b/liste_des_arguments.txt new file mode 100644 index 0000000..f47f4c8 --- /dev/null +++ b/liste_des_arguments.txt @@ -0,0 +1,58 @@ +qemu-adm + cree + | + -c (cpu) + :: + -m (memoire) + + -b (bios) + + -d (disque) (répétable) + | :[raw|qcow2]: + -i (iso) (répétable) + + -r (reseau) (répétable) + + [virtio|e1000] + pont=n + pont=o + + 8021q=n + 8021q=o + t (trunk) + + a (access) + + -p (parametres) + + -s (sous-volume btrfs) + -f (force) + -h (aide) + demarre + + -d (demon) + + -d (demon) + -h (aide) + arret + + + -h (aide) + active + + + -h (aide) + deactive + + + -h (aide) + liste + -s (sommaire) + + -d (démarré) + -h (aide) + supprime + + + -h (aide) + -f (force) \ No newline at end of file diff --git a/qemu-adm b/qemu-adm new file mode 100755 index 0000000..d3bc9b1 --- /dev/null +++ b/qemu-adm @@ -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 diff --git a/qemu-adm getops.sh b/qemu-adm getops.sh new file mode 100644 index 0000000..c39a658 --- /dev/null +++ b/qemu-adm getops.sh @@ -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