Archive for the ‘Solaris’ Category

Java-Applet – eine sinnfreie Erfindung

Ich kam leider nicht herum einmal ein Java-Applet auszuführen. Mein Firefox hat sich geweigert und meinte, dass es kein entsprechendes Plugin gibt. Das ganze ist mir auf meinen aktuellen Open Solaris (64-Bit Intel) und meinem Solaris 10 auf Ultrasparc (64-Bit) passiert. Auf beiden Systemen ist das aktuelle JDK installiert. Auf meinen Open Solaris-System habe ich außerdem das Package web/browser/firefox/plugin/firefox-java installiert

rennecke@walhalla /tmp % pkg info web/browser/firefox/plugin/firefox-java
          Name: web/browser/firefox/plugin/firefox-java
Zusammenfassung: Java runtime integration - plugin
  Beschreibung: Java runtime integration - plugin
     Kategorie: Applications/Plug-ins and Run-times
        Status: Installiert
   Herausgeber: opensolaris.org
       Version: 0.5.11
 Build-Release: 5.11
         Zweig: 0.134
Packaging-Datum:  2. März 2010, 07:19:23 Uhr
         Größe: 93.00 B
          FMRI: pkg://opensolaris.org/web/browser/firefox/plugin/firefox-java@0.5.11,5.11-0.134:20100302T071923Z

Die Lösung für das Problem findet man im Kleingedruckten auf der Download-Seite der JRE:

Bitte verwenden Sie die 32-Bit-Version für Java-Applet- und Java Web Start-Support.

Nachdem ich explizit die 32-Bit JRE installiert habe und einen symbolischen Link in das Plugin-Verzeichnis des Firefox gemacht habe gingen auch Java-Applets.

root@walhalla ~ % cd <Firefox-Installation>/plugins
root@walhalla /usr/lib/firefox/plugins % ln -s <JRE>/plugin/<i386|sparc>/ns7/libjavaplugin_oji.so .

Nun muss man den Firefox nur noch neu starten.

Noch ein Wort zum Schluss: Wann hört dieser Java-Wahnsinn aus? Wenn es Sun/Oracle nicht hinbekommt eine 64-Bit JRE zu bauen, welche auch Applets ausführt? Man kann es auch quick&dirty lösen: Einfach den 32-Bit Müll mit in das 64-Bit Paket packen, so wie ich es händisch mache.

Thunderbird 3.0.4

Für Solaris 10 gibt es auch den Thunderbird 3.0.4, da ich meine Einstellungen unter Open Solaris und Solaris 10 nutzen möchte. Auf meiner Solaris 10 Installation habe ich nur einen 2.0er Thunderbird. Dieser verträgt nicht alle Einstellungen von einem 3er Thunderbird von Open Solaris

Bei Sunfreeware gibt ein Pakage für den Thunderbird. Ich hatte nach dem Starten von Thunderbird den folgenden Fehler

rennecke@odysseus ~ $ /opt/sfw/bin/thunderbird
ld.so.1: thunderbird-bin: fatal: relocation error: file /opt/sfw/lib/thunderbird/thunderbird-bin: symbol g_slice_set_config: referenced symbol not found
/opt/sfw/lib/thunderbird/run-mozilla.sh: line 131:   551 Killed                  "$prog" ${1+"$@"}

Das ganze kann man einfach fixen indem man den LD_LIBRARY_PATH um /opt/sfw/lib/ erweitert. Ich habe außerdem die folgende Zeile in der Datei /opt/sfw/lib/thunderbird/thunderbird hinzugefügt:

export LD_LIBRARY_PATH=/opt/sfw/lib/:$LD_LIBRARY_PATH

So funktioniert auch der thunderbird, falls ein User seinen LD_LIBRARY_PATH selbstständig ändert.

mehr Software für Solaris

Manchmal ärgert man sich, dass es das ein oder andere Package nicht für (Open)Solaris gibt. Man kann ohne Probleme die Pakages von Blastwave bzw. OpenCSW nutzen. Es sind noch die “alten” SystemV-Pakages von Solaris 10 und älter. Man kann sie jedoch ohne Einschänkungen unter OpenSolaris nutzen.

Ich habe das Gefühl, das in Erlangen die meisten Pakages zu finden sind. Deswegen habe ich in meine /opt/csw/etc/pkgutil.conf die folgende Zeile eingetragen:

# Mirror to use for downloads
# See http://www.blastwave.org/mirrors.php for alternative mirrors
# Default: http://blastwave.network.com/csw/unstable
#mirror=http://blastwave.network.com/csw/unstable
mirror=http://csw.informatik.uni-erlangen.de/csw/unstable/

