Nous sommes actuellement le Jeu 17 Avr 2014, 23:27
Messages depuis 12 | 24 | 36 heures.




Aller à la page 1, 2  Suivant  [ 22 messages ]  Publier une réponse
 Sujet du message: [Montage réseau] Script attente de réseau pour systemd
MessagePublié: Mer 13 Fév 2013, 02:14 
Maître du Kyudo
Avatar de l’utilisateur

Inscrit le: Sam 30 Mai 2009, 15:48
Messages: 8679
Bonjour,

Comme de nombreuses personnes possèdent des soucis avec les montages réseaux, et comme je n’apprécie pas trop l'utilisation de x-systemd.automount j'ai essayé de corriger ce point en m'inspirant de NetworkManager-wait-online.service

J'ouvre ce sujet pour discuter de mon implémentation, pour permettre de suggérer des améliorations et pourquoi pas le mettre dans le Wiki et si oui quel serait le meilleur endroit ?

Donc voici les 2 fichiers nécessaires :
/usr/bin/network-wait-online.sh
Code:
#!/bin/bash

ADDR_PING=$1
TIMEOUT=$2

TIMEWAIT=$(( TIMEOUT * 5 ))
resping=3

for timeleft in $(eval "echo {$TIMEWAIT..0}")
do
    timeleft=$(( timeleft / 5 ))
    /usr/bin/ping -c1 -W$timeleft $ADDR_PING
    resping=$?
    if [ $resping -eq 2 ] ; then
        sleep 0.2
    else
        break
    fi
done

exit $resping

/etc/systemd/system/network-wait-online.service
Code:
[Unit]
Description=Network Wait Online
After=dhcpcd@eth0.service
Wants=network.target
Before=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/network-wait-online.sh 192.168.0.254 10

[Install]
WantedBy=network.target

Le service à été conçu pour être exécuté après mon service réseau qui est dhcpcd@eth0.service, mais il peut être remplacé par n'importe quel autre service réseau (Wicd, netcfg, ...)

_________________
Zsh | KDE 4 | PC fixe : core i7, carte nvidia | Portable : Asus ul80vt
Titre d'un sujet : [Thème] Sujet (état)


Haut
 Profil  
 
 Sujet du message: Re: [Montage réseau] Script attente de réseau pour systemd
MessagePublié: Mer 13 Fév 2013, 03:06 
archer
Avatar de l’utilisateur

Inscrit le: Jeu 06 Mai 2010, 05:44
Messages: 141
Plutôt pratique comme script, il pourrait être sympa de le faire fonctionner pour tous types de services réseau et tous types d'interfaces et pourquoi pas le mettre sur AUR ?

J'ai testé avec cette modification et ça fonctionne pour mon interface dhcpcd@enp0s25, avant :
Code:
After=dhcpcd@eth0.service

Par :
Code:
After=dhcpcd.service dhcpcd@.service netcfg.service netcfg@.service


Il pourrait aussi être pratique d'initier le service de cette façon :
Code:
systemctl enable network-wait-online@192.168.0.254

De cette façon pas besoin de modifier network-wait-online.service au cas par cas, on peut choisir qui pinger, que ce soit 8.8.8.8 / 192.168.1.254 / google.fr etc...

Je trouve les timers trop court aussi.
Pour pinger Internet c'est plus long et ça peut servir de vouloir attendre un accès au net pour les services comme ntpd par exemple.


Haut
 Profil  
 
 Sujet du message: Re: [Montage réseau] Script attente de réseau pour systemd
MessagePublié: Mer 13 Fév 2013, 09:56 
Maître du Kyudo
Avatar de l’utilisateur

Inscrit le: Mer 12 Sep 2007, 16:03
Messages: 6660
J'allais écrire que pour les dhcpcd*, il me paraît plus simple de modifier le service qu'on utiliserait éventuellement pour le faire attendre une ip quand j'ai vu qu'en fait le dhcpcd@.service fait déjà cela, il ne rend la main que quand il a une adresse IP.
Pour dhcpcd.service, on peut le modifier pour ne pas lui passer le -b

