[gelöst]Partition im Skript entsperren und Programm starten

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
halo44
Beiträge: 703
Registriert: 12.05.2015 15:19:13

[gelöst]Partition im Skript entsperren und Programm starten

Beitrag von halo44 » 14.02.2018 16:43:54

Ich benötige mal wieder Hilfe bei folgendem Vorhaben:

Ich möchte auf meinem Notebook ein in /opt installiertes Programm starten. Die von diesem Programm benötigten Daten liegen in einer verschlüsselten Partition. Den Notebook benutze ich nur für wenige Anwendungen, die auch nicht alle auf die verschlüsselte Partition zugreifen.

Wenn ich das oben erwähnte Programm ausführen will, bin ich mir nicht immer sicher, ob ich die Partition bereits entschlüsselt habe. Daher möchte ich das Programm über ein Skript, welches ich in einer desktop-Datei aufrufe, starten. In dem Skript prüfe ich, ob die Datenpartition gemountet ist. Ist die nicht der Fall entschlüssele ich, wozu ich die Passphrase eingeben muß. Daher muß ich die desktop-Datei in einem Terminal ausführen. Anschließend rufe ich das Programm auf.

Das funktioniert auch. Allerdings stört mich, daß ausser dem Programm auch noch das Terminal offen bleibt. Schliesse ich das Terminal, wird auch das Programm beendet.

Hier das Skript

Code: Alles auswählen

#!/bin/sh
#
mountpoint /Datenpartition
#
if [ "$?" = "0" ]; then
:
else
Meine_UUIDs=/Daten-1/Konfiguration/mein-environment.txt
UUID_DatenpartitionNB=`head -n 11 $Meine_UUIDs | tail -n 1`
partadd1="/dev/disk/by-uuid/$UUID_DatenpartitionNB"
mapname1="_datenpartition"
partnam1="Datenpartition"
cryptsetup luksOpen $partadd1 $mapname1
mount /dev/mapper/$mapname1 /$partnam1
fi
#
/opt/mein_programm
#
Wie kann ich realisieren, daß das Terminal nicht offen bleibt? Arbeite ich mit dem Programm und schließe irgendwann (irrtümlich) das Terminal, dann beendet sich das Programm ohne die durchgeführten Änderungen zu speichern. Die Speicherung erfolgt in einer XML-Datei, die erst beim Beenden des Programms auf Rückfrage gespeichert wird. Diese Rückfrage erfolgt aber beim Beenden des Terminals nicht.

Für Hinweise und Tips bin ich sehr dankbar.

Gruss H.
Zuletzt geändert von halo44 am 15.02.2018 13:58:56, insgesamt 1-mal geändert.

Benutzeravatar
heisenberg
Beiträge: 3542
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Partition im Skript entsperren und Programm starten

Beitrag von heisenberg » 14.02.2018 17:00:52

Schicke den Programmaufrauf in den Hintergrund. Dann schliesst sich das Terminal.

/opt/mein_programm &
Jede Rohheit hat ihren Ursprung in einer Schwäche.

halo44
Beiträge: 703
Registriert: 12.05.2015 15:19:13

Re: Partition im Skript entsperren und Programm starten

Beitrag von halo44 » 14.02.2018 17:32:29

Das habe ich versucht. Dabei schliesst sich tatsächlich das Terminal, aber mein Programm öffnet sich nicht. Zumindest finde ich es nicht.

Gruss H.

Benutzeravatar
heisenberg
Beiträge: 3542
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Partition im Skript entsperren und Programm starten

Beitrag von heisenberg » 14.02.2018 17:35:11

Vielleicht möchte das Programm seinen Ausgabekanal offen behalten. Probiere es mal so:

Code: Alles auswählen

/opt/programm &>/tmp/programm.log &
Jede Rohheit hat ihren Ursprung in einer Schwäche.

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: Partition im Skript entsperren und Programm starten

Beitrag von breakthewall » 14.02.2018 17:42:24

Code: Alles auswählen

nohup /opt/programm & disown
Damit kannst ein Programm vollständig von der aktuellen Shell trennen.

halo44
Beiträge: 703
Registriert: 12.05.2015 15:19:13

Re: Partition im Skript entsperren und Programm starten

Beitrag von halo44 » 14.02.2018 17:45:17

