Win8.1 Update unter Virtualbox

Standardmässig scheint es nicht möglich zu sein, Win8.1 unter VirtualBox zu installieren oder das Update darauf durchzuführen. Damit es installiert werden kann, im Terminal folgenden Befehl ausführen:

"c:\Program Files\Oracle\VirtualBox\VBoxManage.exe" setextradata [vmname] VBoxInternal/CPUM/CMPXCHG16B 1

[vmname] ist dabei der Name der virtuellen Maschine, z.B. „Win8“. Enthält der Name Leerzeichen, ist er auf jeden Fall in Anführungszeichen zu setzen.

Gefunden auf http://www.winboard.org/win8-installation/150773-upgrade-von-8-auf-8-1-unter-virtualbox-cpu-nicht-unterstuetzt.html

Jboss: Logging einrichten

Über die JBoss CLI kann man für seine Applikationen Loggingkonfigurationen definieren, die in der Applikation genutzt werden können.

Zuerst richtet man einen Handler ein, der für das Schreiben in einer Datei zuständig ist:

/subsystem=logging/periodic-rotating-file-handler="DBLOCATOR":add(formatter="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n", append=true, file={"relative-to"=>"jboss.server.log.dir", "path"=>"dblocator.log"}, suffix=".yyyy-MM-dd", name="DBLOCATOR")

Anschliessend definiert man einen Logger, den man später in der Applikation ansprechen kann:

/subsystem=logging/logger=de.sauerspace.dblocator:add(level=INFO, handlers=["DBLOCATOR"], use-parent-handlers=false)

In der Applikation bekommt man den passenden Log4J Logger dann über folgende Anweisung:

Logger log = Logger.getLogger( "de.sauerspace.dblocator" );

 

JBoss: Datasources einrichten

Update:

Nach diversen Problemen mit dem Deployment von Treibern und Einrichten von Datasources hier noch eine andere Variante, die jetzt wohl weniger Probleme macht. Die folgenden Befehle werden im JBoss CLI ausgeführt. Dazu im bin-Verzeichnis der JBoss Installation jboss-cli.sh ausführen. Anschliessend mittels connect mit dem laufenden JBoss verbinden. Funktioniert auch mit dem Wildfly.

module add --name=org.postgresql --resources=postgresql-9.3-1100.jdbc41.jar --dependencies=javax.api,javax.transaction.api
/subsystem=datasources/jdbc-driver=postgres:add(driver-module-name=org.postgresql,driver-name=postgres,driver-class-name=org.postgresql.Driver)
/subsystem=datasources/data-source="BeispielDS":add(jndi-name="java:jboss/datasources/BeispielDS",max-pool-size=10,min-pool-size=5,driver-name="postgres",connection-url="jdbc:postgresql://localhost:5432/beispieldb",user-name="beispieluser",password="geheim")

Die Datasource kann dann unter java:jboss/datasources/beispieldb angesprochen werden.


 

Alter Text:

Um eine Datasource im JBoss einzurichten, kann man dies per JBoss CLI umsetzen.

Falls der passende Treiber für die Datenbank noch nicht installiert ist, macht man dies mit folgendem Befehl. Anschliessend ist der Treiber unter dem Namen postgres referenzierbar.

deploy postgresql-9.3-1100-jdbc4.jar --name=postgres

Eine Datasource legt man mit folgendem Befehl an:

/subsystem=datasources/data-source="DBLocator":add(jndi-name="java:jboss/datasources/dblocator",max-pool-size=10,min-pool-size=5,driver-name="postgres",connection-url="jdbc:postgresql://localhost:5432/dblocator",user-name="username",password="geheim")

 

Arch Linux, Virtualbox und VERR_SUPDRV_COMPONENT_NOT_FOUND

Beim Starten einer virtuellen Maschine unter VirtualBox wurde mir die Fehlermeldung VERR_SUPDRV_COMPONENT_NOT_FOUND angezeigt. Ich hatte vorher die Netzwerkkonfiguration der virtuellen Maschine auf „Netzwerkbrücke“ umgestellt, anschliessend kam die Fehlermeldung. Als Fehler stellte sich das nicht geladene VirtualBox Modul vboxnetflt heraus.

