summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2010-11-11 14:53:51 +0000
committerRichard W.M. Jones <rjones@redhat.com>2010-11-11 16:56:43 +0000
commitd29e9a552f5823d1d8cb8d4962cb1301bbf60b0e (patch)
tree02e375395b90ebc0f1485e336110defef8422ee2 /tools
parent4d900cdac8258daa2e99c6ceb2a4985154e94150 (diff)
downloadlibguestfs-d29e9a552f5823d1d8cb8d4962cb1301bbf60b0e.tar.gz
libguestfs-d29e9a552f5823d1d8cb8d4962cb1301bbf60b0e.tar.xz
libguestfs-d29e9a552f5823d1d8cb8d4962cb1301bbf60b0e.zip
Rewrite virt-cat in C.
With changes in the core API since 1.5, virt-cat was little more than a Perl wrapper which did some command line argument processing. Thus it could easily be rewritten in C. This version also shares core command line argument processing with guestfish and guestmount, so the options have changed slightly (old-style command line *is* supported). virt-cat -a disk.img file [file ...] virt-cat -d domname file [file ...] Several other guestfish options are supported including encryption, and with the new style multiple files can be downloaded. See the man page for details.
Diffstat (limited to 'tools')
-rw-r--r--tools/Makefile.am8
-rwxr-xr-xtools/test-virt-cat.sh14
-rwxr-xr-xtools/virt-cat215
3 files changed, 3 insertions, 234 deletions
diff --git a/tools/Makefile.am b/tools/Makefile.am
index 5b415c0e..651daf9b 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -18,7 +18,6 @@
include $(top_srcdir)/subdir-rules.mk
tools = \
- cat \
df \
edit \
list-filesystems \
@@ -43,10 +42,10 @@ bin_SCRIPTS = $(tools:%=virt-%)
# Manual pages and HTML files for the website.
-# XXX Bug in automake? If you list virt-cat.1 explicitly, then it
+# XXX Bug in automake? If you list virt-df.1 explicitly, then it
# builds and installs the man pages. However if this is removed,
# then the man pages are neither built nor installed.
-man_MANS = virt-cat.1 $(patsubst %,virt-%.1,$(filter-out cat,$(tools)))
+man_MANS = virt-df.1 $(patsubst %,virt-%.1,$(filter-out df,$(tools)))
noinst_DATA = $(tools:%=$(top_builddir)/html/virt-%.1.html)
@@ -75,8 +74,7 @@ TESTS_ENVIRONMENT = \
LIBGUESTFS_PATH=$(top_builddir)/appliance \
PERL5LIB=$(top_builddir)/perl/blib/lib:$(top_builddir)/perl/blib/arch
-TESTS = test-virt-cat.sh \
- test-virt-df.sh \
+TESTS = test-virt-df.sh \
test-virt-list-filesystems.sh \
test-virt-ls.sh \
test-virt-make-fs.sh \
diff --git a/tools/test-virt-cat.sh b/tools/test-virt-cat.sh
deleted file mode 100755
index 19b8d875..00000000
--- a/tools/test-virt-cat.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash -
-
-export LANG=C
-set -e
-
-# Read out the test files from the image using virt-cat.
-if [ "$(./virt-cat ../images/fedora.img /etc/test1)" != "abcdefg" ]; then
- echo "$0: error: mismatch in file test1"
- exit 1
-fi
-if [ "$(./virt-cat ../images/fedora.img /etc/test2)" != "" ]; then
- echo "$0: error: mismatch in file test2"
- exit 1
-fi
diff --git a/tools/virt-cat b/tools/virt-cat
deleted file mode 100755
index 546e85cf..00000000
--- a/tools/virt-cat
+++ /dev/null
@@ -1,215 +0,0 @@
-#!/usr/bin/perl -w
-# virt-cat
-# Copyright (C) 2009-2010 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-use warnings;
-use strict;
-
-use Sys::Guestfs;
-use Sys::Guestfs::Lib qw(open_guest);
-use Pod::Usage;
-use Getopt::Long;
-use File::Basename;
-use Locale::TextDomain 'libguestfs';
-
-=encoding utf8
-
-=head1 NAME
-
-virt-cat - Display a file in a virtual machine
-
-=head1 SYNOPSIS
-
- virt-cat [--options] domname file
-
- virt-cat [--options] disk.img [disk.img ...] file
-
-=head1 DESCRIPTION
-
-C<virt-cat> is a command line tool to display the contents of C<file>
-where C<file> exists in the named virtual machine (or disk image).
-
-C<virt-cat> can be used to quickly view a single file. To edit a
-file, use C<virt-edit>. For more complex cases you should look at the
-L<guestfish(1)> tool.
-
-=head1 EXAMPLES
-
-Display C</etc/fstab> file from inside the libvirt VM called
-C<mydomain>:
-
- virt-cat mydomain /etc/fstab
-
-List syslog messages from a VM:
-
- virt-cat mydomain /var/log/messages | tail
-
-Find out what DHCP IP address a VM acquired:
-
- virt-cat mydomain /var/log/messages | grep 'dhclient: bound to' | tail
-
-Find out what packages were recently installed:
-
- virt-cat mydomain /var/log/yum.log | tail
-
-Find out who is logged on inside a virtual machine:
-
- virt-cat mydomain /var/run/utmp > /tmp/utmp
- who /tmp/utmp
-
-or who was logged on:
-
- virt-cat mydomain /var/log/wtmp > /tmp/wtmp
- last -f /tmp/wtmp
-
-=head1 OPTIONS
-
-=over 4
-
-=cut
-
-my $help;
-
-=item B<--help>
-
-Display brief help.
-
-=cut
-
-my $version;
-
-=item B<--version>
-
-Display version number and exit.
-
-=cut
-
-my $uri;
-
-=item B<--connect URI> | B<-c URI>
-
-If using libvirt, connect to the given I<URI>. If omitted, then we
-connect to the default libvirt hypervisor.
-
-If you specify guest block devices directly, then libvirt is not used
-at all.
-
-=cut
-
-my $format;
-
-=item B<--format> raw
-
-Specify the format of disk images given on the command line. If this
-is omitted then the format is autodetected from the content of the
-disk image.
-
-If disk images are requested from libvirt, then this program asks
-libvirt for this information. In this case, the value of the format
-parameter is ignored.
-
-If working with untrusted raw-format guest disk images, you should
-ensure the format is always specified.
-
-=back
-
-=cut
-
-GetOptions ("help|?" => \$help,
- "version" => \$version,
- "connect|c=s" => \$uri,
- "format=s" => \$format,
- ) or pod2usage (2);
-pod2usage (1) if $help;
-if ($version) {
- my $g = Sys::Guestfs->new ();
- my %h = $g->version ();
- print "$h{major}.$h{minor}.$h{release}$h{extra}\n";
- exit
-}
-
-pod2usage (__"virt-cat: no image, VM names or filenames to cat given")
- if @ARGV <= 1;
-
-my $filename = pop @ARGV;
-
-my $g;
-if ($uri) {
- $g = open_guest (\@ARGV, address => $uri, format => $format);
-} else {
- $g = open_guest (\@ARGV, format => $format);
-}
-
-$g->launch ();
-
-my @roots = $g->inspect_os ();
-if (@roots == 0) {
- die __x("{prog}: No operating system could be detected inside this disk image.\n\nThis may be because the file is not a disk image, or is not a virtual machine\nimage, or because the OS type is not understood by libguestfs.\n\nIf you feel this is an error, please file a bug report including as much\ninformation about the disk image as possible.\n",
- prog => basename ($0));
-}
-if (@roots > 1) {
- die __x("{prog}: multiboot operating systems are not supported.\n",
- prog => basename ($0))
-}
-my %fses = $g->inspect_get_mountpoints ($roots[0]);
-my @fses = sort { length $a <=> length $b } keys %fses;
-foreach (@fses) {
- $g->mount_ro ($fses{$_}, $_);
-}
-
-# Allow this to fail in case eg. the file does not exist.
-# NB: https://bugzilla.redhat.com/show_bug.cgi?id=501888
-print $g->download($filename, "/dev/stdout");
-
-=head1 SHELL QUOTING
-
-Libvirt guest names can contain arbitrary characters, some of which
-have meaning to the shell such as C<#> and space. You may need to
-quote or escape these characters on the command line. See the shell
-manual page L<sh(1)> for details.
-
-=head1 SEE ALSO
-
-L<guestfs(3)>,
-L<guestfish(1)>,
-L<virt-edit(1)>,
-L<Sys::Guestfs(3)>,
-L<Sys::Guestfs::Lib(3)>,
-L<Sys::Virt(3)>,
-L<http://libguestfs.org/>.
-
-=head1 AUTHOR
-
-Richard W.M. Jones L<http://people.redhat.com/~rjones/>
-
-=head1 COPYRIGHT
-
-Copyright (C) 2009 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., 675 Mass Ave, Cambridge, MA 02139, USA.