Anpassung mini-Skript zum Mounten

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Passwort
Beiträge: 11
Registriert: 14.07.2017 01:26:10

Anpassung mini-Skript zum Mounten

Beitrag von Passwort » 14.07.2017 19:36:01

Hallo

Auf Linux Mint nutze ich derzeit eine Handvoll Skripts zum mounten und unmounten der NAS-Laufwerke, da diese bei mir nicht dauerhaft laufen, ist ein dauerhaftes einbinden via fstab nicht möglich.

Die vorhandenen Skripts, die voll mit sudo sind, habe ich für Debian angepasst und zugleich noch eine Abfrage eingebaut mit Feedbackausgabe.

Code: Alles auswählen

#!/bin/bash
# su 
if test -d /media/ds415; then 
	echo "Mountordner existiert"
else 
	mkdir /media/ds415
	echo "Mountordner angelegt"
fi

if test -d /media/ds415/01Bilder; then 
	echo "Ordner Bilder existiert bereits. Schon gemountet?"
else 
	mkdir /media/ds415/01Bilder
	echo "Ordner Bilder für NAS angelegt"
	mount -t nfs -o rw nas:/volume1/01Bilder /media/ds415/01Bilder
	echo "erfolgreich gemountet"
	chmod +rwx /media/ds415/01Bilder
	echo "und Rechte vergeben"
fi

if test -d /media/ds415/02Audio; then 
	echo "Ordner Audio existiert bereits. Schon gemountet?"
else 
	mkdir /media/ds415/02Audio
	echo "Ordner Audio für NAS angelegt"
	mount -t nfs -o rw nas:/volume1/02Audio /media/ds415/02Audio
	echo "erfolgreich gemountet"
	chmod +rwx /media/ds415/02Audio
	echo "und Rechte vergeben"
fi

if test -d /media/ds415/03Video; then 
	echo "Ordner Video existiert bereits. Schon gemountet?"
else 
	mkdir /media/ds415/03Video
	echo "Ordner Video für nas angelegt"
	mount -t nfs -o rw nas:/volume2/03Video /media/ds415/03Video
	echo "erfolgreich gemountet"
	chmod +rwx /media/ds415/03Video
	echo "und Rechte vergeben"
fi

if test -d /media/ds415/04Daten; then 
	echo "Ordner Daten existiert bereits. Schon gemountet?"
else 
	mkdir /media/ds415/04Daten
	echo "Ordner Daten für NAS angelegt"
	mount -t nfs -o rw nas:/volume1/04Daten /media/ds415/04Daten
	echo "erfolgreich gemountet"
	chmod +rwx /media/ds415/04Daten
	echo "und Rechte vergeben"
fi

if test -d /media/ds415/99BilderOOC; then 
	echo "Ordner BilderOOC existiert bereits. Schon gemountet?"
else 
	mkdir /media/ds415/99BilderOOC
	echo "Ordner BilderOOC für NAS angelegt"
	mount -t nfs -o rw nas:/volume1/99BilderOOC /media/ds415/99BilderOOC
	echo "erfolgreich gemountet"
	chmod +rwx /media/ds415/99BilderOOC
	echo "und Rechte vergeben"
fi

if test -d /media/ds415/05Downloads; then 
	echo "Ordner Downloads existiert bereits. Schon gemountet?"
else 
	mkdir /media/ds415/05Downloads
	echo "Ordner Downloads für NAS angelegt"
	mount -t nfs -o rw nas:/volume1/05Downloads /media/ds415/05Downloads
	echo "erfolgreich gemountet"
	chmod +rwx /media/ds415/05Downloads
	echo "und Rechte vergeben"
fi

if test -d /media/ds415/08Video_nobackup; then 
	echo "Ordner nicht gesichertes Video existiert bereits. Schon gemountet?"
else 
	mkdir /media/ds415/08Video_nobackup
	echo "Ordner nicht gesichertes Video für NAS angelegt"
	mount -t nfs -o rw nas:/volume1/08Video_nobackup /media/ds415/08Video_nobackup
	echo "erfolgreich gemountet"
	chmod +rwx /media/ds415/08Video_nobackup
	echo "und Rechte vergeben"
fi

exit 0
So (mit dem auskommentierten su) funktioniert das auch. Was ich zusätzlich noch gerne hätte wäre, dass man das Skript aus der normalen Konsole starten kann, es das root-Passwort abfragt, die Befehle abarbeitet und zum Schluss den su-Modus wieder verlässt.
Bisher ging das (jede Zeile mit sudo eingeleitet und ohne if-Abfragen) so halb (also für den su-Modus zu verlassen hat man warten müssen, bis die Session beendet wurde).

