• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Der Frühling ist auch in den eingesandten Fotos deutlich zu erkennen. Zeigt uns, wer Euer Favorit ist! hier geht es lang für Euer Voting --> Klick

Automount Heimnetzwerk/Internet über if/else?

GoldenClaw

Jerseymac
Registriert
04.09.08
Beiträge
457
Hi,

ich bräuchte mal die Hilfe von Fachmännern, was den Automator angeht, oder evtl. ist mein Problem auch anders zu lösen.
Ich habe zu Hause ein NAS stehen, das ich beim Booten meines MacBooks direkt mounten möchte. Das NAS ist über eine dydns auch von außerhalb über das Internet zu erreichen.
Nun möchte ich, dass mein MacBook beim Boot je nach Standort die beste Verbindung zum NAS herstellt und dieses im Finder einbindet.
Derzeit habe ich mit dem Automator ein Skript, das beim Start ausgeführt wird. Folgender Inhalt:

tell application "Finder"
activate
mount volume "afp://192.168.0.3/photo/"
mount volume "afp://192.168.0.3/Music/"
end tell

Das heißt, dass die Ordner photo und Music, die ich für meine iTunes Mediathek und Aperture Bibliothek brauche, gemountet werden, sofern ich mich im heimischen Netzwerk befinde.
Jetzt hätte ich auch gern Zugriff darauf, wenn ich unterwegs bin. Derzeit ist es so, dass ich beim Boot dann eine Fehlermeldung bekomme, da der Automator das SKript nicht ausführen konnte.
Dem würde ich jetzt gerne vorbeugen, indem ich eine if/else-Schleife oder ähnliches reinbringe, die, sofern der Mount im heimischen Netzwerk fehlschlägt, den Mount über den WebDav versucht, also https://dyndnsadresse.org

Wie kann ich das am besten umsetzen? Gibt es außerdem eine Möglichkeit, die gemounteten Verzeichnisse nach jedem Erwachen aus dem Standby erneut checken und evtl. ändern zu lassen (also von afp auf WebDav)?

Viele Grüße und danke schonmal im Voraus,
Claw
 

roland0509

Süsser Pfaffenapfel
Registriert
21.02.11
Beiträge
667
Hallo, ich kann leider nichts konkretes anbieten, da mir zurzeit noch ein Macbook zum testen fehlt.

Aber ich arbeite unter Linux, und habe da einen Script der regelmäßig Server anpingt, und mir das in einem Programm (ähnlich GeekTool) anzeigt.

Der Script wäre dieser:
Code:
#!/bin/bash
if  [["$#" != "3"]] ; then echo "Usage: silentping IP onsign offsign"; fi

# Get the status
STATUS="$(ping $1 -c 1 -w 2 | grep packets | sed "s/^.*tted, //;s/1/$2/;s/0/$3/;s/ re.*$//")"

# Create the directory
if [ ! -d ~/.status ]; then mkdir ~/.status; fi

# Remove the old status
if [ "$STATUS" == "$2" ]; then
  if [ -f ~/.status/$1.$3 ]; then rm ~/.status/$1.$3; fi
else
  if [ -f ~/.status/$1.$2 ]; then rm ~/.status/$1.$2; fi
fi

# Create the new status file
if [ ! -f ~/.status/$1.$STATUS ]; then touch ~/.status/$1.$STATUS; fi

Und aufgerufen wird er alle 5 Sekunden folgendermaßen. (Macht mein Programm. Wie man das auf nem Mac realisiert, kann ich dir nicht sagen.)

silentping.sh gentoo.org "up" "down" (Fragt den gentoo-server ab)

Für alle die nicht so sehr UNIX-versiert sind die Erklärung:
~/.status ist der Ordner in den die temporären status-dateien gespeichert werden (In dem Fall halt im Home-Verzeichnis. Angezeigt werden sollte er nicht. Wegen dem Punkt am Anfang.

Der Script pingt immer den Server an, den man als Parameter übergibt.

Beispiel:
silentping.sh apfeltalk.de "up" "down"

oder bei dir konkret:
silentping.sh 192.168.0.3 "up" "down"

Wenn der Server erreichbar ist wird die Datei ~/.status/apfeltalk.de.up (~/.status/192.168.0.3.up) angelegt, sonst wird die Datei ~/.status/apfeltalk.de.down (~/.status/192.168.0.3.down) angelegt.

Du müsstest dann nur folgendes skript regelmäßig ausführen lassen (cron gibts doch auch am mac oder?)

Code:
#!/bin/bash
/path/to/silentping.sh 192.168.0.3 "up" "down"
/path/to/silentping.sh weitere.server "up" "down"

Ich hoffe ich konnte dir ein bisschen helfen.

Ich weiß nicht ob das ganz so verständlich ist wie ichs gern hätte.

Wer Fragen hat soll sich halt beschweren. ;)

LG Roland
 

roland0509

Süsser Pfaffenapfel
Registriert
21.02.11
Beiträge
667
So, ich hatte ein bisschen zu viel Freizeit:

Also du kannst mit cron den ping-script (ich nenn ihn jetzt mal silentping.sh) ausführen lassen (halt mit zusatzskript).

