[update] Wake (and other) on LAN for VMs (v0.3)

ojaksch

Well-Known Member
Oct 11, 2015
183
37
48
Germany/Earth
Gibts diesbezüglich irgendwo auch ein "Tutorial" wie man das einrichtet?
Nein, gibt es nicht, aber braucht es meiner Meinung nach auch nicht wirklich. Die beiden Skripte sind derart "primitiv", dass sich der Aufwand schlicht nicht lohnen würde. Aber jeder, der auch nur ein wenig programmieren kann, sollte aus den Skripten schlau werden.

In aller Kürze: Auf den PVE gehören dosthol.service nach /etc/systemd/system und dosthold.sh "in den Pfad", z.B. /usr/local/bin - das systemd Service-File aktivieren und starten.
dostholc.sh kommt beim Client, der die VMs steuern soll, ebenfalls an einen Ort des PATH, fertig.

Das dostholc.sh in PHP nachzubauen sollte keinerlei Schwierigkeiten bereiten. Ich selber überlege, das für openHAB darzustellen. Warum? Weil! :)
 

SnowBerryZ

New Member
Apr 7, 2020
10
0
1
Oke, danke für die oberflächliche Richtung...
Naja, konnte das Script nicht wirklich durchschauen aber egal ^^

Werde einfach mal die systemctl aktivieren und ausprobieren was danach passiert :-D

Schönen restlichen Sonntag noch :)
 

mcdull

Member
Aug 23, 2020
57
2
8
44
[QUOTE = "ojaksch, post: 243273, member: 34455"]
Nice construct! :)


Yes, exactly, namely not at all :) . That was exactly my basic idea, why I wrote it.
[/ QUOTE]

How to you pass variable to SIRI to select VM to start?
 

Malz1902

New Member
Sep 26, 2020
21
2
3
33
Hallo, bin durch google Suche auf dem Thread hier gestoßen.
Folgendes, ich habe einen Intel NUC8i5BEH. Dort läuft Proxmox, ich habe 5 LXC Conainter unter anderem für ioBroker, weiterhin habe ich noch eine VM dort läuft Openmediavault.
Ich hätte gerne das die VM mit OMV nicht 24/7 läuft sondern nur wenn ativ daraf zugegriffen wird. Also Autoshutdown in OMV und WOL wenn das irgendwie möglich ist.
 

ojaksch

Well-Known Member
Oct 11, 2015
183
37
48
Germany/Earth
Hallo, bin durch google Suche auf dem Thread hier gestoßen.
Folgendes, ich habe einen Intel NUC8i5BEH. Dort läuft Proxmox, ich habe 5 LXC Conainter unter anderem für ioBroker, weiterhin habe ich noch eine VM dort läuft Openmediavault.
Ich hätte gerne das die VM mit OMV nicht 24/7 läuft sondern nur wenn ativ daraf zugegriffen wird. Also Autoshutdown in OMV und WOL wenn das irgendwie möglich ist.
...und was genau möchtest Du jetzt wissen oder fragen?
Falls Du überlegst, dosthol auf Dein beschriebenes Szenario einzusetzen, ja, das würde prinzipiell funktionieren. Die VM müsstest Du vor Zugriff natürlich erst per dosthol hochfahren (lassen), denn Portknocking o.ä. erkennt dosthol nicht, ließe sich aber sicherlich dahingehend aufmotzen.
Ein Autoshutdown muss die VM selber vornehmen (z.B. nach Leerlauf) oder Dein Skript/App/Gerät dosthol dazu veranlassen, die VM wieder zu beenden, da dosthol keine automagischen Fähigkeiten besitzt.

Wir sind hier im englischsprachigen Teil des Forums, also Antworten bitte auf englisch, damit andere auch etwas davon haben ;)
 

Homer-S

New Member
Nov 18, 2020
23
2
3
50
Hallo,

leider klappt es bei mir nicht. Kannst du mir bitte helfen, nach dem Fehler zu suchen.
Das hab ich bis dato gemacht:
auf dem PVE host:
cp dosthol.service /etc/systemd/system
cp dosthold.sh ~/dosthol
nano /etc/systemd/system/dosthol.service
Pfad dort geändert
sudo systemctl enable dosthol ###für den Autostart nach reboot
sudo service dosthol start

