Bash-Completion bei Ubuntu Netbook Remix

Durch ein paar Experimente mit KDE war auf meinem Netbook mal wieder eine Neuinstallations fällig. Da ich den Netbook Remix schon länger nicht mehr getestet hatte, habe ich ihn mal wieder ausprobiert. Nach ein paar frustrierenden Tagen bin ich nun jedoch wieder auf den Standard Gnome Desktop umgestiegen. Dummerweise scheint im Netbook Remix jedoch nicht die komplette Bash-Completion aktiviert zu sein. Nach kurzem Suchen habe ich die Lösung im Ubuntuusers Wiki gefunden. Einfach in /etc/bash.bashrc oder ~/.bashrc den Folgenden Codeblock auskommentieren bzw. hinzufügen:

if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi

Danach funktioniert die Bash-Completion auch wieder für Optionen und ähnliches.

Deutsches Keyboard Layout in Gentoo

Nach ein paar Updates hatte ich Probleme mit meinem Keyboard Layout unter X. Es war mir nicht mehr möglich das Layout auf Deutsch zu stellen. Nach kurzer Suche im Gentoo Forum wurde ich jedoch fündig und nun habe ich auch die geliebten Umlaute wieder 😉

Zur Lösung des Problems reichte es mir in die Datei /usr/share/X11/xorg.conf.d/10-evdev.conf eine Option in der Keyboard InputClass hinzuzufügen:

Section "InputClass"
   Identifier "evdev keyboard catchall"
   MatchIsKeyboard "on"
   MatchDevicePath "/dev/input/event*"
   Driver "evdev"
   Option "xkb_layout" "de"
EndSection

Webradio URL zum Windows Media Player 12 hinzufügen

Da ich in letzter Zeit, bedingt durch die Arbeit, mehr mit Windows zu tun habe, fallen mir doch des öfteren ein paar Witze der Programmierer aus Redmond auf. So heute wieder, als ich versuchte eine Webradio URL zu einer Playlist des Windows Media Player 12 hinzuzufügen. Im Grunde bräuchte man dafür ja nur ein Kontextmenü in dem man etwas wie URL hinzufügen… auswählen kann. Nach längerem Suchen und klicken in der Oberfläche des Players konnte ich solch eine Möglichkeit jedoch nicht finden. Ich konnte aber nicht glauben, dass WMP 12 diese Funktion nicht unterstützt, also kurze Suche im Netz und schon die Lösung gefunden.

Es scheint so, als wäre in der wunderbaren neuen intuitiven Oberfläche kein Platz für Webradios. In der heutigen Zeit sind solche Sachen die mit Internet zu tun haben ja auch nicht so interessant… Also werden sie einfach in das versteckte Menü ausgelagert. Dieses kann man entweder durch drücken der Alt-Taste erreichen oder aber mit Strg + m dauerhaft sichtbar machen. Hier findet man dann auch unter dem Menüpunkt Datei die Funktion URL hinzuzufügen.

Auch wenn man nun sagen kann, dass dies ein Fehler des Benutzers war, so intuitiv finde ich diese Steuerung jedenfalls nicht. Ich denke ein kleines Kontextmenü oder ein einfache Button zum hinzufügen einer URL sollte doch machbar sein 😉

Probleme beim Updaten

So, nach dem Umzug und längerer Blog-Abstinenz versuche ich jetzt wieder etwas regelmäßiger etwas zu schreiben. Ich fange gleich mal mit einem Problem beim Updaten meines Gentoo Systems an. Das war seit langem mal wieder überfällig, aber durch neue Teile und längeren Stillstand des Systems hatten sich recht viele Updates gehäuft. Es war also wieder fröhliches emergen und revdep-rebuilden angesagt. Dabei stieß ich auf folgenden Fehler:

can't read /usr/lib64/libdbus-1.la: No such file or directory

Nach kurzer Suche im Netz fand ich dann auch den entsprechenden Bugreport. Die Lösung des Problems war es ein Programm zu installieren und dies dann zu verwenden um die la Dateien zu reparieren:

# emerge lafilefixer
# lafilefixer --justfixit

Danach war das Problem gelöst und das System konnte erfolgreich auf den neusten Stand gebracht werden.

Probleme mit jabberd.eu ICQ Transport

In den letzten Tagen hatte ich ein paar Probleme mit dem jabberd.eu ICQ Transport. Da ich keinen Fehler in meiner Konfiguration finden konnte, gehe ich davon aus, dass die Probleme bei jabberd.eu liegen.

Aus diesem Grund habe ich auf den den ICQ Transport von draugr.de gewechselt.

Datenträger Automount und NTFS-3G mit Gentoo und Gnome

Auf seinem Desktop PC möchte man natürlich nur ungern externe Laufwerke per Hand einbinden. Daher bietet es sich an Automount zu aktivieren, so dass die Laufwerke direkt nach dem Einstecken eingebunden werden. Hier kurz welche Schritte ich dafür auf meinem Gentoo (ACCEPT_KEYWORDS=”~amd64″) unter Gnome durchführen musste.

Als erstes musste ich den Consolekit Dienst zum default Runlevel hinzufügen:

rc-update add consolekit default

Nach einem Neustart funktionierte der Großteil meiner Datenträger auch schon. Der Neustart war nötig, weil sich das Init-Script etwas seltsam verhalten hat. Es teilte mir nämlich mit, dass der Dienst aktiv sei, wenn ich ihn stoppen wollte, dass er nicht aktiv sei und wenn ich ihn starten wollte, dass er aktiv sei…

Die Festplatten die nicht auf Anhieb funktionieren wollten, waren diejenigen, die mit NTFS formatiert waren. Da ich Lese- und Schriebzugriff haben wollte, entschied ich mich für NTFS-3G. Auch wenn es korrekt installiert war (siehe Gentoo-Wiki – NTFS-3G), wollte der Automount noch nicht so richtig. Das Problem war, dass der Gnome Automount das Dateisystem als NTFS erkennt und daher in dem Verzeichnis /sbin nach dem Programm mount.ntfs sucht. Dieses Programm war jedoch nicht vorhanden, weil es für NTFS-3G mount.ntfs-3g heißt. Ein einfacher Link löst dieses Problem:

ln -s /sbin/mount.ntfs-3g /sbin/mount.ntfs

Gentoo Linux Boot Splash generieren und einrichten

Hier eine kurze Beschreibung, wie man unter Gentoo Linux einen netten Boot Splash generiert und einrichtet. Zunächst muss man dafür den Kernel mit Framebuffer und Initramfs Unterstützung erstellen. Als nächstes benötigt man natürlich Splash Themes. Zwei grundlegende Pakete die in über Portage installiert werden können sind splash-themes-livecd und splash-themes-gentoo.

emerge splash-themes-livecd splash-themes-gentoo

Für dieses Beispiel werde ich das livecd-2007.0 Splash Theme verwenden. Der nächste Schritt ist ein Splash für die gewünschte Auflösung zu generieren. In meinem Fall wäre das 1680×1050:

splash_geninitramfs -v -r 1680x1050 -g /boot/livecd-2007.0 livecd-2007.0

Die Parameter für Auflösung und das gewünschte Splash Theme sollten natürlich an die eigenen Vorstellungen angepasst werden.

Der letzte Schritt ist die Kernel Parameter zu bearbeiten. Dazu mit dem bevorzugten Editor die Datei /boot/grub/grub.conf öffnen und die Kernelzeile folgendermaßen ändern:

kernel /boot/ck-source-2.6.34-r1 root=/dev/sda3 splash=silent,kdgraphics,theme:livecd-2007.0 quiet ro console=tty1

Nun sollte nach einem Reboot der neue Splash angezeigt werden.

Per Email über Updates informiert werden (Ubuntu Server)

Als Serveradministrator sollte man immer dafür sorgen, dass die auf einem Server installierten Pakete aktuell sind. Einerseits könnten neue Versionen einige nützliche Features enthalten und Andererseits, was noch viel wichtiger ist, Sicherheitslücken schließen. Bisher hatte ich auf meinem Server einfach die automatischen Sicherheitsupdates von Ubuntu aktiviert. Auch wenn der Server dadurch aktuell gehalten wurde, war ein Nachteil, dass ich meistens gar nicht bemerkt habe, wenn ein Update installiert wurde. Daher dachte ich mir, dass es keine schlechte Idee wäre, wenn mein Server mich automatisch über durchgeführte und ausstehende Updates informiert.