Geht das? Mit dem su oben in der zweiten Zeile wird das Passwort abgefragt und in die root-Konsole gewechselt. Dann passiert nichts mehr.

Gruss,
Thorsten

PS: NAS ist nur lokal erreichbar.

TomL

Re: Anpassung mini-Skript zum Mounten

Beitrag von TomL » 14.07.2017 19:55:52

Passwort hat geschrieben: ↑ zum Beitrag ↑
14.07.2017 19:36:01
Geht das? Mit dem su oben in der zweiten Zeile wird das Passwort abgefragt und in die root-Konsole gewechselt. Dann passiert nichts mehr.
Ja, das war zu erwarten, dass nichts mehr passiert. Du verlässt mit "su" die aktuelle Shell rüber in eine neue Shell, mit einer komplett neuen Umgebung, in der die alte Shell gar nicht bekannt ist. Die alte Shell würde wieder weiter nach dem "su" mit den normalen User-Rechten abgearbeitet werden, wenn die root-Shell beendet wird.... aber dann failen die Mounts natürlich wieder.

Du müsstest als vorher in die root-Shell wechseln und das Script erst in der root-Shell starten. Mit meinem Script als Beispiel funktioniert das so:

Code: Alles auswählen

su root -c "mountctl start"
für die Mounts und so

Code: Alles auswählen

su root -c "mountctl stop"
zum unmounten.

Und wenn Du auf die Passwort-Eingabe verzichten willst, kannst Du statt "su" einfach "pkexec" verwenden. Allerdings brauchts dann eine kleine Rule, die eben genau für dieses Script die Pwd-Abfrage abschaltet.

owl102

Re: Anpassung mini-Skript zum Mounten

Beitrag von owl102 » 14.07.2017 21:00:19

...alternativ kannst du natürlich auch einfach sudo verwenden.

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Anpassung mini-Skript zum Mounten

Beitrag von scientific » 14.07.2017 21:01:28

Leider kann ich am Handy die code-tags mangels Zeilenumbruch nicht entziffern.
Es geht um das temporäre Einbinden von remote-Filesystemen?

Kennst du systemd.mount und systemd.automount?

TomL und ich sind bei diesem Thema unterschiedlicher Meinung. Ich habe mit systemd Prozeduren und services Entwickelt, die ein problemloses Mounten und Unmounten solcher Remote-FS erlauben.

Lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Passwort
Beiträge: 11
Registriert: 14.07.2017 01:26:10

Re: Anpassung mini-Skript zum Mounten

Beitrag von Passwort » 14.07.2017 21:55:07

TomL hat geschrieben: ↑ zum Beitrag ↑
14.07.2017 19:55:52
Du müsstest als vorher in die root-Shell wechseln und das Script erst in der root-Shell starten. Mit meinem Script als Beispiel funktioniert das so:

Code: Alles auswählen

su root -c "mountctl start"
für die Mounts und so

Code: Alles auswählen

su root -c "mountctl stop"
zum unmounten.
Ich bin kein Coder sondern "nur" normaler Benutzer, der wiederkehrende Konsolenbefehle mit einem Skript automatisieren will. Daher benötige ich etwas mehr Info, wie mit deinen zwei Zeilen umzugehen ist.
Ist "mountctl" ein Skript, start bzw. stop das Argument? Geht das im Enddefekkt in zwei Skripten und das eine ruft das andere auf? Wird die root-Konsole anschliesend wieder verlassen? Für was steht -c?
Und wenn Du auf die Passwort-Eingabe verzichten willst, kannst Du statt "su" einfach "pkexec" verwenden. Allerdings brauchts dann eine kleine Rule, die eben genau für dieses Script die Pwd-Abfrage abschaltet.
Wäre dann mal im Hinterkopf zu behalten wenn mal Langeweile herrscht :-)
owl102 hat geschrieben: ↑ zum Beitrag ↑
14.07.2017 21:00:19
...alternativ kannst du natürlich auch einfach sudo verwenden.
Ja. Dann müsste ich meinen Useraccount aber erstmal legitimieren (Thema sudoers). Da es aber, wie ich hier gelernt habe, keine saubere Vorgehensweise ist, möchte ich das nicht so gern.
scientific hat geschrieben: ↑ zum Beitrag ↑
14.07.2017 21:01:28
Es geht um das temporäre Einbinden von remote-Filesystemen?
Ja.
Kennst du systemd.mount und systemd.automount?
Automount sagt mir was. Als ich das Skript in der sudo-Version entwickelt habe, bin ich drüber gestolpert. Dass ich es nicht verwendet habe, muss einen Grund haben :-)
Wie geschrieben: Das NAS ist nicht immer an.
Zuletzt geändert von Passwort am 14.07.2017 22:00:32, insgesamt 2-mal geändert.

