CA Blogs - German

Jeder kennt bestimmt VirtualBox. Damit kann man virtuelle Gastsysteme booten, z.B. ein Windows XP. VirtualBox ist bei OpenSolaris im extra-Repository. Dabei handelt es sich um die nicht OpenSource-Version. Sie hat den Vorteil, dass man im virtuellen Gast auch USB-Geräte nutzen kann. Das benötigt man, wenn man einen Scanner hat, welcher nur mit Windows zusammen arbeitet.

Dieser USB-Support wollte bei mir gar nicht funktionen, weil VirtualBox nicht auf das USB-Subsystem zugreifen konnte. Das hat sich u.a. in den folgenen Fehlermeldungen geäußert:

  • VERR_ACCESS_DENIED
  • NS_ERROR_INVALID_ARG (0x80070057)
  • NS_ERROR_FAILURE

Man kann das ganze Quick&Dirty fixen und somit VirtualBox den Zugriff auf das USB-Subsystem zu erlauben.

  1. die letzten beiden Zeilen in der Datei /etc/logindevperm wie folgt ändern (wenn es nicht letzten sind, dann findet man sie schnell)
    /dev/vt/active    0666    /dev/usb/hid[0-9]+    # hid devices should have the same permission with conskbd and consms
    /dev/vt/active    0666    /dev/usb/[0-9a-f]+[.][0-9a-f]+/[0-9]+/* driver=scsa2usb,usb_mid,usbprn,ugen    #libusb/ugen devices
  2. Die Kernelmodule von VirtualBox enladen
    rennecke@walhalla ~ $ pfexec /opt/VirtualBox/vboxdrv.sh stopall
    VirtualBox USB kernel module not loaded.
    VirtualBox NetAdapter kernel module not loaded.
    VirtualBox NetFilter kernel module not loaded.
    VirtualBox Host kernel module unloaded.


    Das klappt mitunter nicht beim ersten mal. Den Befehl wiederholt man so lange, bis man die obige Ausgabe hat.
  3. Kernelmodule für VirtualBox laden
    rennecke@walhalla ~ $ pfexec /opt/VirtualBox/vboxdrv.sh startall
    VirtualBox Host kernel module loaded.
    VirtualBox NetFilter kernel module loaded.
    VirtualBox NetAdapter kernel module loaded.
    VirtualBox USB kernel module loaded.

Seit einigen Minuten steht Build 126 zum download bzw. zur Installation bereit. Viel Spaß damit.

Ich habe mal im grafischen Paketmanager herum gestöbert und nach ein paar Klicks gab es für alle Packete ein Update :-) Ich habe schon auf Build 126 gewartet und täglich auf der Konsole geschaut ob was neues im Repo drin ist.

Da ich zu faul war, zu warten bis mein update fertig war, habe ich es abgebrochen und heute früh weiter gemacht. Als das Update fertig war, dachte ich Mist Du musst neu booten. Normalerweise mache ich so etwas nicht, weil mir booten zu lange dauert (RAM, SCSI-Controller, IDE-Controller, ...) Ich habe dann einmal den Neu starten-Knopf probiert. Darauf hin wurde nur der neue Kernel gebootet. Ich war zuerst überrascht, aber dann erinnerte ich mich, an einen Vortrag von Jörg Möllenkamp. Dieser hat schon auf dieses Feature hingewiesen. Es sind auch die kleinen Dinge, wie dieses fastreboot, die Solaris groß machen.

Ich hatte vor ein paar Tagen eine Begegnung der besonderen Art. Ich wollte skriptgesteuert Zonen erstellen und ich war am verzweifeln, da OpenSolaris (Build 125) einfach nicht die Dateisysteme erstellen wollte. Nach einer Weile habe ich die Zonen in mein Standart-Zonen-Verzeichnis gemacht und plötzlich ging es. Mein Fehler war, dass ich Dateien in dem Verzeichnis hatte, wo die Zonen herein sollten.

Ich weiß jetzt nicht, ob dieses "Problem" nur bei Build 125 besteht. Es ist aber zu empfehlen, dass man für Zonen eine leeres Verzeichnis (zfs-Dateisystem) benutzt, welches ausschließlich für Zonen ist.

Ich musste gerade einen NFS share von meinem Laptop (Ubuntu 9.04) auf meinem Desktop (Opensolaris 2009.06) mounten. Der erste Versuch sah ungefähr so aus:

Linux

#/etc/exports
/share *(rw,insecure,no_root_squash,no_subtree_check)

Opensolaris

root@desktop:~# mount -F nfs -o vers=3 laptop:/share /mnt/share
nfs mount: security mode does not match the server exporting laptop:/share

Schade eigentlich. Nach etwas Recherche war es aber gar nicht so schwer, das Problem zu lösen.

Linux

#/etc/exports
/share *(rw,insecure,sec=sys,no_root_squash,no_subtree_check)

Danach funktioniert der obige mount Befehl.




Unter dem Titel "Linux vs. Solaris als Fileserver" habe ich auf dem SourceTalk einen Vortrag gehalten, in dem ich meine Erfahrungen mit der Einrichtung und dem Betrieb von Linux und Opensolaris als Fileserver vorstelle. Die meisten Dinge sind hier auf dem Blog im Dezember schonmal kurz angesprochen worden. Aber hier nochmal die Folien.

Ich suche schon seit längerem nach einer Möglichkeit, ZFS zu verschlüsseln. Es ist angekündigt, dass ZFS noch in diesem Jahr mit einer Verschlüsselungsoption ausgestattet wird, aber ich will nicht noch länger warten. Infos zu dem Projekt gibt es hier http://opensolaris.org/os/project/zfs-crypto.

Nun aber zu dem Workaround, anders kann man das wirklich nicht nennen (auch weil die Performance nicht so der Hit ist). Es gibt ein Tool namens lofi, mit dem man Dateien loopback mounten kann und eben auch Support für Verschlüsselung und Kompression mitbringt. Also können wir eine Platte auf Blockebene verschlüsseln, und darauf einen zpool installieren. Dadurch haben wir einen verschlüsselten zpool.

Aber der Reihe nach. Ich habe mich entschieden, Keyfiles zu benutzen. Ich will diese dann auf einem verschlüsselten USB-Stick speichern. Zuerst erzeugen wir die Schlüssel, die wir für die Verschlüsselung benutzen:

root@opensolaris:~# pktool genkey keystore=file outkey=/lofi.key keytype=aes keylen=256 print=y
    Key Value ="bedb8b90dfe20307a9169fd0016cbe6317fbb3b2e3fa6e82ff9a6413c10f35d5"
root@opensolaris:~# pktool genkey keystore=file outkey=/lofi2.key keytype=aes keylen=256 print=y
    Key Value ="d8a0bea56fe3c07c707bec18068320515b82b1dca891c532a8c7df4ad917e6d4"

Das hat komischerweise nur funktioniert, wenn man den Key direkt in / ablegt, danach kann der Key aber an eine beliebige andere Stelle verschoben werden. Ich habe sie nach /root/ verschoben. Nun benutzen wir diese Keys um die Festplatten zu verschlüsseln:

root@opensolaris:~# lofiadm -a /dev/dsk/c7d1p0 -c aes-256-cbc -k /root/lofi.key
/dev/lofi/1
root@opensolaris:~# lofiadm -a /dev/dsk/c8d1p0 -c aes-256-cbc -k /root/lofi2.key
/dev/lofi/2

Dadurch werden Devices in /dev/lofi/ erzeugt, normalerweise /dev/lofi/1 und /dev/lofi/2. Der gleiche Befehl wird im nachhinein auch benutzt, um die Platte zu entschlüsseln. Leider gibt es keine Überprüfung, ob der Key stimmt, die Entschlüsselung funktioniert dann einfach nicht. Als nächstes erzeugen wir einen zpool auf diesen verschlüsselten Devices:

root@opensolaris:~# zpool create crypt mirror /dev/lofi/1 /dev/lofi/2

root@opensolaris:~# zpool status crypt
  pool: crypt
 state: ONLINE
 scrub: none requested
config:

    NAME             STATE     READ WRITE CKSUM
    crypt       ONLINE       0     0     0
      mirror         ONLINE       0     0     0
        /dev/lofi/2  ONLINE       0     0     0
        /dev/lofi/1  ONLINE       0     0     0

errors: No known data errors

Nun kann man beginnen, mit dem zpool zu arbeiten. Nach einem Neustart kann dieser Pool natürlich nicht benutzt werden, weil die Festplatten unter dem Dateisystem ja nicht entschlüsselt sind.

root@opensolaris:~# zpool status crypt
  pool: crypt
 state: UNAVAIL
status: One or more devices could not be used because the label is missing
    or invalid.  There are insufficient replicas for the pool to continue
    functioning.
action: Destroy and re-create the pool from a backup source.
   see: http://www.sun.com/msg/ZFS-8000-5E
 scrub: none requested
config:

    NAME             STATE     READ WRITE CKSUM
    crypt             UNAVAIL      0     0     0  insufficient replicas
      mirror         UNAVAIL      0     0     0  insufficient replicas
        /dev/lofi/1  FAULTED      0     0     0  corrupted data
        /dev/lofi/2  FAULTED      0     0     0  corrupted data

Man muss also die Platten entschlüsseln und danach den zpool neu initialisieren:

root@opensolaris:~# lofiadm -a /dev/dsk/c7d1p0 -c aes-256-cbc -k /root/lofi.key
/dev/lofi/1
root@opensolaris:~# lofiadm -a /dev/dsk/c8d1p0 -c aes-256-cbc -k /root/lofi2.key
/dev/lofi/2
root@opensolaris:~# zpool export crypt
root@opensolaris:~# zpool import -d /dev/lofi crypt

root@opensolaris:~# zpool status crypt
  pool: crypt
 state: ONLINE
 scrub: none requested
config:

    NAME             STATE     READ WRITE CKSUM
    crypt       ONLINE       0     0     0
      mirror         ONLINE       0     0     0
        /dev/lofi/2  ONLINE       0     0     0
        /dev/lofi/1  ONLINE       0     0     0

errors: No known data errors

Jetzt ist der Pool wieder verfügbar. Es gibt sicherlich auch noch eine andere Möglichkeit, export und import scheint mir da irgendwie übertrieben, aber anders hab ich es nicht hingekriegt. Jetzt muss man sich nur noch überlegen, wo man den Key abspeichert um seine Daten vor unbefugtem Zugriff zu schützen. Ich werde wohl einen USB-Stick benutzen, auf dem die Keys liegen und der ebenfalls mit lofi verschlüßelt ist. Allerdings nicht mit einem Keyfile, sondern mit einem Passwort. Das ganze packt man in ein Skript und dann sind die Daten auf der relativ sicheren Seite und einigermaßen stressfrei verwalten. Wenn dazu noch jemand Infos haben will, dann meldet euch in den Kommentaren.

Passend zum 2009.06 Release ist nun das "Erste Schritte mit OpenSolaris 2009.06" MiniBook erschienen.

In diesem MiniBook wird einem OpenSolaris Stück für Stück erklärt und anschaulich ein System beispielhaft von Anfang bis Ende eingerichtet.

Für alle, die es noch nicht in ihren Händen halten, gibt es das MiniBook auch online in Deutsch zum ansehen und runterladen.

Ihr könnt es hier bekommen.

In letzter Zeit bin ich des Öfteren gefragt worden, wie man Direct3D in einem Windows benutzen kann, welches innerhalb von VirtualBox läuft.

Zuerst solltet ihr die Gasterweiterungen installieren; eine genaue Anleitung dafür findet ihr hier UserManual.

Im nächsten Schritt müsst ihr die Treiber für die emulierte Grafikkarte im Abgesicherten Modus unter Windows installieren. Danach könnt ihr bei den Einstellungen für die Anzeige der Virtuellen Maschine die Option "3D aktivieren" anklicken und voila ihr habt Direct3D Fähigkeiten.

Weitere Informationen findet ihr hier und hier.

Manchmal verliert bei den verschiedenen Distributionen von Solaris den Überblick. Ich möchte hier nur auf die von Sun eingehen. Inzwischen gibt es Solaris 10, Solaris Express Community Edition (SXCE), Open Solaris und die OpenSolaris-Developer Builds.

Solaris 10 ist das stabile Solaris von Sun. Es gibt Support und Patches und regelmäßig neue Versionen. Der größte Vorteil von Solaris 10, ist dass es sehr viel zertifizierte Software gibt. Also eignet sich Solaris 10 sehr gut für unternehmenskritsche Server/Bereiche. Das ganze hat auch einen Nachteil. In Solaris 10 sind nicht die neusten Features und es werden auch nicht alle Features nach Solaris 10 zurück portiert.

SXCE ist abgekündigt. Den letzten Build wird es im Oktober 2009 geben. Für SXCE gibt es keine Patches, Updates und Support, dafür alle 14 Tage einen neuen Build. Diesen kann man via LiveUpgrade installieren. Interessant ist diese Distribution, da sie (noch) auch UltraSparc IIi-Prozessoren läuft. Wenn man die neusten Features testen möchte oder ein altes Sparc-System als Spielwiese hat, dann ist man bei SXCE gut aufgehoben. Die Build haben eine gewisse Qualitätskontrolle hinter sich, es ist nicht sicher gestellt, dass jeder Build stabil läuft oder überhaupt funktioniert. Es handelt sich um eine Entwickler-Version.

OpenSolaris ist die neue Distribution von Sun. Mit OpenSolaris 2009.06 gibt es auch Support. Es werden auch Security-Patches kostenfrei bereit gestellt. In einem halbjährlichen Zyklus gibt es ein neues Release. Für Sparc würde ich OpenSolaris 2009.06 nur bedingt einsetzten, da der Installer noch etwas Überarbeitung bedarf. OpenSolaris bekommt mit einiger Zeitverzögerung alle Features, welche in der Entwicklerversion verfügbar sind. Wenn man OpenSolaris auf dem Server betreibt sollte man genauer nachdenken. Es ist stabil, aber man kann es nicht ohne weiteres mit einem Install-Server verteilen. Mit zertifizierter Software sieht es viel schlechter aus, als bei Solaris 10. Dafür kann man auf einen größeren Pool an freier Software zurückgreifen. Diese ist zum Teil im Repository verfügbar. Man kann OpenSolaris ohne bedenken auf dem Desktop/Laptop einsetzten. Auf x86-Servern kann man OpenSolaris einsetzten, wenn man nicht auf eine zertifizierte Umgebung angewiesen ist.

Die OpenSolaris Developer Builds sind ein eigenes Repository, auf dieses muss man wechseln, wenn man OpenSolaris installiert hat. Es gibt hier auch keine Patches. Dafür sind regeläßig neue Builds verfügbar. Es kommt vor, dass diese Builds fehlerhaft sind. Hier ist jeder gut aufgehoben, der die neusten Features testen möchte. Es kommt relativ selten vor, das ein Build nicht läuft. Über die Stabilität kann ich mich nicht beschweren. Man darf aber nicht vergessen es ist und bleibt eine Entwicklerversion. Man hat keine Garantie, dass es stabil läuft. Dafür kann man mit durch die Bootumgebungen immer einen alten Stand booten.

⁞Manchmal möchte man wissen, was Open Solaris beim booten eigenlich macht, vielleicht weil es Probleme gibt oder man einfach nur neugierig ist. Bei x86 kann man das ganze als Kerneloption mit geben. Es gib:
  1. -v zeigt die Devices an
  2. -m verbose zeigt an welche Dienste starten (siehe smf)
Man kann die Kerneloptionen direkt beim booten mitgeben. Dazu muss man bei grub e drücken um den aktuellen Eintrag zu editieren. Alternativ kann man auch die /rpool/boot/grub/menu.lst anpassen:
title Open Solaris snv-122
findroot (pool_rpool,0,a)
bootfs rpool/ROOT/snv-122
kernel$ /platform/i86pc/kernel/$ISADIR/unix -B $ZFS-BOOTFS -v
module$ /platform/i86pc/$ISADIR/boot_archive

Manchmal ist erforderlich, dass man einer Zone den Zugriff auf ein Device gewährt. Ich habe z.B. einer Zone mein externes LTO-2 Bandlaufwerk gegeben. Dieses ist über SCSI mit dem Rechner verbunden. Da ich Strom sparen möchte und SCSI hotplugfähig ist, schalte ich das Bandlaufwerk nur ein wenn ich es benötige.

Damit man das Device unter Solaris in der global-Zone ansprechen kann, muss es wie folgt einbinden (mein Laufwerk ist an Controller c17 angeschlossen):

root@walhalla ~ $ cfgadm -c configure c17
root@walhalla ~ $ cfgadm -a c17
p_Id                          Type         Receptacle   Occupant     Condition
c17                            scsi-bus     connected    configured   unknown
c17::rmt/0                     tape         connected    configured   unknown

Wenn man in einer nonglobal-Zone ist geht dieses Verfahren nicht. Solaris sagt aber einen woran es liegt:

cfgadm: Configuration administration not supported: cfgadm can only be run from the global zone

Also muss man Devices, die eine nonglobal-Zone benötigt immer in der global-Zone einbinden bzw. tauschen. Ich vertrete die Auffassung, das man in einer nonglobal-Zone, so weit es möglich ist, keine Devices gibt. Das kann unter Umständen zu Probleme bei der Migration der Zonen führen.

Langsam macht mir Open Solaris noch mehr Spaß. Seit gestern Nacht gibt es Build 122. Ich hatte leider mit einen Stromausfall zu kämpfen und konnte ihn nicht ehr testen.

Beim ersten Updateversuch stürzte das pkg-Komando ab. Mit einer der recht typischen nichtssagenden Fehlermeldungen. Ich habe es erst einmal auf den Repository-Server geschoben und es etwas später wieder probiert und dann ging alles fast ohne Probleme. Die neu erstellte Bootumgebung konnte nicht abgemountet werden. Ich habe sicherheitshalber mit einem beadm unmount -f snv-122 nachgeholfen. Auch das Updaten der Zonen verlief ohne Probleme.

Auf meinen anderen Rechner gab es keine Probleme beim update auf Build 122.

Ich habe heute endlich mein Projekt Bacula in einer Zone zu ende gebracht. Bacula ist eine Backup-Software, die recht mächtig ist und noch viel schwieriger zu konfigurieren. Ich möchte darauf eingehen, wie ich Bacula installiert habe. Es soll nur ein grober Abriss sein.

Folgende Packte muss man in der Zone installieren: SUNWapch22, SUNWmysql51, SUNWgccruntime, SUNWmysql51lib, SUNWperl584usr, SUNWgd2, SUNWgawk. Ich habe in der backup-Zone das Netzwerk konfiguriert und das Device mein es LTO-2 Bandlaufwerk übergeben. Auf den sollen die Sicherungen gemacht werden.

root@walhalla ~ $  zonecfg -z backup
zonecfg:backup> add device
zonecfg:backup:device> set match=/dev/rmt/*
zonecfg:backup:device> end
zonecfg:backup> info device
device:
            match: /dev/rmt/*
zonecfg:zone1> commit
zonecfg:zone1> exit

Da ich backup-Zone schlank halten möchte, habe ich Bacula in der global-Zone übersetzt. Auf der Bacula-Seite findet man auch welche Packte zum übersetzen notwendig sind. Da Bacula sehr viele configure-Parameter hat, habe ich mir ein wrapper-Skript zum übersetzen geschrieben. Darin kommentiere ich das aus was ich nicht benötigte. Mein Skript sieht wie folgt aus:

#!/bin/bash

export PATH=/usr/bin:/usr/ccs/bin:/etc:/usr/openwin/bin:/usr/local/bin:/usr/sfw/bin:/opt/sfw/bin:/usr/ucb:/usr/sbin
LDFLAGS="-L/usr/mysql/5.1/lib/mysql -R/usr/mysql/5.1/lib/mysql"
export LDFLAGS;

make distclean

export HO=/opt
export USER=bacula
export GROUP=bacula

# create bacula-user and group
groupadd $GROUP
useradd  -g $GROUP -d "/
CFLAGS="-g -O2" ./configure \
--prefix=/opt/bacula \
--with-mysql=/usr/mysql/5.1 \
--enable-smartalloc \
--with-dir-user=$USER \
--with-dir-group=$GROUP \
--with-sd-user=$USER \
--with-sd-group=$GROUP \
--with-fd-user=$USER \
--with-fd-group=$GROUP


# --enable-bat \
# --enable-gnome \
# --enable-tray-monitor \
# --sbindir=$HO/bacula/bin \
# --sysconfdir=$HO/bacula/etc \
# --with-pid-dir=$HO/bacula/var/pid \
# --with-subsys-dir=$HO/bacula/var/subsys \
# --with-working-dir=$HO/bacula/working \

  make
  make install

mkdir -p $HO/bacula/var/pid
mkdir -p $HO/bacula/var/subsys

chown -R $USER:$GROUP $HO/bacula

Nachdem man Bacula übsetzt hat kann man es mit tar packen und in der backup-Zone wieder entpacken. Das geht ganz einfach, da das Filesystem der backup-Zone auch in der global-Zone gemountet ist. Hier ist manchmal Geduld gefragt. Ich müsste öfter Packte in der backup-Zone nachinstallieren, damit Bacula lief. Ich hoffe ich habe oben alle nötigen Packte aufgeschrieben.

Wenn man auf die Weboberfläche verzichen möchte, dann muss man den Apache, Perl und gd nicht installieren. In der global-Zone habe ich dann noch einmal Bacula übsersetzt um bat zu haben. bat muss nicht in der backup-Zone laufen, ich greife über das Netzwerk auf den Director-Daemon von Bacula zu. Durch einen Fehler im Makefile wird bat nicht installiert. Das übersetze bat liegt unter <download-dir>/bacula-3.0.2/src/qt-console. Zum starten muss man angeben, wo sich das config-File, bat.conf befindet.

Wenn man die Weboberfläche bweb nutzen möchte muss man einige Perl-Module per Hand bzw. mit CPAN übersetzten. Dafür ist es notwendig, dass man die Sun Studio-Compiler installiert hat. Eine Fehlermeldung, die drauf hinweißt würde wie folgt lauten:

Ich habe für Bacula noch das folgende Manifest geschrieben:

<?xml version='1.0'?>
<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
<!--

        Michael Rennecke 2009-09-01
        Service manifest for bacula (both server and client)
 -->

<service_bundle type='manifest' name='bacula:bacula'>

<service
name='application/bacula'
type='service'
version='1'>
<create_default_instance enabled='false' />
<single_instance />


<dependency name='fs'
grouping='require_all'
restart_on='none'
type='service'>
<service_fmri value='svc:/system/filesystem/local' />
</dependency>

<dependency name='net'
grouping='require_all'
restart_on='none'
type='service'>
<service_fmri value='svc:/network/loopback' />
</dependency>

<exec_method
type='method'
name='start'
exec='/opt/bacula/sbin/bacula start'
timeout_seconds='-1'>
</exec_method>

<exec_method
type='method'
name='stop'
exec='/opt/bacula/sbin/bacula stop'
timeout_seconds='-1'>
</exec_method>

<exec_method
type='method'
name='restart'
exec='/opt/bacula/sbin/bacula restart'
timeout_seconds='-1'>
</exec_method>

</service>

</service_bundle>

Wenn man Bacula zum ersten mal startet, sollte man die Datenbanken erstellen. Die passenden Skripte liegen sinnvollerweise bei mir unter /opt/bacula/etc. Die Namen sind selbsterklärend. Wenn nun Bacula arbeitet kann man es konfigurieren. Die Konfiguration ist etwas kompliziert. Für die ersten Schritte kann man sich die Kurzanleitung ansehen, das folgende pdf ist auch ganz gut. Mein Client verschlüsselt seine Daten, wie das geht kann man hier erfahren. Wenn man die Kompression nutzen möchte muss das FileSet z.B so aussehen:

FileSet {
Name = "Test"
  Include {
    Options {
      signature = MD5
      noatime = yes
      mtimeonly = yes
      compression=gzip
    }   
    File = /export/test
  }
}

Ich hoffe, dass ich an alles gedacht habe. Ich wünsche allen viel Spaß und vor allem Erfolg, wenn sie Bacula mit rumspielen.

P.S.: Wenn es Probleme gibt lohnt es sich, die Daemons einzeln zu starten, sie haben noch zahlreiche Parameter.

Ich war ab Freitag offline und habe mich heute gefreut, als ich gesehen habe, dass Build 121 für Open Solaris verfügbar ist. Ich bin jetzt fleißig am updaten und blogge über evtl. Probleme.

Das Update hat keine Probleme gemacht. Ich hatte zwischendurch die folgende Meldung:
The 'pcieb' driver shares the alias 'pciexclass,060400' with the 'pcie_pci'
driver, but the system cannot determine how the latter was delivered.
Its entry on line 2 in /etc/driver_aliases has been commented
out.  If this driver is no longer needed, it may be removed by booting
into the 'snv-121' boot environment and invoking 'rem_drv pcie_pci'
as well as removing line 2 from /etc/driver_aliases or, before
rebooting, mounting the 'snv-121' boot environment and running
'rem_drv -b <mountpoint> pcie_pci' and removing line 2 from
<mountpoint>/etc/driver_aliases.
The 'pcieb' driver shares the alias 'pciexclass,060401' with the 'pcie_pci'
driver, but the system cannot determine how the latter was delivered.
Its entry on line 3 in /etc/driver_aliases has been commented
out.  If this driver is no longer needed, it may be removed by booting
into the 'snv-121' boot environment and invoking 'rem_drv pcie_pci'
as well as removing line 3 from /etc/driver_aliases or, before
rebooting, mounting the 'snv-121' boot environment and running
'rem_drv -b <mountpoint> pcie_pci' and removing line 3 from
<mountpoint>/etc/driver_aliases.

Man sollte diese Meldung nicht ignorieren, wenn man das macht braucht man zumindest viel mehr CPU-Last. Hier findet man eine Liste der Änderungen. Am auffälligsten ist sicher Netbeans 6.7 oder der überarbeitete Packetmanager. Es gibt auch eine neue zfs-Version.

Für manche Dinge wie nfs ist es wichtig eine korrekte Uhrzeit auf allen Rechnern zu haben. Dies kann man durch die Sychronisation mit einem Zeit-Server erreichen. Unter Open Solaris müssen in der Datei /etc/inet/ntp.conf die Zeitserver stehen mit den man sich synchronisieren möchte. Anschließend muss man den ntp-Server neu starten. Unten steht meine Konfiguration:

root@walhalla ~ $ cat /etc/inet/ntp.conf
server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org
server 3.pool.ntp.org
root@walhalla ~ $ svcadm restart svc:/network/ntp:default
root@walhalla ~ $ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+wikisquare.de   129.69.1.153     2 u   58   64  377   28.259  -20.970   2.549
*dexter.wzw.tum. 130.149.17.21    2 u   63   64  377   13.108  -17.224   1.370
+dnscache-frankf 131.188.3.222    2 u   56   64  377   25.993  -20.031   2.900
-draco.fivemile. 192.53.103.108   2 u   63   64  377   20.565  -15.292   1.181

Hier findet man noch einige Information über die verwendeten Zeitserver.

Ich habe es öfter, dass ich unter Windows erstellte Open Office- / Microsoft Office Dokumente öffnen muss. Da kann es passieren, dass die Schrift mitunter recht seltsam aussehen, da Solaris nicht die passende Schrift hat. Das Problem kann man zum Teil lösen indem man das Packet ttf-fonts-core nachinstalliert.

Es befindet sich im extra-Repository. Wie man das Repository einfügt kann man hier erfahren. Man muss sich auch noch ein gültigtes Zertifikat von Sun holen, welches man hier bekommt.

Eigene Schriften installieren

Man muss einfach die entsprechende Schrift in ein selbst erstelltes Unterverzeichnis in /usr/X11/lib/X11/fonts kopieren.

root@walhalla ~ $ cd /usr/X11/lib/X11/fonts/
root@walhalla fonts $ mkdir myttf
root@walhalla fonts $ mkdir myotf
root@walhalla fonts $ cp ~/Downloads/KittyPrint.ttf myttf/
root@walhalla fonts $ cp /opt/texlive/2008/texmf-dist/fonts/opentype/public/kurier/KurierHeavy-Italic.otf myotf/

Ich habe es in OpenOffice und in Gnome getestet, es waren beide Schriften verfügbar. Es ist darauf zu achten, dass jeder User die Dateien lesen kann.

Die Konfiguration für das Powermanagement befindet sich bei Open Solaris in der Datei /etc/power.conf. Damit sich meine CPU herunter taket, wenn sie nicht so viel machen muss, habe ich die Zeile
cpupm  enable
in
cpupm  enable poll-mode
geändert. Nun muss man mit pmconfig die neue Konfiguration aktivieren. Das ganze muss man als root bzw. mit pfexec machen. Ich empfehle jeden die Manpage von power.conf zu lesen (man power.conf).

Um zu sehen, wie sich die CPU herunter tacktet, kann man
kstat -m cpu_info -s current_clock_Hz
oder
powertop
benutzen. powertop ist im Packet SUNWpowertop. powertop benötigt dtrace, deswegen muss man root sein, oder die passenden Privilegien besitzen.

Ich habe mich öfter etwas geärgert, dass ich bei OpenSolaris Software selbst übersetzen musste, die ich mal schnell benötigte und dann ließ sich die Software nicht mal schnell übersetzten - wegen diverser Abhängigkeiten.

Man kann die Packtetverwaltung von NetBSD  auch unter Solaris nutzen. Hier sind sehr viele Packte enthalten, die man in den verschiedenen Repositories nicht findet. Eine vollständige Liste der verfügbaren Packete findet man hier. Im folgenden möchte ich beschreiben, wie man pkgsrc bei OpenSolaris installiert. Wer mehr wissen möchte, den verweise ich auf die Onlinedokumentation.

  1. Packte installieren
    root@walhalla / $ pkg install SUNWcvs SUNWgccruntime SUNWgcc SUNWbinutils SUNWbtool SUNWggrp SUNWxcu4 SUNWcs SUNWsprot SUNWlibm SUNWloc SUNWsndm SUNWgpch
  2. pkgsrc installieren
    root@walhalla / $ export CVSROOT=anoncvs@anoncvs.NetBSD.org:/cvsroot
    root@walhalla / $ export CVS_RSH=ssh
    root@walhalla / $ mkdir  /usr/pkgsrc
    root@walhalla / $ mkdir  /usr/pkg
    root@walhalla / $ cd /usr
    root@walhalla usr $ cvs checkout -P pkgsrc
    root@walhalla usr $ export PATH=$PATH:/usr/sfw/bin:/usr/ccs/bin

    root@walhalla usr $ echo CC=gcc > /etc/mk.conf
    root@walhalla usr $ cd /usr/pkgsrc/bootstrap
    root@walhalla bootstrap$ ./bootstrap
  3. Warten und einen Kaffee trinken
  4. Path-Variable erweitern
    root@walhalla bootstrap$ export PATH=$PATH:/usr/pkg/bin:/usr/pkg/sbin
  5. Software installieren
    root@walhalla bootstrap$ cd /usr/pkgsrc/pkgtools/pkgfind
    root@walhalla pkgfind$ bmake install
Man könnte noch viel mehr schreiben, aber das ist ein kleiner Einstieg in pkgsrc.
Unter http://homepage2.nifty.com/mrym3/taiyodo/eng/ kann man sich verschiedene Netzwerktreiber herunter laden, unter anderen auch die Broadcom-Treiber (bge). Diese Chips werden häufig bei Laptops verbaut.

Als CA ist man immer erreichbar, so wurde ich eben gefragt wie man Seitenzahlen in OpenOffice einfügt. Das folgende Bild zeigt wie es geht.

Ich habe heute ein Update auf Build 118 gemacht. Anscheint ist das kein Einzelfall, da andere Leute auch Probleme mit dem Build haben. Mir sind folgende 2 Fehler aufgefallen: Das neue System konnte konnte nicht gebootet werden, da Dateisysteme falsch eingehangen wurden und es das System bootete nicht durch.

Update durchführen, sodass alle Dateisysteme korrekt eingehangen werden

rennecke@walhalla ~ $ pfexec pkg image-update
DOWNLOAD                                  PKGS       FILES    XFER (MB)
Completed                              635/635   8617/8617  277.3/277.3

PHASE                                        ACTIONS
Removal Phase                              4271/4271
Install Phase                              5162/5162
Update Phase                             16225/16225
PHASE                                          ITEMS
Reading Existing Index                           8/8
Indexing Packages                            635/635
Optimizing Index...
PHASE                                          ITEMS
Indexing Packages                            789/789
pkg: /tmp/tmpnMsCuH kann nicht entladen werden

---------------------------------------------------------------------------
HINWEIS: Beachten Sie die Versionshinweise unter:

http://opensolaris.org/os/project/indiana/resources/relnotes/200906/x86/
---------------------------------------------------------------------------

rennecke@walhalla ~ $ beadm list
BE          Active Mountpoint     Space   Policy Created          
--          ------ ----------     -----   ------ -------          
opensolaris -      -              383.47M static 2007-01-01 17:54
snv-112     -      -              45.73M  static 2009-04-27 22:10
snv-113     -      -              1.54G   static 2009-06-01 08:47
snv-114     -      -              79.21M  static 2009-06-14 17:01
snv-117     N      /              602.0K  static 2009-06-29 19:12
snv-118     R      /tmp/tmpnMsCuH 29.63G  static 2009-07-14 20:42
rennecke@walhalla ~ $ pfexec beadm umount -f snv-118

Fix von Detlef Drewanz:

Detlef hat die fehlenden Startskripte hinzugefügt. Sie machen nichts und geben nur 0 zurück. Dieser Weg ist sicher etwas schöner. Welche Skripte fehlen steht im log.

Dienste löschen, die hängen

# svccfg delete svc:/system/fcoe_target:default
# svccfg delete svc:/network/fcoe_config:default

Bei mir gab es keine Startmethoden, deswegen gabe ich die Services gelöscht. Es handelt sich Dienste, welche für FibreChannel over Ethernet nötig sind. Da ich persönlich kein FirbeChannel over Ethernet betreibe kann ich damit leben.

Man sollte auch einmal sein zfs wieder updaten, das kann man mit rennecke@walhalla ~ $ pfexec zpool upgrade rpool. Achtung: ältere Builds können unter umständen die neueren zfs-Versionen nicht lesen.

Ich habe inzwischen folgende Packte entfernt:

SUNWqlc@0.5.11-0.118
SUNWfcp@0.5.11-0.118
SUNWfcoeu@0.5.11-0.118
SUNWfcprt@0.5.11-0.118
SUNWfcip@0.5.11-0.118
SUNWfcsm@0.5.11-0.118
SUNWfctl@0.5.11-0.118

Dadurch erhoffe ich mir, dass ich keine Probleme mehr mit  FibreChannel habe. Beim booten bin ich wieder stecken geblieben, deswegen ich den Service npivconfig noch gelöscht.

Ich wollte verschiedene Sparc-Rechner mit Nagios überwachen. Da ich kein passendes Plugin gefunden habe um die Sensoren zu überwachen habe ich mir selbst eins geschrieben.

Es funktioniert ganz gut, wenn jemand Probleme mit dem Plugin hat, dann kann ich versuchen es zu verbessern. Man kann das Plugin auch hier herunter laden. Ich parse die Ausgabe von prtpicl. Wenn die Temperatur HighWarningThreshold - $warn übersteigt, dann wird warning zurück gegeben. Wenn HighWarningThreshold überschritten wird, dann gibt das Plugin critical zurück.

 1 #!/usr/bin/perl -w
 2
 3 # File:    check_solaris_sensors
 4 # Purpose: prtpicl output parser
 5 # Author:  Michael Rennecke michael.rennecke@sun.com
 6 # Date:    2009/07/08
 7 # Version: 0.2
 8
 9 use strict;
10
11 my $warn        = 15;
12 my $prtpicl     = "/usr/sbin/prtpicl";
13 my @diag        = ();
14 my @sensor_data = ();
15 my $state       = 0;
16 my $output      = "";
17
18 unless(open(DIAG, "$prtpicl -v -c temperature-sensor | ")) {
19 print STDERR "Initialization error - Can't execute  $prtpicl -v -c temperature-sensor!\n";
20 exit(3);
21 }
22
23 while(<DIAG>){
24 push(@diag, $_);
25 }
26 close(DIAG);
27
28 unless( @diag > 0) {
29 print STDERR "Can't find any temperature-sensor!\n";
30 exit(3);
31 }
32
33 sub change_state {
34 if ($_[0] > $state) {
35 $state = $_[0];
36     }
37 }
38
39 my $sensor      = undef;
40 my $warning     = undef;
41 my $critical    = undef;
42 my $temperature = undef;
43 my $get_temp    = 0;
44
45 foreach my $line (@diag) {
46
47 $get_temp = 0;
48
49 if ($line =~ /\s*([a-zA-Z0-9_]+)\s*\(temperature-sensor/) {
50 $sensor = $1;
51     } elsif ($line =~ /:HighWarningThreshold\s*(\d+)/) {
52 $warning = $1;
53     } elsif ($line =~ /:Temperature\s*(\d+)/) {
54 $temperature = $1;
55 $get_temp = 1;
56     }
57
58 if ($get_temp == 1) {
59 if ($temperature <= $warning - $warn) {
60 &change_state(0);
61         } elsif ($temperature <= $warning) {
62 &change_state(1);
63         } else {
64 &change_state(2);
65         }
66 $output = "$output $sensor: ${temperature}°C ";
67     }
68
69 }
70
71 if ($state == 0) {
72 $output = "Temperature OK --$output \n";
73 } elsif ($state == 1) {
74 $output = "Temperature WARNING --$output \n";
75 } elsif ($state == 2) {
76 $output = "Temperature CRITICAL --$output \n";
77 } else {
78 $output = "Temperature UNKNOWN --$output \n";
79 }
80
81 print STDOUT "$output";
82 exit ($state);

Andere Nagios-Plugins für Solaris

Einer der Hauptpunkte, die mich davon abhalten, Opensolaris als Produktivsystem einzusetzen ist das fehlende Truecrypt, weil alle meine externen Platten verschlüsselt sind um Daten bei Verlust der Datenträger zu schützen. Hier gibts einen Blogpost, dass es rudimentär lauffähig sei. Das ist ein sehr interessantes Projekt, und ich hoffe, dass daraus eine stabile Version werden wird. Dann bleiben für mich nicht mehr viele Gründe übrig, Opensolaris auf dem Desktop zu installieren.
Nach dem Update auf Build 117 wollte mein LastFM-Plugin von Songbird nicht mehr arbeiten. Wenn man per Hand das Plugin in der Version 0.3.4.1018 installiert geht es wieder. Man findet hier diese Version zum herunter laden.

Ich habe mir einiger Zeit eine neue Grafikkarte gekauft, eine GeForce 9400 GT. Ich habe mich für eine Grafikkarte von Nvidia entschieden, da es Treiber für Solaris gibt. So weit die Theorie, denn die Nvidia-Treiber in OpenSolaris 2009.06 bzw. bis Build 111b wollten nicht mit meiner Grafikkarte zusammen arbeiten.

Die Tage kam Build 117 im dev-Repository heraus. Ich habe diesen gleich installiert und siehe da die Grafikkarte arbeitet wie sie soll. Ein Update auf Build 117 hat noch einige andere Vorteile, u.a. gibt es eine neue zfs-version die quotas untersützt.

So, nun nach längerer Zeit mal wieder ein Post von mir. Für alle, die keine Zeit hatten, persönlich zu den studentischen Informatik Tagen zu kommen, habe wir nun von den meisten Vorträgen Aufzeichnungen als Video hochgeladen. Die könnt ihr unter http://sit.projectai.org/programm.php finden. Viel Spaß damit.

Es ist endlich so weit: JavaFX ist nun auch für Solaris und Linux verfügbar. Es ist zwar beides noch im Beta-Satium, aber die Solaris-Implementierung scheint fehlerfrei zu funktionieren. Ich hatte noch keine Zeit einen Blick auf JavaFX unter Linux zu werfen.

Ein Wermutstropfen bleibt, zur Zeit gibt es JavaFX nur für OpenSolaris 2009.06. Wenn es den nächsten Build gibt, dann wird es sicher auch weiterhin funktionien. Für Solaris 10 und SXCE wird es hoffentlich demächst auch verfügbar sein.

Man kann JavaFX unter Solaris per Package installieren. Das Package heißt javafx-sdk und ist im Repository extra. Wie man dieses Repository nutzt kann man u.a. hier nachlesen. Alternativ kann man auch den Packetmanager nehmen und Datei -> Repositorys verwalten... wählen. Wen das zu kompliziert ist, der kann den Installer von der JavaFX-Homepage nehmen. Das extra-Repository ist von daher "problematisch", da man sich ein Zertifikat besorgen muss. Dadurch erklärt man sich mit den anderen Lizenzbedingungen einverstanden.

Es gibt auch ein Netbeans-Plugin für JavaFX. Ich habe nichts an den Plugin-Quellen für Netbeans geändert und es war sofort in der Liste der nicht installieren Plugins.

Ich habe nach einer Möglichkeit gesucht, das Cache-verzeichnis vom Firefox auszulagern. Dadruch werden die Snapshots etwas kleiner und man hat weniger Daten für ein Backup. Das ganze geht wie folgt:

  1. in die Addresszeile about:config eintippen
  2. Nun wird man hingewiesen, dass man etwas kaputt machen kann
  3. nachdem man das aktzeptiert hat, sieht man die ganzen Variablen vom Firefox
  4. nun Rechtsklick und Neu auswählen, anschließent String
    neue Eigenschaft anlegen
  5. Als Eigenschaftsnamen geben wir an: browser.cache.disk.parent_directory
    Eigenschaftsnamen angeben

  6. Im nächsten Fenster geben wie den absoluten Path des Cache-Verzeichnis an
    String Wert angeben

  7. Nach einem Neustart wird diese Einstellung übernommen
Ich habe das ganze mit Firefox 3.1 Beta 3 unter OpenSolaris 2009.06 getestet.

Ich habe mir einmal die Frage gestellt wie man einen erstellten zpool nachträchlich umbennen kann. Das kann nötig sein, da der Name eines zpool auf einen System eindeutig sein muss. So kann es vorkommen, dass man 2 usb-Sticks hat mit einem zpool, der tank heißt. 

  1. zpool der umbenannt werden soll exportieren: zpool export <poolname>
  2. zpool importieren und umbennen: zpool import <alter poolname> <neuer poolname>

Man sollte aber dafür sorgen, dass beim import der Name aller zpools eindeutig ist (ggf. Platten/sticks abmounten)

Es gibt für Firefox ein ftp-Plugin. Ich nutze es unter Solaris, mir gFTP (Packet heißt unter Open Solaris SUNWgftp) nicht gefällt. gftp hat bei mir auch manchmal Aussetzer, sodass ich lieber mit ftp auf der Komandozeile gearbeitet habe.

 FireFTP läuft bei mir im Firefox 3.1 Beta 3 unter Open Solaris Build 111a. Es kann neben ftp auch sftp und ist auf jeden Fall einen Blick wert, auch wenn man nicht Solaris nutzt. Die aktuelle deutsche Version von FireFTP kann man unter https://addons.mozilla.org/de/firefox/addon/684  schnell herunter laden.