On Fri, Dec 13, 2013 at 04:32:49PM +0100, Pino Toscano wrote:
The current add_cdrom way basically appends a new raw "-cdrom
/path"
parameter to the qemu invocation (even when using libvirt as backend),
hence such images are seen as "CD-ROM drives" inside the appliance.
However, there is no need for such particular behaviour, as they need to
be handled as normal (read-only) drives.
Adding CD-ROM disk images as drives also changes the device names used
for them inside the appliance from /dev/srN to the usual e.g. /dev/sdX.
These changes fix different issues:
- it is possible to start guestfish without adding disks with -a, then
just add-cdrom and run
- list-devices does not cause guestfishd to crash when sorting the list
s/guestfishd/guestfsd/
of devices (exposed by the test case in RHBZ#563450)
- the result of list-devices now reflects the order images were added
(RHBZ#563450)
Add two small regression tests for the fixes described above.
---
src/drives.c | 7 +-----
tests/regressions/Makefile.am | 2 ++
tests/regressions/rhbz563450.sh | 54 ++++++++++++++++++++++++++++++++++++++++
tests/regressions/rhbz563450b.sh | 43 ++++++++++++++++++++++++++++++++
4 files changed, 100 insertions(+), 6 deletions(-)
create mode 100755 tests/regressions/rhbz563450.sh
create mode 100755 tests/regressions/rhbz563450b.sh
diff --git a/src/drives.c b/src/drives.c
index 16798a3..4b65dda 100644
--- a/src/drives.c
+++ b/src/drives.c
@@ -1087,12 +1087,7 @@ guestfs__add_cdrom (guestfs_h *g, const char *filename)
return -1;
}
- if (access (filename, F_OK) == -1) {
- perrorf (g, "%s", filename);
- return -1;
- }
-
- return guestfs_config (g, "-cdrom", filename);
+ return guestfs__add_drive_ro (g, filename);
}
I don't think this implementation is quite right because it leaves the
[now] bogus check for ':' in the filename. guestfs_add_drive_ro can
handle ':' in the filename (because it creates an overlay):
$ truncate -s 100M foo:bar
$ guestfish --ro -a foo:bar
Welcome to guestfish, the guest filesystem shell for
editing virtual machine filesystems and disk images.
Type: 'help' for help on commands
'man' to read the manual
'quit' to quit the shell
<fs> run
I think it's better to remove the contents of the guestfs__add_cdrom
function completely, so the function will become just:
int
guestfs__add_cdrom (guestfs_h *g, const char *filename)
{
return guestfs__add_drive_ro (g, filename);
}
[...]
+#
https://bugzilla.redhat.com/show_bug.cgi?id=563450
+# Test the order of added images
+
+set -e
+export LANG=C
+
+rm -f test.out
+
+../../fish/guestfish --ro > test.out <<EOF
+add-drive-ro ../guests/fedora.img
+add-cdrom ../data/test.iso
+add-drive-ro ../guests/debian.img
Earlier in the test, you'll probably need to add this:
if [ ! -s ../guests/fedora.img -o ! -s ../guests/debian.img ]; then
echo "$0: test skipped because there is no fedora.img or debian.img"
exit 77
fi
---
Also, should we update the documentation?
http://libguestfs.org/guestfs.3.html#guestfs_add_cdrom
Maybe or maybe not worth it.
---
Patch looks good apart from these three small issues.
Rich.
--
Richard Jones, Virtualization Group, Red Hat
http://people.redhat.com/~rjones
Read my programming blog:
http://rwmj.wordpress.com
Fedora now supports 80 OCaml packages (the OPEN alternative to F#)