#!/bin/bash # Script de suppression des interfaces réseau d'un conteneur Systemd-nspawn if [[ -n "${1}" ]]; then nom_conteneur="${1}" else echo "Erreur: aucun nom de conteneur renseigné." exit 1 fi # Fonction exécuté en deuxième. Permet la génération de commandes pour la suppression d'interfaces réseau genCmdIntRzo(){ if [[ "${interface_init}" -eq 1 ]]; then commandes_a_executer+=( "ip link delete ${interface}" ) # Réinitialisation de la variable témoin interface_init=0 fi } # Fonction exécuté en premier. Récupère les noms des interfaces réseau dans le fichier de configuration du conteneur recupParams(){ declare -a params_int=( $(grep "^Interface" /etc/systemd/nspawn/"${nom_conteneur}".nspawn) ) nb_params="${#params_int[*]}" for ((id_param_fichier=0 ; "${nb_params}" - "${id_param_fichier}" ; id_param_fichier++)); do nom_param=$(echo "${params_int[${id_param_fichier}]}" | sed "s/=.*//" | sed "s/#//") val_param=$(echo "${params_int[${id_param_fichier}]}" | sed "s/.*=//") # Récupération des données d'après le fichier de configuration if [ "${nom_param}" == "Interface" ]; then if [[ $(find /sys/class/net/ -type l ! -lname '*/devices/virtual/net/*' -printf '%f ' | grep "${val_param}" 2> /dev/null) ]]; then interface="${val_param}" interface_init=0 elif [[ $(ip link show "${val_param}" 2> /dev/null) ]]; then interface="${val_param}" interface_init=1 else echo "Erreur: l'interface ${val_param} n'est pas 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 } # Fonction d'éxécution des commandes préparées dans la fonction genCmdIntRzo() execCmdIntRzo(){ for ((id_commande_rzo=0 ; "${#commandes_a_executer[*]}" - "${id_commande_rzo}"; id_commande_rzo++)); do ${commandes_a_executer["${id_commande_rzo}"]} done } # Fonction d'exécution du script de suppression d'interfaces réseau pour le conteneur en cours principale(){ recupParams execCmdIntRzo } principale