_________________
[Thème] Sujet (état)


Haut
 Profil  
 
 Sujet du message: Re: [Montage réseau] Script attente de réseau pour systemd
MessagePublié: Mer 13 Fév 2013, 10:40 
archer
Avatar de l’utilisateur

Inscrit le: Jeu 06 Mai 2010, 05:44
Messages: 141
J'ai testé en faisant quelques modifications et ça marche aussi :

/usr/lib/systemd/system/network-wait-online@.service :
Code:
[Unit]
Description=Network Wait Online
After=dhcpcd.service dhcpcd@.service netcfg.service netcfg@.service
Wants=network.target
Before=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/network-wait-online.sh %I

[Install]
WantedBy=multi-user.target


/usr/bin/network-wait-online.sh :
Code:
#!/bin/bash

for i in `seq 1 20`
do
        if eval "ping -c1 -W1 $1"; then
                sleep 2
                break
        else
                sleep 1
        fi
done

exit


Activation du service :
Code:
systemctl enable network-wait-online@8.8.4.4


systemctl status network-wait-online@8.8.4.4 :
Code:
network-wait-online@8.8.4.4.service - Network Wait Online
     Loaded: loaded (/usr/lib/systemd/system/network-wait-online@.service; enabled)
     Active: inactive (dead) since mer. 2013-02-13 09:44:46 CET; 1min 9s ago
    Process: 323 ExecStart=/usr/bin/network-wait-online.sh %I (code=exited, status=0/SUCCESS)

févr. 13 09:44:40 tetsu-arch network-wait-online.sh[323]: connect: Network is unreachable
févr. 13 09:44:41 tetsu-arch network-wait-online.sh[323]: connect: Network is unreachable
févr. 13 09:44:42 tetsu-arch network-wait-online.sh[323]: connect: Network is unreachable
févr. 13 09:44:43 tetsu-arch network-wait-online.sh[323]: connect: Network is unreachable
févr. 13 09:44:44 tetsu-arch network-wait-online.sh[323]: PING 8.8.4.4 (8.8.4.4) 56(84) bytes of data.
févr. 13 09:44:44 tetsu-arch network-wait-online.sh[323]: 64 bytes from 8.8.4.4: icmp_seq=1 ttl=47 time=29.5 ms
févr. 13 09:44:44 tetsu-arch network-wait-online.sh[323]: --- 8.8.4.4 ping statistics ---
févr. 13 09:44:44 tetsu-arch network-wait-online.sh[323]: 1 packets transmitted, 1 received, 0% packet loss, time 0ms
févr. 13 09:44:44 tetsu-arch network-wait-online.sh[323]: rtt min/avg/max/mdev = 29.599/29.599/29.599/0.000 ms
févr. 13 09:44:46 tetsu-arch systemd[1]: Started Network Wait Online.


Haut
 Profil  
 
 Sujet du message: Re: [Montage réseau] Script attente de réseau pour systemd
MessagePublié: Mer 13 Fév 2013, 10:51 
Maître du Kyudo
Avatar de l’utilisateur

Inscrit le: Sam 30 Mai 2009, 15:48
Messages: 8679
@Tetsumaki Merci pour les suggestions, en effet on peut l'améliorer via passage de paramètre, mais sinon les timings sont déjà très long et celui-ci est un paramètre, personnellement je l'ai fixé à 10 secondes.

Une petite explication de mon script :
Citer:
- On lance un ping avec 10 secondes de timeout
- S'il retourne 2 car aucune IP n'est encore fixé, on attend 0.2 seconde
- On lance un ping avec 10 secondes de timeout
- ...
- On lance un ping avec 9 secondes de timeout
- ...
- Si le ping retourne autre chose que 2, soit le ping a réussi soit il y a échoué après le timeout
- On retourne le code d’erreur pour en informer systemd


