Spotlight Suche auf dem Server

Mit OS X 10.4 Tiger wurde die systemweite Suchfunktion mächtig aufgebohrt. Nach den exotischsten Kriterien lassen sich nun mehr Suchstrategien formulieren – solange die Suche auf eine lokales Platte zielt. Indiziert werden grundsätzlich nur interne und externe Medien (so lange sie nicht von der Indizierung explizit ausgeschlossen werden), nicht jedoch Volumes die von einem Fileserver per Freigabe bereitgestellt werden. Ein Manko von dem jede Arbeitsgruppe betroffen ist, die gemeinsam an Dokumenten arbeitet und das auch nicht – was man ggf. erwarten könnte – durch den OS X Server eliminiert wird.

Spotlight arbeitet allerdings nicht nur an der Oberfläche, sondern verfügt auch noch über einen Kommandozeilen Unterbau. Und genau hier im Terminal löst sich das Problem:

mdutil -i on /Volumes/Name_der_Server_Freigabe

lautet der Befehl mit dem Spotlight per Terminal angewiesen wird einen Index von dem Servervolume zu erstellen, bzw. einen vorhandenen Index zu aktualisieren. Leider ist Spotlight etwas merkbefreit und vergisst das es die Indizierung für eine Freigabe zu verwalten hat, so bald die Freigabe ausgeworfen wurde. Um nun nicht jedes mal von neuem das Terminal aufrufen zu müssen, wenn eine Freigabe wieder auf dem Schreibtisch verfügbar wird, habe ich mir ein kleines AppleScript geschaffen, das z.B. als Startobjekt taugt.

Dem AppleScript werden in den Voreinstellungen der Name des Servers, die zu aktivierenden Freigabenamen, der Benutzername und dessen Passwort eingetragen. Danach arbeitet eine Schleife alle Freigaben nacheinander ab, prüft ob sie noch nicht aktiviert sind und mountet sie so dann. Sind alle Freigaben aktiv, wird die o.g. Befehlszeile der Shell übergeben und nacheinander die Indizies für die Freigaben erstellt, bzw. erneuert. Der Befehl »mdutil« benötigt Administrator-Rechte, der eingetragene Benutzer sollte also einen entsprechenden Status haben.

