Probleme mit dem SunRay-Server

Ich habe heute etwas länger geschlafen. Als erste Tagesaufgabe habe ich pflichtbewusst meine Mails gelesen und schon kam eine User-Mail, dass der SunRay-Server nicht läuft.

Ein Fehler war schnell gefunden: Der gdm lief nicht.

sunray ~ # svcs -a | grep gdm
disabled       11:38:23 svc:/application/gdm2-login:default
sunray ~ # svcadm enable svc:/application/gdm2-login:default

Nun konnte man sich via CDE einloggen, aber nicht mit dem Java Desktop, welcher auf gnome basiert. Nach nervigen Suchen hat sich auch Rumpel zu mir gesetzt. Dabei ist mir aufgefallen, dass in /tmp nur root schreiben darf, nachdem in /tmp wieder jeder schreiben durfte, lief wieder alles korrekt.

Mercurial

Ich wollte eben, mal schnell ein Mercurial-Repository einen Bekannten zur Verfügung stellen. Also habe ich es auf seinen Server kopiert. Nun kam die Überraschung: Es ging nicht mehr. Es gibt die typischen dubiosen Fehlermeldungen von Mercurial, bei denen niemand weiß was los ist. Da ich schon sehr lange unter Solaris mit Mercurial arbeite kenne ich so ein paar Fallstricke.

In diesem Fall war die Mercurial-Versionen verschieden. In vielen Fällen, kann man das wie folgt beheben:

# remote-Server
rennecke@odin /export/repos % hg init newrepo
# local host
rennecke@walhalla ~/repo (hg)-[default] % hg push ssh://rennecke@odin//export/repos/newrepo

Nachdem man auf dem Server ein leeren Repo angelegt hat, kann man die Inhalte rein pushen. Wenn man hinter einem Proxy-Server ist, kann man diesen gleich mit angeben:

rennecke@trantor ~ % hg --config http_proxy.host=my-proxy.org:3128 clone  ssh://rennecke@odin//export/repos/newrepo

Cloud Computing

Ich höre immer öfter von Cloud Computing. Jedes mal hört sich das ganze wie eine ganz neue Idee an. Dabei ist Cloud Computing, nach meiner Ansicht, ein alter Hut. Dieser hat bestimmt schon 50 Jahre auf dem Buckel. Was man unter Cloud Computing versteht kann nachlesen. Was ist aber der eigentliche Kern hinter der ganzen Geschichte?

Beim   Cloud Computing werden Rechen-, Speicherkapazitäten oder Dienste dynamisch zur Verfügung gestellt. Diese Kapazitäten und Dienste werden in der Regel über ein Netzwerk zugänglich gemacht. Auf den Mainframes der 1960er Jahre wurden auch Dienste und Ressourcen dynamisch angeboten und verwaltet. Die Rechenzeit wurde zum Teil auch bei den verschiedenen Kostenstellen gebucht. Auf diese Weise kann man auch aktuelle Enterprise-Server bzw. Mainframes ansetzten und dabei die Hardware dynamisch partitionieren.  Wo ist nun der Unterschied, ob man 4 volle Racks hat oder nur einen großen Rechner (1960 oder heute)?

Der Unterschied zu 1960 ist, das man seit einigen Jahren vorkonfiguriertes Blech mit entsprechenden Diensten kaufen kann. Ich habe den Vorteil, das ich auf das Blech und dem Dienst Garantie bekommen kann. Weiterhin gibt es Dienstleister, welche einen Dienste anbieten. Als Kunde muss man sich nicht mehr mit der Hardware belasten. Es ist aber durchaus interessant  im eigenen Rechenzentrum eine private Cloud zu betreiben. So kann man schnell auf sich änderte Bedingungen  reagieren.

Wenn ich es genau nehme, dann betreibe zu Hause meine eigene Cloud. Das Herzstück ist walhalla, auf ihn läuft ein Solaris 11 Express Edition. In dem Rechner sind einige Festplatten. Wenn ich etwas ausprobiere, dann erstelle ich schnell eine  Zone oder setzte mit VirtualBox ein Linux auf. Je nach dem was ich mache, erzeuge ich mir eine maßgeschneiderte Umgebung. Einige werden sich fragen, wozu der ganze Aufwand. Die Antwort ist ganz einfach: Es ist möglich und es macht mir Spaß. Den größten Mehrgewinn sehe ich darin, das ich mein System sauber halte. Denn ich weiß für was welche Zone gut ist.

P.S.: Ich habe 1960 gewählt, weil mir nichts besseres eingefallen ist.

Hochwasser in Halle