Leider keine Veränderung. Ich gebe die Passphrase ein, danach beendet sich das Terminal und das Programm öffnet sich nicht.

Gruss H.

P.S. nohup versuche ich anschließend

halo44
Beiträge: 703
Registriert: 12.05.2015 15:19:13

Re: Partition im Skript entsperren und Programm starten

Beitrag von halo44 » 14.02.2018 17:49:55

Auch mit nohup /opt/mein_programm & disown keine Veränderung. Ich gebe die Passphrase ein, danach beendet sich das Terminal und das Programm öffnet sich nicht.

Gruss H.

Benutzeravatar
heisenberg
Beiträge: 3542
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Partition im Skript entsperren und Programm starten

Beitrag von heisenberg » 14.02.2018 17:53:18

Im screen starten?

Code: Alles auswählen

screen -S deinprogramm -d -m /opt/deinprogramm
Jede Rohheit hat ihren Ursprung in einer Schwäche.

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: Partition im Skript entsperren und Programm starten

Beitrag von breakthewall » 14.02.2018 17:54:37

Was sagen die Logs? Wie heisst das Programm überhaupt? Da müssen mehr Informationen her.

halo44
Beiträge: 703
Registriert: 12.05.2015 15:19:13

Re: Partition im Skript entsperren und Programm starten

Beitrag von halo44 » 14.02.2018 18:11:35

breakthewall hat geschrieben: ↑ zum Beitrag ↑
14.02.2018 17:54:37
Was sagen die Logs? Wie heisst das Programm überhaupt? Da müssen mehr Informationen her.
An die programmeigenen Logs komme ich nicht, weil das Programm nicht startet. Das Journal zeigt den Start des Skripts TTY=pts/1 und "session closed", mehr nicht.

Das Programm heisst PortfolioPerformance von hier.

Gruss H.

NAB
Beiträge: 5501
Registriert: 06.03.2011 16:02:23
Lizenz eigener Beiträge: MIT Lizenz

Re: Partition im Skript entsperren und Programm starten

Beitrag von NAB » 14.02.2018 18:45:33

Als Notlösung könntest du versuchen, das Terminalfenster zu minimieren:
https://askubuntu.com/questions/4876/ca ... mmand-line
Never change a broken system. It could be worse afterwards.

"No computer system can be absolutely secure." Intel Document Number: 336983-001

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: Partition im Skript entsperren und Programm starten

Beitrag von breakthewall » 14.02.2018 18:48:09

Mich würde mal die Ausgabe interessieren, wenn an den Anfang des Shellscriptes, nach der Shebang "set -x" setzt.

Des weiteren solltest mal prüfen, ob dein Programm auch ausführbar ist. Wenn nicht, dann vergib über "chmod +x /opt/programm" die Ausführrechte, und versuche nochmal das Shellscript auszuführen.

halo44
Beiträge: 703
Registriert: 12.05.2015 15:19:13

Re: Partition im Skript entsperren und Programm starten

Beitrag von halo44 » 14.02.2018 18:55:29

NAB hat geschrieben: ↑ zum Beitrag ↑
14.02.2018 18:45:33
Als Notlösung könntest du versuchen, das Terminalfenster zu minimieren:
https://askubuntu.com/questions/4876/ca ... mmand-line
Das Terminal ist schon insofern minimiert, als es nur in der Fensterleiste sichtbar ist.

Gruss H.

halo44
Beiträge: 703
Registriert: 12.05.2015 15:19:13

Re: Partition im Skript entsperren und Programm starten

Beitrag von halo44 » 14.02.2018 19:10:51

breakthewall hat geschrieben: ↑ zum Beitrag ↑
14.02.2018 18:48:09
Mich würde mal die Ausgabe interessieren, wenn an den Anfang des Shellscriptes, nach der Shebang "set -x" setzt.

Des weiteren solltest mal prüfen, ob dein Programm auch ausführbar ist. Wenn nicht, dann vergib über "chmod +x /opt/programm" die Ausführrechte, und versuche nochmal das Shellscript auszuführen.
Das Programm ist ausführbar und läuft auch, wie im ersten Beitrag erwähnt.

Das set -x bringt vor der Anforderung der Passphrase diese Ausgabe

Code: Alles auswählen

