=encoding utf8 =begin comment We break with tradition here and don't use ALL CAPS for the section headings, as this makes them much easier to read. =end comment =head1 NAME guestfs-recipes - libguestfs, guestfish and virt tools recipes =head1 DESCRIPTION This page contains recipes for and links to things you can do using libguestfs, L and the virt tools. =head1 Audit a virtual machine for setuid files The link below contains a small program which can be used to audit a Linux virtual machine to see what setuid and setgid files it contains. L =head1 Change the background image in a Windows XP VM The links below explain how to use L to change the background image for a user of a Windows XP VM. Unfortunately the technique appears to be substantially different for each version of Windows. L L =head1 Cloning a virtual machine (Linux) The guestfish technique described in the link below works well for most Linux VMs. Depending on the Linux distro you may need to change the paths slightly. L Avoid L. Currently what to do about virt-clone is under discussion. L =head1 Cloning a virtual machine (Windows) It is possible to do a "sysprep" using libguestfs alone, although not straightforward. Currently there is code in the Aeolus Oz project which does this (using libguestfs). As part of our review of the virt-clone tool, we may add sysprepping ability. L L =head1 Convert a CD-ROM / DVD / ISO to a tarball This converts input C to output C: guestfish --ro -a cd.iso -m /dev/sda tgz-out / cd.tar.gz To export just a subdirectory, eg. C, do: guestfish --ro -a cd.iso -m /dev/sda tgz-out /files cd.tar.gz =head1 Create empty disk images You can use the L I<-N> option to create empty disk images. The useful guide below explains the options available. L =head1 Dump raw filesystem content from inside a disk image or VM You can use the L C command to extract the raw filesystem content from any filesystem in a disk image or a VM (even one which is encrypted or buried inside an LV): guestfish --ro -a disk.img run : download /dev/sda1 sda1.img guestfish --ro -d Guest run : download /dev/vg_guest/lv_root lv.img To list the filesystems in a disk image, use L. =head1 Edit grub configuration in a VM You can use this to: =over 4 =item * Fix a virtual machine that does not boot. =item * Change which kernel is used to boot the VM. =item * Change kernel command line options. =back Use L to edit the grub configuration: virt-edit -d BrokenGuest /boot/grub/grub.conf or for general tinkering inside an unbootable VM use L like this: virt-rescue -d BrokenGuest =head1 Export any directory from a VM To export C from a VM into a local directory use L: virt-copy-out -d Guest /home . Notes: =over 4 =item * The final dot of the command is not a printing error. It means we want to copy out to the current directory. =item * This creates a directory called C under the current directory. =back If the guest is a Windows guest then you can use drive letters and backslashes, but you must prefix the path with C and quote it to protect it from the shell, like this: virt-copy-out -d WinGuest 'win:c:\windows\system32\config' . To get the output as a compressed tarball, do: virt-tar-out -d Guest /home - | gzip --best > home.tar.gz Although it sounds tempting, this is usually not a reliable way to get a backup from a running guest. See the entry in the FAQ: L =head1 Find out which user is using the most space This simple script examines a Linux guest to find out which user is using the most space in their home directory: #!/bin/sh - set -e vm="$1" dir=/home eval $(guestfish --ro -d "$vm" -i --listen) for d in $(guestfish --remote ls "$dir"); do echo -n "$dir/$d" echo -ne '\t' guestfish --remote du "$dir/$d"; done | sort -nr -k 2 guestfish --remote exit =head1 Get DHCP address from a VM The link below explains the many different possible techniques for getting the last assigned DHCP address of a virtual machine. L In the libguestfs source examples directory you will find the latest version of the C program. =head1 Get the operating system product name string Save the following script into a file called C: #!/bin/sh - set -e eval "$(guestfish --ro -d "$1" --i --listen)" root="$(guestfish --remote inspect-get-roots)" guestfish --remote inspect-get-product-name "$root" guestfish --remote exit Make the script executable and run it on a named guest: # product-name.sh RHEL60x64 Red Hat Enterprise Linux Server release 6.0 (Santiago) You can also use an XPath query on the L XML using the C command line tool or from your favourite programming language: # virt-inspector RHEL60x64 > xml # xpath '//product_name' < xml Found 1 nodes: -- NODE -- Red Hat Enterprise Linux Server release 6.0 (Santiago) =head1 Get the default boot kernel for a Linux VM The link below contains a program to print the default boot kernel for a Linux VM. L It uses Augeas, and the technique is generally applicable for many different tasks, such as: =over 4 =item * listing the user accounts in the guest =item * what repositories is it configured to use =item * what NTP servers does it connect to =item * what were the boot messages last time it booted =item * listing who was logged in recently =back L =head1 Install RPMs in a guest The link below contains a method to install RPMs in a guest. In fact the RPMs are just uploaded to the guest along with a "firstboot" script that installs them next time the guest is booted. You could use this technique to install vital security updates in an offline guest. L =head1 List applications installed in a VM Save the following to a file C: #!/bin/sh - set -e eval "$(guestfish --ro -d "$1" --i --listen)" root="$(guestfish --remote inspect-get-roots)" guestfish --remote inspect-list-applications "$root" guestfish --remote exit Make the file executable and then you can run it on any named virtual machine: # list-apps.sh WinGuest [0] = { app_name: Mozilla Firefox (3.6.12) app_display_name: Mozilla Firefox (3.6.12) app_epoch: 0 app_version: 3.6.12 (en-GB) app_release: app_install_path: C:\Program Files\Mozilla Firefox app_trans_path: app_publisher: Mozilla app_url: http://www.mozilla.com/en-GB/ app_source_package: app_summary: app_description: Mozilla Firefox } [1] = { app_name: VLC media player app_display_name: VLC media player 1.1.5 app_epoch: 0 app_version: 1.1.5 app_release: app_install_path: C:\Program Files\VideoLAN\VLC app_trans_path: app_publisher: VideoLAN app_url: http://www.videolan.org/ app_source_package: app_summary: app_description: } If you want to run the script on disk images (instead of libvirt virtual machines), change C<-d "$1"> to C<-a "$1">. See also L. =head1 List files and directories in a VM This involves using the L C command like this: guestfish --ro -d Guest -i find0 / - | tr '\0' '\n' | sort =head1 List services in a Windows VM The link below contains a script that can be used to list out the services from a Windows VM, and whether those services run at boot time or are loaded on demand. L =head1 Make a disk image sparse The link below contains some guides for making a disk image sparse (or reintroducing sparseness). L =head1 Monitor disk usage over time You can use L to monitor disk usage of your guests over time. The link below contains a guide. L =head1 Reading the Windows Event Log from Windows Vista (or later) L plus the tools described in the link below can be used to read out the Windows Event Log from any virtual machine running Windows Vista or a later version. L =head1 Remove root password (Linux) Using the L I<-e> option you can do simple replacements on files. One use is to remove the root password from a Linux guest: virt-edit domname /etc/passwd -e 's/^root:.*?:/root::/' =head1 Remove Administrator password (Windows) The link below contains one technique for removing the Administrator password from a Windows VM, or to be more precise, it gives you a command prompt the next time you log in which you can use to bypass any security: L =head1 Unpack a live CD Linux live CDs often contain multiple layers of disk images wrapped like a Russian doll. You can use L to look inside these multiple layers, as outlined in the guide below. L =head1 Uploading and downloading files The link below contains general tips on uploading (copying in) and downloading (copying out) files from VMs. L =head1 Use libguestfs tools on VMware ESX guests The link below explains how to use libguestfs, L and the virt tools on any VMware ESX guests, by first sharing the VMware VMFS over sshfs. L =head1 SEE ALSO L, L, L, L, L, L, L, L, L, L. =head1 AUTHORS Richard W.M. Jones (C) =head1 COPYRIGHT Copyright (C) 2009-2012 Red Hat Inc. L The examples in this manual page may be freely copied, modified and distributed without any restrictions. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA