ubuntuusers.de

Sambazugriff aktiv melden

Status: Ungelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

eckisch

Anmeldungsdatum:
2. Juni 2009

Beiträge: 34

Hallo zusammen,

in der Hoffnung hier richtig zu sein (letztlich soll ja ein Skript entstehen) habe ich untenstehende Frage - zunächst aber zum Hintergrund:

Aus Energiespargründen habe ich den Samba-PDC und den Fileserver getrennt. Der PDC läuft immer (ein alter ThinClient - viel zu mickrig, als dass er auch die Datenschaufelei bewältigen könnte, verbraucht dafür aber nur 8 Watt) und der Fileserver (verbraucht deutlich zu viel Strom um bspw. auch nachts und am Wochenende ungenutzt duchzulaufen) soll mit WOL immer dann gestartet (und dann mit Netzwerk-mount eingebunden) werden, wenn sich jemand anmeldet (ok, dieser erste Mensch am Morgen muss dann halt ne Minute warten, ehe es einen Dateizugriff gibt). Wenn der letzte User-Rechner (mit latenz-Zeit von 20 Minuten) vom Netz ist (das klappt bereits mit netstat-Abfrage), fährt der Fileserver wieder runter. Jetzt könnte ich natürlich auch auf dem mini-PDC/ThinClient ständig ein skript ausführen lassen, dass mit netstat nachschaut, ob sich was am Netz tut, aber es wäre deutlich eleganter, wenn sich da was aktiv und von sich aus melden würde (vielleicht mit tcpdump - aber das ist m.E. schon viel zu umfangreich, der Rechner soll ja nicht durchgehend arbeiten und schon gar nicht alles mitschneiden - ich will schließlich bei 8 Watt bleiben).

Und nun zum Frage-Teil:

Gibt es ein minimal(!!!)-Programm/-Befehl/-Prozess, das/der im Hintergrund abwartet und sich dann aktiv meldet (und damit die Ausführung eines Skriptes - bspw. das Verschicken eines MagicPackage - starten kann) wenn sich ein Benutzer am Samba-Server anmeldet - vielleicht kann man ja auch Samba selbst überreden, sich genau dann zu melden, wenn was passiert???

Hat jemand von Euch einen Tipp für mich?

Mit vielem Dank vorab eckisch

eckisch

(Themenstarter)

Anmeldungsdatum:
2. Juni 2009

Beiträge: 34

Hallo nochmal und guten Abend,

als Neuling in dieser SAMBA- und PDC-Materie habe ich mich zwischenzeitlich duch einen ganzen Berg Infos gefressen, und eine Menge darüber gelesen, wie man mit netlogon und batch-Dateien Client-seitig Windows-Prozesse auslöst (Es sollen sich aber auch Ubuntu-Rechner in der (Samba-Windows-)Domäne anmelden, da ist mir noch unklar, wie ich das getrennt bekomme - aber das ist eine zukünftige Baustelle).

Grundsätzlich wäre es natürlich auch denkbar, den jeweiligen Client das MagicPackage beim Anmelden abschicken zu lassen, aber serverseitig wäre das doch viel eleganter - doch wie man so etwas Server-seitig anstößt, ist offensichtlich ein eher seltenes Problem.

Jetzt stieß ich in den Tiefen des Netzes auf das Thema preexec und postexec (bzw. root-preexec und root-postexec).

Das scheint mir ein Lichtblick zu sein. (Ist das tatsächlich eine Nadel, die ich im Heuhaufen fand oder bin ich da auf dem Holzweg???)

Wenn ich das richtig verstanden habe, dann könnte ich mit preexec bzw. root-preexec während des Anmeldevorgangs ein Script aufrufen, das beispielsweise überprüft, ob der Fileserver noch offline ist und in diesem Fall mit einem MagicPackage den Fileserver startet. Mir ist noch nicht ganz klar, wie ich den PDC dazu bewegen soll, dann eine Pause von etwa 90 Sekunden einzulegen - das Script selbst kann ich mit "sleep 90" solange auf Eis legen, aber warten auch die anderen Prozesse so lange? - bis der Fileserver online ist und das entsprechende Home-Verzeichnis beim Client über das Netz gemountet bzw. bei den Windows-Rechnern mit einer batch-datei als "Eigene Dateien" eingebunden werden kann.

Sieht das vernünftig aus - oder gibts da noch eine Abkürzung?

Ich bin weiterhin für Kommentare dankbar, die mir helfen, auf dem richtigen Weg zu bleiben - oder ihn überhaupt zu finden.

Mit Dank und Gruß

eckisch

eckisch

(Themenstarter)

Anmeldungsdatum:
2. Juni 2009