+ mountpoint /Datenpartition
/Datenpartition is not a mountpoint
+ [ 1 = 0 ]
+ Meine_UUIDs=/Daten-1/Konfiguration/mein-environment.txt
+ head -n 11 /Daten-1/Konfiguration/mein-environment.txt
+ tail -n 1
+ UUID_DatenpartitionNB=5ae86a6f-7f46-446f-86d5-8688da203951
+ partadd1=/dev/disk/by-uuid/5ae86a6f-7f46-446f-86d5-8688da203951
+ mapname1=_datenpartition
+ partnam1=Datenpartition
+ cryptsetup luksOpen /dev/disk/by-uuid/5ae86a6f-7f46-446f-86d5-8688da203951 _datenpartition
Geben Sie die Passphrase für »/dev/disk/by-uuid/5ae86a6f-7f46-446f-86d5-8688da203951« ein:
Nach Eingabe der Passphrase wird die Partition entschlüsselt und das Programm startet auch, aber das Terminal ist noch offen und zeigt diese zusätzlichen Einträge:

Code: Alles auswählen

+ mount /dev/mapper/_datenpartition /Datenpartition
+ /opt/portfolio/PortfolioPerformance

(java:2638): Gtk-WARNING **: Im Modulpfad »adwaita« konnte keine Themen-Engine gefunden werden,

(java:2638): Gtk-WARNING **: Im Modulpfad »adwaita« konnte keine Themen-Engine gefunden werden,

(Portfolio Performance:2638): Gdk-WARNING **: gdk_window_set_icon_list: icons too large
Wie gesagt das Programm läuft trotz der wohl zu vernachlässigenden Meldungen, aber das mich störende Terminal lebt immer noch.

Gruss H.

NAB
Beiträge: 5501
Registriert: 06.03.2011 16:02:23
Lizenz eigener Beiträge: MIT Lizenz

Re: Partition im Skript entsperren und Programm starten

Beitrag von NAB » 14.02.2018 19:50:40

halo44, mir ist nicht klar, unter welchem Benutzer dein Script überhaupt läuft. Darf dein normaler Benutzer cryptsetup benutzen, oder läuft PortfolioPerformance als root?

Aber wie du ja siehst ... das Programm gibt Text aus. Dazu braucht es "stdout". Nohup leitet stdout in die Datei "nohup.out" um. Findest du diese Datei irgendwo?
Never change a broken system. It could be worse afterwards.

"No computer system can be absolutely secure." Intel Document Number: 336983-001

halo44
Beiträge: 703
Registriert: 12.05.2015 15:19:13

Re: Partition im Skript entsperren und Programm starten

Beitrag von halo44 » 14.02.2018 20:06:54

NAB hat geschrieben: ↑ zum Beitrag ↑
14.02.2018 19:50:40
halo44, mir ist nicht klar, unter welchem Benutzer dein Script überhaupt läuft. Darf dein normaler Benutzer cryptsetup benutzen, oder läuft PortfolioPerformance als root?

Aber wie du ja siehst ... das Programm gibt Text aus. Dazu braucht es "stdout". Nohup leitet stdout in die Datei "nohup.out" um. Findest du diese Datei irgendwo?
Das Skript läuft unter meinem normalen User allerdings mit sudo. In der sudoers habe ich erlaubt, daß das Skript ohne Passworteingabe laufen darf. Damit kann ich cryptsetup und mount im Skript als User ausführen.

Die nohup.out finde ich momentan nicht. Vielleicht muß ich das Skript morgen noch mal mit nohup ausführen. Derzeit hat meine Frau den Notebook in Beschlag.

Bis morgen.

Gruss H.

NAB
Beiträge: 5501
Registriert: 06.03.2011 16:02:23
Lizenz eigener Beiträge: MIT Lizenz

Re: Partition im Skript entsperren und Programm starten

Beitrag von NAB » 14.02.2018 20:17:27

Dann bau das mal anders auf. Ein Script, das sich nur um's Mounten kümmert. Und nur das bekommt sudo-Rechte.

Dein Desktop-Script ruft dann dieses Script per sudo auf und startet danach den PortfolioPerformance (ohne sudo).
Never change a broken system. It could be worse afterwards.

"No computer system can be absolutely secure." Intel Document Number: 336983-001

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: Partition im Skript entsperren und Programm starten

Beitrag von breakthewall » 14.02.2018 20:56:58