Wenn man Blastwave bzw. OpenCSW noch nicht nutzt, dann kann man hier nachlesen, wie man sich diese Packages zugänglich macht. Auf jeden Fall sollte man in der /opt/csw/etc/pkgutil.conf nachsehen, ob http://csw.informatik.uni-erlangen.de/csw/unstable/ als mirror eingetragen ist.

Was bringt Deduplikation?

Heute war ich beim Sun Day in Halle. Detlef Drewanz hat einen interessanten Befehl im Bezug auf Deduplikation genannt: zdb -S <poolname>

Damit lässt sich ermitteln, was eine Deduplikation des zpool bringen würde.


Eigenschaften von Zonen

Ich wurde in Bezug auf diesen Blog-Eintrag gefragt, was es für Zoneneigenschaften gibt, welche man für Regelmentierungen verwenden kann.

Als ersten möchte ich zeigen, wie man den Hauptspeicher limitieren kann.

root@global$ zonecfg -z myzone
zonecfg:myzone> add capped-memory
zonecfg:myzone:capped-memory> set physical=500m
zonecfg:myzone:capped-memory> set swap=1g
zonecfg:myzone:capped-memory> set locked=100m
zonecfg:myzone:capped-memory> end
zonecfg:myzone> exit
physical
Hierbei handelt es sich um eine Limitierung des physischen Hauptspeicher. Wenn mehr Speicher angefordert wird, dann kann dieser ausgelagert werden.
Eine Zone kann diesen Wert überschreiten und mehr Speicher anfordern.
swap
Das ist eine Begrenzung des virtuellen Speicher, d.h. eine Zone kann nicht mehr Speicher anfordern. Wenn ein Prozess in der Zone mehr Speicher anfordert, so schlägt diese Speicheranforderung fehl.
locked
Der allokierte Speicher ein Zone kann bis auf diesen Wert ausgelagert werden

Neben dem Hauptspeicher kann man auch die CPUs regelmentieren. Man dedizierter CPUs zuweisen oder das Scheduling verändern. Hier gibt eine gute Übersicht, bzgl. der Definition der CPU Shares.

root@global$ zonecfg -z myzone
zonecfg:myzone> add dedicated-cpu
zonecfg:myzone:dedicated-cpu> set ncpus=1-4
zonecfg:myzone:dedicated-cpu> end
zonecfg:myzone> exit

Was passiert nun?

  1. Beim booten der Zone werden die CPUs 1-4 werden aus dem default-Pool entfernt
  2. Es wird ein temporäer Pool erstellt mit den CPUs 1-4
  3. Beim stoppen der Zone werden die CPUs 1-4 wieder dem default-Pool zur verfügung gestellt.

Man kann auch sagen, dass eine Zone z.B. maximal 2,5 CPUs benutzen kann. Das sieht wie folgt aus:

root@global$ zonecfg -z myzone
zonecfg:myzone> add capped-cpu
zonecfg:myzone:capped-cpu> set ncpus=2.5
zonecfg:myzone:capped-cpu> end
zonecfg:myzone> exit

Nun möchte ich zeigen, wie man eine Zone 200 CPU-Shares und die FSS (Fair Share Scheduling) Klasse zuweist

root@global$ zonecfg -z myzone
zonecfg:myzone> set cpu-shares=200
zonecfg:myzone> set scheduling-class=FSS
zonecfg:myzone> exit

Als letztes Quota zum Thema CPU möchte ich zeigen, wie man die Anzahl der Threads/Prozesse begrenzt. Die folgende Zone kann maximal 250 Threads ausführen. Ein einzelner Prozess ohne Thredas zählt als ein Thread.

root@global$ zonecfg -z myzone
zonecfg:myzone> add rctl
zonecfg:myzone:rctl> set name=zone.max-lwps
zonecfg:myzone:rctl> add value (priv=privileged,limit=250,action=deny)
zonecfg:myzone:rctl> end

Man kann auf diese Weise auch noch andere Resourcen kontrollieren. Hier findet man eine Übersicher über die Resource Controls

Für Zonen kann es auch interssant sein, den Plattenpatz zu begrenzen. Da in Open Solaris zfs das default-Dateisystem ist, kann man Quotas und Reservations über die entsprechenden zfs-Eigenschaften machen. Die Wurzel der Zone liegt auf dem Dateisystem zones/myzone

root@global$ zonecfg -z myzone zfs set quota=10g zones/myzone
root@global$ zonecfg -z myzone zfs set reservation=5g zones/myzone

Systemmails per Thunderbird abrufen

Manchmal ist schön, wenn man die Systemmail abrufen kann. Bei OpenSolaris gibt es per default keinen Nutzer root und ein normaler Nutzer darf nicht auf Mails von root zugreifen. Die saubere Lösung ist, dass man einen Alias einrichtet. Dazu fügt man der /etc/aliases die folgende Zeilen hinzu. Anschließend werden alle Mails von root an jack weiter geleitet.

