Adaptation des explications à l'évolution des outils et amélioration de celles-ci.master
parent
1fe2c771c1
commit
613a060f17
@ -1,30 +1,64 @@
|
|||||||
# Fichier *ifup.sh*
|
# Usage
|
||||||
Ce fichier est le script d'initialisation des interfaces réseau pour les conteneurs *Systemd-nspawn* que j'ai écrit.
|
Les fichiers *ifup.sh* et *ifdown.sh* sont les scripts de gestion des *VLAN* pour les conteneurs [Systemd-nspawn](https://doc.ycharbi.fr/index.php/Conteneurs_-_systemd) écrit par mes soins. Ils se bases sur la technologie de [filtrage des *VLAN*](https://doc.ycharbi.fr/index.php/Vlan_-_linux) du noyau *Linux*.
|
||||||
|
* *ifup.sh* permet la création et le placement d'une interface réseau dans un *VLAN* ou dans un tronc *802.1Q*. Il se charge également de l'intégrer à un pont spécifique (l'existence préalable de ce dernier est requise)
|
||||||
|
* *ifdown* se charge de supprimer les interfaces créées par *Systemd-nspawn* après l'extinction du conteneur
|
||||||
|
|
||||||
|
Afin qu'ils s'exécutent au démarrage et à l'arrêt d'un conteneur, il faut [modifier](https://philip-trauner.me/blog/post/machinectl-autologin) le service `systemd-nspawn@.service` pour y ajouter les directives adéquates (notez l'emplacement des fichiers) :
|
||||||
|
|
||||||
Il gère la création de plusieurs interfaces réseau ainsi que les VLAN et peut mettre ces interfaces dans des ponts différents. Afin qu'il s'exécute au démarrage d'un conteneur, il faut ajouter à la directive *[Service]* du fichier */lib/systemd/system/systemd-nspawn@.service* le paramètre suivant:
|
|
||||||
``` bash
|
``` bash
|
||||||
|
systemctl edit systemd-nspawn@.service
|
||||||
|
```
|
||||||
|
|
||||||
|
Collez-y le contenu suivant. Ceci aura pour effet de créer le fichier `/etc/systemd/system/systemd-nspawn@.service.d/override.conf` qui persistera aux mises à jour du paquet *systemd-container*.
|
||||||
|
|
||||||
|
``` ini
|
||||||
|
[Service]
|
||||||
ExecStartPre=/etc/systemd/nspawn/ifup.sh %i
|
ExecStartPre=/etc/systemd/nspawn/ifup.sh %i
|
||||||
|
ExecStart=
|
||||||
|
ExecStart=systemd-nspawn --quiet --keep-unit --boot --link-journal=try-guest --network-veth --settings=override --machine=%i
|
||||||
|
ExecStopPost=/etc/systemd/nspawn/ifdown.sh %i
|
||||||
```
|
```
|
||||||
|
*Note : j'ai également retiré le `-U` des paramètres d'initialisation, d'où les deux `ExecStart=` (le premier, vide, permettant de réinitialiser la valeur par défaut). Ceci correspond à un besoin personnel et est facultatif.*
|
||||||
|
|
||||||
Il faut au préalable ajouter deux lignes de commentaires au dessus de chaque directive "*Interface=*" dans le fichier de configuration de votre conteneur:
|
|
||||||
``` bash
|
Pour configurer les interfaces réseaux d'un conteneur, il faut ajouter deux lignes de commentaires **au dessus** de chaque directive `Interface=` dans le [fichier de configuration](https://doc.ycharbi.fr/index.php/Conteneurs_-_systemd#Fichier_de_configuration) de celui-ci.
|
||||||
|
|
||||||
|
Pour une interface non étiqueté :
|
||||||
|
|
||||||
|
``` ini
|
||||||
PONT=votrepont
|
PONT=votrepont
|
||||||
VLAN=vid
|
VLAN=vid
|
||||||
```
|
```
|
||||||
Le script vérifie que ce que vous avez renseigné est valide. Si non, il ne fait rien. Le fichier "*apache1.nspawn*" est un exemple (se trouve dans */etc/systemd/nspawn/* sur le système de test).
|
|
||||||
|
|
||||||
Pour tester le script sans créer les interfaces, veillez remplacer les lignes d'initialisation du tableau *commandes_a_executer[]* de la fonction *generCmdIntRzo()* par les lignes suivantes:
|
Pour une interface de tronc 802.1Q :
|
||||||
|
``` ini
|
||||||
|
PONT=votrepont
|
||||||
|
8021Q=vid1,vi2,vid3
|
||||||
|
```
|
||||||
|
|
||||||
``` bash
|
Il est possible de mixer les notions au travers de plusieurs interfaces comme dans l'exemple suivant (fichier `/etc/systemd/nspawn/web.nspawn`) :
|
||||||
commandes_a_executer+=( "echo \"ip link add ${interface} type veth peer name ${interface}_h\"" )
|
``` ini
|
||||||
commandes_a_executer+=( "echo \"ip link set ${interface}_h up\"" )
|
[Network]
|
||||||
commandes_a_executer+=( "echo \"ip link set ${interface}_h master ${pont}\"" )
|
#PONT=br0
|
||||||
commandes_a_executer+=( "echo \"bridge vlan del dev ${interface}_h vid 1 PVID untagged master\"" )
|
#VLAN=100
|
||||||
commandes_a_executer+=( "echo \"bridge vlan add dev ${interface}_h vid ${vlan} pvid untagged master\"" )
|
Interface=web_100
|
||||||
|
#PONT=br0
|
||||||
|
#VLAN=121
|
||||||
|
Interface=web_121
|
||||||
|
#PONT=br0
|
||||||
|
#8021Q=5,210
|
||||||
|
Interface=web_T1
|
||||||
|
#PONT=br0
|
||||||
|
#8021Q=181,1109
|
||||||
|
Interface=web_T2
|
||||||
```
|
```
|
||||||
# À tester
|
|
||||||
Tester le comportement du script lorsque aucun fichier de configuration n'existe et en fonction du résultat, ajouter un test sur ce critaire.
|
Le script vérifie que ce que vous avez renseigné est valide. S'il rencontre la moindre erreur, il s'interrompt sans modifier le système et vous oriente sur le problème.
|
||||||
<!-- # http://www.ixany.org/docs/Shell_Les_tableaux_en_bash.html
|
|
||||||
# https://abs.traduc.org/abs-5.1-fr/ch26.html
|
:warning: *J'attire votre attention sur le fait que l'ajout, en cours de fonctionnement, de directives `Interface=` dans le ficher de configuration de votre conteneur a pour effet de neutraliser l'exécution d'*ifdown.sh*. Ceci est intrinsèque à la façon dont il fonctionne. Les interfaces créées par *ifup.sh* devront alors êtres supprimées manuellement.* :warning:
|
||||||
# https://forums.commentcamarche.net/forum/affich-27586475-supprimer-tout-ce-qui-precede-un-pattern-de-caracteres
|
# Tests sans altérations
|
||||||
-->
|
Si vous voulez modifier les scripts, il peut être pratique d'afficher les commandes générées au lieu de les appliquer lors de vos tests. Pour ce faire, vous pouvez ajouter la commande `echo` devant l'action d'exécution comme suit dans la fonction `execCmdIntRzo()` :
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
echo ${commandes_a_executer["${id_commande_rzo}"]}
|
||||||
|
```
|
Loading…
Reference in new issue