Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
"/usr/bin/nm-online" unzureichend
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum
View previous topic :: View next topic  
Author Message
schmidicom
Veteran
Veteran


Joined: 09 Mar 2006
Posts: 1924
Location: Schweiz

PostPosted: Tue Dec 10, 2019 3:55 pm    Post subject: "/usr/bin/nm-online" unzureichend Reply with quote

Das kleine Programm "/usr/bin/nm-online" soll ja dabei helfen festzustellen wann ein vom NetworkManager verwaltetes Netzwerk einen funktionalen Zustand erreicht hat. Aber auf meinen Installationen konnte ich mich bis jetzt ehrlich gesagt nicht wirklich darauf verlassen (das Programm gibt grünes Licht lange bevor das Netzwerk wirklich ready ist) und nach der einen oder anderen Google-Suche scheine ich da nicht der einzige zu sein. Dummerweise wird aber genau dieses Programm während dem booten benutzt um den Status der Konnektivität zu definieren. Unter systemd passiert das im Target "network-online.target", bei OpenRC weiss ich es gerade nicht auswendig, wovon dann je nach installierter Software doch vieles abhängig sein kann.

Kleines Beispiel:
Auf einem meiner Rechner soll beim booten über ein Mount-Unit eine SMB-Freigabe eingebunden werden und dieses hat logischerweise das "network-online.target" als Abhängigkeit drin, denn ohne funktionierendes Netzwerk ist ja auch kein SMB-Server erreichbar. Da aber "network-online.target" wegen dem Verhalten von "/usr/bin/nm-online" viel zu früh auf ready geht scheitert das mounten jedoch kläglich.
Klar könnte man in diesem speziellen Beispiel jetzt so lange an diesem Mount-unit herumbasteln bis es trotzdem funktioniert aber es gibt ja auch andere Dinge die erst starten dürfen wenn das Netzwerk wirklich da ist. Und einen eventuellen Workaround an vielen stellen rein zu basteln ist keine Lösung.

Da ich nicht in der Lage bin das Verhalten von "/usr/bin/nm-online" zu ändern habe ich für mich nun folgendes gemacht:
1. In der Konfiguration vom NetworkManager die Konnektivitätsüberwachung konfiguriert (nein das Programm "/usr/bin/nm-online" interessiert sich nicht dafür).
/etc/NetworkManager/NetworkManager.conf:
...
[connectivity]
uri=http://nmcheck.gnome.org/check_network_status.txt
interval=60
...

2. Ein Python-Script geschrieben das diesen Status per dbus abfragt.
/opt/nm-connectivity.py:
#!/usr/bin/python
import argparse, dbus, time

parser = argparse.ArgumentParser()
parser.add_argument("-cs", "--connectivity_state", nargs='?', metavar='0..4', type=int, choices=[0, 1, 2, 3, 4], default=4,
                    help="Which connectivity status to wait for (Default is 4). Please read the following website for more information. https://developer.gnome.org/NetworkManager/stable/nm-dbus-types.html#NMConnectivityState")
parser.add_argument("-t", "--timeout", nargs='?', type=int, default=10,
                    help="How long the script should wait for the specified connectivity before reaching the timeout. (Default is 10 seconds)")
args = parser.parse_args()

bus = dbus.SystemBus()
nm = bus.get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager')

counter = 0
while counter < args.timeout:
    connectivity = nm.Get('org.freedesktop.NetworkManager', 'Connectivity', dbus_interface='org.freedesktop.DBus.Properties')
    if connectivity == args.connectivity_state:
        exit(0)
    else:
        counter = counter + 1
    time.sleep(1)
exit(1)

3. Ein Service-Unit, welches sich im Target "network-online.target" installiert, für das Python-Script erstellt und aktiviert.
/etc/systemd/system/nm-connectivity.service:
[Unit]
Description=Waiting for NetworkManager Connectivity
Requires=NetworkManager.service
After=NetworkManager.service
Before=network-online.target

[Service]
Type=oneshot
ExecStart=/opt/nm-connectivity.py -cs 4 -t 30
RemainAfterExit=yes

[Install]
WantedBy=network-online.target

ACHTUNG: Das ganze ist noch nicht grossartig getestet aber bis jetzt sieht es so aus als ob es tut was es soll.

Der Grund warum ich das im Diskussionsforum poste ist weil das weder eine Anleitungs- noch ein HelpMe-Thread werden sollte sondern weil ich das Verhalten von "/usr/bin/nm-online" einfach mal generell ansprechen und meine bisherigen Lösungsversuche dazu zeigen wollte.
Was sind eure so Erfahrung mit "/usr/bin/nm-online"?

Hier noch ein interessanter Link zu dem Thema:
https://bugzilla.redhat.com/show_bug.cgi?id=1759956
_________________
Lenovo - ThinkPad P16s Gen 2 - 21K9CTO1WW
Back to top
View user's profile Send private message
mike155
Advocate
Advocate


Joined: 17 Sep 2010
Posts: 4438
Location: Frankfurt, Germany

PostPosted: Sat Dec 14, 2019 6:26 pm    Post subject: Reply with quote

Beim Wechsel auf Systemd habe ich gelernt, dass es den Zustand "network is up and running" dort nicht mehr gibt und dass man seine Services so schreiben soll/muss, dass dieser Zustand nicht mehr benötigt wird. Siehe https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/.

Warum versuchst Du den Zustand "network is up and running" abzufragen? Wäre es nicht besser, Du würdest Deine Dienste so schreiben bzw. konfigurieren, dass sie auch funktionieren, wenn das Netzwerk (noch) nicht "up and running" ist?

Systemd ist eben nicht nur "ein anderes" Init-System. Es bringt auch ganz andere Konzepte mit sich - teilweise gute, teilweise schlechte. Ich glaube, dass man sich darauf einlassen muss. Ansonsten wird man mit Systemd nicht glücklich werden. Was das Konzept "network is up and running" angeht: hier haben die Systemd-Entwickler m. E. Recht: es ist ein uraltes Konzept. Vor 30 Jahren hat es prima funktioniert - als die Rechner nur eine Netzwerk-Schnittstelle hatten. Heute, wo viele Rechner mehr als ein Netzwerk-Interface haben, ist es weniger sinnvoll - weil es eben auch viele Zwischen-Zustände zwischen "up" und "down" gibt. Also kann die Lösung nur sein, dass Services auch laufen müssen, wenn das Netzwerk noch nicht oder nicht mehr vollständig funktioniert.


Last edited by mike155 on Sat Dec 14, 2019 7:48 pm; edited 1 time in total
Back to top
View user's profile Send private message
schmidicom
Veteran
Veteran


Joined: 09 Mar 2006
Posts: 1924
Location: Schweiz

PostPosted: Sat Dec 14, 2019 7:31 pm    Post subject: Reply with quote

1. Es sind nicht "meine" Dienste, ich habe sie nicht programmiert.
2. Klar wäre es schön wenn alle Dienste mit Netzwerkverbindungen umgehen könnten die erst später online kommen, aber es gibt und wird wohl auch noch in Zukunft viele geben die das schlicht nicht auf die Reihe bekommen.

Ausserdem ist auf "network-online.target" nur dann kein verlass wenn darin nur dieser unmögliche "NetworkManager-wait-online.service" ausgeführt wird. Den der schaut nur ob der NetworkManager selbst läuft aber interessiert sich nicht die Bohne dafür ob dieser auch seinen Job gemacht hat.
_________________
Lenovo - ThinkPad P16s Gen 2 - 21K9CTO1WW
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum