#1 Le 11/08/2022, à 10:35
- Bukalovski
[Résolu] Script Interface LAN/Tableau
Bonjour,
C'est la première fois que je publie sur ce site/forum,
J'espère donc bien respecter les règles en vigueur et aussi ne pas recréer une discussion déjà existante
En ce moment, je suis dans l'écriture d'un script bash, qui permet de configurer une machine en post-install système, via un fichier nommé "conf.txt". (Configuration comme IP, FQDN, NTP, Update etc..)
À terme, j'aimerais utiliser ce script sur des serveurs. Mais qui dit serveur, dit plusieurs interfaces LAN à manager
Là où je bloque dans mon avancée, c'est au moment où j'aimerais que mon script propose à l'utilisateur les interfaces de la machine pour que ce dernier en choisisse une et que la configuration IP soit affectée à la bonne interface LAN.
J'ai cru comprendre, que pour ce faire, il est possible d'utiliser un tableau via une boucle (ou plusieurs) mais malheureusement, je ne suis pas parvenu à trouver quoi que ce soit qui m'aide ..
Je serai volontiers preneur de tout "bout de piste" ou "solution"
Je vous remercie d'avance pour votre temps à me lire/répondre
Buka'
Dernière modification par Bukalovski (Le 24/08/2022, à 10:23)
Hors ligne
#2 Le 11/08/2022, à 12:10
- MicP
Re : [Résolu] Script Interface LAN/Tableau
Bonjour
… la bonne interface LAN. …
Comment déterminer quelle est la bonne ou la mauvaise ?
L'adresse IP à assigner à une interface réseau
dépends de la configuration réseau (adresse IP, masque, … etc)
de l'autre interface réseau à laquelle cette première interface sera connectée.
Si tu donnes une adresse IP fixe de 192.168.1.12 avec un masque de 255.255.255.0 à une interface réseau
et qu'elle est connectée à une autre interface réseau dont l'adresse IP est 192.168.0.13 avec un masque de 255.255.255.0
ces deux interfaces réseau ne pourront pas communiquer.
C'est juste un seul exemple parmi des centaines (voire des milliers) de combinaisons possibles,
dans lequel deux interfaces réseau ne pourront pas communiquer.
Tout ça pour dire que tout dépends du contexte, surtout quand il s'agit de communiquer sur un réseau
et qu'il est indispensable de bien connaître toute la configuration du réseau concerné
avant de pouvoir décider de comment il faudra configurer une interface réseau.
Dernière modification par MicP (Le 11/08/2022, à 12:14)
Hors ligne
#3 Le 11/08/2022, à 13:15
- Bukalovski
Re : [Résolu] Script Interface LAN/Tableau
Bonjour,
Merci pour votre réponse,
Je ne sais pas si c'est mon 1er message qui n'était pas clair, mais je ne cherche pas à faire communiquer deux cartes réseaux ensemble..
Il n'y a pas de "bonne" ou "mauvaise" interface.
Je souhaite simplement que via une interaction script avec le user, que l'on puisse choisir sur QUELLE interface de la machine en question, la configuration du fichier conf.txt sera affectée.
Hors ligne
#4 Le 11/08/2022, à 14:04
- Watael
Re : [Résolu] Script Interface LAN/Tableau
quelle commande utilises-tu pour afficher les interfaces ?
quelle(s) information(s) souhaites-tu conserver ?
quelle(s) information(s) souhaites-tu afficher à l'utilisateur ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 11/08/2022, à 14:20
- iznobe
Re : [Résolu] Script Interface LAN/Tableau
Bonjour , le plus simple serait de balancer le script en mettant evidence la partie qui pose probleme .
impossible d' expliquer ce que fait un script relativement complexe avec des mots , sinon le script serait inutile
Dernière modification par iznobe (Le 11/08/2022, à 14:20)
retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#6 Le 11/08/2022, à 14:25
- Watael
Re : [Résolu] Script Interface LAN/Tableau
je bloque [...] au moment où j'aimerais que mon script propose à l'utilisateur les interfaces de la machine
autant dire qu'il ne doit pas y avoir grand d'écrit dans le script !
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#7 Le 11/08/2022, à 14:37
- Bukalovski
Re : [Résolu] Script Interface LAN/Tableau
Bonjour tout le monde,
Merci pour vos réponses, pour vous répondre ;
1) quelle commande utilises-tu pour afficher les interfaces ?
2) quelle(s) information(s) souhaites-tu conserver ?
3) quelle(s) information(s) souhaites-tu afficher à l'utilisateur ?
1) Je souhaite utiliser par exemple "ip link | awk '{print$2}' | sed s/://
2) Seulement le nom des interfaces réseaux (exemple : enp0s31f6)
3) Une liste de ces interfaces réseaux, pour que l'utilisateur en choisisse une
----------------------------------------------------------------------------------------------
Comme c'est demandé gentiment, voici un bout du script :
# IPV4 Full-Auto
function IPV4 {
# Choix interface
echo -E `ip -c -br link`
echo -e ""
echo -e ${turquoise}${gras}${souligne}"Choisir & Saisir Nom interface"${reset}
#echo -en "/!\ Attention CASSE : "
#read interface
# Recup info config.txt
echo -e ${turquoise}${gras}${souligne}"Config a mettre en place :"${reset}
#interface=`ip link | awk '{print $2}' | awk 'NR ==3' | sed s/://` # Recup du nom de l'interface lan + Decoupage
testip=`awk '{print $3}' config.txt | awk 'NR ==3'` # Recup des informations depuis le fichier conf + Decoupage
testgtw=`awk '{print $3}' config.txt | awk 'NR ==4'`
testsearch=`awk '{print $3}' config.txt | awk 'NR ==7'`
rm -fr /etc/netplan/* # Effacer le contenu du dossier netplan
touch /etc/netplan/01-network-manager-all.yaml # Creation du fichier de conf ipv4 yaml + Inssertion avec les valeurs de conf.txt
echo "network:" > /etc/netplan/01-network-manager-all.yaml
echo " version: 2" >> /etc/netplan/01-network-manager-all.yaml
echo " renderer: NetworkManager" >> /etc/netplan/01-network-manager-all.yaml
echo " ethernets:" >> /etc/netplan/01-network-manager-all.yaml
echo " $interface:" >> /etc/netplan/01-network-manager-all.yaml
echo " link-local: [ ipv4 ]" >> /etc/netplan/01-network-manager-all.yaml
echo " addresses: [ $testip ]" >> /etc/netplan/01-network-manager-all.yaml
echo " gateway4: $testgtw" >> /etc/netplan/01-network-manager-all.yaml
echo " nameservers:" >> /etc/netplan/01-network-manager-all.yaml
echo " search: [ $testsearch ]" >> /etc/netplan/01-network-manager-all.yaml
# Verif boucle IF DNS1
dns1_if=`awk '{print $3}' config.txt | awk 'NR ==5'`
if [ $dns1_if=="" ]
then
dns1_if="Pas de configuration"
else
echo -e "${bleu}${gras}DNS1 = " $dns1_if
echo " addresses:" >> /etc/netplan/01-network-manager-all.yaml
echo " - "$testdns1"" >> /etc/netplan/01-network-manager-all.yaml
fi
# Verif boucle IF DNS2
dns2_if=`awk '{print $3}' config.txt | awk 'NR ==6'`
if [ $dns2_if=="" ]
then
dns2_if="Pas de configuration"
else
echo -e "${bleu}${gras}DNS2 = " $dns2_if
echo " - "$testdns2"" >> /etc/netplan/01-network-manager-all.yaml
fi
# Affichage echo IPV4 de conf.txt
echo -e "${bleu}${gras}Interface = " $interface
echo -e "${bleu}${gras}IP = " $testip
echo -e "${bleu}${gras}GTW = " $testgtw
echo -e "${bleu}${gras}DNS1 = " $dns1_if
echo -e "${bleu}${gras}DNS2 = " $dns2_if
echo -e "${bleu}${gras}Search = " $testsearch ${reset}
sleep 3
# Application du fichier yaml dans le systeme
sudo netplan generate
sudo netplan apply
systemctl restart systemd-networkd
echo -e "${turquoise}${gras}${souligne}Config IPV4 DONE"${reset}
sleep 2
}
Cela peut vous donner une idée, mais comme je bloque totalement sur la partie qui m'intèresse. Je n'avais pas trouvé pertinent de vous le partager.
Merci d'avance pour votre aide !
Dernière modification par Bukalovski (Le 11/08/2022, à 15:05)
Hors ligne
#8 Le 11/08/2022, à 14:47
- iznobe
Re : [Résolu] Script Interface LAN/Tableau
ok , bon il faudrait mettre ton code entre balises code ( ) afin de ne pas nous flinguer les yeux
Je souhaite simplement que via une interaction script avec le user, que l'on puisse choisir sur QUELLE interface de la machine en question, la configuration du fichier conf.txt sera affectée.
la logique voudrait alors que , tu recuperes dans un boucle la liste des interfaces dispo .
que tu proposes alors cette liste a l' utilisateur par un choix multiple numeroté du genre :
taper 1 pour l' interface eth0
taper 2 pour l'interface eth1
etc
il existe une fonction dedié a ca en bash .
puis en fonction du numero qu ' a entrer l' utilisateur tu aplliques alors la configuration .
autre possibilité , plus simple a coder , l ' example numero 2 de cette page : https://debian-facile.org/utilisateurs: … nteractifs
celui que je propose ci-dessus est le numero 4 dans la page . a toi de voir celui qui te parait le plus appropié / facile a mettre en oeuvre .
EDIT : j ' ai ecrit " liste " , car c ' est le mot humain qui vient naturellement .
Evidemment en langage code strict , le nom exact serait plutôt un tableau , mais ca ne change finalement pas grand chose . Veuillez m ' excuser pour mes abus de langages répétés ...
Dernière modification par iznobe (Le 11/08/2022, à 15:16)
retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#9 Le 11/08/2022, à 15:06
- Bukalovski
Re : [Résolu] Script Interface LAN/Tableau
Autant pour moi pour le code, je ne savais pas, j'ai corrigé du coup
J'imagine que tu parles de "case" pour le choix
En tout cas, tu résumes très bien (mieux que moi haha) ce que je voudrais
je vais jeter un œil au reste, merci beaucoup pour ton aide !
Hors ligne
#10 Le 11/08/2022, à 16:02
- Watael
Re : [Résolu] Script Interface LAN/Tableau
$ ip -br -4 l | grep -v '^lo' | cut -d ' ' -f1
enp19s0
wlp7s0
on les met dans un tableau :
$ readarray -t interfaces < <(ip -br -4 l | grep -v '^lo' | cut -d ' ' -f1)
on affiche la liste :
$ printf '%s\n' "${interfaces[@]}"
on demande la validation :
$ until [[ $interface =~ $(IFS='|'; echo "${interfaces[*]}") ]]; do read -p "quelle interface ? " interface; done
c'est tout ?
Dernière modification par Watael (Le 11/08/2022, à 20:01)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#11 Le 11/08/2022, à 17:03
- iznobe
Re : [Résolu] Script Interface LAN/Tableau
c'est tout ?
retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#12 Le 11/08/2022, à 17:40
- lynn
Re : [Résolu] Script Interface LAN/Tableau
IL manque un ) après
...echo "${interfaces[*]}" <--
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#13 Le 11/08/2022, à 20:02
- Watael
Re : [Résolu] Script Interface LAN/Tableau
corrigé. merci.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#14 Le 12/08/2022, à 16:05
- kholo
Re : [Résolu] Script Interface LAN/Tableau
salut,
je crois qu'il existe encore plus simple mais
ip token | cut -d ' ' -f4
doit renvoyer la même chose que ça
ip -br -4 l | grep -v '^lo' | cut -d ' ' -f1
Hors ligne
#15 Le 13/08/2022, à 12:55
- Bukalovski
Re : [Résolu] Script Interface LAN/Tableau
Bonjour tout le monde et merci encore pour vos réponses.
@Watael Merci à toi, si je puis te répondre, non ce n'est pas tout haha
Mon but ultime ne serait pas une saisie à la main de l'interface par l'utilisateur.
Il serait plutôt, lors de la demande de validation, que chaque interface soit reliée à un numéro, exemple :
1 = enp19s0
2 = wlp7s0
Pour qu'ensuite, l'utilisateur choisisse via un numéro.
@kholo Merci pour ton retour également
Hors ligne
#16 Le 13/08/2022, à 16:43
- Watael
Re : [Résolu] Script Interface LAN/Tableau
quelque chose comme ça ?
$ select iface in $(ip -br l | grep -v '^lo' | cut -d ' ' -f 1); do break; done; echo "$iface"
il faut élaborer quelques vérifications avant de sortir (break) de la boucle...
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#17 Le 16/08/2022, à 13:26
- Bukalovski
Re : [Résolu] Script Interface LAN/Tableau
C'est parfait !
Merci beaucoup pour ton aide @Watael
Hors ligne