My Universe Logo

My Universe Blog » Entries Tagged as Solaris

Portable Shell-Skripte mit absoluten Pfaden

Posted by Jesco Freund at Oct. 3, 2009 2:23 p.m.

Gute Shell-Skripte sprechen Binaries mit dem absoluten Pfad an. Dadurch wird das Skript unabhängig von der Umgebungsvariablen $PATH und funktioniert auch manierlich, wenn es beispielsweise üder die Crontab oder unter einem andere User aufgerufen wird. Soweit die Theorie, doch in der Praxis gibt es einen gemeinen Fallstrick, der den Wanderer zwischen den Unix-Welten das Leben bzw. Skripten schwer macht. Betrachten wir einmal das folgende Beispiel:

#!/bin/sh

b_uname="/bin/uname"
b_awk="/bin/awk"

name=`$b_uname -n | $b_awk -F. '{print $1}'`

echo "Das System heisst ${name}."
exit 0

Dieses kleine Skript ist ein (zugegebenermaßen etwas umständlicher) Ersatz für den Befehl hostname -s – das tut aber eigentlich nichts zur Sache. Viel spannender ist die Frage, wie portabel dieses Skript arbeitet. Unter CentOS 5.3 kann ich es fehlerfrei ausführen. Anders sieht es aus, wenn dieses Skript auf einer Maschine mit FreeBSD oder Solaris aufgerufen wird: Unter FreeBSD erhält man Fehlermeldungen („Command not found“), da uname und awk nicht wie bei CentOS und Solaris in /bin liegen, sondern in /usr/bin (bei Solaris kommt es ebenfalls zu Problemen, die aber darin begründet sind, dass die Solaris-Implementierungen von uname und awk von den GNU-Implementierungen abweichen – doch dazu später).

Unter den verschiedenen Unix-Derivaten und sogar Linux-Distributionen liegen Binaries also nicht immer am selben Ort. Müssen portable Skripte also darauf verzichten, absolute Pfade zu verwenden und sich auf $PATH verlassen? Natürlich nicht. Allerdings funktioniert der Schnellschuss „dann definiere ich Binaries eben systemabhängig“ auch nicht so ohne weiteres – man sieht ja, dass das häufig dazu herangezogene uname schon nicht sehr portabel gelagert ist. Es gibt jedoch einen eleganteren Weg, der sich nur auf Shell-interne Funktionen stützt und daher tatsächlich komplett portabel ist:

#!/bin/sh

detect_binary() {
    local BINDIRS="/bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin /opt/csw/bin /opt/sfw/bin /usr/openwin/bin"

    for i in $BINDIRS; do
        if [ -x "${i}/${1}" ]; then
            echo "${i}/${1}"
            break
        fi
    done
}

b_uname=$(detect_binary "uname")
b_awk=$(detect_binary "awk")

Die Funktion detect_binary probiert alle angegebenen Pfade durch, bis sie in einem auf eine ausführbare Datei mit dem gesuchten Namen stößt. Anschließend gibt sie den absoluten Pfad des gefundenen Binaries zurück. Auf diese Weise wird zum einen sichergestellt, dass nur Binaries aus den vorgegebenen Pfaden verwendet werden, und zum anderen, dass die Binaries weiterhin unabhängig von der Umgebungsvariable $PATH gefunden werden können.

