Program stapvirt slouží k přidání portů do domén, které obsluhuje libvirt (viz <http://libvirt.org/>). Tyto porty pak umí využít stap ke spuštění skriptů uvnitř těchto domén (viz volba '--remote' v manuálové stránce stap(1))
Porty se do definice domény přidávají příkazem port-add a odebírají se analogickým příkazem port-remove. Poznamenejme, že počet možných systemtap sezení odpovídá počtu dostupných portů.
Při použití alespoň libvirt v1.1.1 a QEMU v0.10.0 mohou být porty přidávány a odebírány za běhu (hotpllugging). V tomto případě není iniciální port-add nutný.
Aby bylo možné se k portům přidaným za běhu připojit, je třeba zaručit, aby ovladač virtio-serial byl aktivní. Při vytváření domény programem virt-install se toho dá dosáhnout takto:
$ virt-install [...] --controller=virtio-serial
Pokud již doména existuje, použijte port-add, port-remove, a následně doménu restartujte. Port byl odebrán, ale ovladač zůstane na místě.
$ stapvirt -c 'qemu:///system' list Available domains on URI 'qemu:///system': ID State Type Name 2 running persistent TestVM
Poznamenejme, že jsme určili URI pomocí přepínače -c. Jinak by mohl libvirt použít výchozí hodnotu, např. 'qemu:///session'.
Namísto opakovaného zadávání URI může být pohodlnější nastavit odpovídající proměnnou prostředí LIBVIRT_DEFAULT_URI a přepínač -c napříště vynechat (poznamenejme, že toto je funkcionalita libvirtu, viz <libvirt.org/uri.html> ).
Příkaz list ukazuje, že doména 'TestVM' běží a má ID 2. Použijme příkaz query abychom zjistili podrobnosti:
$ stapvirt query TestVM # by name $ stapvirt query 2 # by ID Name: TestVM UUID: 905951c0-fa4f-409b-079c-c91ddda27028 State: running ID: 2 Type: persistent Permanent Ports: 0 Hotplugging: not supported
Příkaz query dává základní informace o doméně, jako UUID a stav. Z důležitějších informací jsou to pak čísla permanentních portů, a zda je podporován "hotplugging" (což technicky vzato závisí na libvirt a qemu a nesouvisí přímo s doménou).
Kdyby byl podporován "hotplugging", mohli bychom zde skončit a spustit přímo stap (s tím, že ovladač virtio-serial je dostupný, viz POPIS). Ale protože "hotplugging" v našem případě není podporován, musíme přidat porty ručně příkazem port-add:
$ stapvirt port-add TestVM Added new port org.systemtap.stapsh.0 The domain must be powered off before changes take effect.
Ověřit, že port byl přidán, můžeme opět příkazem query:
$ stapvirt query TestVM ... Permanent Ports: 1 Hotplugging: not supported
Nyní máme k dispozici 1 permanentní port. Pro více podrobností můžeme zavolat příkaz port-list:
$ stapvirt port-list TestVM /var/lib/libvirt/qemu/TestVM.org.systemtap.stapsh.0.sock
Po restartu domény už můžeme zavádět systemtap sondy příkazem stap:
$ stap -e 'probe begin { printf("Hello from TestVM!\n"); exit() }' \ --remote=libvirt://TestVM Hello from TestVM!
Na závěr můžeme použitý port opět odebrat příkazem port-remove:
$ stapvirt port-remove TestVM Removed port org.systemtap.stapsh.0 The domain must be powered off before changes take effect.
A to je vše!
stap(1), virt-install(1)
error::reporting(7stap), https://sourceware.org/systemtap/wiki/HowToReportBugs