Zum Starten des Modules kann man

sudo modprobe vboxnetflt

ausführen. Kann die virtuelle Maschine anschliessend ohne Fehler gestartet werden, trägt man das fehlende Modul unter /etc/modules-load.d/virtualbox.conf ein. Meine virtualbox.conf sieht nun wie folgt aus:

vboxdrv
vboxnetflt

IMAP-Server syncen

In den letzten Wochen sind mir mehrmals Festplatten meiner „Server“ verreckt. Auf den Servern lief unter anderem mein Mailserver mit Dovecot. Nachts werden die Daten zwar immer gesichert, aber der letzte Crash fand genau zum Zeitpunkt des Backups statt. Daher konnte ich dieses Backup nicht nutzen. Zum Glück konnte ich auf die Festplatte noch per externem Festplattengehäuse zugreifen und den aktuellen Stand des Mailservers manuell sichern und in der neuen Installation wieder einspielen.

Aber wie kann man die Daten dann zeitnah sichern? Mir fiel ein, dass auf meinem Synology-NAS ein Mailserver aktiviert werden kann. Idee war nun, den Hauptmailserver mit dem Mailserver auf der Synology zeitnah zu syncen. Da auf der Synology auch noch ein Webmailer installiert werden kann, hätte ich so eine Notbehelfslösung beim nächsten Crash.

Ich hatte mir zuerst Offlineimap angeschaut. Leider zickt es mit selbstgenerierten Zertifikaten bei SSL Verbindungen. Dann Imapsync gefunden. Es kann komplett über die Kommandozeile gesteuert werden. Und, da ich meine Rechner mittlerweile alle unter Arch Linux laufen lasse, es findet sich ein passendes Installationspaket in AUR, dem Programmrepository welches von Nutzern gepflegt wird.

Nach der Installation von Imapsync habe ich mir ein Shell-Skript angelegt, welches den Aufruf von Imapsync kapselt. Da auf dem Mailserver nur mein Account liegt, ist es eine ganz simple Lösung.

Das Shellskript findet sich unter ~/imapsync_calibanatspace.sh und hat folgenden Inhalt:

#!/bin/bash
imapsync --host1 localhost --port1 993 --user1 benutzername1 --password1 geheimespasswort1 --ssl1 --host2 backupmailserver --port2 993 --user2 benutzername2 --password2 geheimespasswort2 --ssl2 --delete2

Das Shellskript wird per Cron regelmässig aufgerufen. Ich lasse den Syncvorgang testweise erstmal alle drei Stunden durchführen. Daher habe ich folgendes für meinen Benutzer in der Crontab eingetragen:

0 0,3,6,9,12,15,18,21 * * * ~/imapsync_calibanatspace.sh

 

Arch Linux und Brother QL-570

Um einen Brother QL-570 unter Linux zu betreiben, stellt Brother hier passende Treiber zur Verfügung. Da ich Arch Linux nutze, konnte ich die angebotenen RPM- und DEB-Pakete nicht direkt nutzen. Ich habe jeweils den LPR– und Cupswrapper-Treiber im RPM-Format heruntergeladen und mit dem Archivmanager entpackt. Die beiden Treiber wurden anschliessend nach /opt/brother/PTouch/ql570/ kopiert. Anschliessend wird mittels sudo ./cupswrapperql570pt1 der Druckertreiber in Cups installiert. Wenn man den Drucker jetzt anschliesst wird er korrekt erkannt.

Arch Linux und Brother Scanner Treiber installieren

Um mit Arch Linux einen Brother Multifunktionsdrucker (bei mir ein MFC-J430W) als Scanner nutzen zu können, benötigt man einen der brscan Treiber. Unter http://welcome.solutions.brother.com/bsc/public_s/id/linux/en/download_scn.html kann man nachschauen, welchen Treiber (brscan, brscan2, brscan3 oder brscan4) man für sein Modell benötigt. Die vorhandenen Brother-Scanner-Treiber für Arch Linux findet man unter https://aur.archlinux.org/packages/?O=0&K=brscan aufgelistet. In meinem Fall ist der brscan4-Treiber zu nehmen. Da ich den Drucker/Scanner per WLAN ansteuern will nutze ich den brscan4-network Treiber (https://aur.archlinux.org/packages/brscan4-network/).