Ich stelle hier kostenlos dieses AppleScript zum Donwload zur Verfügung. [download#4]

14 Antworten auf „Spotlight Suche auf dem Server“

  1. Und wie schaut das mit der Last aus? Was passiert, wenn mehrere User gleichzeitig indizieren? ….

  2. Die Last – auf dem Server – ist Null, weil die Indizierung ganz normal auf dem Client läuft. Besteht einmal ein Indexfile wird der nur noch upgedatet – egal welcher Client den als erstes wieder anlangt. Den extremen Fall, das zwei Clientrechner exakt zur gleichen Zeit die Indizierung anstossen hab ich noch nicht getestet – interessante Frage!

  3. Klasse Sache, aber irgendwie scheint es nicht zu funktionieren.
    Sind denn im Script die LogIn-Daten vom Server oder vom CLient anzugeben? (Habe beide probiert)
    Interessanterweise startet zwar das Script, aber die Indexierung ist nach 5x Blinken der Spotlight-Lupe vorbei. Indexiert wurde nichts.

    Auch das Mounting funktioniert nicht. Das Script läuft nur, wenn die betreffenden Laufwerke bereits gemountet sind.

    Woran kann das alles liegen?

  4. Hallo Stefan,
    bei mir funzt das nicht. Nach EIngabe des mdutil-Befehls meldet das Terminal, dass das Servervolumen (Server HD) indiziert werden kann. Im Spotlight-Fenster siehr man dann auch, dass Server HD indizirt wird. Nur findet er dann nichts. Probiert mit Mac Server 10.4.6 und Windows 2000 Server. geht bei beiden nicht.
    Kann man überprüfen, ob der Index wirklich geschrieben wird und was drin steht?
    Nutzt Spotlight den Index für Server HD wirklich?
    Für Ideen wäre ich dankbar!!

  5. In das Script sind die Login-Daten fü den Server zu hinterlegen – so als würde man die Verbindung zum Servervolume über „Gehe zu …“ (Apfel-K) herstellen wollen. Den Fehler bei der Indizierung konnte ich nachvollziehen. Unter dem o.g. Download-Link ist nun eine gefixte Version2 des Scripts zu bekommen. Die Verarbeitung des Scripts lassen sich im Script-Editor sehr schön mit Hilfe des „Event-Protokolls“ nachvollziehen. Alle notwendigen Daten ins Script eintragen, das Eventprotokoll öffnen und das Script zur Verarbeitung direkt im Scripteditor starten. Läuft alles glatt sollte das Ergebnis etwa so aussehen:

    tell current application
       list disks
          {"Name lokale Platte", "Network"}
          mount volume "afp://servername/Volume1" as user name "user" with password "pw"
          file "Volume1:"
       list disks
          {"Name lokale Platte", "Network", "Volume1"}
          mount volume "afp://servername/Volume2" as user name "user" with password "pw"
          file "Volume2:"
       list disks
          {"Name lokale Platte", "Network", "Volume1", "Volume2"}
       do shell script "mdutil /Volumes/Volume1 -i on" password "pw" with administrator privileges
          "/Volumes/Volume1:
          Indexing enabled for volume."
       list disks
          {"Name lokale Platte", "Network", "Volume1", "Volume2"}
       do shell script "mdutil /Volumes/Volume2 -i on" password "stk" with administrator privileges
          "/Volumes/Volume2:
       Indexing enabled for volume."
    end tell

    Die "normale" Spotlight-Suche über das Menüleisten-Icon (Apfel-Leertaste), bzw. das Spotlight-Fenster (Alt-Apfel-Leertaste) schlagen in der Tat fehl. Allerdings funktioniert die Suche über Apfel-F und der expliziten Beschränkung auf das gemountete Volume mit o.g. Methode, was ohne diesen Eingriff ebenfalls fehlschlagen würde.

  6. Hi, ich bin begeistert von dem Applescript zum Serverindizieren, aber ich habe eine kleine Hürde die ich nicht überwinden kann. Wenn ich das Script als Startobjekt platzieren, kommt jedesmal beim booten der Scripteditor hoch und will ein Passwort und führt auch das script nur für ein Volume aus (ich habe 5 zu mounten). Ich wäre dankbar für jede Hilfe.

    Viele Grüße, TB

    P.S. Sehr stylische Seite hier, gefällt mir gut.

  7. Hallo
    Ich habe es mit der aktuellen Version (Version 2?, 19.7.06) probiert. Leider ohne Erfolg. Resultat in Event Log:

    tell current application
    list disks
    {"HD_KL", "Network", "Server-Volume"}
    list disks
    {"HD_KL", "Network", "Server-Volume"}
    do shell script "mdutil /Volumes/Server-Volume -i on" password "xxxxx" with administrator privileges
    "/Volumes/Server-Volume:
    Indexing enabled for volume."
    end tell

    Es scheint also, dass das Indexing möglich ist, die Lupe blinkt auch ein bisschen, aber es passiert nichts – insbesondere sollte das Indexieren ja wohl ziemlich viel Zeit in Anspruch nehmen.

    Ideen?

    schtoferi

  8. hi stefan

    danke für das script. ich war soweit erfolgreich, dass der output in etwa deinem beispiel entspricht. wenn ich nun aber im terminal den indizier-status der NAS abfrage, steht da immer noch "indexing disabled".

    p.s:
    was bei mir noch geändert werden musste: beim mount befehl nicht "afp://" sondern "smb://", weil es sich bei mir um ein gemischtes netzwerk handelt (fat32-dateisystem).

  9. Das Script ist auf Version 2.0 angekommen. Da ich einige Probleme mit meiner Routine zum mounten der Volumes hatte (teilweise erschienen die Freigaben nicht in der Seiteleiste oder dem Desktop, waren jedoch unter /Volumes/ zu finden :-o) wurde der erste Teil der das Mounten der Freigaben übernimmt komplett überarbeitet.

    Da ich zwischenzeitlich aus Sicherheitsgründen meinen alltäglichen Benutzeraccount ohne administrative Rechte betreibe, diese jedoch für die Indizierung notwendig sind, wird ein Adminname und dessen Passwort – wahlweise abgefragt oder im Script hinterlegt.

  10. Hier noch eine Lösung, wie man ohne das Admin-Kennwort im Script auskommen kann:

    Einfach mit dem Konsolenbefehl „sudo visudo“ die Datei /etc/sudoers so anpassen, dass der mdutil-Befehl ohne Kennwort verwendet werden kann. Dazu folgende Zeile einfügen:

    %admin ALL=NOPASSWD: /usr/bin/mdutil

    Ab sofort fragt „sudo /usr/bin/mdutil -s on …“ nicht mehr nach dem Kennwort und kann so problemlos in das Script eingebunden werden. Zumindest dann, wenn der angemeldete Benutzer einen Admin-Account hat.

  11. Mit afb bekomme ich keine verbindung zum NAS, mit smb klappts dafür.Vielen dank!

  12. bei mir funzt das indizieren leider nicht.
    kann mir jemand weiterhelfen?
    ich habe ein macbook und OSX 10.5.5
    das Verlaufsprotokoll sieht so aus:

    tell application „Finder“
    exists disk „meinesyn“
    true
    end tell
    tell current application
    list disks
    {„Macintosh HD“, „meinesyn“}
    end tell

    Danke vielmals.
    Seite gefällt mir auch sehr gut.
    Wenns läuft gefällt sie mir natürlich noch besser.

  13. Hallo Ihr Lieben,

    bin gnaz begeistert hier die ganzen Statements zu finden.
    Ich habe jetzt auf einem Mac OS 10.4 das ganze zum laufen bekommen.
    Mit meinem Mac Book mit 10.5.6 kann ich aber den Mount nicht durchsuchen.

    Kann es sein das wenn einmal ein index von 10.4 erstellt wurde ich das nicht vom 10.4 aus nutzen kann?

    Wir haben mehrere Rechner die auf den Mount zugreifen und ich muss die Archivplatte am besten immer durchsuchbar für alle machen.

    Hat jemand eine Idee was ich machen könnte oder eine Seite auf der das Problem beschrieben wird. Suche schon seit Tagen nach einer lösung!

    Vielen Dank

    Tidi

Kommentare sind geschlossen.