Archive for the ‘Ubuntu’ Category

h1

RSPerl in Ubuntu installieren

16. März 2010

Zusammenfassung

RSPerl erlaubt die Interaktion zwischen Perl und R. Mich hätte vor allem interessiert, R-Funktionen von Perl aus zu verwenden. Das geht irgendwie, dann aber doch auch nicht so super – kurz: Ich verwende es zur zur Zeit nicht, sondern erzeuge mit print FH eine Datei (ein R-Skript), dass ich dann direkt in R ausführe. Trotzdem im folgenden die Vorgangsweise …

Die Schritte

Die in Ubuntu Desktop 9.10 vorhandene R-Installation ist als shared-library kompiliert. Das ist schon einmal gut. Dann braucht man aber noch eine lib installieren:

$ sudo apt-get install libperl-dev

Ab dann lässt sich RSPerl wie dolumentiert installieren:

$ R CMD INSTALL  --configure-args='--with-in-perl' Desktop/RSPerl

(Voraussgesetzt man hat das tar zuvor auf dem Desktop ausgepackt).

http://www.omegahat.org/RSPerl/RFromPerl.html

Das heisst aber noch nicht, dass man R von Perl aus damit erreicht …

Nacharbeiten

$ ./hello_R.pl

Can’t load ‚/home/ubuntu/R/i486-pc-linux-gnu-library/2.9/RSPerl/perl/i486-linux-gnu-thread-multi/auto/R/R.so‘ for module R: libPerlConverter.so: cannot open shared object file: No such file or directory at /usr/lib/perl/5.10/DynaLoader.pm line 196.

at ./hello_R.pl line 7

Compilation failed in require at ./hello_R.pl line 7.

BEGIN failed–compilation aborted at ./hello_R.pl line 7.

Das lässt sich dann mit Umgebungsvariablen unterbinden:

$ export PERL_MODULES="`perl -s modules.pl -modules | sed s/modperl//`"

http://tolstoy.newcastle.edu.au/R/help/03b/7997.html

Letztendlich sollten diese mit export gesetzt sein:

PERL5LIB="/home/ubuntu/R/i486-pc-linux-gnu-library/2.9/RSPerl/perl"
PERL_MODULES="Gtk2 Locale::gettext Gnome2 Cairo LibAppArmor HTML::Parser Sub::Name Glib Compress::Bzip2 Pango UUID Net::DBus Term::ReadKey XML::Parser::Expat Text::CharWidth Text::Iconv IO PerlIO::scalar PerlIO::encoding PerlIO::via SDBM_File Data::Dumper Opcode Fcntl DB_File I18N::Langinfo POSIX IPC::SysV Sys::Syslog Sys::Hostname re Cwd GDBM_File threads ODBM_File attrs Compress::Raw::Zlib Time::HiRes Time::Piece Filter::Util::Call Hash::Util Math::BigInt::FastCalc MIME::Base64 NDBM_File Encode Digest::SHA Digest::MD5 Devel::PPPort Devel::DProf Devel::Peek List::Util File::Glob Storable Socket Unicode::Normalize Text::Soundex "
LD_LIBRARY_PATH="/home/ubuntu/R/i486-pc-linux-gnu-library/2.9/RSPerl/libs:/usr/lib/R/lib"

Doch auch mit diesen Tipps mag R sich nicht von Perl aus aufrufen lassen. Ich denke man muss da andere Wege beschreiten. Zum Beispiel R-Scripts über das system-Komando aufrufen …

$ R -f hello.r --slave; open Rplots.pdf

Unschön, aber es geht.

Wie es dann doch noch lief …

Ok, wenn man den Code der Module patched (da sind grauslige pod-Fehler drin) und auf die Verwendung des eigentlich empfohlenen use RReferences verzichtet, kann man R von Perl aus aufrufen. Sehr vertrauenserweckend ist das aber nicht – schade.

Hier noch das hello_R.pl:

#!/usr/bin/perl -w
use strict;
use warnings;
use lib '/home/ubuntu/R/i486-pc-linux-gnu-library/2.9/RSPerl/perl/i486-linux-gnu-thread-multi';
use R;
#use RReferences;
&R::initR('--silent');
my $x = R::sum((1,2,3));
print $x . "\n";
h1

Net::SSH::Perl installieren

21. April 2008

Im Gegensatz zu Net::SSH bietet das Modul Net::SSH::Perl eine voll in Perl integrierten SSH-Client, der in den Perl-Scripts verwenet werden kann. D.h. dieser ist von der installierten SSH-Version unabhängig, forked nicht bei jedem Aufruf was für Performance und Sicherheit sorgt.

Das große Problem an diesem Modul ist die Installation. Es gibt zahlreiche Abhängigkeiten und die Installation via CPAN scheiterte sowohl auf Mac OS X (10.5.2) als auch im Ubuntu Server 6.01 (LTS). Als Troublemaker hab ich die Module Math::Pari, Math::BigInt::GMP und Crypt::DSA geortet. Diese habe ich nun manuell installiert. Dazu die folgenden Schritte zunächst für Ubuntu und dann für OS X:

Installation von Net::SSH::Perl auf Ubuntu 6.01.1 Server

Falls man das nicht schon hinter sich hat müssen perl und cpan installiert werden:

# apt-get install perl

Dann geht’s los …

Math::Pari

$sudo -s
# apt-get update
# apt-get upgrade
# apt-get install gcc
#apt-get install g++

Dann hole man sich das Tar von der Pari-Homepage und packe es im CPAN-Build-Verzeichnis aus:

# cd ~/.cpan/build
# wget http://pari.math.u-bordeaux.fr/pub/pari/unix/pari-2.3.3.tar.gz
# tar -xzf pari-2.3.3.tar.gz

Nun kann man den Anweisungen aus dem INSTALL folgen:

b) ./Configure

c) make all, make bench

d) make install

e) cp misc/gprc.dft /etc/gprc

Tipp: Wenn man diese Fehlermeldung bekommt „C compiler does not work. PARI/GP requires an ANSI C compiler“ dann hat man vergessen den c++-Kompiler zu installieren. Siehe oben!

Math::BigInt::GMP

Damit dieses Modul installiert werden kann, muss man erst einmal eine GMP-Library im OS installieren:

# apt-get install libgmp3-dev

cpan> install Math::BigInt::GMP

Crypt::DSA

Crypt::DSA muss manuell (ohne CPAN) installiert werden, da make test sich aufhängt.

# wget http://search.cpan.org/CPAN/authors/id/B/BT/BTROTT/Crypt-DSA-0.14.tar.gz
# tar xzf Crypt-DSA-0.14.tar.gz
# cd Crypt-DSA-0.14
# perl Makefile.PL
# make
# make install

Nun kann man den Rest mit CPAN installieren:

cpan> install Net::SSH::Perl

Bei der Auswahl der Algorithmen würde ich noch DES3 hinzunehmen – NetApp z.B. unterstützt das out-of-the-box:

    [1] IDEA
[2] DES
[3] DES3
[4] Blowfish
[5] RC
Enter your choices, separated by spaces: [1] 1 3

Möchte man Tripple-DES ergänzen, nachdem man das Modul Net::SSH::Perl schon einmal nur mit IDEA installiert hat, so ruft man einfach in der cpan-Shell make Net::SSH::Perl auf.

Installation von Net::SSH::Perl auf Mac OS X