TomL

Re: Anpassung mini-Skript zum Mounten

Beitrag von TomL » 14.07.2017 21:58:49

Mein Rat... lass Dir das hier mit den erwähnten mount-units und systemd-automount zeigen... das funktioniert und ist die bessere Alternative.

BTW... ja... mountctl ist mein Script zum Mounten der Netzwerklaufwerke.

owl102

Re: Anpassung mini-Skript zum Mounten

Beitrag von owl102 » 14.07.2017 22:07:41

Passwort hat geschrieben: ↑ zum Beitrag ↑
14.07.2017 21:55:07
owl102 hat geschrieben: ↑ zum Beitrag ↑
14.07.2017 21:00:19
...alternativ kannst du natürlich auch einfach sudo verwenden.
Ja. Dann müsste ich meinen Useraccount aber erstmal legitimieren (Thema sudoers). Da es aber, wie ich hier gelernt habe, keine saubere Vorgehensweise ist, möchte ich das nicht so gern.
Wieso ist das keine saubere Vorgehensweise? Wozu ist denn sudo da, wenn nicht, um gewissen Benutzern die Ausführung von gewissen Anwendungen/Scripten zu erlauben?

Man muß es ja nicht gleich bis zum Anschlag betreiben, indem man den Anwendern einfach alles via sudo erlaubt, so wie bei Ubuntu und Mint.

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Anpassung mini-Skript zum Mounten

Beitrag von scientific » 14.07.2017 23:04:55

Code: Alles auswählen

man systemd.mount
man systemd.automount
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Passwort
Beiträge: 11
Registriert: 14.07.2017 01:26:10

Re: Anpassung mini-Skript zum Mounten

Beitrag von Passwort » 14.07.2017 23:15:28

TomL hat geschrieben: ↑ zum Beitrag ↑
14.07.2017 21:58:49
Mein Rat... lass Dir das hier mit den erwähnten mount-units und systemd-automount zeigen... das funktioniert und ist die bessere Alternative.
Also. Ich habe mal autofs installiert und mein Kofler verweist bei dem Thema auf http://tldp.org/HOWTO/Automount.html - ist die Seite noch aktuell?
Nach dem Tutorial verweist auto.master auf die verschiedenen automount Dateien. Wenn man auto.misc verwendet, müsste man auto.master gar nicht ändern - korrekt?
Die Masterdatei verweist auf auto.master.d - ist das ein Verzeichnis? Dieses fehlt.
auto.misc enthält schon einen nicht auskommentierten Eintrag: cd - das Notebook hat aber gar kein cd Laufwerk. Löschen/ändern? Es wird aber unter "Geräte" nichts cd-artiges angezeigt.
Wenn ich da jetzt den Eintrag hinzufüge:

Code: Alles auswählen

Bilder -fstype=ext4,rw nas:/volume1/01Bilder 
funktioniert das dann? Ist ein NFS Mount, Laut Manual würde das dann unter /auto/Bilder gemountet (Den Ordner /auto gibts aber noch nicht)
funktioniert auch

Code: Alles auswählen

/media/ds415/Bilder -fstype=ext4,rw nas:/volume1/01Bilder 
?
Ist das alles? Klingt etwas zu einfach....

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Anpassung mini-Skript zum Mounten

Beitrag von scientific » 14.07.2017 23:26:23

Systemd.automount, nicht autofs.

In den letzten 3, 4 Jahren hat sich Linux massiv verändet!
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Passwort
Beiträge: 11
Registriert: 14.07.2017 01:26:10

Re: Anpassung mini-Skript zum Mounten

Beitrag von Passwort » 15.07.2017 11:30:47

ok..

Nach Anleitung folgenden Eintrag in die fstab hinzugefügt:

Code: Alles auswählen

nas:/volume1/01Bilder	/media/ds415/NAS_Bilder 	nfs 	noauto,x-systemd.automount,x-systemd.device-timeout=10,timeo=14,x-systemd.idle-timeout=1min 0 0
Und mit den anderen Shares entsprechend. Eigentlich müsste es das doch gewesen sein, oder? Die Skripterei mit timer etc. ist, so wie ich es verstanden habe, eine alternative Möglichkeit. Diese kann ich aber nicht nachvollziehen.