#######################
# Local aliases below #
#######################
 
root: jack

Nachdem man das nun gemacht hat muss man die /etc/aliases neu einlesen.

jack@walhalla ~ % pfexec newaliases
/etc/mail/aliases: 13 aliases, longest 10 bytes, 150 bytes total

Nun schicken wir root eine Testmail. Dazu verwenden wir das Kommando mailx. Um es zu beenden muss man . drücken.

jack@walhalla ~ % mailx root
Subject: Hallo
Hallo Welt!
.
EOT

Nun estellt man einen Symlink vom Mailverzeichnis, damit man die Mails auch im Thunderbird lesen kann. Es geht auch jeder ander Mailclient, welcher mit dem mbox-Format umgehen kann

1ss1e32i.default ist das aktuelle Profil, das ist auf jeden Rechner anders.

jack@walhalla ~ % ln -s /var/mail/jack .thunderbird/1ss1e32i.default/Mail/Local\ Folders/System

Fertig! Nun hat man nach dem Neustart von Thunderbird ein Unterverzeichnis System im Verzeichnis Lokale Ordner

Eine Zone in 10 Minuten

Ich kam gestern in die Verlegenheit mal schnell eine Zone aufsetzten zu müssen. Ich dachte mir, wenn ich das mal schnell mache, dann wenigsten mit RAM-Quota und CPU-Begrenzung. Es kann evtl. sein, dass man pkg:/service/resource installieren muss. Dieses Paket ist für die Verwaltung von RAM-Resourcen zuständig.

Ressourcenpools anstellen

rennecke@walhalla ~ % pfexec pooladm -e

Aktuelle Konfiguration in der /etc/pooladm.conf sichern

rennecke@walhalla ~ % pfexec pooladm -s

Nun erstellen wir einen Pool mit einem CPU-Set, welches über maximal 2 CPUs verfügt

rennecke@walhalla ~ % pfexec poolcfg -c 'create pset zone-pset (uint pset.min=1; uint pset.max=2)'
rennecke@walhalla ~ % pfexec poolcfg -c 'create pool zone-pool'
rennecke@walhalla ~ % pfexec poolcfg -c 'associate pool zone-pool (pset zone-pset)'

Als nächstes aktivieren wir die Konfiguration und speichern sie

rennecke@walhalla ~ % pfexec pooladm -c
rennecke@walhalla ~ % pfexec pooladm -s
rennecke@walhalla ~ % pfexec pooladm
 
system default
	string	system.comment
	int	system.version 1
	boolean	system.bind-default true
	string	system.poold.objectives wt-load
 
	pool zone-pool
		int	pool.sys_id 1
		boolean	pool.active true
		boolean	pool.default false
		int	pool.importance 1
		string	pool.comment
		pset	zone-pset
 
	pool pool_default
		int	pool.sys_id 0
		boolean	pool.active true
		boolean	pool.default true
		int	pool.importance 1
		string	pool.comment
		pset	pset_default
 
	pset zone-pset
		int	pset.sys_id 1
		boolean	pset.default false
		uint	pset.min 1
		uint	pset.max 2
		string	pset.units population
		uint	pset.load 5
		uint	pset.size 2
		string	pset.comment 
 
		cpu
			int	cpu.sys_id 1
			string	cpu.comment
			string	cpu.status on-line
 
		cpu
			int	cpu.sys_id 0
			string	cpu.comment
			string	cpu.status on-line
 
	pset pset_default
		int	pset.sys_id -1
		boolean	pset.default true
		uint	pset.min 1
		uint	pset.max 65536
		string	pset.units population
		uint	pset.load 562
		uint	pset.size 2
		string	pset.comment 
 
		cpu
			int	cpu.sys_id 3
			string	cpu.comment
			string	cpu.status on-line
 
		cpu
			int	cpu.sys_id 2
			string	cpu.comment
			string	cpu.status on-line

Nun kommen wir zum eigenlichen erstellen der Zone

rennecke@walhalla ~ % pfexec zonecfg -z zone1
zone1: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:zone1> create
zonecfg:zone1> set zonepath=/export/zone/zone1
zonecfg:zone1> set autoboot=true
zonecfg:zone1> add net
zonecfg:zone1:net> set address=192.168.1.10/24
zonecfg:zone1:net> set physical=rge0
zonecfg:zone1:net> set defrouter=192.168.1.1
zonecfg:zone1:net> end
zonecfg:zone1> set pool=zone-pool
zonecfg:zone1> add capped-memory
zonecfg:zone1:capped-memory> set physical=200m
zonecfg:zone1:capped-memory> set swap=400m
zonecfg:zone1:capped-memory> set locked=30m
zonecfg:zone1:capped-memory> end
zonecfg:zone1> verify
zonecfg:zone1> commit
zonecfg:zone1> exit

