Improved man page

This commit is contained in:
Jesse Gardner 2021-07-15 19:47:59 -07:00
parent cc72e7ab80
commit 8465507daf
5 changed files with 1202 additions and 1363 deletions

152
man.md
View File

@ -12,19 +12,16 @@ SYNOPSIS
DESCRIPTION
===========
**qq2clone** is a tool that uses libvirt to make creating clones of
template QEMU/KVM machines simple. By using the copy on write feature
for which qcow2 is named, clones of an existing virtual machine can be
made without inadvertently altering the original image (with caveats -
read the **LIMITATIONS** section if you arent already familiar with how
copy on write works). **qq2clone** makes creating and managing these
clones simple and efficient.
**qq2clone** is a tool for creating and managing clones of QEMU/KVM
virtual machines. By using the copy on write feature of qcow2, clones of
an existing virtual machine can be made using few system resources and
little time or effort.
**qq2clone** supports creating numerous clones of a template and
performing batch operations on them - including the execution of
arbitrary commands with exec. This simplifies workflows involving large
numbers of virtual machines, or the frequent creation/destruction of
virtual machines.
arbitrary commands with **qq2clone** exec. This simplifies workflows
involving large numbers of virtual machines, or the frequent
creation/deletion of virtual machines.
To easily establish graphical connections to your virtual machines,
qq2clone can use virt-viewer or spicy.
@ -34,18 +31,17 @@ OPTIONS
Not every option has an effect in the context of every command.
Specifying an option that has no effect in the context of the command
being invoked will not produce an error, it simply will not do anything
being invoked will not produce an error, it simply will not do anything.
Options are parsed left to right, and right-hand options override
left-hand options. The only exception is for -Q/--quieter, which *must*
be the first option listed to work properly.
left-hand options.
-c, --connection \[*URI*\]
Specify a non-default connection URI: sets the value of
LIBVIRT\_DEFAULT\_URI
-C, --copy-disks
When importing or copying a template, make a (full) copy of images
When importing or copying a template, make a (full) copy of its image(s)
-f, --no-spice
Do not attempt to connect to a virtual machines Spice graphics.
@ -70,17 +66,15 @@ command. Recommended only once familiar with the behavior of
**qq2clone**
-Q, --quieter
This option is (currently) required to appear immediately following the
invocation of **qq2clone**. Suppresses all output, error message or
otherwise, except when running interactive commands or commands that
require output to be useful. The commands for which output is not
entirely supressed are: config list, config info, list, list-templates,
exec, edit, modify-template edit, and check. Other commands will receive
only an exit code as output. This option is intended for calling
qq2clone from a script.
This option is (currently) required to appear as the first argument to
**qq2clone**. Suppresses all output, error message or otherwise, except
when running interactive commands or commands that require output to be
useful. Other commands will receive only an exit code as output. This
option is intended for calling qq2clone from a script.
-r, --run
Run a clone when creating it. Overrides NORUN setting in configuration
Start a clone after creating it. Overrides NORUN setting in
configuration
-s, --storage \[*LOCATION*\]
When creating a clone, place new disk image file(s) at location
@ -110,10 +104,9 @@ TYPES OF COMMAND
There are two main classes of commands: commands that operate directly
on templates, and commands that create or operate on clones of
templates. In order to make it less likely that the user may
unintentionally invoke a command of one class when they intended to
invoke one of the other, they use a different syntax. Commands that
operate on templates use the syntax:
templates. To prevent unintended actions, these two command types use
slightly different syntax. Commands that operate on templates use the
syntax:
**qq2clone** **command** \[*template-name*\] \[*ARG*\] …
@ -121,15 +114,15 @@ while commands that operate on clones use the syntax:
**qq2clone** --template \[*template-name*\] **command** \[*ARG*\] …
Notice that commands operating on clones work within the context of a
template defined by the option --template/-t. Conversely, commands
operating on templates specify the template as an argument to the
command. There can also be a default template defined by the TEMPLATE
configuration option, allowing the --template flag to be omitted for
commands that operate on clones. Commands operating on templates do not
respect this default - the template must always be explicitly defined,
further reducing the likelihood of accidentally modifying or deleting a
template.
Commands operating on clones work within the context of a template
defined by --template/-t. Conversely, commands operating on templates
specify the template as an argument to the command.
A default template can be defined by the TEMPLATE configuration option,
allowing the --template flag to be omitted for commands that operate on
clones. Commands operating on templates do not respect this default -
the template must always be explicitly defined, reducing the likelihood
of accidentally modifying or deleting a template.
TEMPLATE COMMMANDS
==================
@ -220,10 +213,9 @@ For every machine in *SET*, sequentially, execute the contents of the
command string in an environment where the following variables are
defined per clone: `"$uuid"`, `"$name"`, `"$disks"` (a newline delimited
string containing the machines qcow2 disk device filepaths). This is
done using bashs eval command, so be sure to put any instances of these
variables in single quotes (double quotes inside the single quotes is
best practice) or they will not be set properly. If any instance of exec
has a non-zero return value, execution stops.
done using bashs eval command, so contain the command string in single
quotes to avoid unexpected behavior. If any instance of exec has a
non-zero return value, execution stops.
**list** \[*ARG*\]
Without arguments, list all clones of the current template and their
@ -265,13 +257,13 @@ OTHER COMMANDS
==============
**check** \[*TEMPLATE-NAME*\]
As described in the limitations section, there are ways that qq2clone
can lose track of a clone. If this happens, it will remain in qq2clones
database, its ID number will remain reserved, and its image files may
not be deleted and take up space doing nothing. The **check** command
finds and fixes occurences of this problem. The *TEMPLATE-NAME* argument
is optional, and restricts the check to that template and its clones.
Otherwise, all templates are checked
If a clone is deleted, has its UUID changed or is otherwise unavailable,
it will remain in qq2clones database. Its ID number will remain
reserved, and its image files may not be deleted and take up space doing
nothing. The **check** command finds and fixes occurences of this
problem. The *TEMPLATE-NAME* argument is optional, and restricts the
check to that template and its clones. Otherwise, all templates are
checked
**config** list, **config** info \[*OPTION*\], **config** edit \[*OPTION*\]
List all configuration options and their current value, get info about a
@ -415,48 +407,18 @@ backing storage device that you can edit as you please
LIMITATIONS
===========
The largest limitation of **qq2clone** is that it cannot protect your
template images from the actions of other software. If nothing else
touches a templates storage volumes, qq2clone can safely handle them
(barring unknown bugs or bad luck during a commit-image). However, if
something else alters the image upon which a template is based, its
existing clones may be corrupted and future clones may behave
differently than expected. It is the users responsibility to understand
this aspect of copy on write and carefully manage template images.
Future updates to qq2clone may add features that give some additional
protections, but this risk is inherent to copy on write.
Understand what copy on write is. If you modify an image, you will
corrupt images using it as a backing file. If you dont understand what
that means, use a search engine to research copy on write. To safely
modify a templates underlying image, use the prepare-image and
commit-image subcommands of **qq2clone** modify-template.
Libvirt has permissions errors when a storage pool is in a “hidden”
directory with a name beginning with “.” and qcow2 files with backing
files are involved. This may be due to apparmor, or it may be an issue
with libvirt. It is unknown how widespread this issue is, but it is the
reason that the default directory storage-qq2clone does not start with
.
qq2clone uses a virtual machines UUID as defined in its libvirt XML
file to track it. Dont change a clones UUID.
If the UUID of a clone is changed, qq2clone will no longer be able to
track it and will not be able to perform commands on it anymore. This
will be addressed in the future using custom metadata in the libvirt
domain XML. If the user undefines a domain, this will obviously cause it
to disappear from qq2clones perspective when it is turned off, creating
a discrepancy in its database. This can be fixed with **qq2clone**
**check**.
qq2clone can only produce clones by making qcow2 image files. The
backing file need not be qcow2, but the images produced by qq2clone
always will be. This is unlikely to ever change - levaraging the
features of qcow2 is the entire purpose of qq2clone. If it does change,
qq2clone will need a new name.
qq2clone does not support creating images in pool types other than
directories, and attempting to use a machine as a template when it has
storage volumes in a non-directory pool is likely to fail or have
unexpected results. Support for some other pool types may be added in
the future.
qq2clone currently cannot copy storage volumes when importing a template
(it just references the originals), or when copying a template. This
will change in the future, and qq2clone will also be able to handle more
complex relationships between templates, clones and their images
qq2clone does not support pool types other than directories. If there is
another pool type you wish it could use, email me at
jgardner7289@protonmail.com and let me know.
FILES
=====
@ -493,19 +455,9 @@ manually, but it is more advisable to use **qq2clone**
BUGS
====
As described in the options section, the implementation of the
--quieter/-Q option needs some work. Its current behavior is the easiest
functional approach without complicating the options parser, but it will
eventually be modified and become better behaved. In addition to the
previously described problem, very early error messages will not be
suppressed. Most likely, the solution is to implement a better options
parser and make it the first thing to run when executing qq2clone.
However, the impact of this bug is minimal and other improvements are
likely to come before this bug fix.
If you find any worse bugs, and Im sure I missed some, please let me
know and I will fix them as time allows. Contact me at:
jgardner7289@protonmail.com
If you find a bug, please check to see if it already appears in
https://git.j-g-web.com/jesse/qq2clone/issues. If not, email me at
jgardner7289@protonmail.com.
COPYRIGHT 2021, Jesse Gardner
=============================

