qemu, kvm, xen & libvirtHauptseite | Über | Hilfe | FAQ | Spezialseiten | Anmelden

Druckversion | Impressum | Datenschutz

libvirt Languages Bindings Python Perl CPAN Sys-Virt OCaml Ruby Java org.libvirt SharpLibVirt Toolbox

(Link zu dieser Seite als [[QEMU-KVM-Buch/ Managementtools/ libvirt-Tools/ Languages Bindings]])

<<<|###|>>> | English


Die Entwicklungsumgebung MonoDevelop.
Die Entwicklungsumgebung MonoDevelop.

Inhaltsverzeichnis

[bearbeiten] Languages Bindings

URL: http://libvirt.org/bindings.html
Downloads: http://libvirt.org/sources/

Die C-Bibliothek libvirt bietet neben der Schnittstelle für die Programmiersprache C auch Schnittstellen für die Sprachen C++, Python, Perl, OCaml, Ruby und Java. Voraussetzungen sind neben der jeweiligen Programmiersprache die entsprechende Binding-Bibliothek und ein gestarteter libvirtd.

[bearbeiten] C

C ist eine prozedurale Programmiersprache. C ist weit verbreitet und steht für fast alle Computersysteme zur Verfügung. C wurde mehrfach standardisiert (C89, C95, C99, ISO-C). Die meisten PC-/Server-Implementierungen halten sich eng an den Standard. Eine vollständige Implementierung aktueller Standards ist aber selten. C-Programme, die keine hardware-nahe Programmierung enthalten, können auf andere Zielsysteme portiert werden. C wurde in den frühen 1970er Jahren für das Betriebssystem Unix entwickelt. Viele andere Sprachen, wie C++, Objective-C, C#, Java, PHP und Perl orientieren sich an der Syntax und anderen Eigenschaften von C. Ein Wikibook über C steht unter der URL http://de.wikibooks.org/wiki/C-Programmierung zur Verfügung. Es sind folgende Pakete zu installieren.

Host ~$ sudo apt-get install gcc build-essential make

Man testet die Verfügbarkeit des C-Compilers.

Host ~$ gcc --version 
gcc (Ubuntu 4.4.1-4ubuntu9) 4.4.1 

Die Dokumentation zur libvirt-Binding findet man unter der URL http://libvirt.org/html/libvirt-libvirt.html. Das dazugehörige Paket ist libvirt-dev.

Host ~$ sudo apt-get install libvirt-dev

Das folgende Beispielprogramm zeigt die gestarteten virtuellen Maschinen an. Dazu ist die Datei show-domains.c mit folgenden Inhalt anzulegen.

#include <stdio.h>
#include <stdlib.h>
#include <libvirt/libvirt.h>

static void showDomain(virConnect *conn, int id)
{
  virDomain *domain;
  domain = virDomainLookupByID(conn, id);
  printf("%s: %d\n", virDomainGetName(domain), virDomainGetID(domain) );
}

static void showDomains(virConnect *conn)
{
  int number_of_domains, id, *ids;
  number_of_domains = virConnectNumOfDomains(conn);
  ids = malloc(number_of_domains * sizeof(int));
  if (!ids)
    return;
  virConnectListDomains(conn, ids, number_of_domains);
  for (id = 0; id < number_of_domains; id++)
    showDomain(conn, ids[id]);
  free(ids);
}

int main()
{
  virConnect *conn;
  conn = virConnectOpen("test:///default");
  if (!conn)
    return -1;
  showDomains(conn);
  virConnectClose(conn);
  return 0;
}

Der Quelltext ist zu kompilieren und das Programm zu starten.

Host ~$ gcc  -lvirt -o show-domains show-domains.c 
Host ~$ ./show-domains
test: 1

[bearbeiten] C#

Die objektorientierte Sprache C# (C-Sharp) wurde von Microsoft für die .NET-Strategie entwickelt. C# basiert auf Konzepten von Java, C++, SQL, C und Delphi und unterstützt sowohl die Entwicklung von sprachunabhängigen .NET-Komponenten als auch COM-Komponenten für den Gebrauch mit Win32-Applikationen. Ein Wikibook über C# steht unter der URL http://de.wikibooks.org/wiki/Programmierkurs_C-Sharp zur Verfügung. Es werden folgende Pakete benötigt.