Einige Bilder vom Hochwasser in Halle. Ich habe einmal etwas an der Galerie herum gepfuscht. ich hoffe es gefällt Euch. Im Zweifel einen Kommentar schreiben.

Saalearm

Bild 1 von 51

Tree Tab Style bei Firefox

Ich nutze schon sehr lange den Tree Tab Style für Firefox. Heute ist mein Firefox unter Solaris alle 3 Minuten abgestürzt. Bis ich auf die Idee gekommen bin, dass es evtl. mein Tree Tab Style Plugin ist. Der Firefox hat gemeint, dass es kein Update gibt. Also habe ich auf der Projektseite des Entwickler nachgeschaut und dort gab es ein Update. Dieses funktioniert. Ob dieser Fehler nur bei Solaris auftritt weiß ich nicht.

partielle Sonnenfinsternis

Ich habe ein paar Bilder von der partiellen Sonnenfinsternis am 04.01.2011 gemacht. Der Wettergott war leider nicht ganz auf meiner Seite.  Man kann die Sonne nur erahnen… Ich hoffe ihr habt trotzdem etwas Spaß an Bildern. Ich habe versucht etwas mit der Helligkeit herum zu spielen, damit die Farben besser heraus kommen.

Im SunStudio die STL nutzen

Mir ist die Tage beim programmieren negativ aufgefallen, dass sich im Sun Studio 12 Express einige Funktionen anderst sind, als in der STL spezifiziert. Mir ist es bei std::sort aufgefallen. Man kann normal sort eine Funktion übergeben, welche die Elemente vergleicht. Diese Überladung existiert in der Sun STL nicht. Das ist bekannt und wurde schon an anderen Stellen diskutiert. Wenn man die STL nutzen möchte, dann muss man dem Compiler die Option -library=stlport4 mitgeben, dann wird die standartkonforme STL verwendet.

Im Sun Studio kann man diese Option unter Additional Options mit angeben.

Nutzer anlegen im Active Directory

Ich habe vor einigen Tagen mich mit dem Active Directory beschäftigen müssen. Für mich als Solaris-User ist das eine ganz andere Welt. Deswegen habe ich mich sehr schwer getan, ohne Martin wär dieser Artikel nicht möglich gewesen. Er stand mir mit Rat und Tat eine Stunde telefonisch zur Verfügung. Danke noch einmal!

Nun zu meinen Problem: Ich wollte Nutzer aus einer spool-Datei automatisch in das Active Directory eintragen. Weiterhin mussten die Benutzer in die Organizational Unit peter_lustig_user verschoben werden. Das anlegen der Nutzer habe ich noch alleine hinbekommen. Dazu habe ich aus zahlreichen Skripten Codezeilen kopiert. Aber das Verschieben habe ich nicht hinbekommen. Martin hat mich auf die Active Directory Tools von Microsoft hingeweisen. Diese fangen alle mit ds an. Mit dsquery * habe ich mich durch die Struktur des Active Directory gewühlt. Das grafische Frontend ist zwar schön, aber da habe ich nicht mitbekommen, aber da weiß ich nicht wie der Distinguished Name aussieht…
Zum Schluss bin ich zu folgen Skript gekommen:

Set args = WScript.Arguments
profile_pfad = "\\odin\homes\%username%\profile"
gruppe_neu = "benutzer"
if args.count <> 1 then
	MsgBox "Es muss genau eine spool-Datei angegeben werden"
	Wscript.quit
End If
Randomize
protokoll = "C:\Dokumente und Einstellungen\Administrator\Desktop\skripte\protokoll.txt"
Set fs = CreateObject("Scripting.FileSystemObject")
' Das WScript.Network-Objekt liefert den Namen des Computers
Set net = CreateObject("WScript.Network")
' Protokolldatei öffnen
Set output = fs.CreateTextFile(protokoll, True)
'Holt den Namen des Computers aus dem net Objekt
name = net.ComputerName
Set computer = GetObject("WinNT://" & name)
' Datei öffnen
dateiname = args(0)
If Not fs.FileExists(dateiname) Then
	MsgBox "Die Datei (" & dateiname & ") existiert am angegebenen Ort nicht!"
	WScript.Quit
