Re: FreeBSD in VMWare, os@kobo24.de, freebsd@edvax.de

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Mon, 16 Jul 2012 14:26:15 +0200 (CEST)

Oliver <os(at)kobo24.de> wrote:
> shared Verzeichnis (denke das kan Vmware), in die Datei legt Windows beim
> starten eine (leere) Textdatei an. Fürs runterfahren eine Batch nutzen, die
> erst die Textdatei löscht, 180 Sekunden Sleep und dann wie oben per RUNDLL32
> oder shutdown.exe die Kiste herunterfährt/neustartet. Sleep.exe war mal in
> einem Resource-Kit meine ich.
>
> Der FreeBSD-Gast prüft jede Minute per Cron ob die Datei da ist und wenn sie
> weg ist fährt er runter.
>
> Was für eine kranke Konstruktion :)

In der Tat ...

Wenn man eine Datei als Semaphore "missbrauchen" will, wird
im allgemeinen eher eine FIFO (named pipe) verwendet. Die
Seite, die warten soll, macht einfach ein "read" aus dieser
FIFO und wird dadurch solange blockiert, wie die FIFO leer
ist. Wenn die andere Seite das Signal geben will, schreibt
sie einfach irgendwas in die FIFO. Das "read" wacht dann
auf und macht mit dem Skript weiter (in diesem Fall wäre
das dann shutdown).

Also gastseitig:

    FIFO=/shared/shutdown-semaphore
    rm -f $FIFO
    mkfifo $FIFO
    read DUMMY < $FIFO
    shutdown -h now

Und hostseitig lediglich:

    echo foo >> /shared/shutdown-semaphore

Vorteil gegenüber einer normalen Datei: Man muss nicht
regelmäßig per cron (oder sonstwie) herumpollen, und das
Signal wird _sofort_ ausgelöst, nicht erst bei nächsten
Poll-Intervall.

Allerdings weiß ich nicht, ob Windows auch FIFOs unter-
stützt ... Mir sind dort noch keine untergekommen.

Wenn nicht, gäbe es noch einen weiteren Trick, der ohne
FIFOs auskommt. Das sähe gastseitig dann so aus:

    SEMA=/shared/shutdown-semaphore
    rm -f $SEMA
    echo foo > $SEMA
    tail -f $SEMA | head -1 > /dev/null
    shutdown -h now

»tail -f« wartet auf weiteren Input von der Datei. Da das
Kommando »head -1« nur eine Zeile liest und dann abbricht,
terminiert das tail-Kommando aufgrund eines SIGPIPE, sobald
die zweite Zeile kommt (vom hostseitigen »echo >> ...«).

Das waren jetzt nur allgemeingültige Kochrezepte, die man
ihn ähnlichen Situationen verwenden kann. Ob das in dem
konkreten Fall mit Windows + VMWare auch funktioniert, muss
man ausprobieren.

Aber ein anderes Problem hat man in jedem Fall, egal wie
man die Signalisierung löst: Woher weiß das Host-System,
wann der Gast mit dem Shutdown fertig ist? Er könnte
einfach grundsätzlich drei Minuten warten (in der Hoffnung,
dass das immer ausreicht), aber eine befriedigende Lösung
ist das nicht.

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing b. M.
Handelsregister: Registergericht Muenchen, HRA 74606,  Geschäftsfuehrung:
secnetix Verwaltungsgesellsch. mbH, Handelsregister: Registergericht Mün-
chen, HRB 125758,  Geschäftsführer: Maik Bachmann, Olaf Erb, Ralf Gebhart
FreeBSD-Dienstleistungen, -Produkte und mehr:  http://www.secnetix.de/bsd
$ dd if=/dev/urandom of=test.pl count=1
$ file test.pl
test.pl: perl script text executable
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Mon 16 Jul 2012 - 14:26:35 CEST

search this site