Compare commits

...

8 Commits

Author SHA1 Message Date
Richard W.M. Jones
fa865ee05a RHEL: Create /etc/crypto-policies/back-ends/opensslcnf.config
https://bugzilla.redhat.com/show_bug.cgi?id=1977214#c13
2021-09-14 12:31:34 +01:00
Richard W.M. Jones
b7dd5ace04 RHEL: Reject use of libguestfs-winsupport features except for virt-* tools (RHBZ#1240276).
Fix the tests: it doesn't let us use guestfish for arbitrary Windows
edits.
2021-09-14 12:31:34 +01:00
Richard W.M. Jones
dbca97559b RHEL: Remove User-Mode Linux (RHBZ#1144197).
This isn't supported in RHEL.
2021-09-14 12:31:34 +01:00
Richard W.M. Jones
b7007f7b15 RHEL: Disable unsupported remote drive protocols (RHBZ#962113).
This disables support for unsupported remote drive protocols:

 * ftp
 * ftps
 * http
 * https
 * tftp
 * gluster
 * iscsi
 * sheepdog
 * ssh

Note 'nbd' is not disabled, and of course 'file' works.

We hope to gradually add some of these back over the lifetime of RHEL.
2021-09-14 12:31:34 +01:00
Richard W.M. Jones
421f071646 RHEL: Remove 9p APIs from RHEL (RHBZ#921710). 2021-09-14 12:31:34 +01:00
Richard W.M. Jones
9dc4c156ee RHEL: Remove libguestfs live (RHBZ#798980).
This isn't supported in RHEL.

Disable daemon tests that require the 'unix' backend.
2021-09-14 12:31:34 +01:00
Richard W.M. Jones
6be8787273 lib: Autodetect backing format for qemu-img create -b
qemu 6.1 has decided to change qemu-img create so that a backing
format (-F) is required if a backing file (-b) is specified.  Since we
don't want to change the libguestfs API to force callers to specify
this because that would be an API break, autodetect it.

This is similar to commit c8c181e8d9 ("launch: libvirt: Autodetect
backing format for readonly drive overlays").

Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1998820
(cherry picked from commit 45de287447)
2021-09-14 12:31:34 +01:00
Richard W.M. Jones
8a4761c0fb lib: direct: Remove use of sga
sga (or "sgabios" or "Serial Graphics Adapter") is an option ROM for
seabios which directs output to the serial adapter.  This is very
useful for debugging BIOS problems during boot.

RHEL wants to deprecate this feature (in fact, they just deprecated it
without telling us).  However there is an equivalent feature in
seabios (seabios >= 1.11 / qemu >= 2.11.0) which can be enabled using
either -nographic or -machine graphics=off

This commit removes sga and enables -machine graphics=off in the
direct backend.

References (for RHEL 9 qemu change):
https://bugzilla.redhat.com/show_bug.cgi?id=2002325
https://bugzilla.redhat.com/show_bug.cgi?id=2000845
https://lists.nongnu.org/archive/html/qemu-devel/2021-09/msg02417.html
https://listman.redhat.com/archives/libvir-list/2021-September/msg00205.html

For the libvirt backend we will continue to use <bios useserial=yes>.
This currently breaks when sga is not available, but I talked to Dan
and the plan there is to adapt libvirt so the same XML will enable
-machine graphics=off.  IOW libguestfs does not need to make any
change.

References (for libvirt change):
https://bugzilla.redhat.com/show_bug.cgi?id=2003092
https://listman.redhat.com/archives/libvir-list/2021-September/msg00193.html

Thanks: Gerd Hoffman, Daniel Berrangé
(cherry picked from commit e14ff93742)
2021-09-13 10:48:25 +01:00
23 changed files with 79 additions and 575 deletions

View File

@@ -70,6 +70,14 @@ if ! test -e /etc/mtab; then
ln -s /proc/mounts /etc/mtab
fi
# openssl 3 requires /etc/crypto-policies/back-ends/opensslcnf.config
# to exist, but it is created in a %post script in crypto-policies
# https://bugzilla.redhat.com/show_bug.cgi?id=1977214#c13
if ! test -r /etc/crypto-policies/back-ends/opensslcnf.config &&
test -f /usr/share/crypto-policies/DEFAULT/opensslcnf.txt; then
ln -s /usr/share/crypto-policies/DEFAULT/opensslcnf.txt /etc/crypto-policies/back-ends/opensslcnf.config
fi
# devtmpfs is required since udev 176
mount -t devtmpfs /dev /dev
mkdir -p /dev/pts

View File

@@ -1,182 +0,0 @@
/* libguestfs - the guestfsd daemon
* Copyright (C) 2011 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include <config.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <limits.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <fcntl.h>
#include "ignore-value.h"
#include "daemon.h"
#include "actions.h"
#define BUS_PATH "/sys/bus/virtio/drivers/9pnet_virtio"
static void
modprobe_9pnet_virtio (void)
{
/* Required with Linux 5.6 and maybe earlier kernels. For unclear
* reasons the module is not an automatic dependency of the 9p
* module so doesn't get loaded automatically.
*/
ignore_value (command (NULL, NULL, "modprobe", "9pnet_virtio", NULL));
}
/* https://bugzilla.redhat.com/show_bug.cgi?id=714981#c1 */
char **
do_list_9p (void)
{
CLEANUP_FREE_STRINGSBUF DECLARE_STRINGSBUF (r);
DIR *dir;
modprobe_9pnet_virtio ();
dir = opendir (BUS_PATH);
if (!dir) {
perror ("opendir: " BUS_PATH);
if (errno != ENOENT) {
reply_with_perror ("opendir: " BUS_PATH);
return NULL;
}
/* If this directory doesn't exist, it probably means that
* the virtio driver isn't loaded. Don't return an error
* in this case, but return an empty list.
*/
if (end_stringsbuf (&r) == -1)
return NULL;
return take_stringsbuf (&r);
}
while (1) {
struct dirent *d;
errno = 0;
d = readdir (dir);
if (d == NULL) break;
if (STRPREFIX (d->d_name, "virtio")) {
CLEANUP_FREE char *mount_tag_path = NULL;
if (asprintf (&mount_tag_path, BUS_PATH "/%s/mount_tag",
d->d_name) == -1) {
reply_with_perror ("asprintf");
closedir (dir);
return NULL;
}
/* A bit unclear, but it looks like the virtio transport allows
* the mount tag length to be unlimited (or up to 65536 bytes).
* See: linux/include/linux/virtio_9p.h
*/
CLEANUP_FREE char *mount_tag = read_whole_file (mount_tag_path, NULL);
if (mount_tag == 0)
continue;
if (add_string (&r, mount_tag) == -1) {
closedir (dir);
return NULL;
}
}
}
/* Check readdir didn't fail */
if (errno != 0) {
reply_with_perror ("readdir: /sys/block");
closedir (dir);
return NULL;
}
/* Close the directory handle */
if (closedir (dir) == -1) {
reply_with_perror ("closedir: /sys/block");
return NULL;
}
/* Sort the tags. */
if (r.size > 0)
sort_strings (r.argv, r.size);
/* NULL terminate the list */
if (end_stringsbuf (&r) == -1)
return NULL;
return take_stringsbuf (&r);
}
/* Takes optional arguments, consult optargs_bitmask. */
int
do_mount_9p (const char *mount_tag, const char *mountpoint, const char *options)
{
CLEANUP_FREE char *mp = NULL, *opts = NULL, *err = NULL;
struct stat statbuf;
int r;
ABS_PATH (mountpoint, 0, return -1);
mp = sysroot_path (mountpoint);
if (!mp) {
reply_with_perror ("malloc");
return -1;
}
/* Check the mountpoint exists and is a directory. */
if (stat (mp, &statbuf) == -1) {
reply_with_perror ("%s", mountpoint);
return -1;
}
if (!S_ISDIR (statbuf.st_mode)) {
reply_with_perror ("%s: mount point is not a directory", mountpoint);
return -1;
}
/* Add trans=virtio to the options. */
if ((optargs_bitmask & GUESTFS_MOUNT_9P_OPTIONS_BITMASK) &&
STRNEQ (options, "")) {
if (asprintf (&opts, "trans=virtio,%s", options) == -1) {
reply_with_perror ("asprintf");
return -1;
}
}
else {
opts = strdup ("trans=virtio");
if (opts == NULL) {
reply_with_perror ("strdup");
return -1;
}
}
modprobe_9pnet_virtio ();
r = command (NULL, &err,
"mount", "-o", opts, "-t", "9p", mount_tag, mp, NULL);
if (r == -1) {
reply_with_error ("%s on %s: %s", mount_tag, mountpoint, err);
return -1;
}
return 0;
}

View File

@@ -84,7 +84,6 @@ guestfsd_SOURCES = \
../common/protocol/guestfs_protocol.h \
../common/utils/cleanups.h \
../common/utils/guestfs-utils.h \
9p.c \
acl.c \
actions.h \
available.c \

View File

@@ -43,7 +43,6 @@ common/visit/visit.c
common/visit/visit.h
common/windows/windows.c
common/windows/windows.h
daemon/9p.c
daemon/acl.c
daemon/actions.h
daemon/augeas.c

View File

@@ -109,26 +109,6 @@ image. To exit, type C<exit>.
If you get an error, try enabling debugging (add C<-v> to the command
line). Also make sure that L<libguestfs-test-tool(1)> succeeds.
=head2 Try to open a remote guest image with guestfish.
You may also have to disable libvirt by setting this:
export LIBGUESTFS_BACKEND=direct
If you have a disk image available over HTTP/FTP, try to open it.
guestfish --ro -i --format=raw -a http://www.example.com/disk.img
For SSH you will need to make sure that ssh-agent is set up so you
don't need a password to log in to the remote machine. Then a command
similar to this should work:
guestfish --ro -i --format=raw \
-a ssh://remote.example.com/path/to/disk.img
If you get an error, try enabling debugging (add C<-v> to the command
line). Also make sure that L<libguestfs-test-tool(1)> succeeds.
=head2 Run virt-alignment-scan on all your guests.
Run L<virt-alignment-scan(1)> on guests or disk images:

View File

@@ -131,9 +131,9 @@ To list what is available do:
=head2 Remote drives
Access a remote disk using ssh:
Access a remote disk using NBD:
guestfish -a ssh://example.com/path/to/disk.img
guestfish -a nbd://example.com
=head2 Remote control
@@ -1134,12 +1134,12 @@ L<guestfs(3)/REMOTE STORAGE>>.
On the command line, you can use the I<-a> option to add network
block devices using a URI-style format, for example:
guestfish -a ssh://root@example.com/disk.img
guestfish -a nbd://example.com
URIs I<cannot> be used with the L</add> command. The equivalent
command using the API directly is:
><fs> add /disk.img protocol:ssh server:tcp:example.com username:root
><fs> add /disk.img protocol:nbd server:tcp:example.com
The possible I<-a URI> formats are described below.
@@ -1149,40 +1149,6 @@ The possible I<-a URI> formats are described below.
Add the local disk image (or device) called F<disk.img>.
=head2 B<-a ftp://[user@]example.com[:port]/disk.img>
=head2 B<-a ftps://[user@]example.com[:port]/disk.img>
=head2 B<-a http://[user@]example.com[:port]/disk.img>
=head2 B<-a https://[user@]example.com[:port]/disk.img>
=head2 B<-a tftp://[user@]example.com[:port]/disk.img>
Add a disk located on a remote FTP, HTTP or TFTP server.
The equivalent API command would be:
><fs> add /disk.img protocol:(ftp|...) server:tcp:example.com
=head2 B<-a gluster://example.com[:port]/volname/image>
Add a disk image located on GlusterFS storage.
The server is the one running C<glusterd>, and may be C<localhost>.
The equivalent API command would be:
><fs> add volname/image protocol:gluster server:tcp:example.com
=head2 B<-a iscsi://example.com[:port]/target-iqn-name[/lun]>
Add a disk located on an iSCSI server.
The equivalent API command would be:
><fs> add target-iqn-name/lun protocol:iscsi server:tcp:example.com
=head2 B<-a nbd://example.com[:port]>
=head2 B<-a nbd://example.com[:port]/exportname>
@@ -1217,35 +1183,13 @@ The equivalent API command would be:
><fs> add pool/disk protocol:rbd server:tcp:example.com:port
=head2 B<-a sheepdog://[example.com[:port]]/volume/image>
Add a disk image located on a Sheepdog volume.
The server name is optional. Although libguestfs and Sheepdog
supports multiple servers, only at most one server can be specified
when using this URI syntax.
The equivalent API command would be:
><fs> add volume protocol:sheepdog [server:tcp:example.com]
=head2 B<-a ssh://[user@]example.com[:port]/disk.img>
Add a disk image located on a remote server, accessed using the Secure
Shell (ssh) SFTP protocol. SFTP is supported out of the box by all
major SSH servers.
The equivalent API command would be:
><fs> add /disk protocol:ssh server:tcp:example.com [username:user]
Note that the URIs follow the syntax of
L<RFC 3986|https://tools.ietf.org/html/rfc3986>: in particular, there
are restrictions on the allowed characters for the various components
of the URI. Characters such as C<:>, C<@>, and C</> B<must> be
percent-encoded:
$ guestfish -a ssh://user:pass%40word@example.com/disk.img
$ guestfish -a rbd://user:pass%40word@example.com[:port]/pool/disk
In this case, the password is C<pass@word>.

View File

@@ -40,14 +40,6 @@ function fail ()
$VG guestfish -x -a file://$abs_builddir/test-add-uri.img </dev/null >test-add-uri.out 2>&1
grep -sq 'add_drive ".*/test-add-uri.img"' test-add-uri.out || fail
# curl
$VG guestfish -x -a ftp://user@example.com/disk.img </dev/null >test-add-uri.out 2>&1
grep -sq 'add_drive "/disk.img" "protocol:ftp" "server:tcp:example.com" "username:user"' test-add-uri.out || fail
# gluster
$VG guestfish -x -a gluster://example.com/disk </dev/null >test-add-uri.out 2>&1
grep -sq 'add_drive "disk" "protocol:gluster" "server:tcp:example.com"' test-add-uri.out || fail
# NBD
$VG guestfish -x -a nbd://example.com </dev/null >test-add-uri.out 2>&1
grep -sq 'add_drive "" "protocol:nbd" "server:tcp:example.com"' test-add-uri.out || fail
@@ -67,29 +59,5 @@ grep -sq 'add_drive "pool/disk" "protocol:rbd" "server:tcp:example.com:6789"' te
$VG guestfish -x -a rbd:///pool/disk </dev/null >test-add-uri.out 2>&1
grep -sq 'add_drive "pool/disk" "protocol:rbd"' test-add-uri.out || fail
# sheepdog
$VG guestfish -x -a sheepdog:///volume/image </dev/null >test-add-uri.out 2>&1
grep -sq 'add_drive "volume/image" "protocol:sheepdog"' test-add-uri.out || fail
$VG guestfish -x -a sheepdog://example.com:3000/volume/image </dev/null >test-add-uri.out 2>&1
grep -sq 'add_drive "volume/image" "protocol:sheepdog" "server:tcp:example.com:3000"' test-add-uri.out || fail
# ssh
$VG guestfish -x -a ssh://example.com/disk.img </dev/null >test-add-uri.out 2>&1
grep -sq 'add_drive "/disk.img" "protocol:ssh" "server:tcp:example.com"' test-add-uri.out || fail
$VG guestfish -x -a ssh://user@example.com/disk.img </dev/null >test-add-uri.out 2>&1
grep -sq 'add_drive "/disk.img" "protocol:ssh" "server:tcp:example.com" "username:user"' test-add-uri.out || fail
$VG guestfish -x -a ssh://user@example.com:2000/disk.img </dev/null >test-add-uri.out 2>&1
grep -sq 'add_drive "/disk.img" "protocol:ssh" "server:tcp:example.com:2000" "username:user"' test-add-uri.out || fail
# iSCSI
$VG guestfish -x -a iscsi://example.com/iqn.2015-12.com.libguestfs:test1/0 </dev/null >test-add-uri.out 2>&1
grep -sq 'add_drive "iqn.2015-12.com.libguestfs:test1/0" "protocol:iscsi" "server:tcp:example.com"' test-add-uri.out || fail
$VG guestfish -x -a iscsi://user:password@example.com/iqn.2015-12.com.libguestfs:test2/0 </dev/null >test-add-uri.out 2>&1
grep -sq 'add_drive "iqn.2015-12.com.libguestfs:test2/0" "protocol:iscsi" "server:tcp:example.com" "username:user" "secret:password"' test-add-uri.out || fail
rm test-add-uri.out
rm test-add-uri.img

View File

@@ -297,29 +297,6 @@ F<filename> is interpreted as a local file or device.
This is the default if the optional protocol parameter
is omitted.
=item C<protocol = \"ftp\"|\"ftps\"|\"http\"|\"https\"|\"tftp\">
Connect to a remote FTP, HTTP or TFTP server.
The C<server> parameter must also be supplied - see below.
See also: L<guestfs(3)/FTP, HTTP AND TFTP>
=item C<protocol = \"gluster\">
Connect to the GlusterFS server.
The C<server> parameter must also be supplied - see below.
See also: L<guestfs(3)/GLUSTER>
=item C<protocol = \"iscsi\">
Connect to the iSCSI server.
The C<server> parameter must also be supplied - see below.
The C<username> parameter may be supplied. See below.
The C<secret> parameter may be supplied. See below.
See also: L<guestfs(3)/ISCSI>.
=item C<protocol = \"nbd\">
Connect to the Network Block Device server.
@@ -336,22 +313,6 @@ The C<secret> parameter may be supplied. See below.
See also: L<guestfs(3)/CEPH>.
=item C<protocol = \"sheepdog\">
Connect to the Sheepdog server.
The C<server> parameter may also be supplied - see below.
See also: L<guestfs(3)/SHEEPDOG>.
=item C<protocol = \"ssh\">
Connect to the Secure Shell (ssh) server.
The C<server> parameter must be supplied.
The C<username> parameter may be supplied. See below.
See also: L<guestfs(3)/SSH>.
=back
=item C<server>
@@ -362,13 +323,8 @@ is a list of server(s).
Protocol Number of servers required
-------- --------------------------
file List must be empty or param not used at all
ftp|ftps|http|https|tftp Exactly one
gluster Exactly one
iscsi Exactly one
nbd Exactly one
rbd Zero or more
sheepdog Zero or more
ssh Exactly one
Each list element is a string specifying a server. The string must be
in one of the following formats:
@@ -384,10 +340,10 @@ for the protocol is used (see F</etc/services>).
=item C<username>
For the C<ftp>, C<ftps>, C<http>, C<https>, C<iscsi>, C<rbd>, C<ssh>
and C<tftp> protocols, this specifies the remote username.
For the C<rbd>
protocol, this specifies the remote username.
If not given, then the local username is used for C<ssh>, and no authentication
If not given, then no authentication
is attempted for ceph. But note this sometimes may give unexpected results, for
example if using the libvirt backend and if the libvirt backend is configured to
start the qemu appliance as a special user such as C<qemu.qemu>. If in doubt,
@@ -6157,27 +6113,6 @@ This returns true iff the device exists and contains all zero bytes.
Note that for large devices this can take a long time to run." };
{ defaults with
name = "list_9p"; added = (1, 11, 12);
style = RStringList (RPlainString, "mounttags"), [], [];
shortdesc = "list 9p filesystems";
longdesc = "\
List all 9p filesystems attached to the guest. A list of
mount tags is returned." };
{ defaults with
name = "mount_9p"; added = (1, 11, 12);
style = RErr, [String (PlainString, "mounttag"); String (PlainString, "mountpoint")], [OString "options"];
camel_name = "Mount9P";
shortdesc = "mount 9p filesystem";
longdesc = "\
Mount the virtio-9p filesystem with the tag C<mounttag> on the
directory C<mountpoint>.
If required, C<trans=virtio> will be automatically added to the options.
Any other options required can be passed in the optional C<options>
parameter." };
{ defaults with
name = "list_dm_devices"; added = (1, 11, 15);
style = RStringList (RDevice, "devices"), [], [];

View File

@@ -1846,6 +1846,22 @@ and generate_client_actions actions () =
check_args_validity c_name style;
trace_call name c_name style;
(* RHEL 8 *)
if name = "mount" || name = "mount_ro" || name = "mount_options" ||
name = "mount_vfs" then (
pr " if (g->program && !STRPREFIX (g->program, \"virt-\")) {\n";
pr " CLEANUP_FREE char *vfs_type = guestfs_vfs_type (g, mountable);\n";
pr " if (vfs_type && STREQ (vfs_type, \"ntfs\")) {\n";
pr " error (g, \"mount: unsupported filesystem type\");\n";
pr " if (trace_flag)\n";
pr " guestfs_int_trace (g, \"%%s = %%s (error)\",\n";
pr " \"%s\", \"-1\");\n" name;
pr " return %s;\n" (string_of_errcode errcode);
pr " }\n";
pr " }\n";
pr "\n";
);
(* Calculate the total size of all FileIn arguments to pass
* as a progress bar hint.
*)

View File

@@ -295,8 +295,6 @@ let proc_nr = [
282, "internal_autosync";
283, "is_zero";
284, "is_zero_device";
285, "list_9p";
286, "mount_9p";
287, "list_dm_devices";
288, "ntfsresize";
289, "btrfs_filesystem_resize";

View File

@@ -94,7 +94,6 @@ guestfs_gobject_headers= \
include/guestfs-gobject/optargs-mksquashfs.h \
include/guestfs-gobject/optargs-mkswap.h \
include/guestfs-gobject/optargs-mktemp.h \
include/guestfs-gobject/optargs-mount_9p.h \
include/guestfs-gobject/optargs-mount_local.h \
include/guestfs-gobject/optargs-ntfsclone_out.h \
include/guestfs-gobject/optargs-ntfsfix.h \
@@ -188,7 +187,6 @@ guestfs_gobject_sources= \
src/optargs-mksquashfs.c \
src/optargs-mkswap.c \
src/optargs-mktemp.c \
src/optargs-mount_9p.c \
src/optargs-mount_local.c \
src/optargs-ntfsclone_out.c \
src/optargs-ntfsfix.c \

View File

@@ -255,6 +255,7 @@ disk_create_qcow2 (guestfs_h *g, const char *filename, int64_t size,
const struct guestfs_disk_create_argv *optargs)
{
const char *backingformat = NULL;
CLEANUP_FREE char *backingformat_free = NULL;
const char *preallocation = NULL;
const char *compat = NULL;
int clustersize = -1;
@@ -270,6 +271,14 @@ disk_create_qcow2 (guestfs_h *g, const char *filename, int64_t size,
return -1;
}
}
else if (backingfile) {
/* Since qemu 6.1, qemu-img create has requires a backing format (-F)
* parameter if backing file (-b) is used (RHBZ#1998820).
*/
backingformat = backingformat_free = guestfs_disk_format (g, backingfile);
if (!backingformat)
return -1;
}
if (optargs->bitmask & GUESTFS_DISK_CREATE_PREALLOCATION_BITMASK) {
if (STREQ (optargs->preallocation, "off") ||
STREQ (optargs->preallocation, "sparse"))

View File

@@ -168,6 +168,7 @@ create_drive_non_file (guestfs_h *g,
return drv;
}
#if 0 /* DISABLED IN RHEL 8 */
static struct drive *
create_drive_curl (guestfs_h *g,
const struct drive_create_data *data)
@@ -226,6 +227,7 @@ create_drive_gluster (guestfs_h *g,
return create_drive_non_file (g, data);
}
#endif /* DISABLED IN RHEL 8 */
static int
nbd_port (void)
@@ -294,6 +296,7 @@ create_drive_rbd (guestfs_h *g,
return create_drive_non_file (g, data);
}
#if 0 /* DISABLED IN RHEL 8 */
static struct drive *
create_drive_sheepdog (guestfs_h *g,
const struct drive_create_data *data)
@@ -394,6 +397,7 @@ create_drive_iscsi (guestfs_h *g,
return create_drive_non_file (g, data);
}
#endif /* DISABLED IN RHEL 8 */
/**
* Create the special F</dev/null> drive.
@@ -856,6 +860,7 @@ guestfs_impl_add_drive_opts (guestfs_h *g, const char *filename,
drv = create_drive_file (g, &data);
}
}
#if 0 /* DISABLED IN RHEL 8 */
else if (STREQ (protocol, "ftp")) {
data.protocol = drive_protocol_ftp;
drv = create_drive_curl (g, &data);
@@ -880,6 +885,7 @@ guestfs_impl_add_drive_opts (guestfs_h *g, const char *filename,
data.protocol = drive_protocol_iscsi;
drv = create_drive_iscsi (g, &data);
}
#endif /* DISABLED IN RHEL 8 */
else if (STREQ (protocol, "nbd")) {
data.protocol = drive_protocol_nbd;
drv = create_drive_nbd (g, &data);
@@ -888,6 +894,7 @@ guestfs_impl_add_drive_opts (guestfs_h *g, const char *filename,
data.protocol = drive_protocol_rbd;
drv = create_drive_rbd (g, &data);
}
#if 0 /* DISABLED IN RHEL 8 */
else if (STREQ (protocol, "sheepdog")) {
data.protocol = drive_protocol_sheepdog;
drv = create_drive_sheepdog (g, &data);
@@ -900,6 +907,7 @@ guestfs_impl_add_drive_opts (guestfs_h *g, const char *filename,
data.protocol = drive_protocol_tftp;
drv = create_drive_curl (g, &data);
}
#endif /* DISABLED IN RHEL 8 */
else {
error (g, _("unknown protocol %s"), protocol);
drv = NULL; /*FALLTHROUGH*/

View File

@@ -715,70 +715,6 @@ servers. The server string is documented in
L</guestfs_add_drive_opts>. The C<username> and C<secret> parameters are
also optional, and if not given, then no authentication will be used.
=head3 FTP, HTTP AND TFTP
Libguestfs can access remote disks over FTP, FTPS, HTTP, HTTPS
or TFTP protocols.
To do this, set the optional C<protocol> and C<server> parameters of
L</guestfs_add_drive_opts> like this:
char **servers = { "www.example.org", NULL };
guestfs_add_drive_opts (g, "/disk.img",
GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw",
GUESTFS_ADD_DRIVE_OPTS_PROTOCOL, "http",
GUESTFS_ADD_DRIVE_OPTS_SERVER, servers,
-1);
The C<protocol> can be one of C<"ftp">, C<"ftps">, C<"http">,
C<"https"> or C<"tftp">.
C<servers> (the C<server> parameter) is a list which must have a
single element. The single element is a string defining the web,
FTP or TFTP server. The format of this string is documented in
L</guestfs_add_drive_opts>.
=head3 GLUSTER
Libguestfs can access Gluster disks.
To do this, set the optional C<protocol> and C<server> parameters of
L</guestfs_add_drive_opts> like this:
char **servers = { "gluster.example.org:24007", NULL };
guestfs_add_drive_opts (g, "volname/image",
GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw",
GUESTFS_ADD_DRIVE_OPTS_PROTOCOL, "gluster",
GUESTFS_ADD_DRIVE_OPTS_SERVER, servers,
-1);
C<servers> (the C<server> parameter) is a list which must have a
single element. The single element is a string defining the Gluster
server. The format of this string is documented in
L</guestfs_add_drive_opts>.
Note that gluster usually requires the client process (ie. libguestfs)
to run as B<root> and will give unfathomable errors if it is not
(eg. "No data available").
=head3 ISCSI
Libguestfs can access iSCSI disks remotely.
To do this, set the optional C<protocol> and C<server> parameters like
this:
char **server = { "iscsi.example.org:3000", NULL };
guestfs_add_drive_opts (g, "target-iqn-name/lun",
GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw",
GUESTFS_ADD_DRIVE_OPTS_PROTOCOL, "iscsi",
GUESTFS_ADD_DRIVE_OPTS_SERVER, server,
-1);
The C<server> parameter is a list which must have a single element.
The single element is a string defining the iSCSI server. The format
of this string is documented in L</guestfs_add_drive_opts>.
=head3 NETWORK BLOCK DEVICE
Libguestfs can access Network Block Device (NBD) disks remotely.
@@ -841,42 +777,6 @@ L<https://bugs.launchpad.net/qemu/+bug/1155677>
=back
=head3 SHEEPDOG
Libguestfs can access Sheepdog disks.
To do this, set the optional C<protocol> and C<server> parameters of
L</guestfs_add_drive_opts> like this:
char **servers = { /* optional servers ... */ NULL };
guestfs_add_drive_opts (g, "volume",
GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw",
GUESTFS_ADD_DRIVE_OPTS_PROTOCOL, "sheepdog",
GUESTFS_ADD_DRIVE_OPTS_SERVER, servers,
-1);
The optional list of C<servers> may be zero or more server addresses
(C<"hostname:port">). The format of the server strings is documented
in L</guestfs_add_drive_opts>.
=head3 SSH
Libguestfs can access disks over a Secure Shell (SSH) connection.
To do this, set the C<protocol> and C<server> and (optionally)
C<username> parameters of L</guestfs_add_drive_opts> like this:
char **server = { "remote.example.com", NULL };
guestfs_add_drive_opts (g, "/path/to/disk.img",
GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw",
GUESTFS_ADD_DRIVE_OPTS_PROTOCOL, "ssh",
GUESTFS_ADD_DRIVE_OPTS_SERVER, server,
GUESTFS_ADD_DRIVE_OPTS_USERNAME, "remoteuser",
-1);
The format of the server string is documented in
L</guestfs_add_drive_opts>.
=head2 INSPECTION
Libguestfs has APIs for inspecting an unknown disk image to find out

View File

@@ -544,6 +544,13 @@ launch_direct (guestfs_h *g, void *datav, const char *arg)
append_list ("gic-version=host");
#endif
append_list_format ("accel=%s", accel_val);
#if defined(__i386__) || defined(__x86_64__)
/* Tell seabios to send debug messages to the serial port.
* This used to be done by sgabios.
*/
if (g->verbose)
append_list ("graphics=off");
#endif
} end_list ();
cpu_model = guestfs_int_get_cpu_model (has_kvm && !force_tcg);
@@ -665,18 +672,6 @@ launch_direct (guestfs_h *g, void *datav, const char *arg)
} end_list ();
#endif
if (g->verbose &&
guestfs_int_qemu_supports_device (g, data->qemu_data,
"Serial Graphics Adapter")) {
/* Use sgabios instead of vgabios. This means we'll see BIOS
* messages on the serial port, and also works around this bug
* in qemu 1.1.0:
* https://bugs.launchpad.net/qemu/+bug/1021649
* QEmu has included sgabios upstream since just before 1.0.
*/
arg ("-device", "sga");
}
/* Set up virtio-serial for the communications channel. */
start_list ("-chardev") {
append_list ("socket");

View File

@@ -44,7 +44,9 @@ struct backend_uml_data {
char umid[UML_UMID_LEN+1]; /* umid=<...> unique ID. */
};
#if 0
static void print_vmlinux_command_line (guestfs_h *g, char **argv);
#endif
/* Run uml_mkcow to create a COW overlay. */
static char *
@@ -81,6 +83,7 @@ create_cow_overlay_uml (guestfs_h *g, void *datav, struct drive *drv)
return make_cow_overlay (g, drv->src.u.path);
}
#if 0
/* Test for features which are not supported by the UML backend.
* Possibly some of these should just be warnings, not errors.
*/
@@ -133,10 +136,17 @@ uml_supported (guestfs_h *g)
return true;
}
#endif
static int
launch_uml (guestfs_h *g, void *datav, const char *arg)
{
error (g,
"launch: In RHEL, only the 'libvirt' or 'direct' method is supported.\n"
"In particular, User-Mode Linux (UML) is not supported.");
return -1;
#if 0
struct backend_uml_data *data = datav;
CLEANUP_FREE_STRINGSBUF DECLARE_STRINGSBUF (cmdline);
int console_sock = -1, daemon_sock = -1;
@@ -496,8 +506,10 @@ launch_uml (guestfs_h *g, void *datav, const char *arg)
}
g->state = CONFIG;
return -1;
#endif
}
#if 0
/* This is called from the forked subprocess just before vmlinux runs,
* so it can just print the message straight to stderr, where it will
* be picked up and funnelled through the usual appliance event API.
@@ -527,6 +539,7 @@ print_vmlinux_command_line (guestfs_h *g, char **argv)
fputc ('\n', stderr);
}
#endif
static int
shutdown_uml (guestfs_h *g, void *datav, int check_for_errors)

View File

@@ -37,6 +37,12 @@
static int
launch_unix (guestfs_h *g, void *datav, const char *sockpath)
{
error (g,
"launch: In RHEL, only the 'libvirt' or 'direct' method is supported.\n"
"In particular, \"libguestfs live\" is not supported.");
return -1;
#if 0
int r, daemon_sock = -1;
struct sockaddr_un addr;
uint32_t size;
@@ -106,6 +112,7 @@ launch_unix (guestfs_h *g, void *datav, const char *sockpath)
g->conn = NULL;
}
return -1;
#endif
}
static int

View File

@@ -26,7 +26,6 @@ common/utils/stringlists-utils.c
common/utils/utils.c
common/visit/visit.c
common/windows/windows.c
daemon/9p.c
daemon/acl.c
daemon/augeas.c
daemon/available.c
@@ -264,7 +263,6 @@ gobject/src/optargs-mkfs_btrfs.c
gobject/src/optargs-mksquashfs.c
gobject/src/optargs-mkswap.c
gobject/src/optargs-mktemp.c
gobject/src/optargs-mount_9p.c
gobject/src/optargs-mount_local.c
gobject/src/optargs-ntfsclone_out.c
gobject/src/optargs-ntfsfix.c

View File

@@ -37,6 +37,7 @@ fi
# Create a disk image.
guestfish <<EOF
set-program virt-testing
sparse windows.img-t 512M
run

View File

@@ -43,7 +43,6 @@ check-slow:
check-valgrind:
$(MAKE) VG="@VG@" check
TESTS += 9p/test-9p.sh
EXTRA_DIST += 9p/test-9p.sh
SLOW_TESTS += bigdirs/test-big-dirs.pl
@@ -328,9 +327,6 @@ EXTRA_DIST += create/test-disk-create.sh
check_DATA = daemon/captive-daemon.pm
TESTS += \
daemon/test-daemon-start.pl \
daemon/test-btrfs.pl
EXTRA_DIST += \
daemon/test-daemon-start.pl \
daemon/test-btrfs.pl

View File

@@ -96,6 +96,8 @@ main (int argc, char *argv[])
if (g == NULL)
error (EXIT_FAILURE, 0, "failed to create handle");
guestfs_set_program (g, "virt-testing");
if (guestfs_add_drive_scratch (g, 1024*1024*1024, -1) == -1)
exit (EXIT_FAILURE);

View File

@@ -65,34 +65,6 @@ check_output
grep -sq -- '-drive file=rbd:abc-def/ghi-jkl:auth_supported=none,' "$DEBUG_QEMU_FILE" || fail ceph2
rm "$DEBUG_QEMU_FILE"
# Gluster.
$guestfish -d gluster run ||:
check_output
grep -sq -- '-drive file=gluster://1.2.3.4:1234/volname/image,' "$DEBUG_QEMU_FILE" || fail gluster
rm "$DEBUG_QEMU_FILE"
# iSCSI.
$guestfish -d iscsi run ||:
check_output
grep -sq -- '-drive file=iscsi://1.2.3.4:1234/iqn.2003-01.org.linux-iscsi.fedora' "$DEBUG_QEMU_FILE" || fail iscsi
rm "$DEBUG_QEMU_FILE"
# NBD.
$guestfish -d nbd run ||:
check_output
grep -sq -- '-drive file=nbd:1.2.3.4:1234,' "$DEBUG_QEMU_FILE" || fail nbd
rm "$DEBUG_QEMU_FILE"
# Sheepdog.
$guestfish -d sheepdog run ||:
check_output
grep -sq -- '-drive file=sheepdog:volume,' "$DEBUG_QEMU_FILE" || fail sheepdog
rm "$DEBUG_QEMU_FILE"
# Local, stored in a pool.
$guestfish -d pool1 run ||:

View File

@@ -62,45 +62,6 @@ check_output
grep -sq -- '-drive file=rbd:abc-def/ghi-jkl:auth_supported=none,' "$DEBUG_QEMU_FILE" || fail
rm "$DEBUG_QEMU_FILE"
# HTTP.
guestfish <<EOF ||:
add "/disk.img" "format:raw" "protocol:http" "server:www.example.com"
run
EOF
check_output
grep -sq -- '-drive file=http://www.example.com/disk.img,' "$DEBUG_QEMU_FILE" || fail
rm "$DEBUG_QEMU_FILE"
# Gluster.
guestfish <<EOF ||:
add "volname/image" "format:raw" "protocol:gluster" "server:www.example.com:24007"
run
EOF
check_output
grep -sq -- '-drive file=gluster://www.example.com:24007/volname/image,' "$DEBUG_QEMU_FILE" || fail
rm "$DEBUG_QEMU_FILE"
# iSCSI.
guestfish <<EOF ||:
add "target-iqn-name/lun" "format:raw" "protocol:iscsi" "server:www.example.com:3000"
run
EOF
check_output
grep -sq -- '-drive file=iscsi://www.example.com:3000/target-iqn-name/lun,' "$DEBUG_QEMU_FILE" || fail
rm "$DEBUG_QEMU_FILE"
guestfish <<EOF ||:
add "target-iqn-name/lun" "format:raw" "protocol:iscsi" "server:www.example.com:3000" \
"username:user" "secret:pass"
run
EOF
check_output
grep -sq -- '-drive file=iscsi://user%pass@www.example.com:3000/target-iqn-name/lun,' "$DEBUG_QEMU_FILE" || fail
rm "$DEBUG_QEMU_FILE"
# NBD.
guestfish <<EOF ||:
@@ -118,24 +79,3 @@ EOF
check_output
grep -sq -- '-drive file=nbd:unix:/socket,' "$DEBUG_QEMU_FILE" || fail
rm "$DEBUG_QEMU_FILE"
# Sheepdog.
guestfish <<EOF ||:
add "volume" "format:raw" "protocol:sheepdog"
run
EOF
check_output
grep -sq -- '-drive file=sheepdog:volume,' "$DEBUG_QEMU_FILE" || fail
rm "$DEBUG_QEMU_FILE"
# SSH.
guestfish <<EOF ||:
add "/disk.img" "format:raw" "protocol:ssh" "server:example.com" \
"username:rich"
run
EOF
check_output
grep -sq -- '-drive file=ssh://rich@example.com/disk.img,' "$DEBUG_QEMU_FILE" || fail
rm "$DEBUG_QEMU_FILE"