logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 10-06-2018 17:44:34

ztheoz
Membre
Distrib. : Debian Stretch
Noyau : Linux 4.9.0-3-amd64
Inscription : 12-04-2017

[Résolu] Lancer un script lors de la connecxion à un réseau

Bonjour,
j'aimerais lancer un script lors de la connexion à un réseau pour pouvoir modifier le fichier host. J'ai donc créé un script que j'ai ensuite placer sous :  /etc/network/if-up.d/ . Je l'ai ensuite rendu exécutable avec :

chmod +x host.sh


Mais le problème est que le script ne semble pas se lancer lors de la connexion à un réseau.
Voici ses droits :

-rwxr-xr-x 1 root root  686 juin  10 18:01 host.sh


Et voici le script (je pense qu'il est dégeu, mais il marche donc j'ai pas vraiment cherché à l'opti) :

#!/bin/sh
sleep 10
wifi=`sudo iwgetid -r`
if [[ $wifi == #SSID# ]]
then
        host=`sudo cat /etc/hosts`
        if [[ $host == *"#192.168.1.17"* ]]
        then
                sudo sed -i -r 's/.*#192.168.1.17*/192.168.1.17/g' /etc/hosts
        fi
else
        ping=`ping -c 5 -i 0.200 192.168.1.17`
                if [[ $ping == *"5 received"* ]]
                then
                        host=`sudo cat /etc/hosts`
                        if [[ $host == *"#192.168.1.17"* ]]
                        then
                                sudo sed -i -r 's/.*#192.168.1.17*/192.168.1.17/g' /etc/hosts
                        fi
                else
                        host=`sudo cat /etc/hosts`
                        if [[ $host == *"192.168.1.17"* ]]
                        then
                                sudo sed -i -r 's/.*192.168.1.17*/#192.168.1.17/g' /etc/hosts
                        fi
                fi
fi



Quelqu'un a-t-il une idée?
Merci.

Dernière modification par ztheoz (11-06-2018 22:22:27)

Hors ligne

#2 11-06-2018 13:36:58

LeDub
Membre
Lieu : Orry-la-Ville (60)
Distrib. : Debian GNU/Linux 10 (buster)
Noyau : 4.19.0-17-amd64
(G)UI : XFCE / KDE
Inscription : 18-02-2014

Re : [Résolu] Lancer un script lors de la connecxion à un réseau

Bonjour,

Côté aspect, je confirme que le script est un peu dégeu !
Je n'aime pas trop l'utilisation de "`commande linux`", je préfère le "$(commande linux)".
Es-tu certain qu'il faille utiliser un "sudo" ? Ce script n'est-il pas lancé avec le compte "root" ?

Je ne peux pas vérifier la sortie de "iwgetid", par contre je suis certain de la sortie d'un "cat", je te propose d'utiliser un bon "grep" plutôt que de récupérer dans une variable la sortie du sortie hosts ou du ping. En effet la taille d'une variable n'est pas illimitée, si ta sortie est trop grande ... bah ça plante.

LeDub pas certain de comprendre l'utilité de ton script, désolé !!!

Hors ligne

#3 11-06-2018 14:20:51

ztheoz
Membre
Distrib. : Debian Stretch
Noyau : Linux 4.9.0-3-amd64
Inscription : 12-04-2017

Re : [Résolu] Lancer un script lors de la connecxion à un réseau

Es-tu certain qu'il faille utiliser un "sudo" ? Ce script n'est-il pas lancé avec le compte "root" ?


En effet, j'ai retiré des commandes "sudo", elles m'étaient utiles quand je lançais le script manuellement.

par contre je suis certain de la sortie d'un "cat", je te propose d'utiliser un bon "grep" plutôt que de récupérer dans une variable la sortie du sortie hosts ou du ping. En effet la taille d'une variable n'est pas illimitée, si ta sortie est trop grande ... bah ça plante.


Je ferrais la modification plus tard, pour le moment le fichier hosts n'est pas trop grand.

LeDub pas certain de comprendre l'utilité de ton script, désolé !!!


C'est en fait un script qui permet de modifier le ficher hosts en fonction du réseau auquel je suis connecté, pour palier l'absence de loopback au niveau de ma box.


En attendant, le script marche parfaitement quand je le lance manuellement alors qu'il semble ne pas se lancer automatiquement un fois dans le dossier if-up.d/

Hors ligne

#4 11-06-2018 14:29:45

LeDub
Membre
Lieu : Orry-la-Ville (60)
Distrib. : Debian GNU/Linux 10 (buster)
Noyau : 4.19.0-17-amd64
(G)UI : XFCE / KDE
Inscription : 18-02-2014

Re : [Résolu] Lancer un script lors de la connecxion à un réseau

ztheoz a écrit :


En attendant, le script marche parfaitement quand je le lance manuellement alors qu'il semble ne pas se lancer automatiquement un fois dans le dossier if-up.d/


Pour en être certain, je te propose d'ajouter un "set -xv", dès la seconde ligne de ton script, pour afficher l'exécution du script et un "exec 1>/tmp/sortie.log" et "exec 2>/tmp/sortie.err" pour analyser l'exécution.
La lecture des fichiers "/tmp/sortie.*" t'aidera

J'ignore la mécanique qui se cache derrière l'exécution des scripts de "if-up.d", désolé !

LeDub qui espère aider !

Hors ligne

#5 11-06-2018 15:13:48

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Re : [Résolu] Lancer un script lors de la connecxion à un réseau

J'ai le même souçi à la maison, tiens.
Ma solution à venir c'est de changer de FAI (pour un membre de la FFDN) et de prendre un vrai routeur un peu moins con.

virtue_signaling.pngpalestine.png

Hors ligne

#6 11-06-2018 19:45:37

ztheoz
Membre
Distrib. : Debian Stretch
Noyau : Linux 4.9.0-3-amd64
Inscription : 12-04-2017

Re : [Résolu] Lancer un script lors de la connecxion à un réseau

Bon alors j'ai fait plusieurs modifications : premièrement, j'ai changé le dossier contenant le script, il est maintenant dans /etc/NetworkManager/dispatcher.d/
Ensuite j'ai ajouté les trois premières lignes, comme me le conseillait @LeDub.
J'ai alors remarqué que les conditions if posaient un problème à cause de "[[". En effet, cela ne pose pas de problème quand je le lance manuellement, mais quand le système le lance j’obtiens dans le fichier "sortie.err"

/etc/NetworkManager/dispatcher.d/host.sh: 26: /etc/NetworkManager/dispatcher.d/host.sh: [[: not found


J'ai donc changé les conditions

if [[ $wifi = SSID ]]

en

if [ $wifi = SSID ]


Mais je ne sais pas comment modifier celles-ci :

if [[ $host ==  *\#IP* ]]


Ce que je veux faire c'est tester si la variable host contient la chaîne "#IP" (par exemple "#192.168.0.1") mais

if [ $host ==  *\#IP* ]

ça ne marche pas :
si je fait la modification j'ai l'erreur

/etc/NetworkManager/dispatcher.d/host.sh: ligne 11 : [: trop d'arguments

Hors ligne

#7 11-06-2018 21:48:15

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Re : [Résolu] Lancer un script lors de la connecxion à un réseau

Si tu mettais #/bin/bash au début du script, les [[ ]] fonctionneraient normalement.

Pour rester avec sh, t'es obligé d'utiliser un outil externe, grep par exemple.

if echo $host | grep -q \#IP
then echo "match"
fi

Dernière modification par otyugh (11-06-2018 21:57:25)


virtue_signaling.pngpalestine.png

Hors ligne

#8 11-06-2018 22:20:47

ztheoz
Membre
Distrib. : Debian Stretch
Noyau : Linux 4.9.0-3-amd64
Inscription : 12-04-2017

Re : [Résolu] Lancer un script lors de la connecxion à un réseau

Si tu mettais #/bin/bash au début du script, les [[ ]] fonctionneraient normalement


Ok, merci, maintenant tout marche correctement.

Merci à tous pour votre aide!

Hors ligne

Pied de page des forums