Host ~$ sudo apt-get install mono-complete mono-gmcs
Host ~$ sudo apt-get install mono-devel monodevelop

Man testet die Verfügbarkeit des Compilers.

Host ~$ gmcs --version
Mono C# compiler version 2.4.2.3

Die Entwicklungsumgebung MonoDevelop wird wie folgt aufgerufen.

Host ~$ monodevelop &

Unter der URL http://svn.i-tux.cz/listing.php?repname=SharpLibVirt findet man die libvirt-Binding.

[bearbeiten] Python

Website: http://www.python.org

Python ist eine höhere Programmiersprache. Ihre Merkmale sind hohe Leistung und klare Syntax. Die standardmäßig enthaltene Bibliothek ist umfangreich. Ungewöhnlich ist die Verwendung von Einrückungen zur Begrenzung von Blöcken. Ein Wikibook steht unter der URL http://de.wikibooks.org/wiki/Python-Programmierung zur Verfügung. Python ist auf den meisten Linux-Distributionen bereits als Paket python installiert. Mit folgenden Befehl testet man die Verfügbarkeit.

Host ~$ python --version
Python 2.6.4

Die Dokumentation der libvirt-Binding befindet sich unter der URL http://libvirt.org/python.html. Benötigt wird das Paket python-libvirt.

Host ~$ sudo apt-get install python-libvirt

Das Beispiel show-domains.py zeigt laufende Domains an.

import libvirt
conn = libvirt.open('test:///default')
for id in conn.listDomainsID():
        domain = conn.lookupByID(id)
        print "%s: %s" % ( domain.name(), domain.info()[0] )

Das Skript wird wie folgt aufgerufen.

Host ~$ python show-domains.py
test: 1

[bearbeiten] Perl

Website: http://www.perl.org