Zuvor sagtest doch noch, dass das Programm nicht laufen würde?

Wenn das Terminal nach dem Programmstart loswerden willst, dann musst den verantwortlichen Prozess auch beenden. Und da mit exit lediglich das Shellscript selbst beenden würdest, musst denn Mutterprozess selbst beenden.

Das sollte gehen am Ende des Shellscriptes:

Code: Alles auswählen

kill $(paste -sd " " <<< $(ps -o ppid= -C bash)) & disown

halo44
Beiträge: 703
Registriert: 12.05.2015 15:19:13

Re: Partition im Skript entsperren und Programm starten

Beitrag von halo44 » 15.02.2018 09:12:25

NAB hat geschrieben: ↑ zum Beitrag ↑
14.02.2018 20:17:27
Dann bau das mal anders auf. Ein Script, das sich nur um's Mounten kümmert. Und nur das bekommt sudo-Rechte.

Dein Desktop-Script ruft dann dieses Script per sudo auf und startet danach den PortfolioPerformance (ohne sudo).
Bei diesem Versuch in der desktop-Datei startet das Programm, aber auch hier bleibt das Terminal offen:

Code: Alles auswählen

sudo /pfad-zum-Skript && /opt/portfolio/PortfolioPerformance
Gruss H.

halo44
Beiträge: 703
Registriert: 12.05.2015 15:19:13

Re: Partition im Skript entsperren und Programm starten

Beitrag von halo44 » 15.02.2018 09:30:35

breakthewall hat geschrieben: ↑ zum Beitrag ↑
14.02.2018 20:56:58
Zuvor sagtest doch noch, dass das Programm nicht laufen würde?

Wenn das Terminal nach dem Programmstart loswerden willst, dann musst den verantwortlichen Prozess auch beenden. Und da mit exit lediglich das Shellscript selbst beenden würdest, musst denn Mutterprozess selbst beenden.

Das sollte gehen am Ende des Shellscriptes:

Code: Alles auswählen

kill $(paste -sd " " <<< $(ps -o ppid= -C bash)) & disown
Ich habe, wie Du ja im Thread sehen kannst, verschiedene Eurer Vorschläge versucht. Bei allen Versuchen bei denen das Programm läuft, bleibt das Terminal offen. Bei anderen Versuchen startet das Programm nicht und es ist auch kein offenes Terminal vorhanden.

Bei Deinem Vorschlag mit

Code: Alles auswählen

kill $(paste -sd " " <<< $(ps -o ppid= -C bash)) & disown
ist letzteres der Fall, also kein Start des Programms und auch kein offenes Terminal.

Im Journal findet sich nur der Start des Skripts und die Meldung, daß die Partition gemountet ist. Dann wird nur noch die Beendigung der Root-Session gemeldet. Kein Hinweis auf den Start des Programms.

Gruss H.

halo44
Beiträge: 703
Registriert: 12.05.2015 15:19:13

Re: Partition im Skript entsperren und Programm starten

Beitrag von halo44 » 15.02.2018 13:58:25

Das Problem ist gelöst. Da ich noch eine Antwort zum Vorschlag mit nohup schuldig war, habe ich mich jetzt nochmal mit nohup befasst.

Wenn ich, wie vorgeschlagen, dies verwende

Code: Alles auswählen

nohup /opt/portfolio/PortfolioPerformance & disown
dann startet das Programm nicht und auch das Terminal schließt sich nach Eingabe der Passphrase. Auch eine nohup.out wird nicht erstellt.

Lasse ich aber das disown im Befehl weg

Code: Alles auswählen

nohup /opt/portfolio/PortfolioPerformance &
dann startet mein Programm und auch das Terminal bleibt offen. Jetzt aber kann ich das Terminal schließen, ohne daß mein Programm beendet wird.

Die Datei nohup.out wird erstellt, sie enthält nur die zu vernachlässigenden Meldungen
(java:2824): Gtk-WARNING **: Im Modulpfad »adwaita« konnte keine Themen-Engine gefunden werden,

(java:2824): Gtk-WARNING **: Im Modulpfad »adwaita« konnte keine Themen-Engine gefunden werden,

(Portfolio Performance:2824): Gdk-WARNING **: gdk_window_set_icon_list: icons too large
Danke an alle die geholfen haben.

Gruss H.

Antworten