X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=fish%2Fcmds.c;h=7b1386fa7f1af2d19c2bc8b57d8a45f2d682b596;hp=dd574f243a0e6de83025f78b6c627d34082925fc;hb=8f9f02d483b87c787d089cf9329f5f1b81d3a77e;hpb=24ccbb29ac475187f51a27dcd318db2b4824a0c1 diff --git a/fish/cmds.c b/fish/cmds.c index dd574f2..7b1386f 100644 --- a/fish/cmds.c +++ b/fish/cmds.c @@ -63,11 +63,13 @@ void list_commands (void) printf ("%-20s %s\n", "command", "run a command from the guest filesystem"); printf ("%-20s %s\n", "command-lines", "run a command, returning lines"); printf ("%-20s %s\n", "config", "add qemu parameters"); + printf ("%-20s %s\n", "debug", "debugging and internals"); printf ("%-20s %s\n", "download", "download a file to the local machine"); printf ("%-20s %s\n", "exists", "test if file or directory exists"); printf ("%-20s %s\n", "file", "determine file type"); printf ("%-20s %s\n", "get-autosync", "get autosync mode"); printf ("%-20s %s\n", "get-path", "get the search path"); + printf ("%-20s %s\n", "get-qemu", "get the qemu binary"); printf ("%-20s %s\n", "get-state", "get the current state"); printf ("%-20s %s\n", "get-verbose", "get verbose mode"); printf ("%-20s %s\n", "is-busy", "is busy processing a command"); @@ -91,6 +93,9 @@ void list_commands (void) printf ("%-20s %s\n", "mkdir-p", "create a directory and parents"); printf ("%-20s %s\n", "mkfs", "make a filesystem"); printf ("%-20s %s\n", "mount", "mount a guest disk at a position in the filesystem"); + printf ("%-20s %s\n", "mount-options", "mount a guest disk with mount options"); + printf ("%-20s %s\n", "mount-ro", "mount a guest disk, read-only"); + printf ("%-20s %s\n", "mount-vfs", "mount a guest disk with mount options and vfstype"); printf ("%-20s %s\n", "mounts", "show mounted filesystems"); printf ("%-20s %s\n", "pvcreate", "create an LVM physical volume"); printf ("%-20s %s\n", "pvs", "list the LVM physical volumes (PVs)"); @@ -101,11 +106,16 @@ void list_commands (void) printf ("%-20s %s\n", "rmdir", "remove a directory"); printf ("%-20s %s\n", "set-autosync", "set autosync mode"); printf ("%-20s %s\n", "set-path", "set the search path"); + printf ("%-20s %s\n", "set-qemu", "set the qemu binary"); printf ("%-20s %s\n", "set-verbose", "set verbose mode"); printf ("%-20s %s\n", "sfdisk", "create partitions on a block device"); printf ("%-20s %s\n", "stat", "get file information"); printf ("%-20s %s\n", "statvfs", "get file system statistics"); printf ("%-20s %s\n", "sync", "sync disks, writes are flushed through to the disk image"); + printf ("%-20s %s\n", "tar-in", "unpack tarfile to directory"); + printf ("%-20s %s\n", "tar-out", "pack directory into tarfile"); + printf ("%-20s %s\n", "tgz-in", "unpack compressed tarball to directory"); + printf ("%-20s %s\n", "tgz-out", "pack directory into compressed tarball"); printf ("%-20s %s\n", "touch", "update file timestamps or create a new file"); printf ("%-20s %s\n", "tune2fs-l", "get ext2/ext3 superblock details"); printf ("%-20s %s\n", "umount", "unmount a filesystem"); @@ -135,6 +145,12 @@ void display_command (const char *cmd) if (strcasecmp (cmd, "config") == 0) pod2text ("config - add qemu parameters", " config \n\nThis can be used to add arbitrary qemu command line parameters\nof the form C<-param value>. Actually it's not quite arbitrary - we\nprevent you from setting some parameters which would interfere with\nparameters that we use.\n\nThe first character of C string must be a C<-> (dash).\n\nC can be NULL."); else + if (strcasecmp (cmd, "set_qemu") == 0 || strcasecmp (cmd, "set-qemu") == 0 || strcasecmp (cmd, "qemu") == 0) + pod2text ("set-qemu - set the qemu binary", " set-qemu \n\nSet the qemu binary that we will use.\n\nThe default is chosen when the library was compiled by the\nconfigure script.\n\nYou can also override this by setting the C\nenvironment variable.\n\nThe string C is stashed in the libguestfs handle, so the caller\nmust make sure it remains valid for the lifetime of the handle.\n\nSetting C to C restores the default qemu binary.\n\nYou can use 'qemu' as an alias for this command."); + else + if (strcasecmp (cmd, "get_qemu") == 0 || strcasecmp (cmd, "get-qemu") == 0) + pod2text ("get-qemu - get the qemu binary", " get-qemu\n\nReturn the current qemu binary.\n\nThis is always non-NULL. If it wasn't set already, then this will\nreturn the default qemu binary name."); + else if (strcasecmp (cmd, "set_path") == 0 || strcasecmp (cmd, "set-path") == 0 || strcasecmp (cmd, "path") == 0) pod2text ("set-path - set the search path", " set-path \n\nSet the path that libguestfs searches for kernel and initrd.img.\n\nThe default is C<$libdir/guestfs> unless overridden by setting\nC environment variable.\n\nThe string C is stashed in the libguestfs handle, so the caller\nmust make sure it remains valid for the lifetime of the handle.\n\nSetting C to C restores the default path.\n\nYou can use 'path' as an alias for this command."); else @@ -372,6 +388,30 @@ void display_command (const char *cmd) if (strcasecmp (cmd, "checksum") == 0) pod2text ("checksum - compute MD5, SHAx or CRC checksum of file", " checksum \n\nThis call computes the MD5, SHAx or CRC checksum of the\nfile named C.\n\nThe type of checksum to compute is given by the C\nparameter which must have one of the following values:\n\n=over 4\n\n=item C\n\nCompute the cyclic redundancy check (CRC) specified by POSIX\nfor the C command.\n\n=item C\n\nCompute the MD5 hash (using the C program).\n\n=item C\n\nCompute the SHA1 hash (using the C program).\n\n=item C\n\nCompute the SHA224 hash (using the C program).\n\n=item C\n\nCompute the SHA256 hash (using the C program).\n\n=item C\n\nCompute the SHA384 hash (using the C program).\n\n=item C\n\nCompute the SHA512 hash (using the C program).\n\n=back\n\nThe checksum is returned as a printable string."); else + if (strcasecmp (cmd, "tar_in") == 0 || strcasecmp (cmd, "tar-in") == 0) + pod2text ("tar-in - unpack tarfile to directory", " tar-in \n\nThis command uploads and unpacks local file C (an\nI tar file) into C.\n\nTo upload a compressed tarball, use C."); + else + if (strcasecmp (cmd, "tar_out") == 0 || strcasecmp (cmd, "tar-out") == 0) + pod2text ("tar-out - pack directory into tarfile", " tar-out \n\nThis command packs the contents of C and downloads\nit to local file C.\n\nTo download a compressed tarball, use C."); + else + if (strcasecmp (cmd, "tgz_in") == 0 || strcasecmp (cmd, "tgz-in") == 0) + pod2text ("tgz-in - unpack compressed tarball to directory", " tgz-in \n\nThis command uploads and unpacks local file C (a\nI tar file) into C.\n\nTo upload an uncompressed tarball, use C."); + else + if (strcasecmp (cmd, "tgz_out") == 0 || strcasecmp (cmd, "tgz-out") == 0) + pod2text ("tgz-out - pack directory into compressed tarball", " tgz-out \n\nThis command packs the contents of C and downloads\nit to local file C.\n\nTo download an uncompressed tarball, use C."); + else + if (strcasecmp (cmd, "mount_ro") == 0 || strcasecmp (cmd, "mount-ro") == 0) + pod2text ("mount-ro - mount a guest disk, read-only", " mount-ro \n\nThis is the same as the C command, but it\nmounts the filesystem with the read-only (I<-o ro>) flag."); + else + if (strcasecmp (cmd, "mount_options") == 0 || strcasecmp (cmd, "mount-options") == 0) + pod2text ("mount-options - mount a guest disk with mount options", " mount-options \n\nThis is the same as the C command, but it\nallows you to set the mount options as for the\nL I<-o> flag."); + else + if (strcasecmp (cmd, "mount_vfs") == 0 || strcasecmp (cmd, "mount-vfs") == 0) + pod2text ("mount-vfs - mount a guest disk with mount options and vfstype", " mount-vfs \n\nThis is the same as the C command, but it\nallows you to set both the mount options and the vfstype\nas for the L I<-o> and I<-t> flags."); + else + if (strcasecmp (cmd, "debug") == 0) + pod2text ("debug - debugging and internals", " debug \n\nThe C command exposes some internals of\nC (the guestfs daemon) that runs inside the\nqemu subprocess.\n\nThere is no comprehensive help for this command. You have\nto look at the file C in the libguestfs source\nto find out what you can do."); + else display_builtin_command (cmd); } @@ -577,6 +617,34 @@ static int run_config (const char *cmd, int argc, char *argv[]) return r; } +static int run_set_qemu (const char *cmd, int argc, char *argv[]) +{ + int r; + const char *qemu; + if (argc != 1) { + fprintf (stderr, "%s should have 1 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + qemu = argv[0]; + r = guestfs_set_qemu (g, qemu); + return r; +} + +static int run_get_qemu (const char *cmd, int argc, char *argv[]) +{ + const char *r; + if (argc != 0) { + fprintf (stderr, "%s should have 0 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + r = guestfs_get_qemu (g); + if (r == NULL) return -1; + printf ("%s\n", r); + return 0; +} + static int run_set_path (const char *cmd, int argc, char *argv[]) { int r; @@ -1801,6 +1869,143 @@ static int run_checksum (const char *cmd, int argc, char *argv[]) return 0; } +static int run_tar_in (const char *cmd, int argc, char *argv[]) +{ + int r; + const char *tarfile; + const char *directory; + if (argc != 2) { + fprintf (stderr, "%s should have 2 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + tarfile = strcmp (argv[0], "-") != 0 ? argv[0] : "/dev/stdin"; + directory = argv[1]; + r = guestfs_tar_in (g, tarfile, directory); + return r; +} + +static int run_tar_out (const char *cmd, int argc, char *argv[]) +{ + int r; + const char *directory; + const char *tarfile; + if (argc != 2) { + fprintf (stderr, "%s should have 2 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + directory = argv[0]; + tarfile = strcmp (argv[1], "-") != 0 ? argv[1] : "/dev/stdout"; + r = guestfs_tar_out (g, directory, tarfile); + return r; +} + +static int run_tgz_in (const char *cmd, int argc, char *argv[]) +{ + int r; + const char *tarball; + const char *directory; + if (argc != 2) { + fprintf (stderr, "%s should have 2 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + tarball = strcmp (argv[0], "-") != 0 ? argv[0] : "/dev/stdin"; + directory = argv[1]; + r = guestfs_tgz_in (g, tarball, directory); + return r; +} + +static int run_tgz_out (const char *cmd, int argc, char *argv[]) +{ + int r; + const char *directory; + const char *tarball; + if (argc != 2) { + fprintf (stderr, "%s should have 2 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + directory = argv[0]; + tarball = strcmp (argv[1], "-") != 0 ? argv[1] : "/dev/stdout"; + r = guestfs_tgz_out (g, directory, tarball); + return r; +} + +static int run_mount_ro (const char *cmd, int argc, char *argv[]) +{ + int r; + const char *device; + const char *mountpoint; + if (argc != 2) { + fprintf (stderr, "%s should have 2 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + device = argv[0]; + mountpoint = argv[1]; + r = guestfs_mount_ro (g, device, mountpoint); + return r; +} + +static int run_mount_options (const char *cmd, int argc, char *argv[]) +{ + int r; + const char *options; + const char *device; + const char *mountpoint; + if (argc != 3) { + fprintf (stderr, "%s should have 3 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + options = argv[0]; + device = argv[1]; + mountpoint = argv[2]; + r = guestfs_mount_options (g, options, device, mountpoint); + return r; +} + +static int run_mount_vfs (const char *cmd, int argc, char *argv[]) +{ + int r; + const char *options; + const char *vfstype; + const char *device; + const char *mountpoint; + if (argc != 4) { + fprintf (stderr, "%s should have 4 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + options = argv[0]; + vfstype = argv[1]; + device = argv[2]; + mountpoint = argv[3]; + r = guestfs_mount_vfs (g, options, vfstype, device, mountpoint); + return r; +} + +static int run_debug (const char *cmd, int argc, char *argv[]) +{ + char *r; + const char *subcmd; + char **extraargs; + if (argc != 2) { + fprintf (stderr, "%s should have 2 parameter(s)\n", cmd); + fprintf (stderr, "type 'help %s' for help on %s\n", cmd, cmd); + return -1; + } + subcmd = argv[0]; + extraargs = parse_string_list (argv[1]); + r = guestfs_debug (g, subcmd, extraargs); + if (r == NULL) return -1; + printf ("%s\n", r); + free (r); + return 0; +} + int run_action (const char *cmd, int argc, char *argv[]) { if (strcasecmp (cmd, "launch") == 0 || strcasecmp (cmd, "run") == 0) @@ -1818,6 +2023,12 @@ int run_action (const char *cmd, int argc, char *argv[]) if (strcasecmp (cmd, "config") == 0) return run_config (cmd, argc, argv); else + if (strcasecmp (cmd, "set_qemu") == 0 || strcasecmp (cmd, "set-qemu") == 0 || strcasecmp (cmd, "qemu") == 0) + return run_set_qemu (cmd, argc, argv); + else + if (strcasecmp (cmd, "get_qemu") == 0 || strcasecmp (cmd, "get-qemu") == 0) + return run_get_qemu (cmd, argc, argv); + else if (strcasecmp (cmd, "set_path") == 0 || strcasecmp (cmd, "set-path") == 0 || strcasecmp (cmd, "path") == 0) return run_set_path (cmd, argc, argv); else @@ -2055,6 +2266,30 @@ int run_action (const char *cmd, int argc, char *argv[]) if (strcasecmp (cmd, "checksum") == 0) return run_checksum (cmd, argc, argv); else + if (strcasecmp (cmd, "tar_in") == 0 || strcasecmp (cmd, "tar-in") == 0) + return run_tar_in (cmd, argc, argv); + else + if (strcasecmp (cmd, "tar_out") == 0 || strcasecmp (cmd, "tar-out") == 0) + return run_tar_out (cmd, argc, argv); + else + if (strcasecmp (cmd, "tgz_in") == 0 || strcasecmp (cmd, "tgz-in") == 0) + return run_tgz_in (cmd, argc, argv); + else + if (strcasecmp (cmd, "tgz_out") == 0 || strcasecmp (cmd, "tgz-out") == 0) + return run_tgz_out (cmd, argc, argv); + else + if (strcasecmp (cmd, "mount_ro") == 0 || strcasecmp (cmd, "mount-ro") == 0) + return run_mount_ro (cmd, argc, argv); + else + if (strcasecmp (cmd, "mount_options") == 0 || strcasecmp (cmd, "mount-options") == 0) + return run_mount_options (cmd, argc, argv); + else + if (strcasecmp (cmd, "mount_vfs") == 0 || strcasecmp (cmd, "mount-vfs") == 0) + return run_mount_vfs (cmd, argc, argv); + else + if (strcasecmp (cmd, "debug") == 0) + return run_debug (cmd, argc, argv); + else { fprintf (stderr, "%s: unknown command\n", cmd); return -1;