Nach einer kurzen Suche stieß ich auf apticron und eine Funktion der automatischen Updates. Damit die beiden Dienste Informationen über ausstehende sowie durchgeführte Updates per Email verschicken, muss zunächst ein Mail Transfer Agent (MTA) installiert und konfiguriert sein. Ich entschied mich dafür Postfix als Sattelite System zu verwenden. Im Grunde beutet dies, dass Postfix den SMTP Dienst eines anderen Servers zum versenden der Emails verwendet.

Grundlegende Informationen zur Installation unter Ubuntu kann man im entsprechenden Beitrag auf Ubuntuusers.de finden. Der Postfix Konfigurationsassistent ist im Grunde selbst erklärend. Da ich für das Versenden der Mails meinen GMail Account verwenden wollte, musste ich noch die Abschnitte Authentifizierung am Smarthost und Gmail. Durchführen. Danach funktionierte der Test und ich konnte Emails über meinen Server versenden.

Der nächste Schritt ist apticron zu konfigurieren. Hierzu kann man entweder das Konfigurationstool dpkg-reconfigure apticron verwenden oder aber direkt die Konfigurationsdatei /etc/apticron/apticron.conf bearbeiten. Für meine Installation reichte es bereits, dass ich in der Konfigurationsdatei den Wert der EMAIL Variablen änderte:

EMAIL="foo@bar.org"

Nachdem apticron konfiguriert ist, wird man per Email informiert, wenn es ein ausstehendes Update gibt. Um nun auch noch über durchgeführte Sicherheitsupdates informiert zu werden, muss man noch eine Konfigurationsdatei von apt bearbeiten. Die entsprechende Konfigurationsdatei für automatische Updates ist /etc/apt/apt.conf.d/50unattended-upgrades. Um den Emailversand zu aktivieren, muss man die Zeile

//Unattended-Upgrade::Mail "root@localhost";

auskommentieren und die gewünschte Email-Adresse angeben:

Unattended-Upgrade::Mail "foo@bar.org";

Da der Unattended-Upgrade Dienst das Programm mail verwendet, welches zu Postfix gehört, sind keine weiteren Schritte nötig.

Gentoo Bash Completion

Wer unter Linux oft mit dem Terminal arbeitet weiß, wie nützlich es ist per Tab die Parameter des jeweiligen Programms zu vervollständigen. Diese Funktion nennt sich Bash Completion. Unter Gentoo Linux muss diese Funktion jedoch erst aktiviert werden. Dazu sollte man zuerst in der Datei /etc/make.conf überprüfen, ob man das bash-completion USE-Flag aktiviert hat. Wenn nicht sollte dieses zunächst in die USE Variable eingetragen werden. Danach muss die neue USE Variable auf installierte Pakete angewendet werden:

emerge -uDN1q world

Danach sollte man sich noch vergewissern, dass die Pakete bash-completion und gentoo-bashcomp installiert sind:

emerge -pv bash-completion gentoo-bashcomp

Nun muss man noch die Datei /etc/bash/bashrc editieren, um Bash Completion beim starten einer neuen Shell zu aktivieren. Dazu die folgende Zeile vor den Aliases in die bashrc schreiben:

[[ -f /etc/profile.d/bash-completion ]] && source /etc/profile.d/bash-completion

Um die Änderungen zu übernehmen, sollte man die Shell noch neu starten, oder folgenden Befehl eingeben:

source /etc/bash/bashrc

Als erstes sollte man die Base Bash Completion aktivieren:

eselect bashcomp enable --global base

Nun kann man Bash Completion für jedes Programm, welches hierfür Unterstützung liefert, aktivieren. Eine Liste aller unterstützten Programme kann man sich mit dem folgenden Befehl ausgeben lassen:

eselect bashcomp list

Wenn man zum Beispiel Bash Completion für Git aktivieren will sieht das entsprechende Kommando folgendermaßen aus:

eselect bashcomp enable git

Oracle XMLType und XPath

XML ist heutzutage ein Standardformat für viele Zwecke im Internet und in der Datenverarbeitung. Um mit XML zu arbeiten, unterstützen Oracle Datenbanken den Datentyp XMLType. Dieser kann sowohl als einfache Variable als auch in einer Tabelle zur Definition einer Spalte verwendet werden. Somit lassen sich komplette XML Dokumente in der Datenbank ablegen und deren Inhalt sogar mit SQL abfragen.

