Nach mounten eines Images #!/bin/bash ausführen?

TheMagnificent

TheMagnificent

Mitglied
Thread Starter
Dabei seit
16.11.2004
Beiträge
411
Reaktionspunkte
0
Folgendes Szenario: Ich habe ein verschlüsseltes Sparseimage. Wenn ich dieses Image mounte, möchte ich nun, dass automatisch eine #!/bin/bash ausgeführt wird. Die auszuführende Datei befindet sich in dem Sparseimage. (Ich hoffe ich habe das jetzt die richtigen Fachtermini benutzt)

Hat jemand einen Tipp?
 
Eine andere Möglichkeit wäre auch das Mounten per (selbem) Script zu erledigen.
Eine andere Lösung als DSW oder (gemeinsames) Script fällt mir nicht ein, da ja irgendwie gewährleistet sein muss dass die Events "Mounten" und "Scriptexekution" zeitlich (sinnvoll) zusammenfallen.

Grüße,
Flo
 
lengsel schrieb:
Eine andere Möglichkeit wäre auch das Mounten per (selbem) Script zu erledigen.
Möglich, das Problem wäre nur, dass ich dann das Passwort auch irgendwo speichern müsste - was ich verständlicherweise nicht möchte.
lengsel schrieb:
Eine andere Lösung als DSW oder (gemeinsames) Script fällt mir nicht ein, da ja irgendwie gewährleistet sein muss dass die Events "Mounten" und "Scriptexekution" zeitlich (sinnvoll) zusammenfallen.
Schade :( - Hat sonst noch jemand eine Idee?
 
Könnte das vielleicht hiermit funktionieren: apple.com/applescript/folderactions/05.html? (Auto-backup Script). Das müsste dann natürlich noch abgewandelt werden. Kann mir da jemand weiterhelfen?
 
Die Idee mit dem AS ist interessant. Evtl. lässt sich dem Volumes-Folder ein Folderactionscript anhängen dass beim Hinzufügen von Dateien überprüft ob sich darunter der Folder vom frisch gemounteten Volume befindet, und dann entsprechend das Shellscript abschiesst, also sowas in dieser Richtung:

Code:
on adding folder items to this_folder after receiving these_items
	check if /Volumes contains the new mounted image
        if yes, then....
        if no do nothing
end adding folder items to

Code ist nur schematisch... :)

Grüße,
Flo
 
lengsel schrieb:
Code ist nur schematisch... :)
Sehr schematisch :D

Ich hab keine Ahnung wie genau ich das jetzt machen muss. Kannst du mir da helfen?

Nehmen wir an ich habe mehrere Images. Die sind im Ordner /Images gespeichert. Eines dieser images mounte ich manuell. Nennen wir es save01. Das Image heisst meinetwegen gemountet save01M. Jetzt soll automatisch die Ordneraktion ausgeführt werden und das Shell-Skript im Image save01M ausgeführt werden.

Wie ändere ich das Skript entsprechend ab?
 
Wenn Du die Images eh manuell mountest, dann kommt ja auch die Lösung in Frage gleich ein Script zu starten dass dann das mounten übernimmt, und dann das Script im gemounteten Verzeichnis startet. Die skizzierte Lösung wäre eher für Fälle wo Du nicht weisst wann ein Volume gemountet wird, Du aber dennoch unbedingt zeitnah die Ausführung des auf dem Volume enthaltenen Scripts brauchst.

Grüße,
Flo
 
Da hab ich mich wohl missverständlich ausgedrückt. Ich mounte nur das 1. Image manuell. Die anderen Images werden über #!/bin/bash nach und nach gemountet. Hintergrund ist einfach, dass in der Datei Passwörter übergeben werden. Manuell mounten kann ich die gar nicht. Die Passwörter sind jeweils 512 Zeichen lang.

So sieht beispielsweise die Datei aus:
#!/bin/bash
hdiutil attach -stdinpass /Volumes/save03 < /Volumes/save03/passwords/save05.txt
 
TheMagnificent schrieb:
Da hab ich mich wohl missverständlich ausgedrückt. Ich mounte nur das 1. Image manuell. Die anderen Images werden über #!/bin/bash nach und nach gemountet. Hintergrund ist einfach, dass in der Datei Passwörter übergeben werden. Manuell mounten kann ich die gar nicht. Die Passwörter sind jeweils 512 Zeichen lang.

So sieht beispielsweise die Datei aus:

Aha, das heisst aber auch dass das AS ja gar nicht groß Rücksicht auf irgendwelche Eventualitäten nehmen muss, da ja alle Pfade im Prinzip bekannt sind, und sich auch nicht ändern. Das macht das Ganze sehr viel leichter.

Grüße,
Flo
 
Nachdem das ja alles ziemlich undramatisch geworden ist, probier es mal damit:

Code:
set theMountCmd to "hdiutil mount /Pfad/zur/Datei/Images/save01.dmg"
set MntExec to theMountCmd
set theScriptCmd to "sh /Volumes/save01/scriptname.sh"
set ScriptExec to theScriptCmd

