Forums

Skip to content

Advanced search
  • Quick links
    • Unanswered topics
    • Active topics
    • Search
  • FAQ
  • Login
  • Register
  • Board index International Gentoo Users Deutsches Forum (German) Diskussionsforum
  • Search

"/usr/bin/nm-online" unzureichend

Unterhaltung über Gentoo und andere Themen: Alles was nicht in ein Support-Forum gehört.
Post Reply
  • Print view
Advanced search
3 posts • Page 1 of 1
Author
Message
schmidicom
Advocate
Advocate
User avatar
Posts: 2013
Joined: Thu Mar 09, 2006 5:56 pm
Location: Schweiz

"/usr/bin/nm-online" unzureichend

  • Quote

Post by schmidicom » Tue Dec 10, 2019 3:55 pm

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

Code: Select all

...
[connectivity]
uri=http://nmcheck.gnome.org/check_network_status.txt
interval=60
...
2. Ein Python-Script geschrieben das diesen Status per dbus abfragt.

Code: Select all

#!/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.

Code: Select all

[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
Top
mike155
Advocate
Advocate
Posts: 4438
Joined: Fri Sep 17, 2010 11:33 pm
Location: Frankfurt, Germany

  • Quote

Post by mike155 » Sat Dec 14, 2019 6:26 pm

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/Softwa ... orkTarget/.

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.
Top
schmidicom
Advocate
Advocate
User avatar
Posts: 2013
Joined: Thu Mar 09, 2006 5:56 pm
Location: Schweiz

  • Quote

Post by schmidicom » Sat Dec 14, 2019 7:31 pm

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
Top
Post Reply
  • Print view

3 posts • Page 1 of 1

Return to “Diskussionsforum”

Jump to
  • Assistance
  • ↳   News & Announcements
  • ↳   Frequently Asked Questions
  • ↳   Installing Gentoo
  • ↳   Multimedia
  • ↳   Desktop Environments
  • ↳   Networking & Security
  • ↳   Kernel & Hardware
  • ↳   Portage & Programming
  • ↳   Gamers & Players
  • ↳   Other Things Gentoo
  • ↳   Unsupported Software
  • Discussion & Documentation
  • ↳   Documentation, Tips & Tricks
  • ↳   Gentoo Chat
  • ↳   Gentoo Forums Feedback
  • ↳   Duplicate Threads
  • International Gentoo Users
  • ↳   中文 (Chinese)
  • ↳   Dutch
  • ↳   Finnish
  • ↳   French
  • ↳   Deutsches Forum (German)
  • ↳   Diskussionsforum
  • ↳   Deutsche Dokumentation
  • ↳   Greek
  • ↳   Forum italiano (Italian)
  • ↳   Forum di discussione italiano
  • ↳   Risorse italiane (documentazione e tools)
  • ↳   Polskie forum (Polish)
  • ↳   Instalacja i sprzęt
  • ↳   Polish OTW
  • ↳   Portuguese
  • ↳   Documentação, Ferramentas e Dicas
  • ↳   Russian
  • ↳   Scandinavian
  • ↳   Spanish
  • ↳   Other Languages
  • Architectures & Platforms
  • ↳   Gentoo on ARM
  • ↳   Gentoo on PPC
  • ↳   Gentoo on Sparc
  • ↳   Gentoo on Alternative Architectures
  • ↳   Gentoo on AMD64
  • ↳   Gentoo for Mac OS X (Portage for Mac OS X)
  • Board index
  • All times are UTC
  • Delete cookies

© 2001–2026 Gentoo Foundation, Inc.

Powered by phpBB® Forum Software © phpBB Limited

Privacy Policy

 

 

magic