Perl ist eine freie, plattformunabhängige und interpretierte Skript-Sprache. Ursprünglich wurde Perl zur Manipulation von Textdateien entwickelt. Die Stärken von Perl sind die Verarbeitung von Datenströmen verschiedenartiger Nachrichtenquellen und die Bearbeitung von Texten mit Hilfe regulärer Ausdrücke. Es gibt viele frei verfügbare Module, die an einem zentralen Ort (CPAN) zur Verfügung gestellt werden. CPAN (Comprehensive Perl Archive Network) ist ein Online-Repository (http://www.cpan.org) für Perl-Module. Ein Wikibook über Perl steht unter der URL http://de.wikibooks.org/wiki/Perl-Programmierung zur Verfügung. Perl ist auf den meisten unix-artigen Systemen (*BSD, Solaris, Mac OS X, Linux) bereits vorinstalliert. Mit folgenden Befehl testet man die Verfügbarkeit.

Host ~$ perl --version
This is perl, v5.10.0 built for x86_64-linux-gnu-thread-multi

Viele Perl-Module werden als Software-Pakete angeboten (lib*-perl). Steht ein Perl-Modul nicht als Paket zur Verfügung, installiert man es mit CPAN. Dazu wird das Paket perl-modules benötigt.

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> quit
Host~# exit

Mit folgendem Befehl testet man die erfolgreiche Installation des Perl-Moduls. Wenn keine Ausgabe erscheint, ist alles richtig.

Host ~$ perl -MSys::Virt -e exit

Für das Beispiel legt man die Datei show-domains.perl mit folgendem Inhalt an.

#!/usr/bin/perl -w
use Sys::Virt;
my $con = Sys::Virt->new( uri => "test:///default" );
my @domains = $con->list_domains;
for my $domain ( @domains ){
  printf "%s: %s\n",
    $domain->get_name, $domain->get_info->{state};
}

Die Datei wird ausführbar gemacht und aufgerufen.

Host ~$ chmod +x show-domains.perl
Host ~$ ./show-domains.perl
test: 1

[bearbeiten] OCaml

Website: http://caml.inria.fr

OCaml (Objective CAML) ist eine auf der ML-Sprachfamilie (Meta Language) basierende Programmiersprache. Neben den funktionalen und imperativen Merkmalen von ML unterstützt OCaml objektorientierte Konzepte. OCaml verfügt über einen Compiler für die Erzeugung von Bytecode und Maschinencode. OCaml ist für zahlreiche Plattformen, inklusive Unix und Windows verfügbar. Anleitungen für OCaml findet man der URL http://www.ocaml-tutorial.org/de. Es werden folgende Pakete benötigt:

Host~$ sudo apt-get install ocaml ocaml-interp

Man testet die Verfügbarkeit.

Host ~$ ocaml -version 
The Objective Caml toplevel, version 3.11.1 
Host ~$ ocamlopt -config
version: 3.11.1

Die libvirt-Binding findet man unter der URL http://libvirt.org/ocaml/. Es werden folgende Pakete benötigt:

Host~$ sudo apt-get install libvirt-ocaml libvirt-ocaml-dev

Für das Beispiel legt man die Datei list_domains.ml mit folgenden Inhalt an.

module C = Libvirt.Connect
module D = Libvirt.Domain
let name = "test:///default"
let conn = C.connect_readonly ~name ()
open Printf
let doms =
let n = C.num_of_domains conn in
let ids = C.list_domains conn n in
let domains = Array.map (D.lookup_by_id conn) ids in
Array.iter ( 
  fun dom -> printf "%s %8d \n%!" (D.get_name dom) (D.get_id dom)
) domains;

Der Quelltext ist zu kompilieren und das Programm zu starten.

Host ~$ ocamlopt -I +libvirt mllibvirt.cmxa list_domains.ml \
        -o list_domains
Host ~$ ./list_domains
test        1

[bearbeiten] Ruby

Website: http://ruby-lang.org

Ruby ist eine vielseitige, objektorientierte Sprache. Alle Datentypen, auch Zahlen oder Zeichenketten, sind Objekte. Ruby wurde als Multiparadigmen-Sprache entworfen. Das heißt, es steht dem Entwickler offen weitere Programmierparadigmen zur Erstellung seiner Programme zu nutzen. Ein Quickstart befindet sich unter der URL http://www.ruby-lang.org/de/documentation/quickstart/. Ein Wikibook über Ruby steht unter der URL http://de.wikibooks.org/wiki/Ruby-Programmierung zur Verfügung. Es sind folgende Pakete zu installieren.

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

Die libvirt-Binding findet man unter der URL http://libvirt.org/ruby/. Die dazugehörige Dokumentation ist unter http://www.libvirt.org/ruby/api/ veröffentlicht. Es ist das Paket libvirt-ruby zu installieren.

Host~$ sudo apt-get install libvirt-ruby

Für die ersten Schritte bietet sich die Shell interactive ruby an. Mit require gibt man die zu verwendende Bibliothek an. Anschließend wird das Objekt connect definiert. puts dient zur Ausgabe von Informationen auf den Bildschirm. In diesem Fall wird ein XML-Dokument ausgegeben, welches die Eigenschaften des aktuell verbundenen Hypervisors beschreibt (siehe virsh capabilities).

Host ~$ irb
irb(main):001:0> require 'libvirt' 
=> true
irb(main):002:0> connect = Libvirt::open("test:///default") 
=> #<Libvirt::Connect:0xb77c4554>
irb(main):003:0> puts connect.capabilities
...
irb(main):004:0> quit

Für ein Beispiel-Skript legt man die Datei show-domains.rb mit folgendem Inhalt an.

#!/usr/bin/env ruby
require 'libvirt'
connect = Libvirt::open("test:///default")
@domains = connect.list_domains()  
@domains.each do |id|
  domain =  connect.lookup_domain_by_id(id)
  puts "#{domain.name}: #{domain.id}"
end

Die Datei wird ausführbar gemacht und aufgerufen.

Host ~$ chmod +x show-domains.rb 
Host ~$ ./show-domains.rb
test: 1

[bearbeiten] Java

Website: http://java.sun.com

Java ist eine objektorientierte, plattformunabhängige Programmiersprache. Java-Programme werden in Bytecode übersetzt und dann in der Java-Laufzeitumgebung ausgeführt. Deren wichtigster Bestandteil ist die Java Virtual Machine. Java ist ein eingetragenes Warenzeichen der Firma Sun Microsystems (jetzt Oracle Corporation). Sun bietet Java-VMs für Linux, Solaris und Windows an. Weitere Hersteller lassen ihre Java-VM für ihre Plattform zertifizieren, zum Beispiel die Firma Apple für Mac OS X. Ein Wikibook über Java steht unter der URL http://de.wikibooks.org/wiki/Java_Standard zur Verfügung. Neben dem Paket sun-java6-jdk sind die Pakete ant, libjna-java und junit notwendig.

Host~$ sudo apt-get install sun-java6-jdk libjna-java junit ant
Host~$ sudo update-alternatives --config java

Man testet die Verfügbarkeit.

Host~$ javac -version
javac 1.6.0_16 
Host~$ ant -version 
Apache Ant version 1.7.1 compiled on October 19 2009 

Die Dokumentation der libvirt-Binding findet man unter der URL http://libvirt.org/sources/java/javadoc/. Die Dateien der libvirt-Binding lädt man sich von der URL http://libvirt.org/sources/java/ herunter und startet den Build-Prozess mit ant. Anschließend ist das gebaute jar-Archiv in das Verzeichnis mit den Java-Bibliotheken zu kopieren. Der CLASSPATH muss auf das aktuelle Verzeichnis und auf das Verzeichnis mit den Dateien libvirt.jar und jna.jar zeigen. Die Variable LD_LIBRARY_PATH verweist auf den Pfad der Datei libjnidispatch.so.

Host ~$ mkdir -p ~/source
Host ~$ cd ~/source
Host ~$ wget \
http://libvirt.org/sources/java/libvirt-java-0.4.2.tar.gz
Host ~$ tar xzvf libvirt-java-0.4.2.tar.gz
Host ~$ cd libvirt-java-0.4.2
Host ~$ ant build
Host ~$ sudo cp target/libvirt-0.4.2.jar /usr/share/java/
Host ~$ sudo ln -s /usr/share/java/libvirt-0.4.2.jar \
        /usr/share/java/libvirt.jar
Host ~$ export CLASSPATH=.:/usr/share/java/*
Host ~$ export LD_LIBRARY_PATH=/usr/lib/jni/

Für das Beispiel ist die Datei ShowDomains.java mit folgendem Inhalt anzulegen.

import org.libvirt.*;
public class ShowDomains {
    public static void main(String[] args) {
        Connect conn=null;
        try{
            conn = new Connect("test:///default", true);
        } catch (LibvirtException e){
            System.out.println("exception caught:"+e);
            System.out.println(e.getError());
        }
        try{
            int[] Domains=conn.listDomains();
            for (int i = 0; i < Domains.length; i++)
            {
                Domain dom=conn.domainLookupByID(Domains[i]);
                System.out.println(dom.getName() + ": " + dom.getID());
            }
        } catch (LibvirtException e){
            System.out.println("exception caught:"+e);
            System.out.println(e.getError());
        }
    }
}

Diese Datei wird kompiliert und aufgerufen.

Host ~$ javac ShowDomains.java && java ShowDomains
test: 1

<<<|###|>>>

Von „http://qemu-buch.de/de/index.php?title=QEMU-KVM-Buch/_Managementtools/_libvirt-Tools/_Languages_Bindings

Diese Seite wurde bisher 40.184 mal abgerufen. Diese Seite wurde zuletzt am 27. September 2010 um 06:21 Uhr geändert. Inhalt ist verfügbar unter der GNU Free Documentation License 1.2.


Finden

Blättern

News

Deutsch
Weitersagen
Tipps für Autoren
Autoren
Impressum


English
Recommendation
The Authors
Contact



Letzte Änderungen


Ändern
Seite bearbeiten
Bearbeitungshilfe
Seitenoptionen
Diskussion
Kommentar hinzufügen
Druckversion
Seitendaten
Versionen
Links auf diese Seite
Änderungen an verlinkten Seiten
Meine Seiten
Anmelden
Spezialseiten
Neue Seiten
Dateiliste
Statistik
Kontakt
Mehr …