Den silentping.sh kopierst du auf die Festplatte.
Am gescheitesten machst du dir irgendwo einen Ordner dafür.
In den selben Ordner (zwecks Übersichtlichkeit) erstellst du folgenden Skript (nennen wir ihn cronping.sh):
Code:
./silentping.sh 192.168.0.3 "up" "down"
Das geht nur wenn beide Skripte im selben ordner sind. Sonst musst du statt ./silentping.sh den ganzen Pfad angben ;)

Anschließend fügst du folgendes in die crontab (Unter Linux ist die bei mir unter /etc/crontab) ein.

#silentping
*/1 * * * * /path/to/cronping.sh

Das bewirkt das der cronping.sh Skript jede Minute ausgeführt wird (Pfad musst du halt anpassen ;))

Sofern du den silentping.sh Skript nicht abgeändert hast, hast du jetz in deinem Home-Verzeichnis einen Ordner .status. Dort liegen die Files, die du abfragen kannst, wenn du was mountest.

Um das einzuhängen könntest du das versuchen:
Code:
tell application "Finder"
		if exists file ~./status/192.168.0.3.up then
		        do activate
			mount volume "afp://192.168.0.3/photo/"
			mount volume "afp://192.168.0.3/Music/"
		end if
	end tell
Wie du das nach jedem aufwecken machst weis ich auch nicht.

Ich hoffe das war verständlicher als der vorherige Post.;)

LG Roland
 

fyysh

Schweizer Glockenapfel
Registriert
25.01.10
Beiträge
1.386
Hi,

ich hatte mal ein Script geschrieben, das etwas ähnliches macht. Hier ist es:
Code:
(*
	Before running this script, you must have done CMD+K in Finder and connected the shares at least once.
	Otherwise the script will error, even if the share is available.
	
	1. Go to finder
	2. CMD+K
	3. Enter proto://addr, e.g. smb://192.168.99.250
	4. Select all shares (use CMD+click to select only some of them) you want to use in this script and click OK
	5. Enter login name & pw and save pw to keychain !IMPORTANT
	6. Repeat steps 2-5 for each share you want to connect whith this script
	Now you're ready to go :)
*)

property pingWait : 100 --time in ms to wait for a reply to ping. increase if needed

property nasMap : {¬
	{addr:"192.168.221.250", proto:"afp", shares:{"mediathek", "dev"}, local_only:false, success_stop:false}, ¬
	{addr:"192.168.133.250", proto:"smb", shares:{"dev", "public"}, local_only:false, success_stop:true} ¬
		}


on run
	repeat with aNAS in nasMap
		tell aNAS
			set nasAddress to addr of it
			set nasProto to proto of it
			set nasShares to shares of it
			set localOnly to local_only of it
			set SuccessStop to success_stop of it
		end tell
		
		if (checkAvailability(nasAddress, localOnly, pingWait)) then --check if localOnly is set and if yes, if nas is on local network 
			
			mountNasShares(nasProto, nasAddress, nasShares) --mount specified shares
			
			if SuccessStop then exit repeat
		else
			umountNasShares(nasAddress, nasShares)
		end if
		
		
	end repeat
	
end run

on umountNasShares(nAddress, nShares)
	repeat with aShare in nShares
		try
			do shell script "umount -f " & quoted form of ("/Volumes/" & aShare)
		end try
	end repeat
end umountNasShares

on mountNasShares(nProto, nAddress, nShares)
	repeat with aShare in nShares
		mount volume nProto & "://" & nAddress & "/" & aShare --see comment on top!!
	end repeat
end mountNasShares



on checkAvailability(nAddress, locOnly, pWait)
	if locOnly then
		set scutilStr to "^Reachable,Directly Reachable Address"
	else
		set scutilStr to "^Reachable"
	end if
	
	try
		do shell script "ping -c1 -W " & pWait & space & nAddress & "&& scutil -r " & nAddress & "| grep '" & scutilStr & "'"
		return true
	on error
		return false
	end try
end checkAvailability


Mit AFP und SMB funktioniert es super. Allerdings weiß ich nicht, wie es sich mit WebDav verhält.
Desweiteren müssten in deinem Fall die WebDav mounts ugemountet werden, falls die lokalen der Nas greifen.

Triggern kann man das Script mit nem launchd script. Da kannst du auch einstellen, dass das script auch nach dem "Aufwachen" ausgeführt wird.

Aber dazu später mehr. Check erstmal, wenn du möchstest, ob es überhaupt mit WebDav funktioniert.
 

fyysh

Schweizer Glockenapfel
Registriert
25.01.10
Beiträge
1.386
Nachtrag:
Ich war heute morgen schon zu müde und habe vergessen folgendes zu erwähnen:
Das Script, wie oben gepostet, funktioniert für dein Vorhaben noch nicht ganz - es wird ein paar Anpassungen benötigen.
Z.B. das unmounten der Dav-Shares, wenn es die direkten erreichen kann.
In diesem Zusammenhang wäre es übrigens interessant zu wissen, was der Befehl "mount" im Terminal ausgibt, wenn sowohl die direkten als auch die Dav-Shares gemountet sind.