Ein Hilfsmittel, um Daten aus einem XML Dokument abzufragen, ist XPath. Mit Hilfe von XPath ist es möglich durch den XML-Baum zu navigieren und bestimmte Knoten anzusprechen, auszulesen oder zu manipulieren.

Während meiner Arbeit hatte ich letztens mit diesem XML Datentyp in Form einer Variablen zu tun. Um bestimmte Knotenwerte des XML-Baums auszulesen, verwendete ich XPath. Hier nun eine kurze Beschreibung wie das ganze Funktioniert.

Zuallererst braucht man natürlich ein XML Dokument. Für Testzwecke kann das folgende verwendet werden:

<?xml version="1.0" encoding="ISO-8859-1"?>
<cdsammlung>
 <cd>
 <titel>Nevermind</titel>
 <kuenstler>Nirvana</kuenstler>
 <jahr>1991</jahr>
 <preis>15,98</preis>
 </cd>
</cdsammlung>

Zunächst muss dieses XML Dokument natürlich als Variable deklariert werden. Dazu wird der Datentyp sys.Xmltype verwendet:

declare
  xmlDoc sys.Xmltype;
  helper varchar2(64);
begin
  xmlDoc := sys.Xmltype('<?xml version="1.0" encoding="ISO-8859-1"?>
                         <cdsammlung>
                           <cd>
                             <titel>Nevermind</titel>
                             <kuenstler>Nirvana</kuenstler>
                             <jahr>1991</jahr>
                             <preis>15,98</preis>
                          </cd>
                        </cdsammlung>');
end;

Um nun zum Beispiel den Titel der ersten CD aus unserem XML Dokument auszugeben, müssen wir zunächst mit XPath zu dem entsprechenden Knoten navigieren. Um einzelne Knoten aus dem Dokument zu extrahieren, enthält Xmltype die Memberfunktion extract(). Mit ihrer Hilfe kann man den entsprechenden Knoten per XPath ansprechen:

SYS.XMLTYPE.extract(xmlDoc, '/cdsammlung/cd/titel')

Den Rückgabewert dieses Funktionsaufruf kann man mit dbms_output ausgeben. Dazu sollte man den Wert jedoch erst mit sys.Xmltype.getStringVal() umwandeln:

helper := SYS.XMLTYPE.getStringVal(SYS.XMLTYPE.extract(xmlDoc, '/cdsammlung/cd/titel'));
dbms_output.put_line('Titel Knoten: ' || helper);

Die Ausgabe sollte wie folgt aussehen:

Titel Knoten: <titel>Nevermind</titel>

Da der oben verwendete XPath Ausdruck den gesamten Knoten anspricht, wird auch der gesamte Knoten zurück- und ausgegeben. Das schließt natürlich auch die XML Tags mit ein. Um nur den Wert des Knotens auszugeben, muss man dies explizit im XPath Ausdruck angeben:

helper := SYS.XMLTYPE.getStringVal(SYS.XMLTYPE.extract(xmlDoc, '/cdsammlung/cd/titel/text()'));
dbms_output.put_line('Titel Wert: ' || helper);

Mit diesem XPath Ausdruck sollte nun nur noch der Wert des Knotens ausgegeben werden:

Titel Wert: Nevermind

Der gesamte PL/SQL Block um das beschriebene Beispiel auszuführen sieht wie folgt aus:

declare
  xmlDoc sys.Xmltype;
  helper varchar2(64);
begin
  xmlDoc := sys.Xmltype('<?xml version="1.0" encoding="ISO-8859-1"?>
                         <cdsammlung>
                           <cd>
                             <titel>Nevermind</titel>
                             <kuenstler>Nirvana</kuenstler>
                             <jahr>1991</jahr>
                             <preis>15,98</preis>
                          </cd>
                       </cdsammlung>');

  helper := SYS.XMLTYPE.getStringVal(SYS.XMLTYPE.extract(xmlDoc, '/cdsammlung/cd/titel'));
  dbms_output.put_line('Titel Knoten: ' || helper);

  helper := SYS.XMLTYPE.getStringVal(SYS.XMLTYPE.extract(xmlDoc, '/cdsammlung/cd/titel/text()'));
  dbms_output.put_line('Titel Wert: ' || helper);
end;

Ein recht gutes Tutorial für den Start mit XPath kann man auf der Seite der W3C Schools finden. Damit sollte ausgiebigen Spielereien mit XML Dokumenten in Oracle nichts mehr im Wege stehen 😉