@Tetsumaki Ton script est pire que le mien, de plus pourquoi ajouter un sleep 2 ? Certes mon sleep 0.2 est un peu bourrin mais au moins on a une meilleur réactivité, après on peut très bien ajuster le code pour avoir un pas un peu moins brutale

@Tuxce J'utilise dhcpcd@.service et le service lancé après qui a comme dépendance network.target n'a pas immédiatement accès au réseau en IPv4 uniquement en IPv6...

_________________
Zsh | KDE 4 | PC fixe : core i7, carte nvidia | Portable : Asus ul80vt
Titre d'un sujet : [Thème] Sujet (état)


Haut
 Profil  
 
 Sujet du message: Re: [Montage réseau] Script attente de réseau pour systemd
MessagePublié: Mer 13 Fév 2013, 10:59 
archer
Avatar de l’utilisateur

Inscrit le: Jeu 06 Mai 2010, 05:44
Messages: 141
@benjarobin je suis d'accord il est crade mon network-wait-online.sh je voulais simplifier pour mes tests.
Je continue les tests.


Haut
 Profil  
 
 Sujet du message: Re: [Montage réseau] Script attente de réseau pour systemd
MessagePublié: Mer 13 Fév 2013, 11:34 
Maître du Kyudo
Avatar de l’utilisateur

Inscrit le: Dim 15 Août 2010, 11:48
Messages: 9050
Localisation: Basse-Normandie
Sur /usr/bin/network-wait-online.sh:
benjarobin a écrit:
Code:
    /usr/bin/ping -c1 -W$timeleft $ADDR_PING
    resping=$?
    if [ $resping -eq 2 ] ; then
        sleep 0.2
    else
        break
    fi

:?: Je suppose que tu as testé mais je demande quand même: le sleep, même minime, est nécessaire ? ( :aimepas: ) C'est-à-dire sortir sur un code autre que 2 et continuer la boucle sinon n'est pas suffisant ou la latence entre les 2 pings n'est pas suffisante sans le sleep ?

Sinon je ne peux pas tester, pas de montage réseau :P ... mais ce qui a été dit avant comme le passage des paramètres est mieux.

benjarobin a écrit:
pourquoi pas le mettre dans le Wiki et si oui quel serait le meilleur endroit ?