auf dem srv-fileserver/PC der die VM starten will
sudo apt-get update
sudo apt-get install socat
bash ~/Software/dosthol-WOL/dostholc.sh -f toggle -m 6A:06:A4:XX:5B:XX -v

Leider startet er nicht und gibt mir auch keine Fehlermeldung.

Danke
 

ojaksch

Well-Known Member
Oct 11, 2015
183
37
48
Germany/Earth
Hallo,

leider klappt es bei mir nicht. Kannst du mir bitte helfen, nach dem Fehler zu suchen.
Das hab ich bis dato gemacht:
auf dem PVE host:
cp dosthol.service /etc/systemd/system
cp dosthold.sh ~/dosthol
nano /etc/systemd/system/dosthol.service
Pfad dort geändert
sudo systemctl enable dosthol ###für den Autostart nach reboot
sudo service dosthol start

auf dem srv-fileserver/PC der die VM starten will
sudo apt-get update
sudo apt-get install socat
bash ~/Software/dosthol-WOL/dostholc.sh -f toggle -m 6A:06:A4:XX:5B:XX -v

Leider startet er nicht und gibt mir auch keine Fehlermeldung.

Danke

Look fine so far what you've done. But have you installed socat on the PVE server also?
 

Homer-S

New Member
Nov 18, 2020
23
2
3
50
Look fine so far what you've done. But have you installed socat on the PVE server also?
no i Didn't ... i guess I should,

socat is already the newest version (1.7.3.2-2) (on PVE)

still not working ...
 
Last edited:

ojaksch

Well-Known Member
Oct 11, 2015
183
37
48
Germany/Earth
no i Didn't ... i guess I should,
socat is already the newest version (1.7.3.2-2) (on PVE)
still not working ...

Strange...but what's the meaning of the option "toggle" in #26? Is it your placeholder/example for "wakeup|shutdown|poweroff|suspend|resume|reset" or did you really enter "toogle" - as this isn't any available option of my script!?

Another try: please do the following: ssh/login to the PVE and have a look to it's systemd journal:
Code:
[sudo] journalctl -f
At your clients console enter
Code:
bash ~/Software/dosthol-WOL/dostholc.sh -f wakeup -m <MACofVM> -v 1
and post it's output.

While hitting Enter have a look at PVE's console and it's output of the systemd journal...it should answer your request with something like this:
Code:
Dez 02 09:02:40 pve1 root[22915]: dosthol: start VM <VMID> (NAMEofVM) (qemu-server) <--- or lxc
 

Homer-S

New Member
Nov 18, 2020
23
2
3
50
Strange...but what's the meaning of the option "toggle" in #26? Is it your placeholder/example for "wakeup|shutdown|poweroff|suspend|resume|reset" or did you really enter "toogle" - as this isn't any available option of my script!?
okay ... I thought toggle is an option here
2020-12-02 09_42_32-Window.jpg
Another try: please do the following: ssh/login to the PVE and have a look to it's systemd journal:
Code:
[sudo] journalctl -f
At your clients console enter
Code:
bash ~/Software/dosthol-WOL/dostholc.sh -f wakeup -m <MACofVM> -v 1
and post it's output.
I did:
bash ~/Software/dosthol-WOL/dostholc.sh -f wakeup -m 6A:06:A4:XX:5B:XX -v 1
Broadcasting command 'wakeup' with MAC '6A:06:A4:XX:5B:XX' to IP/subnet '255.255.255.255'

While hitting Enter have a look at PVE's console and it's output of the systemd journal...it should answer your request with something like this:
Code:
Dez 02 09:02:40 pve1 root[22915]: dosthol: start VM <VMID> (NAMEofVM) (qemu-server) <--- or lxc
no entry in journalctl, unfortunately


I checked service status:
dosthold.sh[18840]: /root/dosthol-0.6/dosthold.sh: line 27: gawk: command not found

gawk is missing ....

Now it is working!!!!!!
Great tool Thanks
 

ojaksch

Well-Known Member
Oct 11, 2015
183
37
48
Germany/Earth
okay ... I thought toggle is an option here
View attachment 21658

I did:
bash ~/Software/dosthol-WOL/dostholc.sh -f wakeup -m 6A:06:A4:XX:5B:XX -v 1
Broadcasting command 'wakeup' with MAC '6A:06:A4:XX:5B:XX' to IP/subnet '255.255.255.255'