Über PacmanXG kann man auch Pakete direkt aus AUR installieren.  Dazu wählt man die Option „Incl. AUR“ aus und gibt dann brscan4-network ein. Nun wählt man brscan4-network aus und installiert das Paket.

Nach erfolgter Installation des Pakets öffnet man ein Terminal und gibt folgende Zeile ein:

sudo brsaneconfig4 -a name=MFCJ430W model=MFC-J430W ip=192.168.1.37

Damit wird ein Scanner mit der Bezeichnung MFCJ430W und dem Modell MFC-J430W installiert, welcher unter der IP-Adresse 192.168.1.37 im WLAN erreichbar ist. Die IP-Adresse kann man z.B. über das Bedienpanel des Druckers oder über eine entsprechende Informationsseite des WLAN-Routers ermitteln.

Weitere Infos zu Brother-Scannern und Arch Linux findet sich unter https://wiki.archlinux.org/index.php/Scanner#For_Brother_hardware.

#PrismBreak – Raspberry Pi Grundeinrichtung

Für mein PrismBreak Projekt hatte ich bisher verschiedene Rechner benutzt. Angefangen mit einem Raspberry Pi Modell A, dann ein Atom basierten PC zu einem Root-Server. Da ich die Daten und Dienste gerne wieder komplett unter meiner Kontrolle haben will, soll es jetzt wieder eine Lösung mit Raspberry Pi Rechnern werden. Dabei habe ich mir vorgenommen, jeden Dienst einzeln auf einem Raspberry laufen zu lassen. Also Owncloud, PostgreSQL-Datenbank und Mailserver jeweils auf einem eigenen Raspberry Pi. Fällt ein Raspberry aus sollte er einfach ersetzbar sein und nur der darauf installierte Dienst nicht erreichbar sein. Für den Start mit Owncloud und Mailserver sieht dies etwas nach overkill aus, ist aber gedacht als Grundlage für die Nutzung weiterer Dienste.

Als Linux war ich am Überlegen, ob es Raspian oder Arch werden sollte. Entschieden habe ich mich dann für Arch, da ich es bereits auf meinen Notebooks benutze und damit immer auf neuste Versionen von Software aktualisiert werde.

Einrichten Installationsmedium

Die Installation des Installationsimages auf eine SD-Karte gestaltet sich recht einfach. Die Anleitung findet sich hier.

Wichtig als Info: Benutzername und Passwort lauten „root„.

Die weiteren Tätigkeiten passieren auf der Kommandozeile. Entweder hat man an dem Raspberry eine Tastatur und Display angeschlossen, oder man verbindet sich per SSH. Für den Zugriff per SSH nimmt man unter Windows dazu Putty, unter Linux den normalen SSH Client. Für den Zugriff benötigt man die IP-Adresse, unter der der Raspberry im LAN erreichbar ist. Kann man die IP-Adresse über den Router, der die IP-Adressen im LAN bereitstellt und den Geräten zuweisst, ermitteln, kann man sich nun direkt per SSH mit dem Raspberry verbinden. Geht dies nicht, bleibt noch die Möglichkeit, sich per Tastatur und Display direkt am Raspberry anzumelden. Dazu gibt man als login „root“ und das Password „root“ ein. Anschliessend ruft man den Befehl „ifconfig“ auf. Nun werden die Netzwerkschnittstellen mit ihren Daten angezeigt. Es sollte ein Eintrag mit „eth0“ aufgeführt werden. Dort steht neben „inet“ eine Zahlenfolge, dies entspricht der IP-Adresse, unter der der Raspberry zu erreichen ist (bei mir 192.168.1.28).

HINWEIS: Beim erstmaligen verbinden per SSH wird man darauf hingewiesen, dass die Authentizität des Raspberry nicht überprüft werden kann. Man wird gefragt, ob man die Verbindung trotzdem aufbauen möchte. Diese Frage sollte man dann mit yes beantworten. Das sieht beispielhaft dann wie folgt aus:

Bildschirmfoto von »2013-12-25 16:51:52«