Ich denke, dass sich alles von selbst erklärt, wenn jedmand Fragen hat, dann bitte einen Kommentar bzw. die Manpage lesen. Als nächsten Schritt installieren wir die Zone und booten sie anschließend.

rennecke@walhalla ~ % pfexec zoneadm -z zone1 install
A ZFS file system has been created for this zone.
   Publisher: Using opensolaris.org (http://pkg.opensolaris.org/dev/ ).
   Publisher: Using pending (http://pkg.opensolaris.org/pending/).
   Publisher: Using contrib.opensolaris.org (http://pkg.opensolaris.org/contrib/).
       Image: Preparing at /export/zone/zone1/root.
       Cache: Using /var/pkg/download.
Sanity Check: Looking for 'entire' incorporation.
  Installing: Core System (output follows)
DOWNLOAD                                  PKGS       FILES    XFER (MB)
Completed                                44/44 12305/12305    85.9/85.9 
 
PHASE                                        ACTIONS
Installationsphase                       17833/17833
Für dieses Abbild sind keine Updates erforderlich.
  Installing: Additional Packages (output follows)
DOWNLOAD                                  PKGS       FILES    XFER (MB)
Completed                                36/36   3233/3233    20.6/20.6 
 
PHASE                                        ACTIONS
Installationsphase                         4329/4329 
 
        Note: Man pages can be obtained by installing SUNWman
 Postinstall: Copying SMF seed repository ... done.
 Postinstall: Applying workarounds.
        Done: Installation completed in 606,736 seconds.
 
  Next Steps: Boot the zone, then log into the zone console (zlogin -C)
              to complete the configuration process.

Die Geschwindigkeit zum erstellen der Zone hängt von der Downloadgewindigkeit maßgeblich ab. Wenn man Pech hat, wartet man sehr lange auf die 100 MB…

Nachdem nun die Zone installiert ist müssen wir sie nur noch booten und initial konfigurieren

rennecke@walhalla ~ % pfexec zoneadm -z zone1 boot
rennecke@walhalla ~ % pfexec zlogin -C zone1
[Connected to zone 'zone1' console]
 
You did not enter a selection.
What type of terminal are you using?
 1) ANSI Standard CRT
 2) DEC VT100
 3) PC Console
 4) Sun Command Tool
 5) Sun Workstation
 6) X Terminal Emulator (xterms)
 7) Other
Type the number of your choice and press Return: 2

Es ist sehr zu empfehlen für die Konfiguration ein VT100 Terminal zu nehmen. Das ich zwar nicht schön, aber man kann auj jeder Konsole ordentlich arbeiten, ohne das was verschoben wird.

korrekte Uhrzeit

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.

unison

Mit dem Tool unison kann man sehr gut Verzeichnisse synchronisieren. Es gibt auch ein Package für Open Solaris. Es heißt SUNWunison. Wenn man via ssh-Verbindung synchronisiert muss man vor dem Ziel-Verzeichnis 2 Backslash schreiben, wenn man nur lokal synchronisiert ist das nicht nötig. Ein Profil könnte dann wie folgt aussehen:

rennecke@trantor ~ $ cat .unison/default.prf
# Unison preferences file
root = /export/home/rennecke
root = ssh://rennecke@zeus//home/rennecke

Das Tool ist sehr intuitiv zu bedienen und ein Blick wert.

mplayer für OpenSolaris

Es gibt hier schon eine Anleitung, wie man den mplayer mit einer GUI übersetzt. Diese Anleitung funktioniert ganz gut, aber mencoder arbeitet nicht richtig.

Aus diesem Grund kommt hier meine Anleitung. Diese sieht wie folgt aus:

rennecke@walhalla tmp $ pfexec pkg install SUNWgcc SUNWgmake SUNWxorg-headers SUNWGtk SUNWsfwhea gcc-dev-4 gcc-runtime-4

Nachdem man sich den Code heruntergeladen und entpackt hat setzt man noch ein paar Umgebungsvariablen:

rennecke@walhalla mplayer-export-2010-02-18 $ export CC=/usr/bin/gcc-4.3.2 bzw. export CC=/usr/gcc/4.3/bin/gcc
rennecke@walhalla mplayer-export-2010-02-18 $ export PATH=/usr/gnu/bin/:$PATH
rennecke@walhalla mplayer-export-2010-02-18 $ ./configure  --prefix=/opt/mplayer --enable-gui
rennecke@walhalla mplayer-export-2010-02-18 $ make
rennecke@walhalla mplayer-export-2010-02-18 $ pfexec make install

Der Rest funktioniert, wird hier beschrieben.