no entry in journalctl, unfortunately


I checked service status:
dosthold.sh[18840]: /root/dosthol-0.6/dosthold.sh: line 27: gawk: command not found

gawk is missing ....

Now it is working!!!!!!
Great tool Thanks

Ha! I can remeber that someone else had gawk missing too earlier in this thread.
I'm just updating the scripts to check for missing dependencies at start, so gawk is a welcomed candidate :)
Glad that it's working now at your site and that you're happy with it.
 
  • Like
Reactions: Homer-S

ojaksch

Well-Known Member
Oct 11, 2015
183
37
48
Germany/Earth
Update time!
- dosthold and dostholc are checking for missing dependencies/programs now

Edit: DO NOT USE...dependency check is borked.
 

Attachments

  • dosthol-0.6.zip
    3.5 KB · Views: 16
Last edited:
  • Like
Reactions: Homer-S

ojaksch

Well-Known Member
Oct 11, 2015
183
37
48
Germany/Earth
Update time!
- Fixup dependency check, added Reboot command, changed from GPLv2 to GPLv3
- dostholc-gui

To use the GUI copy dostholc-gui.ini to your home directory and edit the file, then start dostholc-gui.sh. GUI should be self explainable.
 

Attachments

  • dosthol-0.7.zip
    5.6 KB · Views: 144
  • Like
Reactions: bvrulez and george

final-oxer

New Member
Sep 8, 2021
1
0
1
33
Thanks a lot!

i just use the service together with an android app to start the VM and later on I'll set it up in my apache guacamole .... :D
 

bvrulez

Member
Jan 13, 2022
51
2
8
41
...schau mal in mein ZIP-File. Das Skript dostholc.sh ist das clientseitige (Bash-) Skript. Der Client sendet die Befehle (Wake, Shutdown etc.).
dosthold.sh (und das dazugehörige systemd-File) ist der Daemon, der auf dem PVE läuft und auf Kommandos eines Client (dostholc) wartet.

dostholc erwartet als Parameter -f <FUNKTION> und -m <MAC_DER_VM> und sendet die Kommando-Sequenz als Broadcast-Message in das IP-Subnet. Der Daemon dosthold auf dem PVE "sieht" das, wertet es aus und führt das gewün
schte Kommando per qm (KVM) oder pct (LXC) aus. Es wird also keine VM direkt angesprochen.
WerWoWas dostholc aufruft ist völlig Schnuppe, solange nicht dort oder dazwischen eine Firewall alles wegblockt ;)

Insgesamt also eine kleine und primitive Lösung, die wenig bis nichts drumherum erfordert.

(dostholc.sh benötigt die Programme xxd und socat, dosthold.sh nur socat)
Ohne, dass ich jetzt ausgiebig in den Code geschaut habe wollte ich fragen, ob es möglich wäre, dass der Standard ist, dass ein Magic Packet vom Client mit MAC der VM - also ohne weitere Parameter - die VM aufweckt.

Damit würde ich als Sender des Magic Packet ja nicht mehr das Client-seitige Skript benötigen, sondern könnte aus den WOL-Tools, die ich sowieso schon benutze (miniWOL) senden.

Wenn ja, dann würde ich das versuchen so umzubauen. Wäre direkt ne gute Übung.

EDIT: Vielleicht geht das sogar jetzt schon und ich muss im Windows 10 oder Windows 2019 Server erst das WOL aktivieren. Habe die Option dafür allerdings noch nicht gefunden. Der VirtIO Netzwerktreiber hat keine solche Einstellung, soweit ich sehen kann.
 
Last edited:

ojaksch

Well-Known Member
Oct 11, 2015
183
37
48
Germany/Earth
Ohne, dass ich jetzt ausgiebig in den Code geschaut habe wollte ich fragen, ob es möglich wäre, dass der Standard ist, dass ein Magic Packet vom Client mit MAC der VM - also ohne weitere Parameter - die VM aufweckt.

Damit würde ich als Sender des Magic Packet ja nicht mehr das Client-seitige Skript benötigen, sondern könnte aus den WOL-Tools, die ich sowieso schon benutze (miniWOL) senden.

