libguestfs guestfish virt-cat virt-edit virt-df virt-p2v
(Link zu dieser Seite als [[QEMU-KVM-Buch/ Managementtools/ libguestfs]])
Im Aufbau
Inhaltsverzeichnis |
[bearbeiten] Die Bibliothek libguestfs
Website: http://libguestfs.org
Die C-Bibliothek libguestfs (Open Source) ist eine API zum Bearbeiten von virtuellen Speichermedien (Images), die von virtuellen Maschinen verwendet werden. Mit den Werkzeugen dieser Bibliothek (virt-cat, virt-edit, virt-df, virt-p2v) lassen sich in den Gast-Systemen Dateien bearbeiten, Statistiken der Dateisysteme erstellen und Registry-Einträge verändern (Microsoft Windows). Weitere Features sind: Backups, Klonen und Migrationen. Unterstützt werden unter anderem die Dateisysteme ext2/3/4, btrfs, FAT und NTFS, LVM und unterschiedliche Image-Formate, wie zum Beispiel qcow2 und vmdk. Es lassen sich virtuelle Maschinen bearbeiten, die mit der Bibliothek libvirt verwaltet werden (siehe Abschnitt Managementtols). Die Bibliothek libguestfs verwendet Features der Kernel-based Virtual Machine. Die C-Bibliothek libguestfs bietet APIs für C, C++, OCaml, Perl, Python, Ruby, Java, Haskell, C# und Shell-Skripts.
[bearbeiten] Installation
[bearbeiten] Fedora, RHEL mit EPEL
Unter Fedora ab Version 11 und RHEL mit REPEL (Extra Packages for Enterprise Linux) werden die notwendigen Pakete mit diesen Befehlen installiert.
Host ~$ su - Host ~# yum install '*guestf*'
Die Installation wird mit einem vorhandenen Image getestet.
Host ~# guestfish --ro -a disk.img
[bearbeiten] Kompilieren
Zum Kompilieren wird folgende Software benötigt:
- QEMU/KVM muss ab Version 0.10 vorliegen und vmchannel unterstützen.
- Das Paket febootstrap ab Version 2.7.
- Das Paket fakeroot.
- Das Paket fakechroot ab Version 2.9.
- ?? XDR, rpcgen (on Linux these are provided by glibc)
- Das Programm mksquashfs aus dem Paket squashfs-tools.
- Entweder das Paket genisoimage oder das Paket mkisofs.
- ?? (Optional) hivex >= 1.2.1 to build Windows Registry support
- Optional wird FUSE für das Build von FUSE-Modulen benötigt.
- Optional wird Augeas (http://augeas.net) benötigt.
- Zum Generieren der Dokumentationen sind die Programme pod2man und pod2text des Paktes perldoc notwendig.
- Für eine schönere Kommandozeile in guestfish kann optional readline installiert werden.
- Optional wird xmllint zum Validieren des RELAX NG-Schemas vom virt-inspector benötigt.
- Optional werden die Pakete libocamlnet-ocaml-bin und library xml-light für die Ocaml-Binding installiert (http://tech.motion-twin.com/xmllight.html).
- Optional wird ein lokaler Fedora-Mirror konfiguriert.
- Optional ist Perl für die Perl-Bindings zu installieren.
- Optional ist Python für die Python-Bindings zu installieren.
- Optional ist Ruby für die Ruby-Bindings zu installieren.
- Optional ist Java für die Java-Bindings zu installieren.
- Optional ist GHC die Haskell-Bindings zu installieren.
- Optional werden die Perl-Module XML::XPath und Sys::Virt für den libvirt-Support im virt-inspector zu installiren. .
- Optional aber zu empfehlen ist die Installation von perl-libintl.
Die Installation von QEMU/KVM wird unter der URL http://qemu-buch.de/d/Installation beschrieben.
Host ~$ qemu --version QEMU PC emulator version 0.12.4, Copyright (c) 2003-2008 Fabrice Bellard
Pakete debootstrap und debirf.
Host ~$ sudo apt-get install debootstrap debirf Host ~$ debootstrap --help Host ~$ debirf help
Für fakeroot sind die Pakete fakeroot und fakeroot-ng zu installieren.
Host ~$ sudo apt-get install fakeroot fakeroot-ng Host ~$ fakeroot --version fakeroot version 1.12.1
Das Paket fakechroot muss mindestens in der Version 2.9 vorliegen.
Host ~$ sudo apt-get install fakechroot Host ~$ fakechroot --version fakechroot version 2.9
Liegt fakechroot nicht in der Version 2.9 vor, ist es zu kompilieren.
Host ~$ mkdir -p ~/source Host ~$ cd ~/source Host ~$ wget \ http://ftp.debian.org/debian/pool/main/f/fakechroot/fakechroot_2.9.orig.tar.gz Host ~$ tar xzvf fakechroot_2.9.orig.tar.gz Host ~$ cd fakechroot-2.9 Host ~$ ./configure && make Host ~$ sudo make install Host ~$ sudo ln -sf /usr/local/bin/fakechroot /usr/bin/fakechroot Host ~$ fakechroot --version fakechroot version 2.9
?? XDR, rpcgen (on Linux these are provided by glibc)
Host ~$ xdrmem_create ??
Host ~$ sudo apt-get install libc6 libc6-dev Host ~$ rpcgen
Paket squashfs-tools
Host ~$ sudo apt-get install squashfs-tools Host ~$ mksquashfs -version mksquashfs version 3.3 (2007/10/31)
Paket genisoimage
Host ~$ sudo apt-get install genisoimage Host ~$ genisoimage -version genisoimage 1.1.9 (Linux)
Optional: hivex - Windows Registry "hive" extraction library
FUSE
Host ~$ sudo apt-get install libfuse-dev libfuse2
Augeas
Host ~$ sudo apt-get install libaugeas-dev augeas-tools
Readline
Host ~$ sudo apt-get install libreadline5-dev readline-common
xmllint
Host ~$ sudo apt-get install libxml2-utils Host ~$ xmllint -version xmllint: using libxml version 20632
OCaml-Bindings
Host ~$ sudo apt-get install ocaml ocaml-interp libocamlnet-ocaml-bin Host ~$ sudo apt-get install libvirt-ocaml libvirt-ocaml-dev libxml-light-ocaml-dev
Man testet die Verfügbarkeit.
Host ~$ ocaml -version The Objective Caml toplevel, version 3.11.1 Host ~$ ocamlopt -config version: 3.11.1
Optiopnal: local Fedora mirror
Python-Bindings
Host ~$ python --version Python 2.6.4
Host ~$ sudo apt-get install python-libvirt
Ruby-Bindings
Host ~$ sudo apt-get install ruby-full rake rubygems irb
Man testet die Verfügbarkeit.
Host ~$ ruby --version ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux] Host ~$ irb irb(main):001:0> quit
Java-Bindings
Host ~$ sudo apt-get install sun-java6-bin sun-java6-jre sun-java6-jdk Host ~$ sudo update-java-alternatives --jre --set java-6-sun Host ~$ export JAVA_HOME="/usr/lib/jvm/java-6-sun"
Man testet die Verfügbarkeit.
Host~$ javac -version javac 1.6.0_20
Optional benötigt man GHC für die Haskell-Bindings.
Host ~$ sudo apt-get install ghc6 haskell-utils
Paket perldoc
Host ~$ sudo apt-get install perl-doc Host ~$ pod2man --help Host ~$ pod2text --help
Optional werden die Perl-Module XML::XPath, Test::More, ExtUtils::MakeMaker, Pod::Usage, Getopt::Long, Sys::Virt, Data::Dumper, Locale::TextDomain, XML::Writer, Win::Hivex und Win::Hivex::Regedit benötigt. Viele Perl-Module werden als Software-Pakete angeboten (lib*-perl).
Host ~$ sudo apt-get install libextutils-autoinstall-perl Host ~$ sudo apt-get install libmodule-build-perl libtest-pod-perl Host ~$ sudo apt-get install libxml-writer-perl libxml-xpath-perl
??
Host ~$ sudo apt-get install libwin-hivex-perl
Steht ein Perl-Modul nicht als Paket zur Verfügung, installiert man es mit CPAN. Dazu wird das Paket perl-modules benötigt.
Perl-Bindings
Host ~$ sudo apt-get install perl-modules
Als Benutzer root ruft man cpan auf.
Host ~$ sudo -i Host ~# cpan
Beim ersten Aufruf von cpan werden einige Fragen zur Konfiguration gestellt. Die Default-Antworten können übernommen werden. Bei der Frage nach dem Mirror-Server ist ein Server in der Nähe auszuwählen. Die Konfiguration wird bei Debian/Ubuntu in der Datei /etc/perl/CPAN/Config.pm gespeichert. Nach erfolgreicher Konfiguration wartet der CPAN-Prompt auf Befehle.
cpan> quit
Das Perl-Modul Sys::Virt liefert die Perl-Bindings für libvirt. Die Dokumentation steht unter der URL http://search.cpan.org/dist/Sys-Virt/lib/Sys/Virt.pm zur Verfügung. Gibt es kein entsprechendes Paket, installiert man dieses Modul per CPAN. Mit folgenden Befehl sucht man das Perl-Modul Sys::Virt.
Host ~# cpan cpan> i /Sys::Virt/
Die Installation eines Perl-Moduls erfolgt mit install.
cpan> install Sys::Virt cpan> install Win::Hivex cpan> install Win::Hivex::Regedit cpan> quit Host ~# exit
Mit folgendem Befehl testet man die erfolgreiche Installation der Perl-Module. Wenn jeweils keine Ausgabe erscheint, ist alles richtig.
Host ~$ perl -MXML::XPath -e exit Host ~$ perl -MXML::Writer -e exit Host ~$ perl -MTest::More -e exit Host ~$ perl -MExtUtils::MakeMaker -e exit Host ~$ perl -MLocale::TextDomain -e exit Host ~$ perl -MData::Dumper -e exit Host ~$ perl -MGetopt::Long -e exit Host ~$ perl -MPod::Usage -e exit Host ~$ perl -MSys::Virt -e exit Host ~$ perl -MWin::Hivex -e exit Host ~$ perl -MWin::Hivex::Regedit -e exit
(Optional, but highly recommended) perl-libintl for translating perl code.
Host ~$ sudo apt-get install libintl-perl
Quellen holen und kompilieren:
Host ~$ mkdir -p ~/source Host ~$ cd ~/source Host ~$ wget http://libguestfs.org/download/libguestfs-1.5.0.tar.gz Host ~$ tar xzvf libguestfs-1.5.0.tar.gz Host ~$ cd libguestfs-1.5.0 Host ~$ less REAME Host ~$ ./configure --help
Host ~$ ./configure --with-repo=sarge
... Daemon .............................. yes Appliance ........................... yes QEMU ................................ /usr/bin/qemu OCaml bindings ...................... yes Perl bindings ....................... yes Python bindings ..................... yes Ruby bindings ....................... yes Java bindings ....................... yes Haskell bindings .................... yes virt-inspector ...................... yes virt-* tools ........................ yes supermin appliance .................. yes FUSE filesystem ..................... yes
Host ~$ make Host ~$ make check Host ~$ sudo make install
Probleme
make ... + debirf make -n debian Loading profile 'debian'... debirf: clearing old debirf root... debirf: creating debirf root... I: Retrieving Release E: unknown location /dists/sarge/Release make[2]: *** [../initramfs/fakeroot.log] Error 1 make[2]: Leaving directory `/home/ich/source/libguestfs-1.5.0/appliance' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/home/ich/source/libguestfs-1.5.0' make: *** [all] Fehler 2