Bei dem Eintrag in der fstab sollte mit "noauto" nicht beim booten gemountet werden und nach 1min timeout wieder unmounted werden.
Tatsächlich verhälts sich aber wie ein statischer Eintrag. Ist das NAS beim booten nicht an, dauert es sehr lang zum Anmelden und Nemo startet dann nicht bzw. nur im Hintergrund und stürzt dann ab (denn beim Beenden wird angezeigt, dass nemo noch laufen würde).
bootet man beim laufenden NAS und beendet dann das nas, bleibts gemounted und mit der Folge, dass nemo nicht mehr reagiert.

Bei laufendem NAS werden die Shares zweimal angezeigt: Unter "Netzwerk" und "Geräte", hier zusätzlich noch die Mint Partition. Beim root Nemo werden die shares zweimal unter "Geräte" angezeigt, die Mint Partition gar nicht, dafür noch ein weiterer Eintrag der nach / zeigt. "Netzwerk" ist leer.

TomL

Re: Anpassung mini-Skript zum Mounten

Beitrag von TomL » 15.07.2017 14:59:57

Ich vermute, dass hängt damit zusammen, dass der Eintrag in der fstab trotz automount erwartet, dass die Ressource grundsätzlich verfügbar ist. Ändere mal als Versuch den Eintrag "noauto" zu "noauto,nofail".

Passwort
Beiträge: 11
Registriert: 14.07.2017 01:26:10

Re: Anpassung mini-Skript zum Mounten

Beitrag von Passwort » 15.07.2017 17:08:49

TomL hat geschrieben: ↑ zum Beitrag ↑
15.07.2017 14:59:57
Ändere mal als Versuch den Eintrag "noauto" zu "noauto,nofail".
Ändert nichts. Ausser dass nach dem Speichern der fstab die Netzwerkshares nun dreinmal im root-Nemo angezeigt werden (statt 2x). Nach Reboot mit NAS aus ist das gleiche Verhalten wie ohne nofail.

TomL

Re: Anpassung mini-Skript zum Mounten

Beitrag von TomL » 15.07.2017 19:59:34

An dem Punkt angekommen würde ich jetzt einfach das alte Script weiterhin verwenden und eben nur dafür sorgen, dass es dazu berechtigt ist. Deine Entscheidung, das nicht mit "sudo" zu machen, halte ich für richtig. Speziell über die Sudoers und nur für das Script könnte man das machen, aber wenn Du "sudo" auch im Terminal aktiv verwendet, gibst Du nicht nur ein wenig die Sicherheit Deines PCs aus der Hand. Das ist dann prinzipiell gleichbedeutend, wie "manchmal" den Haustür-Schlüssel draussen unter die Fussmatte zu legen. Solange keiner nachsieht ist es gut, wenn jemand es aber schafft, regelmäßig unter die Matte zu schauen, ist er irgendwann drin im Haus.... bzw. wird der Rechner möglicherweise über kurz oder lang gekapert. Und genau diese Möglichkeit, unter die Matte zu schauen, hat effektiv jedes Anwender-Programm und jedes AddOn oder PlugIn eines Programmes, welches Du mit normalen Userrechten aufrufst.

Passwort
Beiträge: 11
Registriert: 14.07.2017 01:26:10

Re: Anpassung mini-Skript zum Mounten

Beitrag von Passwort » 16.07.2017 01:45:02

Ja, das denke ich inzwischen auch.
Habe mal Deine Version übernommen und ein Script zum mounten und unmounten sowie zwei zweizeiler zum su und Aufruf mit start bzw. stop geschrieben. Bei der Unterscheidung ob start oder stop liegt aber noch was am Argen.
Das habe ich geschrieben:

Code: Alles auswählen

if test $# -e start; then
und das gleiche nochmal etwas später mit "stop". Dabei übergebe ich mit dem zweizeiler-Script start bzw. stop. Das Hauptscript befindet sich in /usr/bin, die zweizeiler normal in ~/bin.
Die Konsole gibt zurück:

Code: Alles auswählen

/usr/bin/mountnas: Zeile 2: test: -e: Zweistelliger (binärer) Operator erwartet.
/usr/bin/mountnas: Zeile 87: test: -e: Zweistelliger (binärer) Operator erwartet.
Was bewirkt das -c in "su -c"?

TomL

Re: Anpassung mini-Skript zum Mounten

Beitrag von TomL » 16.07.2017 10:37:52