View File

@ -10,18 +10,16 @@ qq2clone - Create and manage QEMU/KVM VMs using template machines and qcow2
**qq2clone** [*OPTION*]... *COMMAND* [*ARG*]...
# DESCRIPTION
**qq2clone** is a tool that uses libvirt to make creating clones
of template QEMU/KVM machines simple. By using the copy on write feature
for which qcow2 is named, clones of an existing virtual machine can be made
without inadvertently altering the original image (with caveats - read the
**LIMITATIONS** section if you aren't already familiar with how copy on
write works). **qq2clone** makes creating and managing these clones simple
and efficient.
**qq2clone** is a tool for creating and managing clones of QEMU/KVM
virtual machines. By using the copy on write feature of qcow2, clones of
an existing virtual machine can be made using few system resources and
little time or effort.
**qq2clone** supports creating numerous clones of a template and
performing batch operations on them - including the execution of arbitrary
commands with exec. This simplifies workflows involving large numbers of
virtual machines, or the frequent creation/destruction of virtual machines.
commands with **qq2clone** exec. This simplifies workflows involving large
numbers of virtual machines, or the frequent creation/deletion of virtual
machines.
To easily establish graphical connections to your virtual machines, qq2clone
can use virt-viewer or spicy.
@ -30,18 +28,17 @@ can use virt-viewer or spicy.
Not every option has an effect in the context of every command. Specifying
an option that has no effect in the context of the command being invoked
will not produce an error, it simply will not do anything
will not produce an error, it simply will not do anything.
Options are parsed left to right, and right-hand options override
left-hand options. The only exception is for \-Q/\-\-quieter, which *must*
be the first option listed to work properly.
left-hand options.
\-c, \-\-connection [*URI*]
: Specify a non-default connection URI: sets the value of
LIBVIRT_DEFAULT_URI
\-C, \-\-copy\-disks
: When importing or copying a template, make a (full) copy of images
: When importing or copying a template, make a (full) copy of its image(s)
\-f, \-\-no\-spice
: Do not attempt to connect to a virtual machine's Spice graphics.
@ -65,17 +62,15 @@ exiting with an error or making a safe default choice depending on the
command. Recommended only once familiar with the behavior of **qq2clone**
\-Q, \-\-quieter
: This option is (currently) required to appear immediately following the
invocation of **qq2clone**. Suppresses all output, error message or
: This option is (currently) required to appear as the first
argument to **qq2clone**. Suppresses all output, error message or
otherwise, except when running interactive commands or
commands that require output to be useful. The commands for which output
is not entirely supressed are: config list, config info, list,
list-templates, exec, edit, modify-template edit, and check. Other
commands that require output to be useful. Other
commands will receive only an exit code as output. This option is intended
for calling qq2clone from a script.
\-r, \-\-run
: Run a clone when creating it. Overrides NORUN setting in configuration
: Start a clone after creating it. Overrides NORUN setting in configuration
\-s, \-\-storage [*LOCATION*]
: When creating a clone, place new disk image file(s) at location
@ -103,10 +98,9 @@ of a clone. Overrides SPICY setting in configuration
# TYPES OF COMMAND
There are two main classes of commands: commands that operate directly on
templates, and commands that create or operate on clones of templates. In
order to make it less likely that the user may unintentionally invoke a
command of one class when they intended to invoke one of the other, they
use a different syntax. Commands that operate on templates use the syntax:
templates, and commands that create or operate on clones of templates. To
prevent unintended actions, these two command types use slightly
different syntax. Commands that operate on templates use the syntax:
**qq2clone** **command** [*template-name*] [*ARG*] ...
@ -115,14 +109,16 @@ while commands that operate on clones use the syntax:
**qq2clone** \-\-template [*template-name*] **command** [*ARG*] ...
Notice that commands operating on clones work within the context of a
template defined by the option \-\-template/\-t. Conversely, commands
Commands operating on clones work within the context of a
template defined by \-\-template/\-t. Conversely, commands
operating on templates specify the template as an argument to the
command. There can also be a default template defined by the
command.
A default template can be defined by the
TEMPLATE configuration option, allowing the \-\-template
flag to be omitted for commands that operate on clones. Commands
operating on templates do not respect this default - the template must
always be explicitly defined, further reducing the likelihood of
always be explicitly defined, reducing the likelihood of
accidentally modifying or deleting a template.
# TEMPLATE COMMMANDS
@ -212,9 +208,8 @@ the domain is running forcibly turn it off)
command string in an environment where the following variables are defined
per clone: `"$uuid"`, `"$name"`, `"$disks"` (a newline delimited string
containing the machine's qcow2 disk device filepaths). This is done using
bash's eval command, so be sure to put any instances of these variables in
single quotes (double quotes inside the single quotes is best practice) or
they will not be set properly. If any instance of exec has a non-zero
bash's eval command, so contain the command string in single quotes to
avoid unexpected behavior. If any instance of exec has a non-zero
return value, execution stops.
**list** [*ARG*]
@ -256,13 +251,12 @@ domains, their state will be restored
# OTHER COMMANDS
**check** [*TEMPLATE-NAME*]
: As described in the limitations section, there are ways that qq2clone
can lose track of a clone. If this happens, it will remain in qq2clone's
database, its ID number will remain reserved, and its image files may not
be deleted and take up space doing nothing. The **check** command
finds and fixes occurences of this problem. The *TEMPLATE-NAME* argument is
optional, and restricts the check to that template and its clones.
Otherwise, all templates are checked
: If a clone is deleted, has its UUID changed or is otherwise unavailable,
it will remain in qq2clone's database. Its ID number will remain
reserved, and its image files may not be deleted and take up space doing
nothing. The **check** command finds and fixes occurences of this problem.
The *TEMPLATE-NAME* argument is optional, and restricts the check to that
template and its clones. Otherwise, all templates are checked
**config** list, **config** info [*OPTION*], **config** edit [*OPTION*]
: List all configuration options and their current value, get info about a
@ -401,46 +395,18 @@ backing storage device that you can edit as you please
# LIMITATIONS
The largest limitation of **qq2clone** is that it cannot protect your
template images from the actions of other software. If nothing else
touches a template's storage volumes, qq2clone can safely handle them
(barring unknown bugs or bad luck during a commit-image). However,
if something else alters the image upon which a template is based, its
existing clones may be corrupted and future clones may behave differently
than expected. It is the user's responsibility to understand this aspect
of copy on write and carefully manage template images. Future updates to
qq2clone may add features that give some additional protections, but this
risk is inherent to copy on write.
Understand what copy on write is. If you modify an image, you will
corrupt images using it as a backing file. If you don't understand what
that means, use a search engine to research copy on write. To safely modify
a template's underlying image, use the prepare-image and commit-image
subcommands of **qq2clone** modify-template.
Libvirt has permissions errors when a storage pool is in a "hidden"
directory with a name beginning with "." and qcow2 files with backing files
are involved. This may be due to apparmor, or it may be an issue with
libvirt. It is unknown how widespread this issue is, but it is the reason
that the default directory storage-qq2clone does not start with '.'
qq2clone uses a virtual machine's UUID as defined in its libvirt XML
file to track it. Don't change a clone's UUID.
If the UUID of a clone is changed, qq2clone will no longer be able to
track it and will not be able to perform commands on it anymore. This will
be addressed in the future using custom metadata in the libvirt domain
XML. If the user undefines a domain, this will obviously cause it to
disappear from qq2clone's perspective when it is turned off, creating a
discrepancy in its database. This can be fixed with **qq2clone** **check**.
qq2clone can only produce clones by making qcow2 image files. The backing
file need not be qcow2, but the images produced by qq2clone always will
be. This is unlikely to ever change - levaraging the features of qcow2 is
the entire purpose of qq2clone. If it does change, qq2clone will need a
new name.
qq2clone does not support creating images in pool types other than
directories, and attempting to use a machine as a template when it has
storage volumes in a non-directory pool is likely to fail or have
unexpected results. Support for some other pool types may be added in the
future.
qq2clone currently cannot copy storage volumes when importing a template
(it just references the originals), or when copying a template. This will
change in the future, and qq2clone will also be able to handle more complex
relationships between templates, clones and their images
qq2clone does not support pool types other than directories. If there is
another pool type you wish it could use, email me at
jgardner7289@protonmail.com and let me know.
# FILES
@ -479,19 +445,9 @@ manually, but it is more advisable to use **qq2clone** **modify-template**
# BUGS
As described in the options section, the implementation of the
\-\-quieter/\-Q option needs some work. Its current behavior is the
easiest functional approach without complicating the options parser, but it
will eventually be modified and become better behaved. In addition to the
previously described problem, very early error messages will not be
suppressed. Most likely, the solution is to implement a better options
parser and make it the first thing to run when executing qq2clone. However,
the impact of this bug is minimal and other improvements are likely to
come before this bug fix.
If you find any worse bugs, and I'm sure I missed some, please let me know
and I will fix them as time allows. Contact me at:
jgardner7289@protonmail.com
If you find a bug, please check to see if it already appears in
https://git.j-g-web.com/jesse/qq2clone/issues. If not, email me at
jgardner7289@protonmail.com.
# COPYRIGHT 2021, Jesse Gardner

424
qq2clone
View File

@ -3214,219 +3214,219 @@ return 0
# ENTRY POINT, at the bottom of this file
archive='
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
oAAA
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
AAA=
'
#-----------------#

View File

@ -12,21 +12,17 @@ qcow2 images with backing files
[\f[I]ARG\f[R]]\&...
.SH DESCRIPTION
.PP
\f[B]qq2clone\f[R] is a tool that uses libvirt to make creating clones
of template QEMU/KVM machines simple.
By using the copy on write feature for which qcow2 is named, clones of
an existing virtual machine can be made without inadvertently altering
the original image (with caveats \- read the \f[B]LIMITATIONS\f[R]
section if you aren\[cq]t already familiar with how copy on write
works).
\f[B]qq2clone\f[R] makes creating and managing these clones simple and
efficient.
\f[B]qq2clone\f[R] is a tool for creating and managing clones of
QEMU/KVM virtual machines.
By using the copy on write feature of qcow2, clones of an existing
virtual machine can be made using few system resources and little time
or effort.
.PP
\f[B]qq2clone\f[R] supports creating numerous clones of a template and
performing batch operations on them \- including the execution of
arbitrary commands with exec.
arbitrary commands with \f[B]qq2clone\f[R] exec.
This simplifies workflows involving large numbers of virtual machines,
or the frequent creation/destruction of virtual machines.
or the frequent creation/deletion of virtual machines.
.PP
To easily establish graphical connections to your virtual machines,
qq2clone can use virt\-viewer or spicy.
@ -34,19 +30,17 @@ qq2clone can use virt\-viewer or spicy.
.PP
Not every option has an effect in the context of every command.
Specifying an option that has no effect in the context of the command
being invoked will not produce an error, it simply will not do anything
being invoked will not produce an error, it simply will not do anything.
.PP
Options are parsed left to right, and right\-hand options override
left\-hand options.
The only exception is for \-Q/\-\-quieter, which \f[I]must\f[R] be the
first option listed to work properly.
.TP
.B \-c, \-\-connection [\f[I]URI\f[R]]
Specify a non\-default connection URI: sets the value of
LIBVIRT_DEFAULT_URI
.TP
.B \-C, \-\-copy\-disks
When importing or copying a template, make a (full) copy of images
When importing or copying a template, make a (full) copy of its image(s)
.TP
.B \-f, \-\-no\-spice
Do not attempt to connect to a virtual machine\[cq]s Spice graphics.
@ -71,18 +65,15 @@ error or making a safe default choice depending on the command.
Recommended only once familiar with the behavior of \f[B]qq2clone\f[R]
.TP
.B \-Q, \-\-quieter
This option is (currently) required to appear immediately following the
invocation of \f[B]qq2clone\f[R].
This option is (currently) required to appear as the first argument to
\f[B]qq2clone\f[R].
Suppresses all output, error message or otherwise, except when running
interactive commands or commands that require output to be useful.
The commands for which output is not entirely supressed are: config
list, config info, list, list\-templates, exec, edit, modify\-template
edit, and check.
Other commands will receive only an exit code as output.
This option is intended for calling qq2clone from a script.
.TP
.B \-r, \-\-run
Run a clone when creating it.
Start a clone after creating it.
Overrides NORUN setting in configuration
.TP
.B \-s, \-\-storage [\f[I]LOCATION\f[R]]
@ -117,9 +108,8 @@ Overrides SPICY setting in configuration
There are two main classes of commands: commands that operate directly
on templates, and commands that create or operate on clones of
templates.
In order to make it less likely that the user may unintentionally invoke
a command of one class when they intended to invoke one of the other,
they use a different syntax.
To prevent unintended actions, these two command types use slightly
different syntax.
Commands that operate on templates use the syntax:
.PP
\f[B]qq2clone\f[R] \f[B]command\f[R] [\f[I]template\-name\f[R]]
@ -130,16 +120,17 @@ while commands that operate on clones use the syntax:
\f[B]qq2clone\f[R] \-\-template [\f[I]template\-name\f[R]]
\f[B]command\f[R] [\f[I]ARG\f[R]] \&...
.PP
Notice that commands operating on clones work within the context of a
template defined by the option \-\-template/\-t.
Commands operating on clones work within the context of a template
defined by \-\-template/\-t.
Conversely, commands operating on templates specify the template as an
argument to the command.
There can also be a default template defined by the TEMPLATE
configuration option, allowing the \-\-template flag to be omitted for
commands that operate on clones.
.PP
A default template can be defined by the TEMPLATE configuration option,
allowing the \-\-template flag to be omitted for commands that operate
on clones.
Commands operating on templates do not respect this default \- the
template must always be explicitly defined, further reducing the
likelihood of accidentally modifying or deleting a template.
template must always be explicitly defined, reducing the likelihood of
accidentally modifying or deleting a template.
.SH TEMPLATE COMMMANDS
.TP
.B \f[B]copy\-template\f[R] [\f[I]CURRENT\-NAME\f[R]] [\f[I]NEW\-NAME\f[R]]
@ -236,9 +227,8 @@ are defined per clone: \f[C]\[dq]$uuid\[dq]\f[R],
\f[C]\[dq]$name\[dq]\f[R], \f[C]\[dq]$disks\[dq]\f[R] (a newline
delimited string containing the machine\[cq]s qcow2 disk device
filepaths).
This is done using bash\[cq]s eval command, so be sure to put any
instances of these variables in single quotes (double quotes inside the
single quotes is best practice) or they will not be set properly.
This is done using bash\[cq]s eval command, so contain the command
string in single quotes to avoid unexpected behavior.
If any instance of exec has a non\-zero return value, execution stops.
.TP
.B \f[B]list\f[R] [\f[I]ARG\f[R]]
@ -281,11 +271,10 @@ Suspend execution of every machine in \f[I]SET\f[R]
.SH OTHER COMMANDS
.TP
.B \f[B]check\f[R] [\f[I]TEMPLATE\-NAME\f[R]]
As described in the limitations section, there are ways that qq2clone
can lose track of a clone.
If this happens, it will remain in qq2clone\[cq]s database, its ID
number will remain reserved, and its image files may not be deleted and
take up space doing nothing.
If a clone is deleted, has its UUID changed or is otherwise unavailable,
it will remain in qq2clone\[cq]s database.
Its ID number will remain reserved, and its image files may not be
deleted and take up space doing nothing.
The \f[B]check\f[R] command finds and fixes occurences of this problem.
The \f[I]TEMPLATE\-NAME\f[R] argument is optional, and restricts the
check to that template and its clones.
@ -462,52 +451,22 @@ Copy the XML of template Debian, creating a new template with the same
backing storage device that you can edit as you please
.SH LIMITATIONS
.PP
The largest limitation of \f[B]qq2clone\f[R] is that it cannot protect
your template images from the actions of other software.
If nothing else touches a template\[cq]s storage volumes, qq2clone can
safely handle them (barring unknown bugs or bad luck during a
commit\-image).
However, if something else alters the image upon which a template is
based, its existing clones may be corrupted and future clones may behave
differently than expected.
It is the user\[cq]s responsibility to understand this aspect of copy on
write and carefully manage template images.
Future updates to qq2clone may add features that give some additional
protections, but this risk is inherent to copy on write.
Understand what copy on write is.
If you modify an image, you will corrupt images using it as a backing
file.
If you don\[cq]t understand what that means, use a search engine to
research copy on write.
To safely modify a template\[cq]s underlying image, use the
prepare\-image and commit\-image subcommands of \f[B]qq2clone\f[R]
modify\-template.
.PP
Libvirt has permissions errors when a storage pool is in a
\[lq]hidden\[rq] directory with a name beginning with \[lq].\[rq] and
qcow2 files with backing files are involved.
This may be due to apparmor, or it may be an issue with libvirt.
It is unknown how widespread this issue is, but it is the reason that
the default directory storage\-qq2clone does not start with `.'
qq2clone uses a virtual machine\[cq]s UUID as defined in its libvirt XML
file to track it.
Don\[cq]t change a clone\[cq]s UUID.
.PP
If the UUID of a clone is changed, qq2clone will no longer be able to
track it and will not be able to perform commands on it anymore.
This will be addressed in the future using custom metadata in the
libvirt domain XML.
If the user undefines a domain, this will obviously cause it to
disappear from qq2clone\[cq]s perspective when it is turned off,
creating a discrepancy in its database.
This can be fixed with \f[B]qq2clone\f[R] \f[B]check\f[R].
.PP
qq2clone can only produce clones by making qcow2 image files.
The backing file need not be qcow2, but the images produced by qq2clone
always will be.
This is unlikely to ever change \- levaraging the features of qcow2 is
the entire purpose of qq2clone.
If it does change, qq2clone will need a new name.
.PP
qq2clone does not support creating images in pool types other than
directories, and attempting to use a machine as a template when it has
storage volumes in a non\-directory pool is likely to fail or have
unexpected results.
Support for some other pool types may be added in the future.
.PP
qq2clone currently cannot copy storage volumes when importing a template
(it just references the originals), or when copying a template.
This will change in the future, and qq2clone will also be able to handle
more complex relationships between templates, clones and their images
qq2clone does not support pool types other than directories.
If there is another pool type you wish it could use, email me at
jgardner7289\[at]protonmail.com and let me know.
.SH FILES
.TP
.B \[ti]/.config/qq2clone
@ -544,21 +503,9 @@ These can be edited manually, but it is more advisable to use
\f[B]edit\f[R]
.SH BUGS
.PP
As described in the options section, the implementation of the
\-\-quieter/\-Q option needs some work.
Its current behavior is the easiest functional approach without
complicating the options parser, but it will eventually be modified and
become better behaved.
In addition to the previously described problem, very early error
messages will not be suppressed.
Most likely, the solution is to implement a better options parser and
make it the first thing to run when executing qq2clone.
However, the impact of this bug is minimal and other improvements are
likely to come before this bug fix.
.PP
If you find any worse bugs, and I\[cq]m sure I missed some, please let
me know and I will fix them as time allows.
Contact me at: jgardner7289\[at]protonmail.com
If you find a bug, please check to see if it already appears in
https://git.j\-g\-web.com/jesse/qq2clone/issues.
If not, email me at jgardner7289\[at]protonmail.com.
.SH COPYRIGHT 2021, Jesse Gardner
.PP
This file is part of qq2clone.

File diff suppressed because it is too large Load Diff