End If
Set infos = fs.OpenTextFile(dateiname)
' Datei zeilenweise bis zum Ende (atEndOfStream) lesen:
Do Until infos.AtEndOfStream
	' eine Zeile einlesen
	zeile = infos.ReadLine
	' Informationen durch Semikola splitten
	details = Split(zeile, ";")
	username = Trim(details(0))
	' Konto anlegen
	Set kontoneu = computer.Create("User", Trim(details(0)))
	kontoneu.FullName = Trim(details(1))
	kontoneu.Profile = profile_pfad
	' Passwort auslesen, wenn es das default-Passwort ist, dann generiere ein Passwort
	passwort =  Trim(details(2))
	if passwort = "du34!$7_.4-@" then
		passwort = Trim(genPasswort)
		kontoneu.PasswordExpired = CLng(1)
	end if
	kontoneu.SetPassword passwort
	' Ablaufdatum setzten
	if trim(details(3)) <> "never" then
		kontoneu.AccountExpirationDate = Trim(details(3))
	end if
	' Normales Benutzerkonto
	kontoneu.UserFlags = 512
	if not fs.FolderExists("\\odin\homes\" & username) then
		set folder = fs.CreateFolder("\\odin\homes\" & username)
		set folder_files = fs.createfolder("\\odin\homes\" & username & "\files")
		set folder_profile = fs.createfolder("\\odin\homes\" & username & "\profile")
		set IShellDispatch2 = CreateObject("Shell.Application")
		Call IShellDispatch2.ShellExecute("C:\skripte\subinacl", "/file \\odin\homes\" & username & " /setowner=" & username, , , 0)
		Call IShellDispatch2.ShellExecute("c:\skripte\subinacl", "/subdirectories \\odin\homes\" & username & " /setowner=" & username, , , 0)
		Call IShellDispatch2.ShellExecute("C:\skripte\cacls", "\\odin\homes\" & username & " /T /G Administratoren:F " & username & ":F System:F < echo j", , , 0)
	end if
	err.clear
	On Error Resume Next
	kontoneu.SetInfo
	if Err.number = 0 then
		WriteLog "Benutzername:  " & username & "   Passwort: " & passwort
		AddToGroup gruppe_neu, kontoneu.ADsPath
		' User in die ou peter_lustig_user verschieben
		set dsMove = CreateObject("Shell.Application")
		dsMoveArg = " " & Chr(34) & "CN=" & username & ",CN=Users,DC=w2k8-pool,DC=windows,DC=0rpheus,DC=net" & Chr(34) & _
	                       " -newparent " & Chr(34) & "OU=peter_lustig_user,DC=w2k8-pool,DC=windows,DC=0rpheus,DC=net" & Chr(34)
		Call dsMove.ShellExecute("dsmove", dsMoveArg, , ,0)
	else
		if Err.number = -2147022672 then
			WriteLog "Fehler beim Anlegen von " & username & ": Nutzer existiert bereits"
		else
			WriteLog "Fehler beim Anlegen von " & username & ": " & Err.Number
		end if
	end if
	Err.Clear
Loop
' Dateien schließen
infos.Close
output.Close
' Protokoll anzeigen:
'SYS: Microsoft (r) Script Runtime
Set wshshell = CreateObject("WScript.Shell")
wshshell.Run """" & protokoll & """"
Sub AddToGroup(gruppenname, kontoname)
	On Error Resume Next
	Set gruppe = GetObject("WinNT://" & ComputerName & "/" & gruppenname & ",group")
	gruppe.Add kontoname
	gruppe.SetInfo
	If Err.number = 0 Then
		'WriteLog "Konto ist Mitglied in Gruppe " & gruppenname
	Else
		'WriteLog "Konto konnte nicht zum Mitglied in Gruppe " & gruppenname & " gemacht werden."
	End If
	Err.Clear
End Sub
 
Sub WriteLog(text)
	' eine Zeile ins Protokoll schreiben und Leerzeile einfügen
	output.WriteLine text & vbCrLf & vbCrLf
End Sub
 
function genPasswort()
	password = ""
	for i=1 to 12
		if Int(100*Rnd mod 2 ) = 1 then
			password = password & chr(Int(61*Rnd+33))
		else
			password = password & chr(Int(29*Rnd+97))
		end if
	next
	genPasswort = password
end function

Der AD-Guru oder Windows-Hardcore User wird sicher sagen, wie dumm ist das denn, das geht in einen 3-Zeiler. Aber ich kann kein Windows und will es eigentlich auch nicht lernen :P Wenn ich Zeit hätte wüsste ich wie man mit den ds*-Tools das ganze schöner machen könnte. Ich habe das komplette Skript hier rein gestellt, da man sicher die ein oder andere Zeile klauen kann *g*. Der Passwortgenerator ist schlecht, es war aber die schnellste Lösung.

Platz sparen mit zfs

Mir sind heute meine Festplatten fast voll gelaufen. Also habe ich quick&dirty die Kompression und die Deduplikation von zfs für die betreffenden Dateisysteme aktiviert. Da zfs (noch) kein rewrite der Daten hat, habe ich angefangen die Daten zu kopieren und anschließend die alte Version gelöscht. Für import und Export von Pool hatte ich einfach zu wenig Platz, deswegen die umständliche Aktion mit dem kopieren. Und dann kam der Schreck: du -hs zeigte auf einmal eine kleinere Größe an. Nach einiger Nachforschung habe ich mitbekommen, dass disk usage wörtlich zu nehmen ist. du zeigt wirklich die Größe an, welche auf dem Device verbraucht wird. Das GNU-du kann hier Abhilfe schaffen, mit /usr/gnu/bin/du --apparent-size -hs bekommt man die Aufsummierte Größe der Dateien. In diesem Zusammenhang ist der Blogeintrag von Ben Rockwood lesenswert.

Zum Schluss sei noch gesagt, dass sich die Aktion für meine Daten gelohnt hat. Ich habe zfs compression=on .... gesetzt, also keine gzip-Kompression benutzt.

OpenIndiana und erste Erfahrungen

Ich habe es endlich geschafft: ein Update auf OpenIndiana Im großen und ganzen kann man es einigermaßen benutzen. Die Lokalisierung ist mehr als schlecht. Das meiste kann man irgendwie fixen

Update auf OpenIndiana

Man findet hier auch die orginale Anleitung zum Update.

  1. update auf Build 134 bzw. Build 134 booten (wie man bootet zeige ich nicht ;-) )
    rennecke@walhalla ~ % pfexec pkg install SUNWipkg SUNWipkg-um SUNWipkg-gui
    rennecke@walhalla ~ % pfexec pkg set-publisher -O http://pkg.openindiana.org/legacy opensolaris.org
    rennecke@walhalla ~ % pfexec pkg image-update
  2. Update auf OpenIndiana
    rennecke@walhalla ~ % pfexec pkg set-publisher --non-sticky opensolaris.org
    rennecke@walhalla ~ % pfexec pkg set-publisher -p http://pkg.openindiana.org/dev
    rennecke@walhalla ~ % pfexec pkg set-publisher -P openindiana.org
    rennecke@walhalla ~ % pfexec pkg uninstall entire
    rennecke@walhalla ~ % pfexec pkg uninstall thunderbird # das Paket konnte ich nicht updaten
    rennecke@walhalla ~ % pfexec pkg uninstall songbird    # das Paket konnte ich nicht updaten
    rennecke@walhalla ~ % pfexec pkg image-update

Troubleshooting

  • Ich bekomme folgende Fehler
    rennecke@walhalla ~ % pfexec pkg image-update
    DOWNLOAD                                  PKGS       FILES    XFER (MB)
    mail/thunderbird                       183/838  8825/40200  120.2/648.9  
     
    Fehler beim Abrufen von Paket oder Dateidaten für
    den angeforderten Vorgang.
    Details folgen:
     
    Invalid content path usr/lib/thunderbird/thunderbird-bin: chash failure: expected: 64fd9c1561c244e0563dfc675dbd3a8c3c86f469 computed: 9179b65e28cc293105c6368ee818f1729eb7f991. (happened 4 times)

    oder

    rennecke@walhalla ~ % pfexec pkg image-update
    DOWNLOAD                                  PKGS       FILES    XFER (MB)
    mail/thunderbird                       190/838  7945/40200  131.8/648.9  
     
    Errors were encountered while attempting to retrieve package or file data for
    the requested operation.
    Details follow:
     
    Framework error: code: 18 reason: transfer closed with 13603900 bytes remaining to read
    URL: 'http://pkg.openindiana.org/dev/file/0/c5df73fea1fb6f63f0f17cf5e996e8525fc1a4f4'. (happened 4 times)

    Dann einfach das betreffende Paket deinstallieren und später wieder installieren.

  • Firefox und Thunderbird gehen nicht. Das Problem ist die Lokalisierung.


    rennecke@walhalla ~ % export LANG=C
    rennecke@walhalla ~ % firefox &amp;
  • Ich habe das falsche Tastaturlayout
    rennecke@trantor ~ $ setxkbmap de           # setzt das persönlich Layout auf de
    rennecke@trantor ~ $ cat .Xkbmap            # Datei wird ausgewertet, beim starten der Sitzung
    de

    Die ganzen anderen Möglichkeiten (welche solaristypisch sind) haben bei mir nicht funktioniert.

  • Enigmail bei Thunderbird funktioniert nicht mehr. Einfach auf der Webseite das Plugin herunter laden und installieren