Eines löst dieser Code-Schnipsel jedoch nicht: Das unterschiedliche Verhalten von gleichnamigen Binaries unter verschiedenen Unix-Derivaten. Auf vielen Nicht-Linux Systemen stehen Binaries der GNU-Implementierung zur Verfügung, oder zumindest Binaries, die das Verhalten der GNU-Implementierungen nachahmen. Unter FreeBSD beispielsweise findet man in gsed und gawk die GNU-Implementierungen, während sich hinter sed und awk die traditionellen BSD-Implementierungen verbergen. Die <programm>-Binaries findet man im übrigen auch unter Linux. Benötig man also in einem Skript explizit das GNU-Verhalten (beispielsweise beim Einsatz von sed -i, so sollte man auch die GNU-Binary-Namen verwenden.

Happy Scripting!

4 comments | Defined tags for this entry: code, FreeBSD, Linux, programming, scripting, shell, Solaris

NetBeans IDE for Python

Posted by Jesco Freund at April 5, 2009 12:45 p.m.

/assets/user/jfreund/img/png/thumb/128x128/nb_editing.png

Python ist für mich eine der besten, wenn nicht sogar die beste und produktivste Programmiersprache überhaupt. Allerdings fehlt mir bisher für Python eine IDE, welche die Entwicklung mit Python genauso gut und mächtig unterstützt, wie etwa Eclipse oder Sun Studio dies für Java oder C++ tun. Für Windows gibt es mit der Wing IDE eine brauchbare (kommerzielle) Lösung; im FOSS-Bereich blieb bislang nur Pydev. Pydev ist zwar besser als ein einfacher Editor, aber alles andere als das gelbe vom Ei: Funktionen, die Pydev wirklich mächtig machen (etwa Code Completeion), sind nur in der kommerziellen Erweiterung Pydev Extensions enthalten, und auch sonst macht das Projekt in letzter Zeit eher den Eindruck, ein Lockangebot für kommerzielle Produkte von Aptana zu sein.

Seit einiger Zeit brodelt es allerdings in der NetBeans-Projektküche: Dort verfolgt man das ehrgeizige Ziel, nicht weniger als „the best integrated tool for programming in Python“ zu schaffen. Seit Anfang des Jahres steht eine Early Access Version der NetBeans IDE for Python (basierend auf NetBeans 6.5) zum Download bereit, und mit eben jener habe ich nun ein wenig herumgespielt. Sowohl unter Solaris 10 (Sparc) als auch FreeBSD 7.1 (i386) lässt sich die EA-Version problemlos „installieren“: während für Solaris tatsächlich ein Installer existiert, müssen sich FreeBSD-Nutzer mit dem „OS Independent ZIP“ begnügen, was aber auch kein Drama ist – einfach an eine beliebige Stelle im Dateisystem entpacken und bin/netbeans ausführen. Hierfür wird eine funktionierende Java-Umgebung vorausgesetzt – unter Solaris natürlich kein Thema, und unter FreeBSD funktioniert NetBeans einwandfrei mit dem Diablo JDK 1.6 aus den Ports.

Auch wenn der Swing-Look von NetBeans insgesamt etwas weniger gefällig ist als die SWT-Erscheinung von Eclipse, so braucht sich die EA-Version keinesfalls hinter dem etablierten Konkurrenten verstecken. Die Projektverwaltung ist mit Eclipse auf Augenhöhe, und auch der Klassen- und Funktionsbrowser ist recht ähnlich aufgebaut. Ebenfalls typisch für eine „große“ IDE ist die Aufgabenverwaltung und eine Werkzeugsammlung für Refactoring. Besonders punkten kann NetBeans gegenüber Pydev durch den integrierten Debugger inklusive Performance-Messwerkzeugen, eine Python-Konsole und Code Completion in der Editor-Komponente. Als besonderes Bonbon unterstützt NetBeans neben den klassischen VC-Systemen CVS und Subversion auch Mercurial – bei einer Python-IDE eigentlich naheliegend…

Natürlich hat NetBeans auch einige Schwächen, die an dieser Stelle nicht verschwiegen werden sollen: So nervt etwa die hohe Affinität zu Jython – an manchen Stellen muss man NetBeans schon mit sanfter Gewalt dazu überreden, auf den nativen Python-Interpreter zurückzugreifen. A propos Interpreter: NetBeans ließ sich mit keinem Trick dazu überreden, Python 3.0 in die Liste der verfügbaren Python-Plattformen aufzunehmen. Gerade für die Entwicklung neuer Projekte ist das schade, da es sich bei diesen besonders anbietet, von vornherein auf die neue Python-Generation zu setzen.

Alles in allem halte ich aber diesen ersten Wurf für bereits sehr gelungen und dem Platzhirsch Pydev mindestens ebenbürtig, in einigen Punkten sogar für deutlich überlegen. Man darf also auf die weitere Entwicklung gespannt sein…

No comments | Defined tags for this entry: Eclipse, FreeBSD, IDE, NetBeans, open source, programming, python, scm, Solaris

Solaris: Wie man eine kaputte Blastwave/CSW-Installation repariert

Posted by Jesco Freund at Feb. 10, 2009 10:20 p.m.

OK, in diese Verlegenheit kommt man vielleicht nur, wenn man dumm genug war zu glauben, man könne alle Blastwave-Bestandteile restlos tilgen, indem man die Verzeichnisse /opt/csw, /var/opt/csw und /etc/opt/csw löscht. Dem ist allerdings mitnichten so – nach einer Neuinstallation glaubt pkgutil immer noch an das Vorhandensein der alten Packages. Natürlich stirbt jedes neu installierte Binary dann an akutem Bibliotheksmangel, weil gettext, iconv und Konsorten einfach nicht mehr aufzutreiben sind.

Da mein eigentlicher Plan darin bestand, das seit einem Jahr von mir nicht mehr gepflegte CSW-Geraffel komplett zu entsorgen und dann noch mal frisch zu installieren, musste ich einen anderen Weg finden. In den chaotischen Wirren des Solaris-Dateisystembaums nach der CSW-Datenbank zu fahnden, habe ich recht fix aufgegeben. Einfacher ist es, pkgutil gemäß Anleitung zu installieren und es mit folgendem Aufruf auf alle installiert geglaubten Packages loszulassen (zsh, bash o. ä. verwenden, funktioniert so nicht mit (jeder) sh oder csh!):

/opt/csw/bin/pkgutil -y -r $(pkgutil -c | awk '{print $1}' | grep -v 'package')

Da pkgutil sich so gleich selbst mit deinstalliert (genauso wie übrigens CSWcommon, also die CSW Basisverzeichnisse), ist anschließend noch mal eine Neuinstallation nötig – danach lassen sich wieder problemlos Pakete installieren; Abhängigkeiten werden korrekt aufgelöst und mit installiert.

No comments | Defined tags for this entry: packet management, software, Solaris, Sun

Sonnenaufgang

Posted by Jesco Freund at March 1, 2008 9:42 p.m.

Ein paar Merker für die nächste Solaris-Installation (SPARC):

  • /tmp darf nicht noexec gemounted sein, sonst funktionieren diverse Installer (Sun Studio, NetBeans etc.) nicht (die Fehlermeldung „Gebrochene Pipe“ war nicht gerade hilfreich…)
  • Patch-ID #121308-12 ist broken und lässt die SMC verrecken
  • 10 GB für / sind zu wenig, wenn /opt keine separate Partition bekommt

Ansonsten hat 8/07 vor allem in einem Punkt Verbesserungen gebracht: Auch für nicht-Sun-Tastaturen funktioniert jetzt das Festlegen eines Tastatur-Layouts, ohne die System-Default-Einstellung zu überschreiben. Vielleicht geht Sun ja für Version 11 endlich mal das wirre Datei-Scattering an und räumt ein bisschen auf…

No comments | Defined tags for this entry: Solaris, Sun

Und da ist es…

Posted by Jesco Freund at Feb. 28, 2008 9:54 p.m.

Gestern wurde FreeBSD 7.0 offiziell released (im CVS wurde RELENG_7_0 schon vor ein paar Tagen getagged). Ob und wann das neue Release seinen Weg auf meinen PC findet, ist allerdings noch fraglich &ndash; dank meiner mittlerweile voll einsatzfähigen Blade steht mir ja ein Unix-System zur Verfügung, so dass der PC jetzt eigentlich wieder als Windows-Knecht arbeiten kann. Den schnellen Wechsel besorgt ein KVM-Switch, wodurch endlich das lästige booten entfällt. Einziger Wermutstropfen ist der Geräuschpegel – die Sun ist nicht gerade mustergültig leise…

No comments | Defined tags for this entry: FreeBSD, Solaris, Sun

Familienzuwachs: Sun Blade 2000

Posted by Jesco Freund at Sept. 18, 2007 11:03 p.m.

/assets/user/jfreund/img/jpg/thumb/640x480/blade_01b.jpg

Meine neue gebrauchte Sun Blade 2000 – so sieht eine richtige Workstation aus!

continue reading Familienzuwachs: Sun Blade 2000

2 comments | Defined tags for this entry: hardware, Solaris, Sun

Page 1 of 1