1 PLEASE LOOK AT THE TOP OF EACH FILE BEFORE EDITING TO SEE WHETHER IT
2 IS AUTOMATICALLY GENERATED OR NOT.
5 ----------------------------------------------------------------------
7 All action functions are generated automatically, so there are only
8 two files you need to edit:
10 (1) generator/generator_actions.ml: Add your new action, parameters,
11 description, etc. to the big list at the top of this file.
13 (2) Edit/create a C file in daemon/ subdirectory which implements your
14 'do_action' function. Take a look at one of the numerous examples
18 ----------------------------------------------------------------------
20 Try to use GNU / Emacs default formatting, following the convention
21 used elsewhere in the source.
23 Please make sure that the code compiles without warnings.
25 Please test any changes.
28 make syntax-check Checks the syntax of the C code.
29 make check Runs the test suite.
31 Enable warnings, and fix any you find:
32 ./configure --enable-gcc-warnings
35 ----------------------------------------------------------------------
36 Our C source code generally adheres to some basic code-formatting
37 conventions. The existing code base is not totally consistent on this
38 front, but we do prefer that contributed code be formatted similarly.
39 In short, use spaces-not-TABs for indentation, use 2 spaces for each
40 indentation level, and other than that, follow the K&R style.
42 If you use Emacs, add the following to one of one of your start-up files
43 (e.g., ~/.emacs), to help ensure that you get indentation right:
45 ;;; In libguestfs, indent with spaces everywhere (not TABs).
46 ;;; Exceptions: Makefile and ChangeLog modes.
47 (add-hook 'find-file-hook
48 '(lambda () (if (and buffer-file-name
49 (string-match "/libguestfs\\>" (buffer-file-name))
50 (not (string-equal mode-name "Change Log"))
51 (not (string-equal mode-name "Makefile")))
52 (setq indent-tabs-mode nil))))
54 ;;; When editing C sources in libguestfs, use this style.
55 (defun libguestfs-c-mode ()
56 "C mode with adjusted defaults for use with libguestfs."
59 (setq c-indent-level 2)
60 (setq c-basic-offset 2))
61 (add-hook 'c-mode-hook
62 '(lambda () (if (string-match "/libguestfs\\>" (buffer-file-name))
63 (libguestfs-c-mode))))
66 ----------------------------------------------------------------------
69 The qemu appliance, build scripts and so on.
72 Automated tests of the C API. See "Tests" below.
75 The 'virt-cat', 'virt-filesystems' and 'virt-ls' commands and
79 Outside contributions, experimental parts.
82 Experimental C# bindings.
85 The daemon that runs inside the guest and carries out actions.
88 'virt-df' command and documentation.
94 Guestfish (the command-line program / shell)
97 FUSE (userspace filesystem) built on top of libguestfs.
100 The crucially important generator, used to automatically
101 generate large amounts of boilerplate C code for things like
107 hivex/ [removed in 1.0.85]
108 This used to contain the hivex library for reading and
109 writing Windows Registry binary hive files. This is now
110 available as a separate upstream project.
113 Some guest images to test against. These are gzipped to save
114 space. You have to unzip them before use.
116 Also contains some files used by the test suite.
119 Virtual machine image inspector (virt-inspector).
125 M4 macros used by autoconf.
134 Translations of simple gettext strings. For translations of
135 longer documents, see po-docs/.
138 The build infrastructure and PO files for translations of
139 manpages and POD files. Eventually this will be combined
140 with the po/ directory, but that is rather complicated.
152 'virt-rescue' command and documentation.
158 Command line tools written in Perl (virt-resize and more).
161 Source code to the C library.
164 Interactive qemu/kernel test tool.
167 ----------------------------------------------------------------------
169 You can supply zero or as many tests as you want per API call.
171 Note that the test environment has 3 block devices, of size 500MB,
172 50MB and 10MB (respectively /dev/sda, /dev/sdb, /dev/sdc), and
173 a fourth ISO block device with some known files on it (/dev/sdd).
175 Note for partitioning purposes, the 500MB device has 1015 cylinders.
176 Number of cylinders was 63 for IDE emulated disks with precisely
177 the same size. How exactly this is calculated is a mystery.
179 The ISO block device (/dev/sdd) comes from images/test.iso.
181 To be able to run the tests in a reasonable amount of time,
182 the virtual machine and block devices are reused between tests.
183 So don't try testing kill_subprocess :-x
185 Between each test we blockdev-setrw, umount-all, lvm-remove-all.
187 Don't assume anything about the previous contents of the block
188 devices. Use 'Init*' to create some initial scenarios.
190 You can add a prerequisite clause to any individual test. This
191 is a run-time check, which, if it fails, causes the test to be
192 skipped. Useful if testing a command which might not work on
193 all variations of libguestfs builds. A test that has prerequisite
194 of 'Always' is run unconditionally.
196 In addition, packagers can skip individual tests by setting the
197 environment variables: eg:
198 SKIP_TEST_<CMD>_<NUM>=1 SKIP_TEST_COMMAND_3=1 (skips test #3 of command)
199 SKIP_TEST_<CMD>=1 SKIP_TEST_ZEROFREE=1 (skips all zerofree tests)
202 ----------------------------------------------------------------------
204 It's a good idea to use guestfish to try out new commands.
206 Debugging the daemon is a problem because it runs inside a minimal
207 qemu environment. However you can print messages from the daemon, and
208 they will show up if you use 'guestfish -v'.
211 ----------------------------------------------------------------------
213 Submit patches to the mailing list:
214 http://www.redhat.com/mailman/listinfo/libguestfs
215 and CC to rjones@redhat.com
218 ----------------------------------------------------------------------
220 We support i18n (gettext anyhow) in the library.
222 However many messages come from the daemon, and we don't translate
223 those at the moment. One reason is that the appliance generally has
224 all locale files removed from it, because they take up a lot of space.
225 So we'd have to readd some of those, as well as copying our PO files
228 Debugging messages are never translated, since they are intended for
232 ----------------------------------------------------------------------
234 In the daemon code we have created custom printf formatters %Q and %R,
235 which are used to do shell quoting.
237 %Q => Simple shell quoted string. Any spaces or other shell characters
240 %R => Same as %Q except the string is treated as a path which is prefixed
245 asprintf (&cmd, "cat %R", path);
246 ==> "cat /sysroot/some\ path\ with\ spaces"
248 Note: Do NOT use these when you are passing parameters to the
249 command{,r,v,rv}() functions. These parameters do NOT need to be
250 quoted because they are not passed via the shell (instead, straight to
251 exec). You probably want to use the sysroot_path() function however.