+#. type: textblock
+#: ../src/guestfs.pod:2119
+msgid ""
+"Inside the appliance is a Linux kernel and a complete stack of userspace "
+"tools (such as LVM and ext2 programs) and a small controlling daemon called "
+"L</guestfsd>. The library talks to L</guestfsd> using remote procedure "
+"calls (RPC). There is a mostly one-to-one correspondence between libguestfs "
+"API calls and RPC calls to the daemon. Lastly the disk image(s) are "
+"attached to the qemu process which translates device access by the "
+"appliance's Linux kernel into accesses to the image."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2128
+msgid ""
+"A common misunderstanding is that the appliance \"is\" the virtual machine. "
+"Although the disk image you are attached to might also be used by some "
+"virtual machine, libguestfs doesn't know or care about this. (But you will "
+"care if both libguestfs's qemu process and your virtual machine are trying "
+"to update the disk image at the same time, since these usually results in "
+"massive disk corruption)."
+msgstr ""
+
+#. type: =head1
+#: ../src/guestfs.pod:2135
+msgid "STATE MACHINE"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2137
+msgid "libguestfs uses a state machine to model the child process:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:2139
+#, no-wrap
+msgid ""
+" |\n"
+" guestfs_create\n"
+" |\n"
+" |\n"
+" ____V_____\n"
+" / \\\n"
+" | CONFIG |\n"
+" \\__________/\n"
+" ^ ^ ^ \\\n"
+" / | \\ \\ guestfs_launch\n"
+" / | _\\__V______\n"
+" / | / \\\n"
+" / | | LAUNCHING |\n"
+" / | \\___________/\n"
+" / | /\n"
+" / | guestfs_launch\n"
+" / | /\n"
+" ______ / __|____V\n"
+" / \\ ------> / \\\n"
+" | BUSY | | READY |\n"
+" \\______/ <------ \\________/\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2161
+msgid ""
+"The normal transitions are (1) CONFIG (when the handle is created, but there "
+"is no child process), (2) LAUNCHING (when the child process is booting up), "
+"(3) alternating between READY and BUSY as commands are issued to, and "
+"carried out by, the child process."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2166
+msgid ""
+"The guest may be killed by L</guestfs_kill_subprocess>, or may die "
+"asynchronously at any time (eg. due to some internal error), and that causes "
+"the state to transition back to CONFIG."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2170
+msgid ""
+"Configuration commands for qemu such as L</guestfs_add_drive> can only be "
+"issued when in the CONFIG state."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2173
+msgid ""
+"The API offers one call that goes from CONFIG through LAUNCHING to READY. "
+"L</guestfs_launch> blocks until the child process is READY to accept "
+"commands (or until some failure or timeout). L</guestfs_launch> internally "
+"moves the state from CONFIG to LAUNCHING while it is running."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2179
+msgid ""
+"API actions such as L</guestfs_mount> can only be issued when in the READY "
+"state. These API calls block waiting for the command to be carried out "
+"(ie. the state to transition to BUSY and then back to READY). There are no "
+"non-blocking versions, and no way to issue more than one command per handle "
+"at the same time."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2185
+msgid ""
+"Finally, the child process sends asynchronous messages back to the main "
+"program, such as kernel log messages. You can register a callback to "
+"receive these messages."
+msgstr ""
+
+#. type: =head1
+#: ../src/guestfs.pod:2189
+msgid "INTERNALS"
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:2191
+msgid "COMMUNICATION PROTOCOL"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2193
+msgid ""
+"Don't rely on using this protocol directly. This section documents how it "
+"currently works, but it may change at any time."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2196
+msgid ""
+"The protocol used to talk between the library and the daemon running inside "
+"the qemu virtual machine is a simple RPC mechanism built on top of XDR (RFC "
+"1014, RFC 1832, RFC 4506)."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2200
+msgid ""
+"The detailed format of structures is in C<src/guestfs_protocol.x> (note: "
+"this file is automatically generated)."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2203
+msgid ""
+"There are two broad cases, ordinary functions that don't have any C<FileIn> "
+"and C<FileOut> parameters, which are handled with very simple request/reply "
+"messages. Then there are functions that have any C<FileIn> or C<FileOut> "
+"parameters, which use the same request and reply messages, but they may also "
+"be followed by files sent using a chunked encoding."
+msgstr ""
+
+#. type: =head3
+#: ../src/guestfs.pod:2210
+msgid "ORDINARY FUNCTIONS (NO FILEIN/FILEOUT PARAMS)"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2212
+msgid "For ordinary functions, the request message is:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:2214
+#, no-wrap
+msgid ""
+" total length (header + arguments,\n"
+" but not including the length word itself)\n"
+" struct guestfs_message_header (encoded as XDR)\n"
+" struct guestfs_<foo>_args (encoded as XDR)\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2219
+msgid ""
+"The total length field allows the daemon to allocate a fixed size buffer "
+"into which it slurps the rest of the message. As a result, the total length "
+"is limited to C<GUESTFS_MESSAGE_MAX> bytes (currently 4MB), which means the "
+"effective size of any request is limited to somewhere under this size."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2225
+msgid ""
+"Note also that many functions don't take any arguments, in which case the "
+"C<guestfs_I<foo>_args> is completely omitted."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2228
+msgid ""
+"The header contains the procedure number (C<guestfs_proc>) which is how the "
+"receiver knows what type of args structure to expect, or none at all."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2232
+msgid ""
+"For functions that take optional arguments, the optional arguments are "
+"encoded in the C<guestfs_I<foo>_args> structure in the same way as ordinary "
+"arguments. A bitmask in the header indicates which optional arguments are "
+"meaningful. The bitmask is also checked to see if it contains bits set "
+"which the daemon does not know about (eg. if more optional arguments were "
+"added in a later version of the library), and this causes the call to be "
+"rejected."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2240
+msgid "The reply message for ordinary functions is:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:2242
+#, no-wrap
+msgid ""
+" total length (header + ret,\n"
+" but not including the length word itself)\n"
+" struct guestfs_message_header (encoded as XDR)\n"
+" struct guestfs_<foo>_ret (encoded as XDR)\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2247
+msgid ""
+"As above the C<guestfs_I<foo>_ret> structure may be completely omitted for "
+"functions that return no formal return values."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2250
+msgid "As above the total length of the reply is limited to C<GUESTFS_MESSAGE_MAX>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2253
+msgid ""
+"In the case of an error, a flag is set in the header, and the reply message "
+"is slightly changed:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:2256
+#, no-wrap
+msgid ""
+" total length (header + error,\n"
+" but not including the length word itself)\n"
+" struct guestfs_message_header (encoded as XDR)\n"
+" struct guestfs_message_error (encoded as XDR)\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2261
+msgid ""
+"The C<guestfs_message_error> structure contains the error message as a "
+"string."
+msgstr ""
+
+#. type: =head3
+#: ../src/guestfs.pod:2264
+msgid "FUNCTIONS THAT HAVE FILEIN PARAMETERS"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2266
+msgid ""
+"A C<FileIn> parameter indicates that we transfer a file I<into> the guest. "
+"The normal request message is sent (see above). However this is followed by "
+"a sequence of file chunks."
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:2270
+#, no-wrap
+msgid ""
+" total length (header + arguments,\n"
+" but not including the length word itself,\n"
+" and not including the chunks)\n"
+" struct guestfs_message_header (encoded as XDR)\n"
+" struct guestfs_<foo>_args (encoded as XDR)\n"
+" sequence of chunks for FileIn param #0\n"
+" sequence of chunks for FileIn param #1 etc.\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2278
+msgid "The \"sequence of chunks\" is:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:2280
+#, no-wrap
+msgid ""
+" length of chunk (not including length word itself)\n"
+" struct guestfs_chunk (encoded as XDR)\n"
+" length of chunk\n"
+" struct guestfs_chunk (encoded as XDR)\n"
+" ...\n"
+" length of chunk\n"
+" struct guestfs_chunk (with data.data_len == 0)\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2288
+msgid ""
+"The final chunk has the C<data_len> field set to zero. Additionally a flag "
+"is set in the final chunk to indicate either successful completion or early "
+"cancellation."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2292
+msgid ""
+"At time of writing there are no functions that have more than one FileIn "
+"parameter. However this is (theoretically) supported, by sending the "
+"sequence of chunks for each FileIn parameter one after another (from left to "
+"right)."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2297
+msgid ""
+"Both the library (sender) I<and> the daemon (receiver) may cancel the "
+"transfer. The library does this by sending a chunk with a special flag set "
+"to indicate cancellation. When the daemon sees this, it cancels the whole "
+"RPC, does I<not> send any reply, and goes back to reading the next request."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2303
+msgid ""
+"The daemon may also cancel. It does this by writing a special word "
+"C<GUESTFS_CANCEL_FLAG> to the socket. The library listens for this during "
+"the transfer, and if it gets it, it will cancel the transfer (it sends a "
+"cancel chunk). The special word is chosen so that even if cancellation "
+"happens right at the end of the transfer (after the library has finished "
+"writing and has started listening for the reply), the \"spurious\" cancel "
+"flag will not be confused with the reply message."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2312
+msgid ""
+"This protocol allows the transfer of arbitrary sized files (no 32 bit "
+"limit), and also files where the size is not known in advance (eg. from "
+"pipes or sockets). However the chunks are rather small "
+"(C<GUESTFS_MAX_CHUNK_SIZE>), so that neither the library nor the daemon need "
+"to keep much in memory."
+msgstr ""
+
+#. type: =head3
+#: ../src/guestfs.pod:2318
+msgid "FUNCTIONS THAT HAVE FILEOUT PARAMETERS"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2320
+msgid ""
+"The protocol for FileOut parameters is exactly the same as for FileIn "
+"parameters, but with the roles of daemon and library reversed."
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:2323
+#, no-wrap
+msgid ""
+" total length (header + ret,\n"
+" but not including the length word itself,\n"
+" and not including the chunks)\n"
+" struct guestfs_message_header (encoded as XDR)\n"
+" struct guestfs_<foo>_ret (encoded as XDR)\n"
+" sequence of chunks for FileOut param #0\n"
+" sequence of chunks for FileOut param #1 etc.\n"
+"\n"
+msgstr ""
+
+#. type: =head3
+#: ../src/guestfs.pod:2331
+msgid "INITIAL MESSAGE"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2333
+msgid ""
+"When the daemon launches it sends an initial word (C<GUESTFS_LAUNCH_FLAG>) "
+"which indicates that the guest and daemon is alive. This is what "
+"L</guestfs_launch> waits for."
+msgstr ""
+
+#. type: =head3
+#: ../src/guestfs.pod:2337
+msgid "PROGRESS NOTIFICATION MESSAGES"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2339
+msgid ""
+"The daemon may send progress notification messages at any time. These are "
+"distinguished by the normal length word being replaced by "
+"C<GUESTFS_PROGRESS_FLAG>, followed by a fixed size progress message."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2343
+msgid ""
+"The library turns them into progress callbacks (see "
+"L</GUESTFS_EVENT_PROGRESS>) if there is a callback registered, or discards "
+"them if not."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2347
+msgid ""
+"The daemon self-limits the frequency of progress messages it sends (see "
+"C<daemon/proto.c:notify_progress>). Not all calls generate progress "
+"messages."
+msgstr ""
+
+#. type: =head1
+#: ../src/guestfs.pod:2351
+msgid "LIBGUESTFS VERSION NUMBERS"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2353
+msgid ""
+"Since April 2010, libguestfs has started to make separate development and "
+"stable releases, along with corresponding branches in our git repository. "
+"These separate releases can be identified by version number:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:2358
+#, no-wrap
+msgid ""
+" even numbers for stable: 1.2.x, 1.4.x, ...\n"
+" .-------- odd numbers for development: 1.3.x, 1.5.x, ...\n"
+" |\n"
+" v\n"
+" 1 . 3 . 5\n"
+" ^ ^\n"
+" | |\n"
+" | `-------- sub-version\n"
+" |\n"
+" `------ always '1' because we don't change the ABI\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2369
+msgid "Thus \"1.3.5\" is the 5th update to the development branch \"1.3\"."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2371
+msgid ""
+"As time passes we cherry pick fixes from the development branch and backport "
+"those into the stable branch, the effect being that the stable branch should "
+"get more stable and less buggy over time. So the stable releases are ideal "
+"for people who don't need new features but would just like the software to "
+"work."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2377
+msgid "Our criteria for backporting changes are:"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2383
+msgid ""
+"Documentation changes which don't affect any code are backported unless the "
+"documentation refers to a future feature which is not in stable."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2389
+msgid ""
+"Bug fixes which are not controversial, fix obvious problems, and have been "
+"well tested are backported."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2394
+msgid ""
+"Simple rearrangements of code which shouldn't affect how it works get "
+"backported. This is so that the code in the two branches doesn't get too "
+"far out of step, allowing us to backport future fixes more easily."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2400
+msgid ""
+"We I<don't> backport new features, new APIs, new tools etc, except in one "
+"exceptional case: the new feature is required in order to implement an "
+"important bug fix."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2406
+msgid ""
+"A new stable branch starts when we think the new features in development are "
+"substantial and compelling enough over the current stable branch to warrant "
+"it. When that happens we create new stable and development versions 1.N.0 "
+"and 1.(N+1).0 [N is even]. The new dot-oh release won't necessarily be so "
+"stable at this point, but by backporting fixes from development, that branch "
+"will stabilize over time."
+msgstr ""
+
+#. type: =head1
+#: ../src/guestfs.pod:2414
+msgid "EXTENDING LIBGUESTFS"
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:2416
+msgid "ADDING A NEW API ACTION"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2418
+msgid ""
+"Large amounts of boilerplate code in libguestfs (RPC, bindings, "
+"documentation) are generated, and this makes it easy to extend the "
+"libguestfs API."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2422
+msgid "To add a new API action there are two changes:"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2428
+msgid ""
+"You need to add a description of the call (name, parameters, return type, "
+"tests, documentation) to C<generator/generator_actions.ml>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2431
+msgid ""
+"There are two sorts of API action, depending on whether the call goes "
+"through to the daemon in the appliance, or is serviced entirely by the "
+"library (see L</ARCHITECTURE> above). L</guestfs_sync> is an example of the "
+"former, since the sync is done in the appliance. L</guestfs_set_trace> is "
+"an example of the latter, since a trace flag is maintained in the handle and "
+"all tracing is done on the library side."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2439
+msgid ""
+"Most new actions are of the first type, and get added to the "
+"C<daemon_functions> list. Each function has a unique procedure number used "
+"in the RPC protocol which is assigned to that action when we publish "
+"libguestfs and cannot be reused. Take the latest procedure number and "
+"increment it."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2445
+msgid ""
+"For library-only actions of the second type, add to the "
+"C<non_daemon_functions> list. Since these functions are serviced by the "
+"library and do not travel over the RPC mechanism to the daemon, these "
+"functions do not need a procedure number, and so the procedure number is set "
+"to C<-1>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2453
+msgid "Implement the action (in C):"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2455
+msgid ""
+"For daemon actions, implement the function C<do_E<lt>nameE<gt>> in the "
+"C<daemon/> directory."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2458
+msgid ""
+"For library actions, implement the function C<guestfs__E<lt>nameE<gt>> "
+"(note: double underscore) in the C<src/> directory."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2461
+msgid "In either case, use another function as an example of what to do."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2465
+msgid "After making these changes, use C<make> to compile."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2467
+msgid ""
+"Note that you don't need to implement the RPC, language bindings, manual "
+"pages or anything else. It's all automatically generated from the OCaml "
+"description."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:2471
+msgid "ADDING TESTS FOR AN API ACTION"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2473
+msgid ""
+"You can supply zero or as many tests as you want per API call. The tests "
+"can either be added as part of the API description "
+"(C<generator/generator_actions.ml>), or in some rarer cases you may want to "
+"drop a script into C<regressions/>. Note that adding a script to "
+"C<regressions/> is slower, so if possible use the first method."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2479
+msgid ""
+"The following describes the test environment used when you add an API test "
+"in C<generator_actions.ml>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2482
+msgid "The test environment has 4 block devices:"
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2486
+msgid "C</dev/sda> 500MB"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2488
+msgid "General block device for testing."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2490
+msgid "C</dev/sdb> 50MB"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2492
+msgid ""
+"C</dev/sdb1> is an ext2 filesystem used for testing filesystem write "
+"operations."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2495
+msgid "C</dev/sdc> 10MB"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2497
+msgid "Used in a few tests where two block devices are needed."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2499
+msgid "C</dev/sdd>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2501
+msgid "ISO with fixed content (see C<images/test.iso>)."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2505
+msgid ""
+"To be able to run the tests in a reasonable amount of time, the libguestfs "
+"appliance and block devices are reused between tests. So don't try testing "
+"L</guestfs_kill_subprocess> :-x"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2509
+msgid ""
+"Each test starts with an initial scenario, selected using one of the "
+"C<Init*> expressions, described in C<generator/generator_types.ml>. These "
+"initialize the disks mentioned above in a particular way as documented in "
+"C<generator_types.ml>. You should not assume anything about the previous "
+"contents of other disks that are not initialized."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2515
+msgid ""
+"You can add a prerequisite clause to any individual test. This is a "
+"run-time check, which, if it fails, causes the test to be skipped. Useful "
+"if testing a command which might not work on all variations of libguestfs "
+"builds. A test that has prerequisite of C<Always> means to run "
+"unconditionally."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2521
+msgid ""
+"In addition, packagers can skip individual tests by setting environment "
+"variables before running C<make check>."
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:2524
+#, no-wrap
+msgid ""
+" SKIP_TEST_<CMD>_<NUM>=1\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2526
+msgid "eg: C<SKIP_TEST_COMMAND_3=1> skips test #3 of L</guestfs_command>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2528
+msgid "or:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:2530
+#, no-wrap
+msgid ""
+" SKIP_TEST_<CMD>=1\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2532
+msgid "eg: C<SKIP_TEST_ZEROFREE=1> skips all L</guestfs_zerofree> tests."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2534
+msgid "Packagers can run only certain tests by setting for example:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:2536
+#, no-wrap
+msgid ""
+" TEST_ONLY=\"vfs_type zerofree\"\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2538
+msgid ""
+"See C<capitests/tests.c> for more details of how these environment variables "
+"work."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:2541
+msgid "DEBUGGING NEW API ACTIONS"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2543
+msgid "Test new actions work before submitting them."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2545
+msgid "You can use guestfish to try out new commands."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2547
+msgid ""
+"Debugging the daemon is a problem because it runs inside a minimal "
+"environment. However you can fprintf messages in the daemon to stderr, and "
+"they will show up if you use C<guestfish -v>."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:2551
+msgid "FORMATTING CODE AND OTHER CONVENTIONS"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2553
+msgid ""
+"Our C source code generally adheres to some basic code-formatting "
+"conventions. The existing code base is not totally consistent on this "
+"front, but we do prefer that contributed code be formatted similarly. In "
+"short, use spaces-not-TABs for indentation, use 2 spaces for each "
+"indentation level, and other than that, follow the K&R style."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2559
+msgid ""
+"If you use Emacs, add the following to one of one of your start-up files "
+"(e.g., ~/.emacs), to help ensure that you get indentation right:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:2562
+#, no-wrap
+msgid ""
+" ;;; In libguestfs, indent with spaces everywhere (not TABs).\n"
+" ;;; Exceptions: Makefile and ChangeLog modes.\n"
+" (add-hook 'find-file-hook\n"
+" '(lambda () (if (and buffer-file-name\n"
+" (string-match \"/libguestfs\\\\>\"\n"
+" (buffer-file-name))\n"
+" (not (string-equal mode-name \"Change Log\"))\n"
+" (not (string-equal mode-name \"Makefile\")))\n"
+" (setq indent-tabs-mode nil))))\n"
+" \n"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:2572
+#, no-wrap
+msgid ""
+" ;;; When editing C sources in libguestfs, use this style.\n"
+" (defun libguestfs-c-mode ()\n"
+" \"C mode with adjusted defaults for use with libguestfs.\"\n"
+" (interactive)\n"
+" (c-set-style \"K&R\")\n"
+" (setq c-indent-level 2)\n"
+" (setq c-basic-offset 2))\n"
+" (add-hook 'c-mode-hook\n"
+" '(lambda () (if (string-match \"/libguestfs\\\\>\"\n"
+" (buffer-file-name))\n"
+" (libguestfs-c-mode))))\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2584
+msgid "Enable warnings when compiling (and fix any problems this finds):"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:2587
+#, no-wrap
+msgid ""
+" ./configure --enable-gcc-warnings\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2589
+msgid "Useful targets are:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:2591
+#, no-wrap
+msgid ""
+" make syntax-check # checks the syntax of the C code\n"
+" make check # runs the test suite\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:2594
+msgid "DAEMON CUSTOM PRINTF FORMATTERS"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2596
+msgid ""
+"In the daemon code we have created custom printf formatters C<%Q> and C<%R>, "
+"which are used to do shell quoting."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2601
+msgid "%Q"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2603
+msgid ""
+"Simple shell quoted string. Any spaces or other shell characters are "
+"escaped for you."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2606
+msgid "%R"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2608
+msgid ""
+"Same as C<%Q> except the string is treated as a path which is prefixed by "
+"the sysroot."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2613 ../fish/guestfish.pod:240 ../fish/guestfish.pod:599
+msgid "For example:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:2615
+#, no-wrap
+msgid ""
+" asprintf (&cmd, \"cat %R\", path);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2617
+msgid "would produce C<cat /sysroot/some\\ path\\ with\\ spaces>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2619
+msgid ""
+"I<Note:> Do I<not> use these when you are passing parameters to the "
+"C<command{,r,v,rv}()> functions. These parameters do NOT need to be quoted "
+"because they are not passed via the shell (instead, straight to exec). You "
+"probably want to use the C<sysroot_path()> function however."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:2625
+msgid "SUBMITTING YOUR NEW API ACTIONS"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2627
+msgid ""
+"Submit patches to the mailing list: "
+"L<http://www.redhat.com/mailman/listinfo/libguestfs> and CC to "
+"L<rjones@redhat.com>."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:2631
+msgid "INTERNATIONALIZATION (I18N) SUPPORT"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2633
+msgid "We support i18n (gettext anyhow) in the library."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2635
+msgid ""
+"However many messages come from the daemon, and we don't translate those at "
+"the moment. One reason is that the appliance generally has all locale files "
+"removed from it, because they take up a lot of space. So we'd have to readd "
+"some of those, as well as copying our PO files into the appliance."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2641
+msgid ""
+"Debugging messages are never translated, since they are intended for the "
+"programmers."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:2644
+msgid "SOURCE CODE SUBDIRECTORIES"
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2648 ../src/guestfs-actions.pod:5721 ../fish/guestfish-actions.pod:3838
+msgid "C<appliance>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2650
+msgid "The libguestfs appliance, build scripts and so on."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2652
+msgid "C<capitests>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2654
+msgid "Automated tests of the C API."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2656
+msgid "C<cat>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2658
+msgid ""
+"The L<virt-cat(1)>, L<virt-filesystems(1)> and L<virt-ls(1)> commands and "
+"documentation."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2661
+msgid "C<contrib>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2663
+msgid "Outside contributions, experimental parts."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2665
+msgid "C<daemon>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2667
+msgid ""
+"The daemon that runs inside the libguestfs appliance and carries out "
+"actions."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2670
+msgid "C<df>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2672
+msgid "L<virt-df(1)> command and documentation."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2674
+msgid "C<examples>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2676
+msgid "C API example code."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2678
+msgid "C<fish>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2680
+msgid ""
+"L<guestfish(1)>, the command-line shell, and various shell scripts built on "
+"top such as L<virt-copy-in(1)>, L<virt-copy-out(1)>, L<virt-tar-in(1)>, "
+"L<virt-tar-out(1)>."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2684
+msgid "C<fuse>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2686
+msgid "L<guestmount(1)>, FUSE (userspace filesystem) built on top of libguestfs."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2688
+msgid "C<generator>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2690
+msgid ""
+"The crucially important generator, used to automatically generate large "
+"amounts of boilerplate C code for things like RPC and bindings."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2693
+msgid "C<images>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2695
+msgid "Files used by the test suite."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2697
+msgid "Some \"phony\" guest images which we test against."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2699
+msgid "C<inspector>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2701
+msgid "L<virt-inspector(1)>, the virtual machine image inspector."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2703
+msgid "C<logo>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2705
+msgid "Logo used on the website. The fish is called Arthur by the way."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2707
+msgid "C<m4>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2709
+msgid "M4 macros used by autoconf."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2711
+msgid "C<po>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2713
+msgid "Translations of simple gettext strings."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2715
+msgid "C<po-docs>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2717
+msgid ""
+"The build infrastructure and PO files for translations of manpages and POD "
+"files. Eventually this will be combined with the C<po> directory, but that "
+"is rather complicated."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2721
+msgid "C<regressions>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2723
+msgid "Regression tests."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2725
+msgid "C<rescue>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2727
+msgid "L<virt-rescue(1)> command and documentation."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2729
+msgid "C<src>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2731
+msgid "Source code to the C library."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2733
+msgid "C<tools>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2735
+msgid "Command line tools written in Perl (L<virt-resize(1)> and many others)."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2737
+msgid "C<test-tool>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2739
+msgid ""
+"Test tool for end users to test if their qemu/kernel combination will work "
+"with libguestfs."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2742
+msgid "C<csharp>"
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2744
+msgid "C<haskell>"
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2746
+msgid "C<java>"
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2748
+msgid "C<ocaml>"
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2750
+msgid "C<php>"
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2752
+msgid "C<perl>"
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2754
+msgid "C<python>"
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2756
+msgid "C<ruby>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2758
+msgid "Language bindings."
+msgstr ""
+
+#. type: =head1
+#: ../src/guestfs.pod:2762 ../fish/guestfish.pod:996 ../test-tool/libguestfs-test-tool.pod:104 ../tools/virt-edit.pl:330
+msgid "ENVIRONMENT VARIABLES"
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2766 ../fish/guestfish.pod:1022
+msgid "LIBGUESTFS_APPEND"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2768 ../fish/guestfish.pod:1024
+msgid "Pass additional options to the guest kernel."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2770 ../fish/guestfish.pod:1026
+msgid "LIBGUESTFS_DEBUG"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2772
+msgid ""
+"Set C<LIBGUESTFS_DEBUG=1> to enable verbose messages. This has the same "
+"effect as calling C<guestfs_set_verbose (g, 1)>."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2775 ../fish/guestfish.pod:1031
+msgid "LIBGUESTFS_MEMSIZE"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2777 ../fish/guestfish.pod:1033
+msgid "Set the memory allocated to the qemu process, in megabytes. For example:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:2780 ../fish/guestfish.pod:1036
+#, no-wrap
+msgid ""
+" LIBGUESTFS_MEMSIZE=700\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2782 ../fish/guestfish.pod:1038
+msgid "LIBGUESTFS_PATH"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2784
+msgid ""
+"Set the path that libguestfs uses to search for a supermin appliance. See "
+"the discussion of paths in section L</PATH> above."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2787 ../fish/guestfish.pod:1043
+msgid "LIBGUESTFS_QEMU"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2789 ../fish/guestfish.pod:1045
+msgid ""
+"Set the default qemu binary that libguestfs uses. If not set, then the qemu "
+"which was found at compile time by the configure script is used."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2793
+msgid "See also L</QEMU WRAPPERS> above."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2795 ../fish/guestfish.pod:1049
+msgid "LIBGUESTFS_TRACE"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2797
+msgid ""
+"Set C<LIBGUESTFS_TRACE=1> to enable command traces. This has the same "
+"effect as calling C<guestfs_set_trace (g, 1)>."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs.pod:2800 ../fish/guestfish.pod:1058
+msgid "TMPDIR"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2802 ../fish/guestfish.pod:1060
+msgid ""
+"Location of temporary directory, defaults to C</tmp> except for the cached "
+"supermin appliance which defaults to C</var/tmp>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2805 ../fish/guestfish.pod:1063
+msgid ""
+"If libguestfs was compiled to use the supermin appliance then the real "
+"appliance is cached in this directory, shared between all handles belonging "
+"to the same EUID. You can use C<$TMPDIR> to configure another directory to "
+"use in case C</var/tmp> is not large enough."
+msgstr ""
+
+#. type: =head1
+#: ../src/guestfs.pod:2813 ../fish/guestfish.pod:1121 ../test-tool/libguestfs-test-tool.pod:109 ../fuse/guestmount.pod:238 ../tools/virt-edit.pl:350 ../tools/virt-win-reg.pl:572 ../tools/virt-resize.pl:1489 ../tools/virt-list-filesystems.pl:189 ../tools/virt-tar.pl:286 ../tools/virt-make-fs.pl:539 ../tools/virt-list-partitions.pl:257
+msgid "SEE ALSO"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2815
+msgid ""
+"L<guestfs-examples(3)>, L<guestfs-ocaml(3)>, L<guestfs-python(3)>, "
+"L<guestfs-ruby(3)>, L<guestfish(1)>, L<guestmount(1)>, L<virt-cat(1)>, "
+"L<virt-copy-in(1)>, L<virt-copy-out(1)>, L<virt-df(1)>, L<virt-edit(1)>, "
+"L<virt-filesystems(1)>, L<virt-inspector(1)>, L<virt-list-filesystems(1)>, "
+"L<virt-list-partitions(1)>, L<virt-ls(1)>, L<virt-make-fs(1)>, "
+"L<virt-rescue(1)>, L<virt-tar(1)>, L<virt-tar-in(1)>, L<virt-tar-out(1)>, "
+"L<virt-win-reg(1)>, L<qemu(1)>, L<febootstrap(1)>, L<hivex(3)>, "
+"L<http://libguestfs.org/>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2842
+msgid ""
+"Tools with a similar purpose: L<fdisk(8)>, L<parted(8)>, L<kpartx(8)>, "
+"L<lvm(8)>, L<disktype(1)>."
+msgstr ""
+
+#. type: =head1
+#: ../src/guestfs.pod:2849 ../tools/virt-win-reg.pl:587 ../tools/virt-make-fs.pl:553
+msgid "BUGS"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2851
+msgid "To get a list of bugs against libguestfs use this link:"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2853
+msgid "L<https://bugzilla.redhat.com/buglist.cgi?component=libguestfs&product=Virtualization+Tools>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2855
+msgid "To report a new bug against libguestfs use this link:"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2857
+msgid "L<https://bugzilla.redhat.com/enter_bug.cgi?component=libguestfs&product=Virtualization+Tools>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2859
+msgid "When reporting a bug, please check:"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2865
+msgid "That the bug hasn't been reported already."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2869
+msgid "That you are testing a recent version."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2873
+msgid "Describe the bug accurately, and give a way to reproduce it."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2877
+msgid ""
+"Run libguestfs-test-tool and paste the B<complete, unedited> output into the "
+"bug report."
+msgstr ""
+
+#. type: =head1
+#: ../src/guestfs.pod:2882 ../fish/guestfish.pod:1144 ../test-tool/libguestfs-test-tool.pod:115 ../fuse/guestmount.pod:249
+msgid "AUTHORS"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2884 ../fish/guestfish.pod:1146 ../test-tool/libguestfs-test-tool.pod:117 ../fuse/guestmount.pod:251
+msgid "Richard W.M. Jones (C<rjones at redhat dot com>)"
+msgstr ""
+
+#. type: =head1
+#: ../src/guestfs.pod:2886 ../fish/guestfish.pod:1148 ../test-tool/libguestfs-test-tool.pod:119 ../fuse/guestmount.pod:253 ../tools/virt-edit.pl:368 ../tools/virt-win-reg.pl:602 ../tools/virt-resize.pl:1514 ../tools/virt-list-filesystems.pl:206 ../tools/virt-tar.pl:305 ../tools/virt-make-fs.pl:568 ../tools/virt-list-partitions.pl:273
+msgid "COPYRIGHT"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2888 ../fish/guestfish.pod:1150 ../fuse/guestmount.pod:255
+msgid "Copyright (C) 2009-2010 Red Hat Inc. L<http://libguestfs.org/>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2891
+msgid ""
+"This library is free software; you can redistribute it and/or modify it "
+"under the terms of the GNU Lesser General Public License as published by the "
+"Free Software Foundation; either version 2 of the License, or (at your "
+"option) any later version."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2896
+msgid ""
+"This library is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License "
+"for more details."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2901
+msgid ""
+"You should have received a copy of the GNU Lesser General Public License "
+"along with this library; if not, write to the Free Software Foundation, "
+"Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA"
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:1
+msgid "guestfs_add_cdrom"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:3
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_add_cdrom (guestfs_h *g,\n"
+" const char *filename);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:7 ../fish/guestfish-actions.pod:5
+msgid "This function adds a virtual CD-ROM disk image to the guest."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:9 ../fish/guestfish-actions.pod:7
+msgid "This is equivalent to the qemu parameter C<-cdrom filename>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:17
+msgid ""
+"This call checks for the existence of C<filename>. This stops you from "
+"specifying other types of drive which are supported by qemu such as C<nbd:> "
+"and C<http:> URLs. To specify those, use the general C<guestfs_config> call "
+"instead."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:24
+msgid ""
+"If you just want to add an ISO file (often you use this as an efficient way "
+"to transfer large files into the guest), then you should probably use "
+"C<guestfs_add_drive_ro> instead."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:30 ../src/guestfs-actions.pod:134 ../src/guestfs-actions.pod:195 ../src/guestfs-actions.pod:232 ../src/guestfs-actions.pod:246 ../src/guestfs-actions.pod:267 ../src/guestfs-actions.pod:287 ../src/guestfs-actions.pod:301 ../src/guestfs-actions.pod:416 ../src/guestfs-actions.pod:436 ../src/guestfs-actions.pod:450 ../src/guestfs-actions.pod:495 ../src/guestfs-actions.pod:523 ../src/guestfs-actions.pod:541 ../src/guestfs-actions.pod:608 ../src/guestfs-actions.pod:641 ../src/guestfs-actions.pod:655 ../src/guestfs-actions.pod:670 ../src/guestfs-actions.pod:769 ../src/guestfs-actions.pod:787 ../src/guestfs-actions.pod:801 ../src/guestfs-actions.pod:815 ../src/guestfs-actions.pod:976 ../src/guestfs-actions.pod:996 ../src/guestfs-actions.pod:1014 ../src/guestfs-actions.pod:1098 ../src/guestfs-actions.pod:1116 ../src/guestfs-actions.pod:1135 ../src/guestfs-actions.pod:1149 ../src/guestfs-actions.pod:1169 ../src/guestfs-actions.pod:1239 ../src/guestfs-actions.pod:1270 ../src/guestfs-actions.pod:1295 ../src/guestfs-actions.pod:1332 ../src/guestfs-actions.pod:1438 ../src/guestfs-actions.pod:1472 ../src/guestfs-actions.pod:1690 ../src/guestfs-actions.pod:1712 ../src/guestfs-actions.pod:1799 ../src/guestfs-actions.pod:2261 ../src/guestfs-actions.pod:2405 ../src/guestfs-actions.pod:2466 ../src/guestfs-actions.pod:2501 ../src/guestfs-actions.pod:3371 ../src/guestfs-actions.pod:3386 ../src/guestfs-actions.pod:3406 ../src/guestfs-actions.pod:3561 ../src/guestfs-actions.pod:3575 ../src/guestfs-actions.pod:3588 ../src/guestfs-actions.pod:3602 ../src/guestfs-actions.pod:3617 ../src/guestfs-actions.pod:3653 ../src/guestfs-actions.pod:3725 ../src/guestfs-actions.pod:3745 ../src/guestfs-actions.pod:3762 ../src/guestfs-actions.pod:3785 ../src/guestfs-actions.pod:3808 ../src/guestfs-actions.pod:3840 ../src/guestfs-actions.pod:3859 ../src/guestfs-actions.pod:3878 ../src/guestfs-actions.pod:3913 ../src/guestfs-actions.pod:3925 ../src/guestfs-actions.pod:3961 ../src/guestfs-actions.pod:3977 ../src/guestfs-actions.pod:3990 ../src/guestfs-actions.pod:4005 ../src/guestfs-actions.pod:4022 ../src/guestfs-actions.pod:4115 ../src/guestfs-actions.pod:4135 ../src/guestfs-actions.pod:4148 ../src/guestfs-actions.pod:4199 ../src/guestfs-actions.pod:4217 ../src/guestfs-actions.pod:4235 ../src/guestfs-actions.pod:4251 ../src/guestfs-actions.pod:4265 ../src/guestfs-actions.pod:4279 ../src/guestfs-actions.pod:4296 ../src/guestfs-actions.pod:4311 ../src/guestfs-actions.pod:4331 ../src/guestfs-actions.pod:4389 ../src/guestfs-actions.pod:4462 ../src/guestfs-actions.pod:4493 ../src/guestfs-actions.pod:4512 ../src/guestfs-actions.pod:4531 ../src/guestfs-actions.pod:4543 ../src/guestfs-actions.pod:4560 ../src/guestfs-actions.pod:4573 ../src/guestfs-actions.pod:4588 ../src/guestfs-actions.pod:4603 ../src/guestfs-actions.pod:4638 ../src/guestfs-actions.pod:4653 ../src/guestfs-actions.pod:4673 ../src/guestfs-actions.pod:4687 ../src/guestfs-actions.pod:4704 ../src/guestfs-actions.pod:4753 ../src/guestfs-actions.pod:4790 ../src/guestfs-actions.pod:4804 ../src/guestfs-actions.pod:4832 ../src/guestfs-actions.pod:4849 ../src/guestfs-actions.pod:4867 ../src/guestfs-actions.pod:5001 ../src/guestfs-actions.pod:5058 ../src/guestfs-actions.pod:5080 ../src/guestfs-actions.pod:5098 ../src/guestfs-actions.pod:5130 ../src/guestfs-actions.pod:5196 ../src/guestfs-actions.pod:5213 ../src/guestfs-actions.pod:5226 ../src/guestfs-actions.pod:5240 ../src/guestfs-actions.pod:5529 ../src/guestfs-actions.pod:5548 ../src/guestfs-actions.pod:5567 ../src/guestfs-actions.pod:5579 ../src/guestfs-actions.pod:5591 ../src/guestfs-actions.pod:5605 ../src/guestfs-actions.pod:5617 ../src/guestfs-actions.pod:5631 ../src/guestfs-actions.pod:5647 ../src/guestfs-actions.pod:5668 ../src/guestfs-actions.pod:5687 ../src/guestfs-actions.pod:5706 ../src/guestfs-actions.pod:5736 ../src/guestfs-actions.pod:5752 ../src/guestfs-actions.pod:5775 ../src/guestfs-actions.pod:5793 ../src/guestfs-actions.pod:5812 ../src/guestfs-actions.pod:5833 ../src/guestfs-actions.pod:5852 ../src/guestfs-actions.pod:5869 ../src/guestfs-actions.pod:5897 ../src/guestfs-actions.pod:5921 ../src/guestfs-actions.pod:5940 ../src/guestfs-actions.pod:5964 ../src/guestfs-actions.pod:5983 ../src/guestfs-actions.pod:5998 ../src/guestfs-actions.pod:6017 ../src/guestfs-actions.pod:6054 ../src/guestfs-actions.pod:6077 ../src/guestfs-actions.pod:6103 ../src/guestfs-actions.pod:6211 ../src/guestfs-actions.pod:6332 ../src/guestfs-actions.pod:6344 ../src/guestfs-actions.pod:6357 ../src/guestfs-actions.pod:6370 ../src/guestfs-actions.pod:6392 ../src/guestfs-actions.pod:6405 ../src/guestfs-actions.pod:6418 ../src/guestfs-actions.pod:6431 ../src/guestfs-actions.pod:6446 ../src/guestfs-actions.pod:6505 ../src/guestfs-actions.pod:6522 ../src/guestfs-actions.pod:6538 ../src/guestfs-actions.pod:6554 ../src/guestfs-actions.pod:6571 ../src/guestfs-actions.pod:6584 ../src/guestfs-actions.pod:6604 ../src/guestfs-actions.pod:6640 ../src/guestfs-actions.pod:6654 ../src/guestfs-actions.pod:6695 ../src/guestfs-actions.pod:6708 ../src/guestfs-actions.pod:6726 ../src/guestfs-actions.pod:6760 ../src/guestfs-actions.pod:6796 ../src/guestfs-actions.pod:6915 ../src/guestfs-actions.pod:6933 ../src/guestfs-actions.pod:6947 ../src/guestfs-actions.pod:7002 ../src/guestfs-actions.pod:7015 ../src/guestfs-actions.pod:7060 ../src/guestfs-actions.pod:7093 ../src/guestfs-actions.pod:7147 ../src/guestfs-actions.pod:7173 ../src/guestfs-actions.pod:7239 ../src/guestfs-actions.pod:7258 ../src/guestfs-actions.pod:7287
+msgid "This function returns 0 on success or -1 on error."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:32 ../src/guestfs-actions.pod:248 ../src/guestfs-actions.pod:269 ../fish/guestfish-actions.pod:28 ../fish/guestfish-actions.pod:158 ../fish/guestfish-actions.pod:172
+msgid ""
+"This function is deprecated. In new code, use the C<add_drive_opts> call "
+"instead."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:35 ../src/guestfs-actions.pod:251 ../src/guestfs-actions.pod:272 ../src/guestfs-actions.pod:1443 ../src/guestfs-actions.pod:1939 ../src/guestfs-actions.pod:1960 ../src/guestfs-actions.pod:4336 ../src/guestfs-actions.pod:7181 ../src/guestfs-actions.pod:7350 ../fish/guestfish-actions.pod:31 ../fish/guestfish-actions.pod:161 ../fish/guestfish-actions.pod:175 ../fish/guestfish-actions.pod:956 ../fish/guestfish-actions.pod:1319 ../fish/guestfish-actions.pod:1333 ../fish/guestfish-actions.pod:2938 ../fish/guestfish-actions.pod:4796 ../fish/guestfish-actions.pod:4893
+msgid ""
+"Deprecated functions will not be removed from the API, but the fact that "
+"they are deprecated indicates that there are problems with correct use of "
+"these functions."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:39 ../src/guestfs-actions.pod:136 ../src/guestfs-actions.pod:1100 ../src/guestfs-actions.pod:1911 ../src/guestfs-actions.pod:2009 ../src/guestfs-actions.pod:2112 ../src/guestfs-actions.pod:3373 ../src/guestfs-actions.pod:3388 ../src/guestfs-actions.pod:4640 ../src/guestfs-actions.pod:5754 ../src/guestfs-actions.pod:5871 ../src/guestfs-actions.pod:5985 ../src/guestfs-actions.pod:6448 ../src/guestfs-actions.pod:6573 ../src/guestfs-actions.pod:7095
+msgid "(Added in 0.3)"
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:41
+msgid "guestfs_add_domain"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:43
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_add_domain (guestfs_h *g,\n"
+" const char *dom,\n"
+" ...);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:48 ../src/guestfs-actions.pod:145 ../src/guestfs-actions.pod:4350
+msgid ""
+"You may supply a list of optional arguments to this call. Use zero or more "
+"of the following pairs of parameters, and terminate the list with C<-1> on "
+"its own. See L</CALLS WITH OPTIONAL ARGUMENTS>."
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:53
+#, no-wrap
+msgid ""
+" GUESTFS_ADD_DOMAIN_LIBVIRTURI, const char *libvirturi,\n"
+" GUESTFS_ADD_DOMAIN_READONLY, int readonly,\n"
+" GUESTFS_ADD_DOMAIN_IFACE, const char *iface,\n"
+" GUESTFS_ADD_DOMAIN_LIVE, int live,\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:58
+msgid ""
+"This function adds the disk(s) attached to the named libvirt domain C<dom>. "
+"It works by connecting to libvirt, requesting the domain and domain XML from "
+"libvirt, parsing it for disks, and calling C<guestfs_add_drive_opts> on each "
+"one."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:63 ../fish/guestfish-actions.pod:46
+msgid ""
+"The number of disks added is returned. This operation is atomic: if an "
+"error is returned, then no disks are added."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:66 ../fish/guestfish-actions.pod:49
+msgid ""
+"This function does some minimal checks to make sure the libvirt domain is "
+"not running (unless C<readonly> is true). In a future version we will try "
+"to acquire the libvirt lock on each disk."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:70 ../fish/guestfish-actions.pod:53
+msgid ""
+"Disks must be accessible locally. This often means that adding disks from a "
+"remote libvirt connection (see L<http://libvirt.org/remote.html>) will fail "
+"unless those disks are accessible via the same device path locally too."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:75 ../fish/guestfish-actions.pod:58
+msgid ""
+"The optional C<libvirturi> parameter sets the libvirt URI (see "
+"L<http://libvirt.org/uri.html>). If this is not set then we connect to the "
+"default libvirt URI (or one set through an environment variable, see the "
+"libvirt documentation for full details)."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:81 ../fish/guestfish-actions.pod:64
+msgid ""
+"The optional C<live> flag controls whether this call will try to connect to "
+"a running virtual machine C<guestfsd> process if it sees a suitable "
+"E<lt>channelE<gt> element in the libvirt XML definition. The default (if "
+"the flag is omitted) is never to try. See L<guestfs(3)/ATTACHING TO RUNNING "
+"DAEMONS> for more information."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:88
+msgid ""
+"The other optional parameters are passed directly through to "
+"C<guestfs_add_drive_opts>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:91 ../src/guestfs-actions.pod:344 ../src/guestfs-actions.pod:509 ../src/guestfs-actions.pod:687 ../src/guestfs-actions.pod:718 ../src/guestfs-actions.pod:736 ../src/guestfs-actions.pod:755 ../src/guestfs-actions.pod:1315 ../src/guestfs-actions.pod:1669 ../src/guestfs-actions.pod:1872 ../src/guestfs-actions.pod:1981 ../src/guestfs-actions.pod:2021 ../src/guestfs-actions.pod:2076 ../src/guestfs-actions.pod:2099 ../src/guestfs-actions.pod:2392 ../src/guestfs-actions.pod:2719 ../src/guestfs-actions.pod:2740 ../src/guestfs-actions.pod:4776 ../src/guestfs-actions.pod:4904 ../src/guestfs-actions.pod:5310 ../src/guestfs-actions.pod:5336 ../src/guestfs-actions.pod:6681 ../src/guestfs-actions.pod:7106 ../src/guestfs-actions.pod:7119 ../src/guestfs-actions.pod:7132
+msgid "On error this function returns -1."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:93
+msgid "(Added in 1.7.4)"
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:95
+msgid "guestfs_add_domain_va"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:97
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_add_domain_va (guestfs_h *g,\n"
+" const char *dom,\n"
+" va_list args);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:102
+msgid "This is the \"va_list variant\" of L</guestfs_add_domain>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:104 ../src/guestfs-actions.pod:115 ../src/guestfs-actions.pod:208 ../src/guestfs-actions.pod:219 ../src/guestfs-actions.pod:4403 ../src/guestfs-actions.pod:4415
+msgid "See L</CALLS WITH OPTIONAL ARGUMENTS>."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:106
+msgid "guestfs_add_domain_argv"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:108
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_add_domain_argv (guestfs_h *g,\n"
+" const char *dom,\n"
+" const struct guestfs_add_domain_argv *optargs);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:113
+msgid "This is the \"argv variant\" of L</guestfs_add_domain>."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:117
+msgid "guestfs_add_drive"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:119
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_add_drive (guestfs_h *g,\n"
+" const char *filename);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:123
+msgid ""
+"This function is the equivalent of calling C<guestfs_add_drive_opts> with no "
+"optional parameters, so the disk is added writable, with the format being "
+"detected automatically."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:127
+msgid ""
+"Automatic detection of the format opens you up to a potential security hole "
+"when dealing with untrusted raw-format images. See CVE-2010-3851 and "
+"RHBZ#642934. Specifying the format closes this security hole. Therefore "
+"you should think about replacing calls to this function with calls to "
+"C<guestfs_add_drive_opts>, and specifying the format."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:138
+msgid "guestfs_add_drive_opts"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:140
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_add_drive_opts (guestfs_h *g,\n"
+" const char *filename,\n"
+" ...);\n"
+"\n"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:150
+#, no-wrap
+msgid ""
+" GUESTFS_ADD_DRIVE_OPTS_READONLY, int readonly,\n"
+" GUESTFS_ADD_DRIVE_OPTS_FORMAT, const char *format,\n"
+" GUESTFS_ADD_DRIVE_OPTS_IFACE, const char *iface,\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:154 ../fish/guestfish-actions.pod:97
+msgid ""
+"This function adds a virtual machine disk image C<filename> to libguestfs. "
+"The first time you call this function, the disk appears as C</dev/sda>, the "
+"second time as C</dev/sdb>, and so on."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:159 ../fish/guestfish-actions.pod:102
+msgid ""
+"You don't necessarily need to be root when using libguestfs. However you "
+"obviously do need sufficient permissions to access the filename for whatever "
+"operations you want to perform (ie. read access if you just want to read the "
+"image or write access if you want to modify the image)."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:165 ../fish/guestfish-actions.pod:108
+msgid "This call checks that C<filename> exists."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:167 ../src/guestfs-actions.pod:4361 ../fish/guestfish-actions.pod:110 ../fish/guestfish-actions.pod:2949
+msgid "The optional arguments are:"
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs-actions.pod:171 ../fish/guestfish-actions.pod:114
+msgid "C<readonly>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:173 ../fish/guestfish-actions.pod:116
+msgid ""
+"If true then the image is treated as read-only. Writes are still allowed, "
+"but they are stored in a temporary snapshot overlay which is discarded at "
+"the end. The disk that you add is not modified."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs-actions.pod:177 ../fish/guestfish-actions.pod:120
+msgid "C<format>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:179
+msgid ""
+"This forces the image format. If you omit this (or use C<guestfs_add_drive> "
+"or C<guestfs_add_drive_ro>) then the format is automatically detected. "
+"Possible formats include C<raw> and C<qcow2>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:183 ../fish/guestfish-actions.pod:126
+msgid ""
+"Automatic detection of the format opens you up to a potential security hole "
+"when dealing with untrusted raw-format images. See CVE-2010-3851 and "
+"RHBZ#642934. Specifying the format closes this security hole."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs-actions.pod:188 ../fish/guestfish-actions.pod:131
+msgid "C<iface>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:190
+msgid ""
+"This rarely-used option lets you emulate the behaviour of the deprecated "
+"C<guestfs_add_drive_with_if> call (q.v.)"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:197
+msgid "(Added in 1.5.23)"
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:199
+msgid "guestfs_add_drive_opts_va"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:201
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_add_drive_opts_va (guestfs_h *g,\n"
+" const char *filename,\n"
+" va_list args);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:206
+msgid "This is the \"va_list variant\" of L</guestfs_add_drive_opts>."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:210
+msgid "guestfs_add_drive_opts_argv"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:212
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_add_drive_opts_argv (guestfs_h *g,\n"
+" const char *filename,\n"
+" const struct guestfs_add_drive_opts_argv "
+"*optargs);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:217
+msgid "This is the \"argv variant\" of L</guestfs_add_drive_opts>."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:221
+msgid "guestfs_add_drive_ro"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:223
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_add_drive_ro (guestfs_h *g,\n"
+" const char *filename);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:227
+msgid ""
+"This function is the equivalent of calling C<guestfs_add_drive_opts> with "
+"the optional parameter C<GUESTFS_ADD_DRIVE_OPTS_READONLY> set to 1, so the "
+"disk is added read-only, with the format being detected automatically."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:234
+msgid "(Added in 1.0.38)"
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:236
+msgid "guestfs_add_drive_ro_with_if"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:238
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_add_drive_ro_with_if (guestfs_h *g,\n"
+" const char *filename,\n"
+" const char *iface);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:243
+msgid ""
+"This is the same as C<guestfs_add_drive_ro> but it allows you to specify the "
+"QEMU interface emulation to use at run time."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:255 ../src/guestfs-actions.pod:276 ../src/guestfs-actions.pod:2351
+msgid "(Added in 1.0.84)"
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:257
+msgid "guestfs_add_drive_with_if"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:259
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_add_drive_with_if (guestfs_h *g,\n"
+" const char *filename,\n"
+" const char *iface);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:264
+msgid ""
+"This is the same as C<guestfs_add_drive> but it allows you to specify the "
+"QEMU interface emulation to use at run time."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:278
+msgid "guestfs_aug_clear"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:280
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_aug_clear (guestfs_h *g,\n"
+" const char *augpath);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:284 ../fish/guestfish-actions.pod:183
+msgid ""
+"Set the value associated with C<path> to C<NULL>. This is the same as the "
+"L<augtool(1)> C<clear> command."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:289 ../src/guestfs-actions.pod:2101
+msgid "(Added in 1.3.4)"
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:291
+msgid "guestfs_aug_close"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:293
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_aug_close (guestfs_h *g);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:296
+msgid ""
+"Close the current Augeas handle and free up any resources used by it. After "
+"calling this, you have to call C<guestfs_aug_init> again before you can use "
+"any other Augeas functions."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:303 ../src/guestfs-actions.pod:328 ../src/guestfs-actions.pod:346 ../src/guestfs-actions.pod:360 ../src/guestfs-actions.pod:418 ../src/guestfs-actions.pod:438 ../src/guestfs-actions.pod:452 ../src/guestfs-actions.pod:483 ../src/guestfs-actions.pod:497 ../src/guestfs-actions.pod:511 ../src/guestfs-actions.pod:525 ../src/guestfs-actions.pod:543 ../src/guestfs-actions.pod:5387
+msgid "(Added in 0.7)"
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:305
+msgid "guestfs_aug_defnode"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:307
+#, no-wrap
+msgid ""
+" struct guestfs_int_bool *\n"
+" guestfs_aug_defnode (guestfs_h *g,\n"
+" const char *name,\n"
+" const char *expr,\n"
+" const char *val);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:313 ../fish/guestfish-actions.pod:199
+msgid "Defines a variable C<name> whose value is the result of evaluating C<expr>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:316
+msgid ""
+"If C<expr> evaluates to an empty nodeset, a node is created, equivalent to "
+"calling C<guestfs_aug_set> C<expr>, C<value>. C<name> will be the nodeset "
+"containing that single node."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:320 ../fish/guestfish-actions.pod:206
+msgid ""
+"On success this returns a pair containing the number of nodes in the "
+"nodeset, and a boolean flag if a node was created."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:324
+msgid ""
+"This function returns a C<struct guestfs_int_bool *>, or NULL if there was "
+"an error. I<The caller must call C<guestfs_free_int_bool> after use>."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:330
+msgid "guestfs_aug_defvar"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:332
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_aug_defvar (guestfs_h *g,\n"
+" const char *name,\n"
+" const char *expr);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:337 ../fish/guestfish-actions.pod:214
+msgid ""
+"Defines an Augeas variable C<name> whose value is the result of evaluating "
+"C<expr>. If C<expr> is NULL, then C<name> is undefined."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:341 ../fish/guestfish-actions.pod:218
+msgid ""
+"On success this returns the number of nodes in C<expr>, or C<0> if C<expr> "
+"evaluates to something which is not a nodeset."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:348
+msgid "guestfs_aug_get"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:350
+#, no-wrap
+msgid ""
+" char *\n"
+" guestfs_aug_get (guestfs_h *g,\n"
+" const char *augpath);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:354 ../fish/guestfish-actions.pod:225
+msgid ""
+"Look up the value associated with C<path>. If C<path> matches exactly one "
+"node, the C<value> is returned."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:357 ../src/guestfs-actions.pod:857 ../src/guestfs-actions.pod:875 ../src/guestfs-actions.pod:935 ../src/guestfs-actions.pod:951 ../src/guestfs-actions.pod:1054 ../src/guestfs-actions.pod:1184 ../src/guestfs-actions.pod:1201 ../src/guestfs-actions.pod:1220 ../src/guestfs-actions.pod:1349 ../src/guestfs-actions.pod:1540 ../src/guestfs-actions.pod:1652 ../src/guestfs-actions.pod:1815 ../src/guestfs-actions.pod:1832 ../src/guestfs-actions.pod:1899 ../src/guestfs-actions.pod:1933 ../src/guestfs-actions.pod:1954 ../src/guestfs-actions.pod:2124 ../src/guestfs-actions.pod:2316 ../src/guestfs-actions.pod:2523 ../src/guestfs-actions.pod:2604 ../src/guestfs-actions.pod:2671 ../src/guestfs-actions.pod:2691 ../src/guestfs-actions.pod:2805 ../src/guestfs-actions.pod:2836 ../src/guestfs-actions.pod:2860 ../src/guestfs-actions.pod:2897 ../src/guestfs-actions.pod:2957 ../src/guestfs-actions.pod:2980 ../src/guestfs-actions.pod:3547 ../src/guestfs-actions.pod:3897 ../src/guestfs-actions.pod:4067 ../src/guestfs-actions.pod:4177 ../src/guestfs-actions.pod:4922 ../src/guestfs-actions.pod:5115 ../src/guestfs-actions.pod:5285 ../src/guestfs-actions.pod:5463 ../src/guestfs-actions.pod:5512 ../src/guestfs-actions.pod:6124 ../src/guestfs-actions.pod:6140 ../src/guestfs-actions.pod:6157 ../src/guestfs-actions.pod:6181 ../src/guestfs-actions.pod:6855 ../src/guestfs-actions.pod:6874 ../src/guestfs-actions.pod:6892 ../src/guestfs-actions.pod:7072 ../src/guestfs-actions.pod:7344
+msgid ""
+"This function returns a string, or NULL on error. I<The caller must free "
+"the returned string after use>."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:362
+msgid "guestfs_aug_init"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:364
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_aug_init (guestfs_h *g,\n"
+" const char *root,\n"
+" int flags);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:369 ../fish/guestfish-actions.pod:232
+msgid ""
+"Create a new Augeas handle for editing configuration files. If there was "
+"any previous Augeas handle associated with this guestfs session, then it is "
+"closed."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:373
+msgid "You must call this before using any other C<guestfs_aug_*> commands."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:376 ../fish/guestfish-actions.pod:239
+msgid "C<root> is the filesystem root. C<root> must not be NULL, use C</> instead."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:379 ../fish/guestfish-actions.pod:242
+msgid ""
+"The flags are the same as the flags defined in E<lt>augeas.hE<gt>, the "
+"logical I<or> of the following integers:"
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs-actions.pod:385 ../fish/guestfish-actions.pod:248
+msgid "C<AUG_SAVE_BACKUP> = 1"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:387 ../fish/guestfish-actions.pod:250
+msgid "Keep the original file with a C<.augsave> extension."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs-actions.pod:389 ../fish/guestfish-actions.pod:252
+msgid "C<AUG_SAVE_NEWFILE> = 2"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:391 ../fish/guestfish-actions.pod:254
+msgid ""
+"Save changes into a file with extension C<.augnew>, and do not overwrite "
+"original. Overrides C<AUG_SAVE_BACKUP>."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs-actions.pod:394 ../fish/guestfish-actions.pod:257
+msgid "C<AUG_TYPE_CHECK> = 4"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:396 ../fish/guestfish-actions.pod:259
+msgid "Typecheck lenses (can be expensive)."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs-actions.pod:398 ../fish/guestfish-actions.pod:261
+msgid "C<AUG_NO_STDINC> = 8"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:400 ../fish/guestfish-actions.pod:263
+msgid "Do not use standard load path for modules."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs-actions.pod:402 ../fish/guestfish-actions.pod:265
+msgid "C<AUG_SAVE_NOOP> = 16"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:404 ../fish/guestfish-actions.pod:267
+msgid "Make save a no-op, just record what would have been changed."
+msgstr ""
+
+#. type: =item
+#: ../src/guestfs-actions.pod:406 ../fish/guestfish-actions.pod:269
+msgid "C<AUG_NO_LOAD> = 32"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:408
+msgid "Do not load the tree in C<guestfs_aug_init>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:412
+msgid "To close the handle, you can call C<guestfs_aug_close>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:414 ../fish/guestfish-actions.pod:277
+msgid "To find out more about Augeas, see L<http://augeas.net/>."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:420
+msgid "guestfs_aug_insert"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:422
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_aug_insert (guestfs_h *g,\n"
+" const char *augpath,\n"
+" const char *label,\n"
+" int before);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:428 ../fish/guestfish-actions.pod:283
+msgid ""
+"Create a new sibling C<label> for C<path>, inserting it into the tree before "
+"or after C<path> (depending on the boolean flag C<before>)."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:432 ../fish/guestfish-actions.pod:287
+msgid ""
+"C<path> must match exactly one existing node in the tree, and C<label> must "
+"be a label, ie. not contain C</>, C<*> or end with a bracketed index C<[N]>."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:440
+msgid "guestfs_aug_load"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:442
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_aug_load (guestfs_h *g);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:445 ../fish/guestfish-actions.pod:295
+msgid "Load files into the tree."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:447 ../fish/guestfish-actions.pod:297
+msgid "See C<aug_load> in the Augeas documentation for the full gory details."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:454
+msgid "guestfs_aug_ls"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:456
+#, no-wrap
+msgid ""
+" char **\n"
+" guestfs_aug_ls (guestfs_h *g,\n"
+" const char *augpath);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:460
+msgid ""
+"This is just a shortcut for listing C<guestfs_aug_match> C<path/*> and "
+"sorting the resulting nodes into alphabetical order."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:463 ../src/guestfs-actions.pod:479 ../src/guestfs-actions.pod:625 ../src/guestfs-actions.pod:1073 ../src/guestfs-actions.pod:1364 ../src/guestfs-actions.pod:1383 ../src/guestfs-actions.pod:1486 ../src/guestfs-actions.pod:1505 ../src/guestfs-actions.pod:1754 ../src/guestfs-actions.pod:2196 ../src/guestfs-actions.pod:2212 ../src/guestfs-actions.pod:2231 ../src/guestfs-actions.pod:2274 ../src/guestfs-actions.pod:2298 ../src/guestfs-actions.pod:2369 ../src/guestfs-actions.pod:2418 ../src/guestfs-actions.pod:2629 ../src/guestfs-actions.pod:2914 ../src/guestfs-actions.pod:3182 ../src/guestfs-actions.pod:3467 ../src/guestfs-actions.pod:3529 ../src/guestfs-actions.pod:3634 ../src/guestfs-actions.pod:4039 ../src/guestfs-actions.pod:4737 ../src/guestfs-actions.pod:5257 ../src/guestfs-actions.pod:5383 ../src/guestfs-actions.pod:5497 ../src/guestfs-actions.pod:6197 ../src/guestfs-actions.pod:6258 ../src/guestfs-actions.pod:6313 ../src/guestfs-actions.pod:6459 ../src/guestfs-actions.pod:6483 ../src/guestfs-actions.pod:6965 ../src/guestfs-actions.pod:6985 ../src/guestfs-actions.pod:7032 ../src/guestfs-actions.pod:7197 ../src/guestfs-actions.pod:7216 ../src/guestfs-actions.pod:7301 ../src/guestfs-actions.pod:7320 ../src/guestfs-actions.pod:7366 ../src/guestfs-actions.pod:7385
+msgid ""
+"This function returns a NULL-terminated array of strings (like "
+"L<environ(3)>), or NULL if there was an error. I<The caller must free the "
+"strings and the array after use>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:467 ../src/guestfs-actions.pod:998 ../src/guestfs-actions.pod:1016 ../src/guestfs-actions.pod:1421 ../src/guestfs-actions.pod:3260 ../src/guestfs-actions.pod:3291 ../src/guestfs-actions.pod:3880 ../src/guestfs-actions.pod:3930 ../src/guestfs-actions.pod:4117 ../src/guestfs-actions.pod:4150 ../src/guestfs-actions.pod:4313 ../src/guestfs-actions.pod:4741 ../src/guestfs-actions.pod:5198 ../src/guestfs-actions.pod:5593 ../src/guestfs-actions.pod:5607 ../src/guestfs-actions.pod:5619 ../src/guestfs-actions.pod:6059 ../src/guestfs-actions.pod:6697 ../src/guestfs-actions.pod:6710 ../src/guestfs-actions.pod:6949 ../src/guestfs-actions.pod:7185
+msgid "(Added in 0.8)"
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:469
+msgid "guestfs_aug_match"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:471
+#, no-wrap
+msgid ""
+" char **\n"
+" guestfs_aug_match (guestfs_h *g,\n"
+" const char *augpath);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:475 ../fish/guestfish-actions.pod:311
+msgid ""
+"Returns a list of paths which match the path expression C<path>. The "
+"returned paths are sufficiently qualified so that they match exactly one "
+"node in the current tree."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:485
+msgid "guestfs_aug_mv"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:487
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_aug_mv (guestfs_h *g,\n"
+" const char *src,\n"
+" const char *dest);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:492 ../fish/guestfish-actions.pod:319
+msgid ""
+"Move the node C<src> to C<dest>. C<src> must match exactly one node. "
+"C<dest> is overwritten if it exists."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:499
+msgid "guestfs_aug_rm"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:501
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_aug_rm (guestfs_h *g,\n"
+" const char *augpath);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:505 ../fish/guestfish-actions.pod:326
+msgid "Remove C<path> and all of its children."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:507 ../fish/guestfish-actions.pod:328
+msgid "On success this returns the number of entries which were removed."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:513
+msgid "guestfs_aug_save"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:515
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_aug_save (guestfs_h *g);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:518 ../fish/guestfish-actions.pod:334
+msgid "This writes all pending changes to disk."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:520
+msgid ""
+"The flags which were passed to C<guestfs_aug_init> affect exactly how files "
+"are saved."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:527
+msgid "guestfs_aug_set"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:529
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_aug_set (guestfs_h *g,\n"
+" const char *augpath,\n"
+" const char *val);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:534 ../fish/guestfish-actions.pod:343
+msgid "Set the value associated with C<path> to C<val>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:536
+msgid ""
+"In the Augeas API, it is possible to clear a node by setting the value to "
+"NULL. Due to an oversight in the libguestfs API you cannot do that with "
+"this call. Instead you must use the C<guestfs_aug_clear> call."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:545
+msgid "guestfs_available"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:547
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_available (guestfs_h *g,\n"
+" char *const *groups);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:551 ../fish/guestfish-actions.pod:354
+msgid ""
+"This command is used to check the availability of some groups of "
+"functionality in the appliance, which not all builds of the libguestfs "
+"appliance will be able to provide."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:555
+msgid ""
+"The libguestfs groups, and the functions that those groups correspond to, "
+"are listed in L<guestfs(3)/AVAILABILITY>. You can also fetch this list at "
+"runtime by calling C<guestfs_available_all_groups>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:560 ../fish/guestfish-actions.pod:363
+msgid ""
+"The argument C<groups> is a list of group names, eg: C<[\"inotify\", "
+"\"augeas\"]> would check for the availability of the Linux inotify functions "
+"and Augeas (configuration file editing) functions."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:565 ../fish/guestfish-actions.pod:368
+msgid "The command returns no error if I<all> requested groups are available."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:567 ../fish/guestfish-actions.pod:370
+msgid ""
+"It fails with an error if one or more of the requested groups is unavailable "
+"in the appliance."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:570 ../fish/guestfish-actions.pod:373
+msgid ""
+"If an unknown group name is included in the list of groups then an error is "
+"always returned."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:573 ../fish/guestfish-actions.pod:376
+msgid "I<Notes:>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:579
+msgid "You must call C<guestfs_launch> before calling this function."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:581 ../fish/guestfish-actions.pod:384
+msgid ""
+"The reason is because we don't know what groups are supported by the "
+"appliance/daemon until it is running and can be queried."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:587 ../fish/guestfish-actions.pod:390
+msgid ""
+"If a group of functions is available, this does not necessarily mean that "
+"they will work. You still have to check for errors when calling individual "
+"API functions even if they are available."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:594 ../fish/guestfish-actions.pod:397
+msgid ""
+"It is usually the job of distro packagers to build complete functionality "
+"into the libguestfs appliance. Upstream libguestfs, if built from source "
+"with all requirements satisfied, will support everything."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:601
+msgid ""
+"This call was added in version C<1.0.80>. In previous versions of "
+"libguestfs all you could do would be to speculatively execute a command to "
+"find out if the daemon implemented it. See also C<guestfs_version>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:610 ../src/guestfs-actions.pod:1171
+msgid "(Added in 1.0.80)"
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:612
+msgid "guestfs_available_all_groups"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:614
+#, no-wrap
+msgid ""
+" char **\n"
+" guestfs_available_all_groups (guestfs_h *g);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:617
+msgid ""
+"This command returns a list of all optional groups that this daemon knows "
+"about. Note this returns both supported and unsupported groups. To find "
+"out which ones the daemon can actually support you have to call "
+"C<guestfs_available> on each member of the returned list."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:623
+msgid "See also C<guestfs_available> and L<guestfs(3)/AVAILABILITY>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:629
+msgid "(Added in 1.3.15)"
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:631
+msgid "guestfs_base64_in"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:633
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_base64_in (guestfs_h *g,\n"
+" const char *base64file,\n"
+" const char *filename);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:638 ../fish/guestfish-actions.pod:427
+msgid "This command uploads base64-encoded data from C<base64file> to C<filename>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:643 ../src/guestfs-actions.pod:657
+msgid "(Added in 1.3.5)"
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:645
+msgid "guestfs_base64_out"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:647
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_base64_out (guestfs_h *g,\n"
+" const char *filename,\n"
+" const char *base64file);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:652 ../fish/guestfish-actions.pod:436
+msgid ""
+"This command downloads the contents of C<filename>, writing it out to local "
+"file C<base64file> encoded as base64."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:659
+msgid "guestfs_blockdev_flushbufs"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:661
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_blockdev_flushbufs (guestfs_h *g,\n"
+" const char *device);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:665 ../fish/guestfish-actions.pod:445
+msgid "This tells the kernel to flush internal buffers associated with C<device>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:668 ../src/guestfs-actions.pod:685 ../src/guestfs-actions.pod:700 ../src/guestfs-actions.pod:716 ../src/guestfs-actions.pod:734 ../src/guestfs-actions.pod:753 ../src/guestfs-actions.pod:767 ../src/guestfs-actions.pod:785 ../src/guestfs-actions.pod:799 ../src/guestfs-actions.pod:813 ../fish/guestfish-actions.pod:448 ../fish/guestfish-actions.pod:459 ../fish/guestfish-actions.pod:468 ../fish/guestfish-actions.pod:478 ../fish/guestfish-actions.pod:490 ../fish/guestfish-actions.pod:503 ../fish/guestfish-actions.pod:511 ../fish/guestfish-actions.pod:522 ../fish/guestfish-actions.pod:530 ../fish/guestfish-actions.pod:538
+msgid "This uses the L<blockdev(8)> command."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:672 ../src/guestfs-actions.pod:689 ../src/guestfs-actions.pod:704 ../src/guestfs-actions.pod:720 ../src/guestfs-actions.pod:738 ../src/guestfs-actions.pod:757 ../src/guestfs-actions.pod:771 ../src/guestfs-actions.pod:789 ../src/guestfs-actions.pod:803 ../src/guestfs-actions.pod:817
+msgid "(Added in 0.9.3)"
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:674
+msgid "guestfs_blockdev_getbsz"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:676
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_blockdev_getbsz (guestfs_h *g,\n"
+" const char *device);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:680 ../fish/guestfish-actions.pod:454
+msgid "This returns the block size of a device."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:682 ../src/guestfs-actions.pod:782 ../fish/guestfish-actions.pod:456 ../fish/guestfish-actions.pod:519
+msgid ""
+"(Note this is different from both I<size in blocks> and I<filesystem block "
+"size>)."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:691
+msgid "guestfs_blockdev_getro"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:693
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_blockdev_getro (guestfs_h *g,\n"
+" const char *device);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:697 ../fish/guestfish-actions.pod:465
+msgid ""
+"Returns a boolean indicating if the block device is read-only (true if "
+"read-only, false if not)."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:702 ../src/guestfs-actions.pod:1404 ../src/guestfs-actions.pod:1419 ../src/guestfs-actions.pod:1909 ../src/guestfs-actions.pod:1920 ../src/guestfs-actions.pod:1992 ../src/guestfs-actions.pod:2047 ../src/guestfs-actions.pod:2062 ../src/guestfs-actions.pod:2087 ../src/guestfs-actions.pod:2110 ../src/guestfs-actions.pod:3000 ../src/guestfs-actions.pod:3017 ../src/guestfs-actions.pod:3036 ../src/guestfs-actions.pod:3199 ../src/guestfs-actions.pod:3213 ../src/guestfs-actions.pod:3228 ../src/guestfs-actions.pod:3242 ../src/guestfs-actions.pod:3258 ../src/guestfs-actions.pod:3273 ../src/guestfs-actions.pod:3289 ../src/guestfs-actions.pod:3303 ../src/guestfs-actions.pod:3316 ../src/guestfs-actions.pod:3330 ../src/guestfs-actions.pod:3345 ../src/guestfs-actions.pod:3360 ../src/guestfs-actions.pod:4886
+msgid "This function returns a C truth value on success or -1 on error."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:706
+msgid "guestfs_blockdev_getsize64"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:708
+#, no-wrap
+msgid ""
+" int64_t\n"
+" guestfs_blockdev_getsize64 (guestfs_h *g,\n"
+" const char *device);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:712 ../fish/guestfish-actions.pod:474
+msgid "This returns the size of the device in bytes."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:714
+msgid "See also C<guestfs_blockdev_getsz>."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:722
+msgid "guestfs_blockdev_getss"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:724
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_blockdev_getss (guestfs_h *g,\n"
+" const char *device);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:728 ../fish/guestfish-actions.pod:484
+msgid ""
+"This returns the size of sectors on a block device. Usually 512, but can be "
+"larger for modern devices."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:731
+msgid ""
+"(Note, this is not the size in sectors, use C<guestfs_blockdev_getsz> for "
+"that)."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:740
+msgid "guestfs_blockdev_getsz"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:742
+#, no-wrap
+msgid ""
+" int64_t\n"
+" guestfs_blockdev_getsz (guestfs_h *g,\n"
+" const char *device);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:746 ../fish/guestfish-actions.pod:496
+msgid ""
+"This returns the size of the device in units of 512-byte sectors (even if "
+"the sectorsize isn't 512 bytes ... weird)."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:749
+msgid ""
+"See also C<guestfs_blockdev_getss> for the real sector size of the device, "
+"and C<guestfs_blockdev_getsize64> for the more useful I<size in bytes>."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:759
+msgid "guestfs_blockdev_rereadpt"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:761
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_blockdev_rereadpt (guestfs_h *g,\n"
+" const char *device);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:765 ../fish/guestfish-actions.pod:509
+msgid "Reread the partition table on C<device>."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:773
+msgid "guestfs_blockdev_setbsz"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:775
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_blockdev_setbsz (guestfs_h *g,\n"
+" const char *device,\n"
+" int blocksize);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:780 ../fish/guestfish-actions.pod:517
+msgid "This sets the block size of a device."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:791
+msgid "guestfs_blockdev_setro"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:793
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_blockdev_setro (guestfs_h *g,\n"
+" const char *device);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:797 ../fish/guestfish-actions.pod:528
+msgid "Sets the block device named C<device> to read-only."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:805
+msgid "guestfs_blockdev_setrw"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:807
+#, no-wrap
+msgid ""
+" int\n"
+" guestfs_blockdev_setrw (guestfs_h *g,\n"
+" const char *device);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:811 ../fish/guestfish-actions.pod:536
+msgid "Sets the block device named C<device> to read-write."
+msgstr ""