Beiträge: 34

N'abend allerseits,

da bin ich wieder nach längerem Herumbasteln.

(Ich erbitte weiterhin Hilfe!!! siehe unten.)

Der Stand ist jetzt folgender:

Ich habe mich an der Wiki-Anleitung für Samba Server PDC orientiert und auch die dort vorgeschlagene /etc/samba/smb.conf übernommen. Um die Login.bat - Dateien zu individualisieren habe ich nach dem Auskommentieren die entsprechende Zeile im Abschnitt [global] in logon script = %U.bat geändert (siehe dazu hier) und diese "username".bat dann im /home/samba/netlogon abgelegt.

Zwischenspiel AutoIT

Da ich auch nach intensivster Recherche keine wirklich befriedigende Batch-Lösung für eine Verifizierung des Online-Status meines Fileservers hinbekommen habe (dazu kann ich gerne an anderer Stelle diskutieren) habe ich das Problem mit folgendem handgeschnitzten AutoIT-Skript erschlagen:

if $cmdline[0]=0 then exit msgbox(0,"","Bitte Parameter übergeben") 
$adresse = $cmdline[1]
$latenz = $cmdline[2]
$warten1 = $cmdline[3]
$warten2 = $cmdline[4]
$schleifen = $cmdline[5]
$zaehler = 0
While $zaehler <= $schleifen
  If Ping($adresse, $latenz) = 0 Then
  Else
     sleep($warten2)
     Exit
  EndIf
  sleep($warten1)
  $zaehler = $zaehler + 1
WEnd

Das Ganze dann mit "Aut2exe.exe" kompiliert, "WartenAufServer.exe" genannt und im Win-Programme-Ordner abgelegt.

Zurück zur (personifizierten) Batch-Datei - die sehr kurz gehalten ist:

@echo off
start /wait C:\Programme\wake 00-11-22-33-44-55 192.168.1.255
start /wait C:\Programme\WartenAufServer.exe 192.168.1.10 100 1200 5000 990
net time \\domainserver /set /yes
net use m: \\fileserver\NUTZERNAME /persistent:no

Zweite Zeile: wake.exe ist ein kleines Stück Konsolen-Freeware zum Rechnerwecken, das ich ebenfalls in den Windows-Programme-Ordner gepackt und in die Batch eingebaut habe, weil die Idee, den Fileserver bei Anmeldung am PDC über WOL zu starten, nicht befriedigend funktioniert:

Die Ergänzung der /etc/samba/smb.conf des PDC unter [homes] um root preexec = etherwake 00:11:22:33:44:55 scheint nur dann aufgerufen zu werden, wenn sich Windows-Clients anmelden (?) - aber der Versuch, den Logon über den Ubuntu-Client (s.u.) durchzuführen, ließ den Fileserver kalt.

Nochmal zum Windows Teil: Ich habe die Samba-PDC Lösung ohne ActiveDirectory gewählt, weil ich die Features nicht brauche und den Aufwand mit der LDAP-Datenbank gescheut habe. Als Windows-Clients habe ich zwei XP-Prof. Rechner laufen.

Soweit erst einmal zum Windows Teil - das klappt ganz ordentlich, die Leute finden ihre Dateien (nach etwas Wartezeit) im "Eigenen Dateien" - Ordner.

So: Nun zur aktuellen Baustelle, bei der ich nochmal um Mithilfe bitte!!!

Neben den Win-Clients sollen nun auch vier Ubuntu 10.04 Clients an der Domäne hängen. Einmal abgesehen davon, dass durch den Umstieg auf Upstart für mich der Boot-Prozess weniger nachvollziehbar wurde, hat die Installation von Winbind (ohne AD) nicht immer funktioniert. bei zwei alten Celeron-Rechnern war es mehrmals und reproduzierbar nicht möglich, Winbind (befriedigend) zum Laufen zu bekommen. Offensichtlich wurden irgendwelche Dienste in der falschen Reihenfolge, oder zu spät gestartet - jedenfalls war ein Anmelden der Netz-User immer erst dann möglich, wenn man sich vorher als lokaler User auf einer der Konsolen eingeloggt hat, dann mit service nmbd stop und service smbd stop den Samba-Server stoppt, mit /etc/init.d/winbind restart winbind neu startet und dann mit service nmbd start und service smbd start den Samba-Server wieder startet. Danach war es dann auch möglich, sich als Netz-User anzumelden. (irgendeiner eine Idee? - na ja, gehört ja eigentlich nicht hierher). Selbst intensive Fummelei in den /etc/rcX-Ordnern und in den Upstart-Skripten in init blieben fruchtlos - FRUST