Zunächst ein Hinweis: Die Developer-Tools waren bei mir installiert (siehe http://developer.apple.com/tools/xcode/index.html ) – das muss so sein, schon alleine damit die später benötigte port-Software funktioniert.

Ansonsten versuchte ich sinngemäß zu verfahren wie beim Ubuntu-Server. Die Installation von Crypt::DSA mittels CPAN war kein Problem (OS X 10.5.2). Somit bleiben Math::Pari und GMP als „Sonderfälle“. Und da war nichts zu machen. Weder mittel CPAN noch durch den Weg „zu Fuß“ mittels Download, Auspacken und dann ./Configure und make. Somit änderte ich die Strategie komplett und installierte das ganze mittels darwin-ports. Falls noch nicht geschehen, ist die Darwinport-Software zunächst zu installieren. (Siehe http://darwinports.com/ bzw. http://guide.macports.org/)

Installation von Pari

ich habe zunächst einmal Pari installiert. Das Paket liegt hier (http://pari.darwinports.com/), muss aber nicht heruntergeladen werden. Das macht das Komando:

$ sudo port install pari

Installation von Convert::PEM und Net::SSH::Perl

http://p5-convert-pem.darwinports.com/

Da hat sich ein Problem ergeben: Nach einiger Zeit bleibt der Installationsprozess hängen, die CPUs laufen auf jeweils 100% und nichts geht mehr weiter. Auch viel Geduld ändert da nichts. Wenn man die Installation im Debugmodus startet, sieht man die Ursache des Problems:

$sudo port -d install p5-convert-pem

Wenn CPAN für diesen User noch nicht konfiguriert ist, frägt Darwinport nach dem Kontinent für Downloads. Und aus dieser Schleife findet er icht mehr heraus. Die Lösung ist also, cpan zuvor zu konfigurieren und sicher zustellen, dass diese Konfiguration dauerhaft gespeichert wurde. (Ich hab dazu sudo -s und dann als root cpan gestartet, Bundle::CPAN installiert, CPAN nochmal gestartet und die diversen Dialoge beantwortet wobei ich die Frage nach der Speicherung der Konfiguration entgeggen dem Default mit yes statt mit no beantwortet hatte.)

Nach diesem Heckmeck durfte ich dann endlich Convert::PEM und Net::SSH::Perl installieren; und zwar so:

$ sudo port install p5-net-ssh-perl

Nacharbeiten

Die Module werden so out of the Box nicht gefunden. Man kann deren Verzeichnisse (/opt/local/lib/perl5/5.8.8) aber mit lib im Perlscript hinzufügen.

Veränderungen an den Modulen

Wenn man diese mit port installierten Module allerdings editiert und die Veränderten in ein eigenes Verzeichnis kopieren, funktioniert das ganze nur noch teilweise. Net::SSH::Perl kommt damit zurecht. Math::Pari sträubt sich aber. Das führt dazu, dass in diesem Fall nur SSH1 Verbindungen mit Net::SSH::Perl möglich sind.

h1

NetApp-Simulator für Mac OS X

9. April 2008

Den NetApp-Simulator in Mac OS X verwenden

Im Zuge der Entwicklung von Nagios Plugins für NetApp Speichersysteme, benötigte ich den NetApp Simulator um diese Plugins entwicklen und testen zu können. Da ich hier zur Zeit keinen Linux-Rechner betreibe entschied ich mich auf meinem iMac einen virtuellen Linuxserver zu installieren und dann dort den Simulator laufen zu lassen.

Beim Download des Simulators war eine Anleitung von Paul Hargreaves beigepackt die eine Installation des Simulator auf Windows (als Gastbetriebssystem) und dann einem Ubuntu 6.01 Desktop in einer VM beschreibt. Diese Anleitung ist an sich nicht schlecht, passte aber nicht ganz auf meine Anforderungen:

1. Habe ich OS X und nicht Windows, daher verwende ich VMware Fusion

2. Möchte ich nicht einen Desktop (mit GUI, …) installieren, wenn ich eigentlich nur einen Server brauche. Obendrein hätte ich die die Server-VM fix und fertig vorbereitet gehabt.

Also entschied ich mich für folgendes: Max OS X 10.5, VMware Fusion 1.1.1 und Ubuntu Server 6.01 LTS, NetApp Release 7.2.4 (Simulator).

Überblick:

  1. Einrichten des Gastsystemes
  2. VMware einrichten
  3. Installation Linux Server in der VM
  4. Installation des Simulators

Gastsystem einrichten

Am Mac OS X ist nichts speziell zu tun ausser VMware Fusion zu installieren. Die aktuelle Version (s.o.) läuft gut auf Leopard – aber Vorsicht: Time Machine sichert erst ab der VMware-Fusion-Version 1.1.2 und wenn OS X 10.5.2  oder höher installiert wurde die VMs! Workaround: Gelegentlich ein ZIP von der VM machen – das wird dann gesichert. (Zippen natürlich nur, wenn die VM abgeschalten ist)

VMware einrichten

In meiner Umgebung gibt es einen DHCP-Server auf der Firewall, der für das interne LAN ca. 10 freie Adressen hat. Der springende Punkt war nun – im Gegensatz zur Dokumentation von Paul Hargreaves – die virtuellen Netzwerkkarten als bridged einzurichten. Nur so ist es möglich, dass von Seiten des Hostbetriebssystemes (also OS X) auf die IP und somit den Webserver des Simulator zugegriffen wird. Das ist z.B. nötig, um über die Weboberfläche des Simulators diesen zu konfigurieren.

Also richte ich zwei virtuelle Netzwerkkarten auf der VM ein (dazu muss das Gastbetriebssystem heruntergefahren werden) und beide werden über /etc/network/interfaces als DHCP-Clients konfiguriert. (Diese zweite Netzwerkkarte kann man sich auch sparen, dann bekommt man bei der Installation des Simulator eine Warnmeldung, dass der Simulator von diesem Server aus nicht zu nützen sei. Das mag sein, mir war das aber nicht wichtig, denn administrierbar war der Netapp-Simulator jedenfalls.)

Linux Server in der VM installieren

Ich hab eine schon früher vorbereitete Installation von Ubuntu Server verwendet. Auf Updates (apt-get upgrade) und VMware Tools habe ich verzichtet. Aber sehr wichtig: Es wird Perl benötigt, sonst kann man später keine Disken dem Simulator hinzufügen.

apt-get install perl

Dann kopiert man das Simulator-Tar auf die Linuxmaschine – mit z.B. scp. Wenn man dabei nicht noch den sshd am Linuxrechner installieren will (was mit apt-get install open-ssh-server möglich wäre) muss man am Mac den sshd aktivieren. Das läuft über die Systemeinstellungen -> Sharing -> „Entfernte Anmeldungen“ aktivieren.

Installation des Simulators

Siehe dem Simulator beigepackte Doku – hier nur ein paar Tipps:

./setup.sh

Im Folgenden sind die Default-Antworten ok. Lediglich die an sich unnötige Frage, ob man die Installation fortsetzen will muss natürlich mit yes statt no beantwortet werden.

Bei der Frage “ Which network interface schould the simulator use?“ habe ich dediziert eth2 angegeben.

Dann kann man wieder den defaults folgen.

Als Nächster Schritt ist der Simulator mit /sim/runsim.sh zu starten und einige Fragen zur Erstinstallation zu beantworten. Dabei schaltet der Simulator die NIC in den Promiscuity-Mode, was auch das Umschalten des Hostsystemadapters zur Folge hat, weswegen man von OS X um ein Adminpasswort gefragt wird. Das ist lt. NetApp Doku so gewollt und scheint mir auch einigermassen plausibel.

Etwas später kommt die Frage: „Please enter the IP adress for Network Interface ns0“. Hier wird dann eine vom DHCP-Server vorgschlagene Adresse als Default angegeben. Das ist ok, nur diese bitte aufschrieben, da wir sie gleich brauchen werden. Der Rest sollte klar sein, sobald man zur CIFS-Installation kommt kann man mit Ctrl+C abbrechen.

Zugriff auf die Weboberfläche vom Simulatir erfolgt dann über einen Webbrowser. Safari ist nicht mit dem Simulator kompatibel – ich habe Firefox verwendet:

http://<ip die der Sim über DHCP bekommen hat>

Dann Klick auf na_admin und root als User und das zuvor gesetzte Passwort eingeben. That’s it.