Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 roll

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 roll

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 sad..

Je serai volontiers preneur de tout "bout de piste" ou "solution" smile
Je vous remercie d'avance pour votre temps à me lire/répondre smile

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 big_smile

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 ! big_smile


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 : tongue

# 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 ( https://forum.ubuntu-fr.org/img/fluxtoolbar/smooth/bt_pre.png ) afin de ne pas nous flinguer les yeux roll

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 wink

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 ! smile

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

Watael a écrit :

c'est tout ?

big_smile lol


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. smile


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 yikescool

Hors ligne