Na gut - zurück zum Thema:

Also: der PDC scheint den Befehl root preexec = etherwake 00:11:22:33:44:55 nur dann auszuführen, wenn sich ein Windows-Rechner anmeldet, nicht aber wenn der Client ein Ubuntu ist.

Das werde ich versuchen (für eine Ubuntu-Anmeldung) mit einem Start-Skript zu erledigen, dass dann (wann am besten??? - die Netzwerkkarte muss schon laufen!) beim Client-Boot abgearbeitet wird. Es soll...

... erstens ebenfalls noch einmal zur Sicherheit mit etherwake 00:11:22:33:44:55 ein MagicPackage an den Fileserver schicken,

... zweitend den Client so lange warten lassen, bis der Fileserver online ist (ein Stück Bash-Code, das den Rechner bis zum erfolgreichen Ping zum Fileserver warten lässt habe ich bereits gechrieben:

#!/bin/sh -e
#
# warten.sh
#
#
#  Ein wesentliches Problem ist, dass ping in den meisten Varianten bei
#  Misserfolg das Skript abbricht. So ist z.B. folgende Konstruktion
#  nicht möglich:   ANTWORT=$(ping -w2 -c2 $FILESERVER | grep -c "rtt")
#  Wenn $FILESERVER erreicht wird, geht alles gut, aber wenn $FILESERVER
#  offline ist, dann wird das Skript (warum auch immer) nicht weiter aus-
#  geführt. Die einzige Lösung scheint die zu sein, den Ping-Befehl direkt
#  in die IF-Anweisung einzubauen.
#



NOCHMAL=true
FILESERVER="192.168.1.1"
SCHLEIFE=0

while $NOCHMAL
  do
    SCHLEIFE=$(($SCHLEIFE+1))

# diese Schleife laeuft solange, bis entweder der $FILESERVER erfolgreich
# angepingt werden konnte (erste IF-Abfrage) oder die Schleife eine ziem-
# liche Zeit erfolglos rumprobiert hat, ob denn der $FILESERVER nun end-
# lich online ist.

# hier die erste IF-Abfrage

    if ping -w 2 -c 2 $FILESERVER > /dev/null ; then
      NOCHMAL=false

###### so, und ab hier kann dann das home-Laufwerk eingebunden werden ######
######### aber wie an dieser Stelle nochmal pam-mount starten ??? ##########

    fi

# und hier die zweite IF-Abfrage

    if [ $SCHLEIFE -gt 40 ]; then

# jeder "Durchlauf" dauert ca. 3 Sekunden, so dass hier etwa 2 Minuten
# gewartet wird, bis das Skript endgültig abgebrochen wird.

      NOCHMAL=false

    fi

# noch ein Sekuendchen warten, ehe alles von vorne losgeht...

    sleep 1

  done

exit 0

... und als letztes dann pam-mount noch einmal durchläuft.

Jetzt habe ich ganz aktuell gerade noch zwei Probleme:

Das Einbinden der jeweiligen Netzlaufwerke auf dem Fileserver klappt prima, wenn dieser zum Zeitpunkt des Bootens der Ubuntu-Clients schon läuft. Wie kann ich den pam-mount Prozess (der ja nicht in der fstab steht und deshalb über ein erneutes mount -a nicht angesprochen werden kann) erneut durchlaufen lassen. Das einzige, was ich nach intensiver Googelei fand, war die Aussage, dass es sich bei pam-mount eben NICHT um einen klassischen Dienst handele, den man "restarten" könne. Wie dann?

Wie bekomme ich mein kleines Stück Bash-Skript so in den Startablauf eingebaut, dass sichergestellt ist, dass der "restart" von pam-mount (wenn das überhaupt geht) NACH erfolgrechem Kontakt zum Fileserver erfolgt - und der Verbindungsprozess nicht parallel ausgeführt wird.

Ich bin weiterhin SEHR dankbar für Anregungen und Unterstützung

Mit nächtlichem Gruß

eckisch


NACHTRAG: Die Skript-Seite habe ich (hoffentlich) jetzt im Griff - die Frage, wann (und bei welchem login-Szenario) preexec tatsächlich ausgeführt wird, ist aktuell zunehmend nebensächlich (das Wecken des Fileservers habe ich jetzt einfach den Clients aufgedrückt). Mein Hauptproblem gilt derzeit der VERZÖGERTEN (!) Netzwerkanbindung der Ubuntu-Clients mit PAM-Mount (bei den XP-Clients habe ich einen Weg gefunden - s.o.). Aus diesem Grund habe ich das Thema im Forum Dateifreigaben im Netzwerk plaziert.

Antworten |