Hi zusammen,

ich haben folgendes Problem. Wenn ich meine Netzlaufwerke nicht manuell aushänge, dauert das Herunterfahren oder Neustarten super lang, ich vermute, weil das Laufwerk noch eingebunden ist.
Eingebunden werden sie mit einem Dispatcherskript wie folgt:
#!/bin/bash

##aktuelles Netzwerk bestimmen
current_Network=$(iw dev | grep ssid | cut -d' ' -f 2)
##Name des Internets
inter_NW="WLAN-Inter"
##Name des Intranets
intra_NW="WLAN-Intra"
  
                
                ##Nach Aufbau zum Intranet
                if [ "$current_Network" = "$intra_NW" ]; then
                        #cat > /home/luke/Desktop/test.txt
                        #sleep 2
                        mount -t cifs -o username=xyz,password=xyz,vers=1.0,uid=1000,gid=1000  //192.168.123.123/xyz/ /xyz                        
                fi
                
                if [ "$current_Network" = "$inter_NW" ]; then
                        #cat > /home/luke/Desktop/test.txt
                        #sleep 2
                        mount -t cifs -o username=xyz,password=xyz,vers=1.0,uid=1000,gid=1000  //192.168.123.123/xyz/ /xyz                       
                fi

Das funktioniert auch bestens.

Jetzt wollte ich das Problem mit einem systemd Dienst lösen.
Habe ein Skript angelegt
sudo nano /etc/rc.local.shutdown
mit folgendem Inhalt
#!/bin/bash
umount -a -t cifs
Ich weiß, ist nicht viel, soll ja auch nicht viel machen 🙂 Ausführbar gemacht.

Dann einen Service angelegt mit
[Unit]
Description=/etc/rc.local.shutdown Compatibility
ConditionFileIsExecutable=/etc/rc.local.shutdown
DefaultDependencies=no
Before=shutdown.target

[Service]
Type=oneshot
ExecStart=/etc/rc.local.shutdown
StandardInput=tty
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
und gestartet mit
systemctl enable rc-local-shutdown.service
Test mit
systemd-analyze verify rc-local-shutdown.service
läuft sauber durch.