Passwort hat geschrieben: ↑ zum Beitrag ↑
16.07.2017 01:45:02
Ja, das denke ich inzwischen auch.
Ja, vor dem Hintergrund, dass das NAS überwiegend ausgeschaltet ist, würde ich das auch so machen... einfach manuell starten.

Ich habe Dir einen Link zugemailt, ein Tarfile, in dem ich Dein "mountnas" ein wenig überarbeitet habe. Mit "test auf Start" funktioniert das so nicht.... und da jetzt im einzelnen Fehlersuche zu betreiben, ist zu mühsam. Schau Dir das Script an, ich denke, man kann das verstehen.

Gestartet und gestoppt wird es mit

Code: Alles auswählen

mountnas start
oder 
mountnas stop
Aber wahrscheinlich wird mountnas stop nicht funktionieren... weil ich bei meinen Remote-Dirs in Zeile 78 auf // prüfe. Da müsste man einfach mal schauen, wie man Deine Laufwerke identifiziert, über

Code: Alles auswählen

cat /proc/mounts
Und ganz wichtig... das Script sollte keinesfalls in /usr/bin liegen, der richtige Speicherort ist /usr/local/bin. Und da es mit root-Rechten ausgeführt wird, sollten die Rechte unbedingt mit "root:root" und 755 gesetzt sein.

Drei kurze Hinweise:
1. Das Script macht keine Ausgaben im Terminal. Starte einfach in einem zweiten Terminal-Fenster als root den folgenden Befehl. Dazu würde ich einfach den Monitor teilen, obere Hälfte in ganzer Breite das Journal, untere Hälfte in ganzer Breite der Command-Prompt, wo Du das Script startest.

Code: Alles auswählen

journalctl -f
2. Die Remote-Laufwerke sind in der gleichen Syntax einzutragen, wie sie ihn der fstab stehen müssten. Also KEIN Mountbefehl, sondern
genau so, wie die fstab das verlangt. Nur in Deinem Fall müsste eben in der fstab statt "rw" dort "rw, noauto" stehen. Hier im Script braucht das aber nicht.

3. Das Script führt die Mounts nicht durch, sondern macht nur einen Echo... bei mir gibts ja dieses NAS nicht. Du kannst es also einfach als Test mit "mountnas start" starten. Zum tatsächlichen Mounten muss die Zeile 61 aktiviert und die Zeile 62 gelöscht werden.
Passwort hat geschrieben: ↑ zum Beitrag ↑
16.07.2017 01:45:02
Was bewirkt das -c in "su -c"?
-c bewirkt, dass der Teil hinter -c als Kommando ausgeführt wird.

Aber auch dafür gibt es eine bessere Lösung, die man ggf. angehen kann, wenn das Script (zunächst) im Root-Terminal fehlerfrei seinen Job tut.

Passwort
Beiträge: 11
Registriert: 14.07.2017 01:26:10

Re: Anpassung mini-Skript zum Mounten

Beitrag von Passwort » 16.07.2017 22:20:23

In einem anderen Forum sind wir eigentlich nur zufällig auf dieses Thema gekommen.
Automount funktioniert, wenn die ganzen systemd Attribute entfernt werden. Also nur "noauto", zusätzlich noch "user", damit auch ein nicht-root die Shares mounten und unmounten kann.
Getestet, funktioniert. Lediglich hat nemo ein "Problem mit dem Vorschaubildpuffer" festgestellt und gelegentlich hat sich nemo beim Anklicken der Shares nach dem mounten selbstständig beendet. Nachdem dieses "Problem" automatisch behoben wurde, hat sich nemo nicht mehr beendet.

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Anpassung mini-Skript zum Mounten

Beitrag von scientific » 18.07.2017 12:30:39

Passwort hat geschrieben: ↑ zum Beitrag ↑
15.07.2017 17:08:49
TomL hat geschrieben: ↑ zum Beitrag ↑
15.07.2017 14:59:57
Ändere mal als Versuch den Eintrag "noauto" zu "noauto,nofail".
Ändert nichts. Ausser dass nach dem Speichern der fstab die Netzwerkshares nun dreinmal im root-Nemo angezeigt werden (statt 2x). Nach Reboot mit NAS aus ist das gleiche Verhalten wie ohne nofail.
[...]
Bei dem Eintrag in der fstab sollte mit "noauto" nicht beim booten gemountet werden und nach 1min timeout wieder unmounted werden.
Tatsächlich verhälts sich aber wie ein statischer Eintrag.
Hast du auch schon die Option "_netdev" zusätzlich verwendet?

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Antworten