Wenn ja, dann würde ich das versuchen so umzubauen. Wäre direkt ne gute Übung.

EDIT: Vielleicht geht das sogar jetzt schon und ich muss im Windows 10 oder Windows 2019 Server erst das WOL aktivieren. Habe die Option dafür allerdings noch nicht gefunden. Der VirtIO Netzwerktreiber hat keine solche Einstellung, soweit ich sehen kann.
Lass es mich mal so sagen: Janöweißnich' ;) Guck mal, der Thread und damit dosthol ist nun schon 5 Jahre alt...zumindest damals klappte das nicht per normalem WOL. Mag sein, dass sich das mittlerweile geändert hat, aber ich habe es nicht probiert und habe da auch meine Zweifel - denn irgendetwas MUSS ja auf das MagicPacket lauschen...bei echten Maschinen ist das das LAN-Interface, welches auch im Off weiter mit Strom versorgt wird und diesen Part übernimmt. Eine VM kann das ja nicht, und so müsste es das OS oder vielmehr PVE übernehmen. Und genau dort setze ich mit dosthol an.
Aber prinzipiell richtig: Du könntest den dosthol-Daemon auf das eigentliche MagicPacket zusammenschrumpfen und Clientseitig per popeligem WOL loslegen. Ich hatte nur gleich demonstrieren wollen, dass wenn man schon so etwas skriptet, dann auch gleich noch ein paar Features mehr unterbringen kann...
 

bvrulez

Member
Jan 13, 2022
51
2
8
41
Lass es mich mal so sagen: Janöweißnich' ;) Guck mal, der Thread und damit dosthol ist nun schon 5 Jahre alt...zumindest damals klappte das nicht per normalem WOL. Mag sein, dass sich das mittlerweile geändert hat, aber ich habe es nicht probiert und habe da auch meine Zweifel - denn irgendetwas MUSS ja auf das MagicPacket lauschen...bei echten Maschinen ist das das LAN-Interface, welches auch im Off weiter mit Strom versorgt wird und diesen Part übernimmt. Eine VM kann das ja nicht, und so müsste es das OS oder vielmehr PVE übernehmen. Und genau dort setze ich mit dosthol an.
Aber prinzipiell richtig: Du könntest den dosthol-Daemon auf das eigentliche MagicPacket zusammenschrumpfen und Clientseitig per popeligem WOL loslegen. Ich hatte nur gleich demonstrieren wollen, dass wenn man schon so etwas skriptet, dann auch gleich noch ein paar Features mehr unterbringen kann...
Danke für die Antwort! Auf alte Threads antworten ist so bisschen meine Spezialität. :) An anderer Stelle habe ich vorgeschlagen, dass dein Service bei proxmox Standard sein könnte. Und wenn der Service dann ein normales Magic Packet zum Aufwecken der spezifischen MAC verwendet, dann könnte man jederzeit von beliebigen Clients eine VM aufwecken.

Du hast ja diese Stelle im Code, wo du das Paket ausliest und anhand des Headers dann die Aktion bestimmst. Ich könnte nun einfach sagen, wenn kein Header, dann default "start". Aber vielleicht versendet mein miniWOL ja auch bereits so einen Header. Wie debugge ich das am besten? Bzw. hattest du die Header im Clientskript nach einem bekannten Modell gesetzt?

Code:
# socat listens on udp/9, when packet arrives it exits
# gawk magic thanks to <https://stackoverflow.com/questions/31341924/sed-awk-insert-commas-every-nth-character>
socat -u udp-recv:9,readbytes=102 - | xxd -u -p -c 102 | gawk '{$1=$1}1' FPAT='.{2}' OFS=: > ${FNAM}

# get header (6*FF / 6*EE)
WOLHEADER=$(cut -b 1-17 ${FNAM})

# valid header?
case "${WOLHEADER}" in
    "FF:FF:FF:FF:FF:FF")    CMDONLAN="start" ;;
    "EE:EE:EE:EE:EE:EE")    CMDONLAN="shutdown" ;;
    "DD:DD:DD:DD:DD:DD")    CMDONLAN="stop" ;;
    "CC:CC:CC:CC:CC:CC")    CMDONLAN="suspend" ;;
    "BB:BB:BB:BB:BB:BB")    CMDONLAN="resume" ;;
    "AA:AA:AA:AA:AA:AA")    CMDONLAN="reset" ;;
    "AB:AB:AB:AB:AB:AB")    CMDONLAN="reboot" ;;
