Jesse Gardner 46d064bcdd | ||
---|---|---|
LICENSE | ||
README.md | ||
gen_installer.bash | ||
inst_fragment.bash | ||
lv_api_do | ||
lv_api_do.c | ||
man.md | ||
man.pandoc | ||
pandoc_gen_docs | ||
qq2clone | ||
qq2clone-completion.bash | ||
qq2clone.1 | ||
qq2clone.completion | ||
qq2clone_installer.bash |
README.md
README
qq2clone is a linux tool to simplify creating and managing copy-on-write clones of template QEMU/KVM virtual machines. It can perform batch operations in case you are working with multiple clones. For much more information, there is a markdown version of the manual page you can read above (man.md).
qq2clone has these dependences:
- virsh (qq2clone has started the transition to use the libvirt API directly, this will not remain a dependency forever)
- Bash 4.0+
- sqlite3
- xmllint (from libxml2)
- qemu-img
- libvirt tools:
- virt-clone
- virt-xml
- virt-xml-validate
INSTALL
Eventually I will write an install script, but for now the process is manual.
First, download the main script (qq2clone) and place it somewhere in your path. Make it executable.
Second, qq2clone requires a directory it will use to store its sqlite database, helper application, template XML and default storage pool. The default value for this directory is ~/storage-qq2clone. If you want to use a different location, create the file ~/.config/qq2clone and place the absolute path to the directory of your choice in that file. Then create the directory ~/storage-qq2clone (or whatever you chose), and download lv_api_do into that directory. Make it executable.
Lastly, there is a bash completion file (qq2clone.completion) and a man page (qq2clone.1) above.
That's it!
FAQ
Is this really 3000 lines of Bash? In 2021?!
Yep! I am aware that more popular, modern scripting languages like Python exist, but Bash is more than sufficiently capable for a project of this nature. The reason I chose it specifically was as an opportunity to further develop my Bash skills. Similarly, the lv_api_do helper application is written in C rather than Python (for which libvirt API bindings exist) because I hadn't written any C in a long time and it was an opportunity to re-familiarize myself with the language.
EXAMPLES
TODO: I will flesh out this section later, for now check out the examples section in man.md