Verbindung per SSH mit Raspberry Pi herstellen und „Fingerabdruck“ lokal speichern

Eine Verbindung per SSH-Client kann man unter Linux mit folgender Befehlszeile aufbauen:

ssh -l root [IP-Adresse Raspberry Pi]

Mit der Option -l wird dem SSH-Client mitgeteilt, mit welchem Benutzernamen man sich verbinden will. Dies ist in diesem Fall root.
[IP-Adresse Raspberry Pi] ersetzt man entsprechend mit der ermittelten IP-Adresse des Raspberry Pi, im Beispiel oben 192.168.1.28.

Ländereinstellung anpassen

Standardmässig ist die Arch-Installation nicht auf deutsch eingestellt. Daher passen wir das noch an.

Bildschirmfoto von »2013-12-25 17:04:30«

Spracheinstellung nach Installation

Um eine Spracheinstellung vornehmen zu können, muss in /etc/locale.gen eine passende Zeile auskommentiert oder hinzugefügt werden. Die einfachste Variante ist folgende Zeilen ausführen zu lassen:

echo de_DE.UTF-8 UTF-8 >> /etc/locale.gen
locale-gen
localectl set-locale LANG="de_DE.UTF-8"
Spracheinstellung auf deutsch und UTF-8 setzen

Spracheinstellung auf deutsch und UTF-8 setzen

Damit die Änderungen greifen, muss der Raspberry Pi mit folgender Zeile neu gestartet werden. Dabei wird die SSH-Verbindung zum Raspberry beendet:

systemctl reboot

Partitionieren des Installationsmedium

Standardmässig wird nur ein 2GB grosses Image auf die SD-Karte geschrieben. Daher geht in der Regel viel Speicherplatz verloren, der auf der SD-Karte noch vorhanden ist. Im Folgenden wird beschrieben, wie die Partition(en) vergrössert werden, damit der komplette Speicherplatz auf der SD-Karte genutzt werden kann. Ich habe mich an der Anleitung orientiert, welche hier zu finden ist.

Die folgenden Befehle kann man direkt so eingeben:

fdisk /dev/mmcblk0
p
d
2
n
e
2
[Return]
[Return]
n
l
[Return]
[Return]
p
w

Das sieht im Terminal dann wie folgt aus:

Partition neu anlegen

Partition neu anlegen

Nun muss der Raspberry wieder neu gestartet werden:

systemctl reboot

Wenn er wieder hochgefahren ist und wir uns per SSH verbunden haben, vergrössern wir die Partition:

resize2fs /dev/mmcblk0p5
Partition vergrössern

Partition vergrössern

Nun steht der volle Speicherplatz der SD-Karte zur Verfügung!

System updaten/upgraden

Zu guter Letzt aktualisieren wir die Arch Installation auf den aktuellsten Stand. Dazu folgende Befehle ausführen:

pacman -Sy
pacman -Su --noconfirm
systemctl reboot

Der Reboot am Ende ist nur notwendig, wenn man erkennt, dass ein neuer Linuxkernel installiert wurde.

jCIFS und OutOfMemoryExceptions

Aktuell arbeite ich mit jCIFS, einer Java-Libary für den Zugriff auf Windows-Shares. Dabei wurde in bestimmten Situationen reproduzierbar eine OutOfMemoryException geworfen. Der Stacktrace deutete auf Probleme in SmbFile.listFiles() hin. In einer Mailingliste zu Samba gab es den Hinweis, dass es ein Problem mit „Name lookup threads“ geben könnte. Da mir aufgefallen war, dass bei Ausführung des Codes die Threadanzahl von ca. 60 auf über 1000 stieg, war das ein Hinweis, der eine heisse Spur sein könnte.

Über die statische Config-Klasse wurde dann per setProperty die Reihenfolge der aufzurufenden Nameresolver geändert. Und siehe da, dann gab es keine OutOfMemoryExceptions mehr und die Threadanzahl blieb bei ca. 60. So setzt/verändert man die Reihenfolge der Nameresolver:

Config.setProperty( "jcifs.resolveOrder", "DNS,LMHOSTS,WINS" );

Wichtig war DNS an den Anfang zu setzen. Defaultmässig steht es ganz hinten.