esac
 

ojaksch

Well-Known Member
Oct 11, 2015
183
37
48
Germany/Earth
Danke für die Antwort! Auf alte Threads antworten ist so bisschen meine Spezialität. :) An anderer Stelle habe ich vorgeschlagen, dass dein Service bei proxmox Standard sein könnte. Und wenn der Service dann ein normales Magic Packet zum Aufwecken der spezifischen MAC verwendet, dann könnte man jederzeit von beliebigen Clients eine VM aufwecken.

Nix zu danken... Mein dosthol ist ja doch einigermaßen verbreitet *schulterklopf* Und ja, das Prinzip wäre in PVE gut aufgehoben. Meine Vorlage existiert ja und darf gerne von Proxmox aufgegriffen und verwendet werden. Hat mit Backup/zstd auch geklappt :)


Du hast ja diese Stelle im Code, wo du das Paket ausliest und anhand des Headers dann die Aktion bestimmst. Ich könnte nun einfach sagen, wenn kein Header, dann default "start".

Genau so meinte ich das. Keine Header (die kommen bei "echtem" WOL ja auch nicht vor) und nur parsen ob das Packet wie 16*MAC aussieht und ganz zufällig zu einer VM/CT passt - und die dann starten. Aus die Maus.


Aber vielleicht versendet mein miniWOL ja auch bereits so einen Header.

Nein. Wie schon gesagt, besteht ein MagicPacket aus 16*MAC-Adresse (ohne Trennzeichen).
Es gibt noch andere solche Techniken wie z.B. LO (LightsOut) und HP hat glaube ich auch noch so etwas eigenes, aber keine Ahnung wie die im Detail funktionieren und wir reden ja hier über MagicPakcket/WOL und "das ist halt so" :)


Wie debugge ich das am besten? Bzw. hattest du die Header im Clientskript nach einem bekannten Modell gesetzt?

Nö. Ich wollte nur keine Raketenwissenschaft anwenden und fing mit 8*FF als Header an, damit ich etwas zu erkennen habe, denn MagickPacket mit 8*FF ist doch recht unwahrscheinlich. Und so gings dann halt weiter mit 8*EE etc.pp.
Zum Debuggen kannst Du im dosthold.sh die Zeile mit rm ${FNAM} auskommentieren und/oder gleich am Anfang FNAM= auf etwas nach Deinen Wünschen setzen. In dieser Datei fange ich auf, was da so an Broadcasts herumschwirrt und vergleiche das dann anschließend, ob das etwas bekanntes und erwünschtes ist.
 

bvrulez

Member
Jan 13, 2022
51
2
8
41
Ja super geil, danke! Ich hatte inzwischen schon mal rumprobiert und einfach CMDONLAN="start" vor dem case gesetzt und jetzt läuft es. Man muss natürlich vorher das Skript auch ausführbar machen und dann mal in der Konsole testen, bevor man es als Service hinterlegt. Dann kriegt man auch gleich mit, wenn gawk noch fehlt. Das waren meine einzigen Probleme.

EDIT: Noch ein Hinweis. Nach dem Start in der Konsole kann man es nur mit CTRL-Z abbrechen. Danach muss man den Prozess per Hand abschießen, sonst startet der Daemon nicht, weil die Adresse schon belegt ist.

:)
 
Last edited:

ojaksch

Well-Known Member
Oct 11, 2015
183
37
48
Germany/Earth
Ja super geil, danke! Ich hatte inzwischen schon mal rumprobiert und einfach CMDONLAN="start" vor dem case gesetzt und jetzt läuft es. Man muss natürlich vorher das Skript auch ausführbar machen und dann mal in der Konsole testen, bevor man es als Service hinterlegt. Dann kriegt man auch gleich mit, wenn gawk noch fehlt. Das waren meine einzigen Probleme. :)

Na geht doch! Biddeschön... Und wenn Du etwas fertiges/funktionierendes hast, immer gerne her damit - wird andere auch interessieren und zu verbessern gibt es immer etwas ;)
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get your own in 60 seconds.

Buy now!