C'est une colle vu qu'il n'y a pas de pages vraiment dédiées à ça... :)
On pourrait rajouter quelque chose sur la page de Systemd (équivalent à l'automount du wiki en) mais je pense qu'un script "officieux" n'y a pas trop sa place et la page est déjà bien chargée...
:idea: Du coup, je verrai bien ça sur la page Services dans une autre section qui pourrait regrouper tous les services de ce type comme on peut en trouver sur le wiki (en): https://wiki.archlinux.org/index.php/Systemd/Services (et du coup en rapatrier éventuellement quelques uns ou au moins lier leur page).

_________________
«The following statement is not true. The previous statement is true.» :nage:


Haut
 Profil  
 
 Sujet du message: Re: [Montage réseau] Script attente de réseau pour systemd
MessagePublié: Mer 13 Fév 2013, 12:55 
Maître du Kyudo
Avatar de l’utilisateur

Inscrit le: Sam 30 Mai 2009, 15:48
Messages: 8679
@FoolEcho Ping retourne comme code d'erreur 2 si le réseau n'est pas accessible et dans ce cas bien que l'on est définit un timeout via l'option "-W" ping retourne immédiatement. Donc en gros on essaye/on vérifie toute les 0.2 secondes que l'on est du réseau, et une fois que l'on en a, on fait un ping avec le timeout passé en paramètre

Si on ne met pas de sleep, on a 100% d'usage CPU car le ping retourne de suite

_________________
Zsh | KDE 4 | PC fixe : core i7, carte nvidia | Portable : Asus ul80vt
Titre d'un sujet : [Thème] Sujet (état)


Haut
 Profil  
 
 Sujet du message: Re: [Montage réseau] Script attente de réseau pour systemd
MessagePublié: Mer 13 Fév 2013, 22:30 
Maître du Kyudo
Avatar de l’utilisateur

Inscrit le: Sam 30 Mai 2009, 15:48
Messages: 8679
Suite à vos nombreuses remarques que j'ai pu analyser cette fois ci à tête reposée, je propose une nouvelle version en ayant essayé de prendre en compte toute vos améliorations
/etc/systemd/system/network-wait-online@.service
Code:
[Unit]
Description=Network Wait Online
After=dhcpcd.service dhcpcd@.service netcfg.service netcfg@.service
Wants=network.target
Before=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/network-wait-online.sh %I

[Install]
WantedBy=network.target

/usr/bin/network-wait-online.sh
Code:
#!/bin/bash

ADDR_PING=$1
TIMEOUT=$2

[ -z "$ADDR_PING" ] && exit 5
[ -z "$TIMEOUT" ] && TIMEOUT=30

timeEnd=$(( $(date +%s) + TIMEOUT ))
timeLeft=$TIMEOUT
resPing=4

while [ $timeLeft -gt 0 ] ; do

   /usr/bin/ping -c1 -W1 $ADDR_PING
   resPing=$?
   if [ $resPing -eq 0 ] ; then
      break
   else
      sleep 0.3
      timeLeft=$(( timeEnd - $(date +%s) ))
   fi

done

exit $resPing

Ou alors cette version qui n'utilise pas de ping, mais qui à l’inconvénient de fournir toujours un résultat s'il y a une gateway valide de définit et que l'on possède 2 cartes réseaux : Une externe et une interne, l'IP de l'externe ayant été positionnée avant celle de l'interne... Cela devient difficile de faire du générique, je crains que ce soit plus simple de fournir des exemples et les personnes pourront s'en inspirer :D
Code:
#!/bin/bash

ADDR_ROUTE=$1
TIMEOUT=$2

[ -z "$ADDR_ROUTE" ] && exit 5
[ -z "$TIMEOUT" ] && TIMEOUT=30

nbStepLeft=$(( TIMEOUT * 5 ))

while [ $nbStepLeft -gt 0 ] ; do

    /usr/sbin/ip route get $ADDR_ROUTE && exit 0
    sleep 0.2
    nbStepLeft=$(( nbStepLeft - 1 ))

done

exit 1


Merci encore... J'attends les critiques de pied ferme :D

_________________
Zsh | KDE 4 | PC fixe : core i7, carte nvidia | Portable : Asus ul80vt
Titre d'un sujet : [Thème] Sujet (état)


Haut
 Profil  
 
 Sujet du message: Re: [Montage réseau] Script attente de réseau pour systemd
MessagePublié: Jeu 14 Fév 2013, 12:26 
archer
Avatar de l’utilisateur

Inscrit le: Jeu 06 Mai 2010, 05:44
Messages: 141
Je vais tester ça de suite.


Haut
 Profil  
 
 Sujet du message: Re: [Montage réseau] Script attente de réseau pour systemd
MessagePublié: Jeu 14 Fév 2013, 12:59 
archer
Avatar de l’utilisateur

Inscrit le: Jeu 06 Mai 2010, 05:44
Messages: 141
Ça fonctionne super bien.
J'ai supprimé :
Code:
noauto,x-systemd.automount

dans mon /etc/fstab et aucune erreur au boot.
Pour mes tests j'ai désactivé le lancement automatique de gdm pour bien voir le déroulement.

Je l'ai activé de cette façon :
Code:
systemctl enable network-wait-online@8.8.4.4

Je me suis fais un paquet pour l'installer proprement sur mon serveur, ça te dérange si je le publie sur AUR ou pas ?


Haut
 Profil  
 
 Sujet du message: Re: [Montage réseau] Script attente de réseau pour systemd
MessagePublié: Jeu 14 Fév 2013, 13:17 
Maître du Kyudo
Avatar de l’utilisateur

Inscrit le: Sam 30 Mai 2009, 15:48
Messages: 8679
Je préfère le gérer moi même, je suis l'auteur et donc son mainteneur, ce sera plus pratique... Le but de se sujet est d'avoir des retours avant une éventuelle publication sur AUR, Wiki...

_________________
Zsh | KDE 4 | PC fixe : core i7, carte nvidia | Portable : Asus ul80vt
Titre d'un sujet : [Thème] Sujet (état)


Haut
 Profil  
 
 Sujet du message: Re: [Montage réseau] Script attente de réseau pour systemd
MessagePublié: Jeu 14 Fév 2013, 13:27 
archer
Avatar de l’utilisateur

Inscrit le: Jeu 06 Mai 2010, 05:44
Messages: 141
Aucun problème benjarobin, c'est tout à ton honneur ne t'inquiètes pas.
Quoi qu'il arrive j'ai mis le paquet pour mes tests ici provisoirement http://tetsumaki.free.fr/network-wait-online/
Je ne permettrais pas de le mettre sur AUR.
Il pourrait être sympa de faire encore une modification sans doute.

Avant :
Code:
After=dhcpcd.service dhcpcd@.service netcfg.service netcfg@.service

Après :
Code:
After=dhcpcd.service dhcpcd@.service netcfg.service netcfg@.service NetworkManager.service wicd.service


Je sais qu'il existe NetworkManager-wait-online.service pour NetworkManager mais je me suis dis que ça ne coûtait rien d'ajouter NetworkManager.service et wicd.service.


Haut
 Profil  
 
 Sujet du message: Re: [Montage réseau] Script attente de réseau pour systemd
MessagePublié: Jeu 14 Fév 2013, 14:26 
Maître du Kyudo
Avatar de l’utilisateur

Inscrit le: Sam 30 Mai 2009, 15:48
Messages: 8679
Je me posais aussi cette question, doit-on ajouter tous les gestionnaires réseaux, par défaut je ne pense pas que mettre NetworkManager soit une bonne idée, car NetworkManager à un comportement très particulier et différent des autres, en effet je compter ajouter wicd à la liste

_________________
Zsh | KDE 4 | PC fixe : core i7, carte nvidia | Portable : Asus ul80vt
Titre d'un sujet : [Thème] Sujet (état)


Haut
 Profil  
 
 Sujet du message: Re: [Montage réseau] Script attente de réseau pour systemd
MessagePublié: Jeu 14 Fév 2013, 21:17 
archer
Avatar de l’utilisateur

Inscrit le: Jeu 06 Mai 2010, 05:44
Messages: 141
Oui tu dois avoir raison concernant networkmanager et ne pas le mettre est une bonne idée.
J'ai installé mon paquet sur le serveur et sur le pc et ça marche au poil.


Haut
 Profil  
 
 Sujet du message: Re: [Montage réseau] Script attente de réseau pour systemd
MessagePublié: Ven 15 Fév 2013, 20:00 
archer
Avatar de l’utilisateur

Inscrit le: Jeu 06 Mai 2010, 05:44
Messages: 141
Ça avance benjarobin ?
Pour ma part je trouve ça nickel comme il est actuellement, adopté sur mes 2 machines, j'ai testé pas mal de reboot et aucune erreur avec smbd ou autres.


Haut
 Profil  
 
 Sujet du message: Re: [Montage réseau] Script attente de réseau pour systemd
MessagePublié: Ven 15 Fév 2013, 21:08 
Maître du Kyudo
Avatar de l’utilisateur

Inscrit le: Sam 30 Mai 2009, 15:48
Messages: 8679
Je m'en occuperai ce Week-end, rien ne presse non ?

_________________
Zsh | KDE 4 | PC fixe : core i7, carte nvidia | Portable : Asus ul80vt
Titre d'un sujet : [Thème] Sujet (état)


Haut
 Profil  
 
 Sujet du message: Re: [Montage réseau] Script attente de réseau pour systemd
MessagePublié: Ven 15 Fév 2013, 21:09 
archer
Avatar de l’utilisateur

Inscrit le: Jeu 06 Mai 2010, 05:44
Messages: 141
Non pas du tout.


Haut
 Profil  
 
 Sujet du message: Re: [Montage réseau] Script attente de réseau pour systemd
MessagePublié: Sam 16 Fév 2013, 17:57 
Maître du Kyudo
Avatar de l’utilisateur

Inscrit le: Sam 30 Mai 2009, 15:48
Messages: 8679
Voici une première version : https://aur.archlinux.org/packages/network-wait-online/

_________________
Zsh | KDE 4 | PC fixe : core i7, carte nvidia | Portable : Asus ul80vt
Titre d'un sujet : [Thème] Sujet (état)


Haut
 Profil  
 
 Sujet du message: Re: [Montage réseau] Script attente de réseau pour systemd
MessagePublié: Sam 16 Fév 2013, 23:01 
archer
Avatar de l’utilisateur

Inscrit le: Jeu 06 Mai 2010, 05:44
Messages: 141
Salut, il y a une erreur dans ton PKGBUILD et je me suis permis 2-3 modifications.

1. Manque les guillemets, du coup erreur à la création du package si je me trouve dans un répertoire avec des espaces.
J'ai eu cette erreur en me trouvant dans "/home/tetsumaki/test 123/" :
Code:
==> ERREUR : Vous n'avez pas les permissions nécessaires (accès en écriture) pour enregistrer les paquets dans /home/tetsumaki/test.
    Abandon...


2. Je pense qu'il pourrait être sympa d'ajouter systemd en dépendance, en théorie on l'a forcément mais sur une vieille install, non.

3. C'est pas très propre d'utiliser mkdir dans un PKGBUILD, il est préférable d'utiliser install -D, de plus ça raccourci le code et c'est plus lisible.
Exemple :
Code:
package() {
   install -Dm755 "${srcdir}/network-wait-online.sh" "${pkgdir}/usr/bin/network-wait-online"
   install -Dm644 "${srcdir}/network-wait-online@.service" "${pkgdir}/usr/lib/systemd/system/network-wait-online@.service"
}


Je me suis permis de mettre le paquet ainsi que le paquet source modifié ici : http://tetsumaki.free.fr/network-wait-online/
Pour comparer :
Ton PKGBUILD : https://aur.archlinux.org/packages/ne/n ... e/PKGBUILD
Mon PKGBUILD : http://tetsumaki.free.fr/network-wait-online/PKGBUILD
Je me suis mis en contributor, libre à toi d'accepter, en tout cas ton script me tiens à coeur réellement ça m'honorerait, sérieusement je me vois mal ne pas l'utiliser, ça évite vraiment pas mal d'erreur au boot avec mes services réseaux (smbd, ntpd, ...)

Je pense aussi qu'il serait sympa d'ajouter un network-wait-online.install avec une fonction post_instal() expliquant en anglais que pour activer le service il faut tapper systemctl enable network-wait-install@maValeur, maValeur correspondant à la une ip publique/privé ou un dns exemple 8.8.4.4 ou google.fr par exemple.

PS : j'ai voté pour ton paquet, t'as même pas voté pour ton propre paquet! :)


Haut
 Profil  
 
Afficher les messages publiés depuis:  Trier par  
Aller à la page 1, 2  Suivant  [ 22 messages ]  Répondre au sujet


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum

Rechercher pour:
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduction réalisée par Maël Soucaze © 2010 phpBB.fr
phpBB SEO


© 2009-2010 Archlinux.fr ~ Communauté Francophone Arch Linux