# Libguestd This is supposed to be a library that helps with operations on qemu-guest-agent. You need to connect to libvirt daemon on your own. This library implements some(most?) functions described in [QEMU Guest Agent Protocol Reference](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html). Not implemented: - guest-sync-delimited (my understanding is that libvirt does this for me) - guest-sync (same as above) - guest-set-time - guest-shutdown (there is a libvirt command for that already) - guest-shutdown (there is a libvirt command for that already) - guest-file-seek (this library only reads/writes whole file) - guest-file-flush (this library only writes whole file, then closes it immediately) - guest-fsfreeze-* (there are libvirt commands for that) - guest-fstrim (I don't need this) - guest-suspend-* - guest-get-vcpus (I don't need this) - guest-set-vcpus (I don't need this) - guest-get-memory-blocks - guest-get-memory-block-info - guest-set-memory-blocks - guest-get-users (I don't think this is usefull) - guest-get-timezone - guest-get-devices (windows only) Not implemented but I want to implement it: - guest-get-cpustats # CLI tools Alongside this library, a few tools are provided: ## cp2guest Allows copying files from/to guest using qemu guest agent. Example usage: ```shell ./bin/cp2guest -domain guesttools -src README.md -dst /tmp/README.md ``` Or, to copy from VM to host: ```shell ./bin/cp2guest -domain guesttools -src /root/anaconda-ks.cfg -dst /tmp/anaconda-ks.cfg -reverse ``` ## guestrun Execute command in guest Example usage: ```shell ./bin/guestrun -domain guesttools -cmd 'ls -ltrh /bin/' ``` Command will be executed as `/bin/sh -c 'ls -ltrh /bin'`. ## Libguestd-cli This tool implements most functions of this library. Since usage should be self-explainatory, I will just leave a few example commands here: ```shell ./bin/libguestd-cli -domain guesttools -username root -password 12345 ./bin/libguestd-cli -domain guesttools -username root -sshkey-add 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID8qp7UQUINxLXog/sFgRKDtddiJHzkypyB7/OlmUbK2 lmoskala'\ ./bin/libguestd-cli -domain guesttools -username root -sshkey-remove 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID8qp7UQUINxLXog/sFgRKDtddiJHzkypyB7/OlmUbK2 lmoskala' ./bin/libguestd-cli -domain guesttools -username root -listkeys ./bin/libguestd-cli -domain guesttools -username root -fsinfo ``` # Security Some distributions (rocky linux for example) disables some functionalities of qemu-guest-agent by default. Most notably, all operations involving files and commands. Also, selinux is known to cause problems when manipulating SSH keys: [bug report](https://bugzilla.redhat.com/show_bug.cgi?id=1917024)