do shell script MntExec
delay 10
do shell script ScriptExec

Es sind anzupassen:
- der Pfad zum .dmg
- der Name des Scripts
- der Parameter für delay

Grüße,
Flo
 
Hm, so klappt das leider bei mir nicht.

Ich müsste noch folgende Sachen anpassen:

1. Es handelt sich um Sparseimages. Der Befehl zum öffnen muss folgendermaßen lauten:
hdiutil attach -stdinpass /Volumes/capsule03/capsule05.sparseimage

2. Es sollte eine Passwortübergabe aus einer #!/bin/bash erfolgen. Wie mache ich daraus eine .sh Datei?

3. Ich hoffe ich stelle mich nicht zu dumm an und du kannst mir trotzdem noch weiterhelfen ;)
 
TheMagnificent schrieb:
1. Es handelt sich um Sparseimages. Der Befehl zum öffnen muss folgendermaßen lauten:
hdiutil attach -stdinpass /Volumes/capsule03/capsule05.sparseimage

Dann setz das doch mal ein, und probiers aus.

TheMagnificent schrieb:
2. Es sollte eine Passwortübergabe aus einer #!/bin/bash erfolgen. Wie mache ich daraus eine .sh Datei?

Bin mir nicht sicher ob ich das richtig verstanden habe...
Das sparseimage verlangt beim mounten nach einem Passwort (welches Du nicht hast?) das aus einer Datei/Shellscript ausgelesen werden soll?

Noch mal zum grundsätzlichen Verständnis:
Momentan mountest Du eines der vielen Images, und führst das darin enthaltene Script aus, alles weitere passiert dann automatisch. Du willst also nur den beschriebenen Vorgang automatisieren? Das würde ja dem Script entsprechen das ich oben gepostet habe. Die Anpassungen bezüglich der genauen Pfade/Befehle muss Dir letztendlich derjenige machen der sich dieses System ausgedacht hat.
Oder habe ich jetzt was grundlegend falsch verstanden?

Grüße,
Flo
 
Es hat geklappt. Hab 1000 Dank! Ich habe das Skript jetzt als Programm gespeichert. Super! clap clap clap
 
Freut mich, auch wenn ich ehrlich gesagt keine Ahnung habe was Du jetzt gemacht hast... :)
Magst Du mal kurz skizzieren, evtl. mit Code (Pfade anonymisieren) was zum Erfolg geführt hat?

Grüße,
Flo
 
Mein Problem war wahrscheinlich einfach nur, dass ich nicht so recht wusste wie ich das mit der #!/bin/bash handeln sollte. Die war auf dem Sparseimage gespeichert, aber als .bash - dass ich die Datei einfach nur in bash.sh umbenennen musste, habe ich dann nach ein bisschen probieren rausgefunden.

Im Prinzip hab ich dann das Skript so wie von dir geschrieben übernommen und die Pfade angepasst. Den Parameter für delay geändert und es läuft einwandfrei.

Jetzt hab ich noch eine Frage, vielleicht kannst du mir die ja auch beantworten: Ich habe das Skript als Programm gespeichert. Die für mich einfachste Möglichkeit. Wenn ich jetzt auf die Info für das Programm gehe, wird es als PowerPC angezeigt. Sollte es aber denn nicht als Universal angezeigt und auch erstellt worden sein? Es wurde ja auch auf einem IntelMac erstellt.
 
TheMagnificent schrieb:
Mein Problem war wahrscheinlich einfach nur, dass ich nicht so recht wusste wie ich das mit der #!/bin/bash handeln sollte. Die war auf dem Sparseimage gespeichert, aber als .bash - dass ich die Datei einfach nur in bash.sh umbenennen musste, habe ich dann nach ein bisschen probieren rausgefunden.

Im Prinzip hab ich dann das Skript so wie von dir geschrieben übernommen und die Pfade angepasst. Den Parameter für delay geändert und es läuft einwandfrei.

Da habe ich dann wohl einfach ein Verständnisproblem gehabt. Ich bin davon ausgegangen dass das Script schon mit der Endung .sh vorliegt. Egal, wenn alles spielt ist es prima.

TheMagnificent schrieb:
Jetzt hab ich noch eine Frage, vielleicht kannst du mir die ja auch beantworten: Ich habe das Skript als Programm gespeichert. Die für mich einfachste Möglichkeit. Wenn ich jetzt auf die Info für das Programm gehe, wird es als PowerPC angezeigt. Sollte es aber denn nicht als Universal angezeigt und auch erstellt worden sein? Es wurde ja auch auf einem IntelMac erstellt.

Da habe ich leider gar keine Idee dazu. Nachdem das Script aber selbst wenn man es als Program speichert vermutlich sehr klein ist, dürfte die Exekutionszeit egal ob nativ ausgeführt oder mit Rosetta, eigentlich nur minimal sein. Sollte wirklich ein mess und spürbarer Unterschied sein, wäre es wert dem nachzugehen, ansonsten vergessen... :)

Noch viel Freude mit dem Script.
Grüße,
Flo
 
Zurück
Oben Unten