Komunikace přes sokety
Interaktivní práce se sokety
Pro interaktivní přístup ke konzolím přes sokety, lze použít buď socat nebo jednoduchou utilitu unixterm, která je součástí nástrojů k vde2. Ovšem socat má mnohem větší možnosti, jak se ukáže posléze..
Otevření monitorovací konzole přes unixterm
stroj:~# unixterm /tmp/monitor.soket
QEMU 0.14.50 monitor - type 'help' for more information
(qemu) ^Cstroj:~#
|
.. a stejná konzole přes socat
stroj:~# socat STDIO "/tmp/monitor.soket,crnl"
QEMU 0.14.50 monitor - type 'help' for more information
(qemu) ^Cstroj:~#
|
Jak vidno, výstup vypadá, i funguje v obou případech stejně, ovšem nadále již budu popisovat práci pouze s aplikací socat, jelikož unixterm nelze používat pro neinteraktivní přístup.
Otevření QMP konzole přes socat..
patty:~# socat STDIO "/tmp/qmp.soket,crnl"
{"QMP": {"version": {"qemu": {"micro": 50, "minor": 14, "major": 0}, "package": ""}, "capabilities": []}}
^Cstroj:~#
|
Komunikace se sokety ve skriptu
Pro komunikaci se sokety ve skriptech je ideální socat, protože umožňuje (mimo jiné) přesměrovávat vstupy a výstupy i mezi sokety vzájemně.
Při neiteraktivní práci s konzolemi QEMU však narazíte na určité rozdíly. Při komunikaci přes QMP je totiž nutné nejprve odeslat příkaz, kterým se QMP komunikace zinicializuje a teprve potom vlastní příkaz. Viz níže..
Výstup příkazu odeslaného na monitorovací konzoli...
Výstup příkazu odeslaného na QMP konzoli...
Jak je vidno z příkladů, příkazy, které se zadávají přes monitorovací konzoli lze zadávat i přes QMP, ovšem jejich názvy nejsou zcela identické. Jaké příkazy lze přes JSON aktuálně použít, lze zjistit zavoláním příkazu query-commands..
stroj:~# echo -e '{ "execute": "qmp_capabilities" }\n{ "execute": "query-commands" }' \
| socat - GOPEN:"/tmp/qmp.soket,crnl"
...
|