Compare commits
9 Commits
main
...
91e7f10ddd
| Author | SHA1 | Date | |
|---|---|---|---|
| 91e7f10ddd | |||
| 1cd2b0d307 | |||
| 9664e92772 | |||
| 3ee9dc70a0 | |||
| e6f3efb910 | |||
| 90c7d9c0a7 | |||
| 6661e6721b | |||
| 79e05a4003 | |||
| c23108c8df |
@@ -20,6 +20,7 @@ Image générée avec l'[exention](https://github.com/ACTom/files_mindmap) `Mind
|
||||
|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 |
|
||||
|6 |dépendance manquante |
|
||||
|
||||
## Dévelopement
|
||||
|
||||
|
||||
Regular → Executable
Regular → Executable
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
Regular → Executable
@@ -1,7 +1,8 @@
|
||||
#!/bin/bash
|
||||
|
||||
base_chemin_mv=/tmp/ramdisk/qemu-adm
|
||||
bin_qemu="qemu-system-x86_64"
|
||||
base_chemin_mv="/tmp/ramdisk/qemu-adm"
|
||||
bin_qemu="/usr/bin/qemu-system-x86_64"
|
||||
bin_qemu_img="/usr/bin/qemu-img"
|
||||
|
||||
die()
|
||||
{
|
||||
@@ -18,16 +19,36 @@ verifMVExiste()
|
||||
nouvMV()
|
||||
{
|
||||
local l_option=${1}
|
||||
local l_parametre=${2}
|
||||
echo "l_option=${l_option}" # Debogage
|
||||
shift
|
||||
case "${l_option}" in
|
||||
"nom")
|
||||
echo "-name ${l_parametre} \\" > ${chemin_mv}
|
||||
echo "-name ${1} \\" > ${chemin_mv}
|
||||
;;
|
||||
"cpu")
|
||||
echo "-cpu ${l_parametre} \\" >> ${chemin_mv}
|
||||
echo "-cpu ${1} -smp cores=${2},theads=${3},sockets=1 \\" >> ${chemin_mv}
|
||||
;;
|
||||
"memoire")
|
||||
echo "-memoire ${l_parametre} \\" >> ${chemin_mv}
|
||||
echo "-m ${1} \\" >> ${chemin_mv}
|
||||
;;
|
||||
"bios")
|
||||
case "${1}" in
|
||||
"OVMF")
|
||||
cp /usr/share/ovmf/OVMF.fd ${base_chemin_mv}/OVMF.fd
|
||||
echo "-drive if=pflash,format=raw,file=${base_chemin_mv}/OVMF.fd \\" >> ${chemin_mv}
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
"disque")
|
||||
echo "${2}"
|
||||
if [[ ! -z ${2} ]]; then
|
||||
if [[ ! -f ${bin_qemu_img} ]]; then
|
||||
die "Le paquet qemu-utils n'est pas installé." 6
|
||||
fi
|
||||
echo "Création du disque..." # Debogage
|
||||
qemu-img create -f ${2} ${1} ${3}
|
||||
fi
|
||||
echo "-drive file=${1},if=virtio \\" >> ${chemin_mv}
|
||||
;;
|
||||
esac
|
||||
}
|
||||
@@ -79,7 +100,27 @@ creeMV()
|
||||
presenceParametre "$#" "$1"
|
||||
shift
|
||||
if [[ ${temoin_c} -ne 1 ]]; then
|
||||
commandes_a_executer+=("nouvMV cpu ${1}")
|
||||
# <type CPU>:<nombres cœurs CPU>:<nombre files d'execution>
|
||||
|
||||
cpu_type=$( echo ${1} | awk -F: '{print $1}' )
|
||||
echo "${cpu_type}" # Debogage
|
||||
if [[ -z "${cpu_type}" ]]; then
|
||||
die "Le type de CPU n'est pas renseigné.\nSyntaxe attendue : <type CPU>:<nombres cœurs CPU>:<nombre files d'execution>." 5
|
||||
fi
|
||||
|
||||
cpu_nombre_de_coeurs=$( echo ${1} | awk -F: '{print $2}' )
|
||||
echo "${cpu_nombre_de_coeurs}" # Debogage
|
||||
if [[ -z "${cpu_nombre_de_coeurs}" ]]; then
|
||||
die "Le nombre de cœurs n'est pas renseigné.\nSyntaxe attendue : <type CPU>:<nombres cœurs CPU>:<nombre files d'execution>." 5
|
||||
fi
|
||||
|
||||
cpu_nombre_de_files_d_execution=$( echo ${1} | awk -F: '{print $3}' )
|
||||
echo "${cpu_nombre_de_files_d_execution}" # Debogage
|
||||
if [[ -z "${cpu_nombre_de_files_d_execution}" ]]; then
|
||||
die "Le nombre de files d'execution n'est pas renseigné.\nSyntaxe attendue : <type CPU>:<nombres cœurs CPU>:<nombre files d'execution>." 5
|
||||
fi
|
||||
|
||||
commandes_a_executer+=("nouvMV cpu ${cpu_type} ${cpu_nombre_de_coeurs} ${cpu_nombre_de_files_d_execution}")
|
||||
temoin_c=1
|
||||
else
|
||||
die "L'option ${1} a déjà été renseignée." 3
|
||||
@@ -105,7 +146,14 @@ creeMV()
|
||||
presenceParametre "$#" "$1"
|
||||
shift
|
||||
if [[ ${temoin_b} -ne 1 ]]; then
|
||||
#commandes_a_executer+=( "nouvMV ${nom_mv}")
|
||||
case ${1} in
|
||||
"ovmf"|"OVMF")
|
||||
if [[ ! -f "/usr/share/ovmf/OVMF.fd" ]]; then
|
||||
die "Le paquet ovmf n'est pas installé." 6
|
||||
fi
|
||||
commandes_a_executer+=( "nouvMV bios $(echo ${1} | tr '[:lower:]' '[:upper:]')")
|
||||
;;
|
||||
esac
|
||||
temoin_b=1
|
||||
else
|
||||
die "L'option ${1} a déjà été renseignée." 3
|
||||
@@ -117,6 +165,33 @@ creeMV()
|
||||
presenceParametre "$#" "$1"
|
||||
echo "disque parametre=${parametre}" # Debogage
|
||||
shift
|
||||
|
||||
# <chemin disque>|(<chemin disque>|<nom disque>):(raw|qcow2):<capacité>)
|
||||
|
||||
disque_nom=$( echo ${1} | awk -F: '{print $1}' )
|
||||
echo "disque_nom=${disque_nom}" # Debogage
|
||||
if [[ -z "${disque_nom}" ]]; then
|
||||
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}"
|
||||
fi
|
||||
|
||||
|
||||
disque_format=$( echo ${1} | awk -F: '{print $2}' )
|
||||
echo "disque_format=${disque_format}" # Debogage
|
||||
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
|
||||
fi
|
||||
|
||||
disque_capacite=$( echo ${1} | awk -F: '{print $3}' )
|
||||
echo "disque_capacite=${disque_capacite}" # Debogage
|
||||
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
|
||||
fi
|
||||
|
||||
|
||||
commandes_a_executer+=( "nouvMV disque ${disque_nom} ${disque_format} ${disque_capacite}")
|
||||
;;
|
||||
"-i") # Iso
|
||||
echo "iso" # Debogage
|
||||
@@ -181,6 +256,8 @@ usage()
|
||||
case ${1} in
|
||||
cree)
|
||||
echo "usage_cree" # Debogage
|
||||
# qemu-img: Invalid image size specified. You may use k, M, G, T, P or E suffixes for
|
||||
# qemu-img: kilobytes, megabytes, gigabytes, terabytes, petabytes and exabytes.
|
||||
die "" 0
|
||||
;;
|
||||
demarre)
|
||||
|
||||
@@ -1,218 +0,0 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user