Ausgabe von systemctl status
systemctl status rc-local-shutdown.service
● rc-local-shutdown.service - /etc/rc.local.shutdown Compatibility
     Loaded: loaded (/usr/lib/systemd/system/rc-local-shutdown.service; enabled; vendor pre>
     Active: active (exited) since Sat 2021-03-13 16:31:45 CET; 15min ago
    Process: 241 ExecStart=/etc/rc.local.shutdown (code=exited, status=0/SUCCESS)
   Main PID: 241 (code=exited, status=0/SUCCESS)
was für mich sauber ausschaut.

Wenn ich das Skript manuell starte, tut es, was es soll. Das eingebundene LW wird ausgehängt.

Jemand von Euch eine Idee?

VG

Lukas
Für so ein Konstrukt würde es sich anbieten sich mit einem Automounter zu beschäftigen. Entweder systemd-automount oder etwas klassischer autofs. Es gibt noch andere aber das dürften die bekanntesten sein.

Benötigt nur Bordmittel und keine Scripte.

Edit: Ich mutmaße mal das dein Netzwerk schon weg ist bevor dein Script zum Zug kommt beim Shutdown und keine Chance hat dann noch zu unmounten. Oder was war die Frage? 😉
Vorher vom NetworkManager unmounten lassen?

/etc/NetworkManager/dispatcher.d/pre-down.d
Hi zusammen,

@chepaz: ich werde mal nach den Stichworten suchen, sagen mir alle nichts
@drcux: da habe ich bereits ein Skript, wenn ich zwischen den Netzwerken wechsel:
#!/bin/bash

##aktuelles Netzwerk bestimmen
current_Network=$(iw dev | grep ssid | cut -d' ' -f 2)
##Name des Internets
inter_NW="WLAN-Inter"
##Name des Intranets
intra_NW="WLAN-Intra"


            
                ##Nach Aufbau zum Intranet
                if [ "$current_Network" = "$intra_NW" ]; then 
                      umount /xyz
                      #cat > /home/luke/Desktop/test.txt
                fi
                if [ "$current_Network" = "$inter_NW" ]; then 
                      umount /xyz
                      #cat > /home/luke/Desktop/test.txt
                fi

Und ja, die Frage ist, warum das nicht funktioniert 🙂
@chepaz: verstehe ich das richtig, dass ich lediglich beim mounten
x-systemd.automount
als Parameter hinzufügen müsste?
1. Wird dein pe-down-Script überhaupt aufgerufen?

2. Warum "current_Network"? Du bekommst doch zB. CONNECTION_ID mit. Was sonst noch so an Variablen gesetzt wird siehst du mit:
printenv >&2
Im Journal kannst du dann sehen was dem Script mitgegeben wird.
_Ardbeg_ schrieb@chepaz: ...
Wie bei allem: Es kommt drauf an.
Ich halte hier einen Automount für einfacher/unproblematischer als um einen mount herum zu scripten. Das geht natürlich auch, falsch ist es auch nicht wenn man das denn tun möchte.

AutoFS ist recht "alt" und oldschool, funktioniert aber gut, die Einrichtung ist nicht ganz trivial. Ich würde "heute" systemd den Vorzug geben:
https://wiki.archlinux.org/index.php/Autofs

Systemd.automount, das Archwiki schweigt sich da tatsächlich aus mit detailierten Beschreibungen:
https://wiki.archlinux.org/index.php/systemd
https://wiki.archlinux.org/index.php/Fstab#Automount_with_systemd

Beispiel eines Eintrags in der fstab:
\\\meinserver\share		/mnt/meinserver/share	cifs	noauto,x-systemd.automount,x-systemd.mount-timeout=30,_netdev,vers=3.1.1,username=chepaz,credentials=/foo/bar/.smb_creds,uid=1000,gid=1000,file_mode=0644,dir_mode=0755	0  0
Funktion ist bei AutoFS und systemd.automount die selbe, sobald $irgendwas auf dein lokales mount-Verzeichnis zugreift wird gemounted und der mount solange gehalten wie der Zugriff aktiv ist. Wenn nichts mehr zugreift läuft der Timeout, ist der abgelaufen passiert ein umount auf dem Verzeichnis. Wenn wieder etwas zugreift, wieder mount, Timeout, unmount... usw. usf.

Versucht etwas "im falschen Netz" dadurch zu mounten hängt die Shell oder dein Filemanager im schlimmsten Fall ein paar Sekunden/Minuten da das Share ja nicht da ist.

Aber wie gesagt, was hier besser ist musst du selbst entscheiden. Gebe zu, dein Script zum laufen zu bewegen hat auch seinen Reiz.


Edit:

Wie wird dein Netzwerk verwaltet? Benutzt du den networkmanager? Das ist nicht ganz klar, du nennst es "Dispatcherscript", aber ist überhaupt Networkmanager im Spiel?

Edit#2:
Dein "before shutdown"-service wird noch etwas wie
After=network-online.target
Wants=network-online.target
benötigen.
Wenn NM im Spiel ist wäre der Vorschlag von drcrux sicher schöner.
Ach Leute, ich fuchtel ja inzwischen seit glaube ich sechs Jahren mit Arch rum, aber neben Euch kommt man sich einfach vor wie ein Grundschüler; ich werde nie begreifen, wie Ihr an Euer Wissen gekommen seid... 😉

Ihr habt schon richtig antizipiert, bei mir läuft der NM.

Das Pre-Down Skript wird im "normalen" Betrieb sicher ausgeführt. Wenn ich die Verbindung zum aktuellen Netzwerk trenne, dann wird das Laufwerk entsprechend ausgehangen. Sobald ich mit dem neuen Netzwerk verbunden bin, wird das neue LW angebunden.

Ich hätte auch vermutet, dass beim Runterfahren vorher die Verbindung getrennt würde und damit dieses Skript ausgeführt würde, aber anscheinend wird einfach der ganze NM deaktiviert oder sowas.
printenv >&2
gehört dann einfach irgendwo in das pre-down Skript?

Danke Euch!

Edit: vielleicht versuche ich beide Varianten zum Laufen zu bringen, vielleicht bleibt ja wieder ein bisschen was hängen 🙂
Habe den Mountbefehl wie folgt geändert:
mount -t cifs -o username=xyz,x-systemd.automount,x-systemd.mount-timeout=30,password=nsaxyz,vers=1.0,uid=1000,gid=1000  //192.168.2.15/public/ /xyz
Seltsamerweise funktioniert es jetzt beim Neustarten (praktisch keine Wartezeit), aber nicht beim Runterfahren (zwei drei Minuten bis er runter fährt).
_Ardbeg_ schriebHabe den Mountbefehl wie folgt geändert: ...
Obacht, ich glaube du verwechselst hier was. Der systemd.automount gehört in die fstab und funktioniert dann nach einem Reboot "einfach so".

Wenn du deine eigenen Scripte/Services beibehalten willst musst du rausfinden(tm) wo es hängt. Hier würde ich in die Richtung "Netzwerk weg bevor Script ausgeführt wird" suchen.
Hi chepaz,

danke für den Hinweis, das hatte ich tatsächlich falsch verstanden. Dazu dann aber noch ein Rückfrage. Ich würde dann in der fstab zwei zusätzliche Einträge vornehmen, wobei je nach Netzwerk immer eines ins "Leere" laufen würde. Gibt das ein Problem?
@drcux: wie ist das mit dem
printenv >&2
?

Muss das ins Skript und ich bekäme dann entsprechende Einträge ins Journal?

Danke und Gruß!
_Ardbeg_ schriebIch würde dann in der fstab zwei zusätzliche Einträge vornehmen, wobei je nach Netzwerk immer eines ins "Leere" laufen würde. Gibt das ein Problem?
Sicherlich muss dein Mountpoint eindeutig sein, sonst kann systemd nicht wissen was zu tun ist. Ansonsten, mit "noauto" als Option, wird erst versucht zu mounten wenn irgendwas versucht auf den Mountpoint zuzugreifen.
"printenv >&2" einfach in das Skript, dann siehst du die Ausgabe im Journal.

Habe es selber gerade getestet:

cat /etc/NetworkManager/dispatcher.d/pre-down.d/test.sh
#!/bin/bash
printenv >&2
bringt im Journal unter anderem:
Mär 14 18:32:30 detlef-x230l nm-dispatcher[2020]: CONNECTION_ID=dmmg