MTP in Ubuntu 12.04 und 12.10

Bei neueren Androiden ist der Zugriff auf das Dateisystem mittels einer USB-Partition nicht mehr möglich. Google entschied sich, das von Microsoft und Canon vorgestellte MTP Protokoll einzubauen, das leider nicht bei allen Betriebssystemen einwandfrei Out-of-the-box unterstützt wird.

 

Abhilfe in Ubuntu 12.04 und 12.10

Dieser Workaround geht über ein Update des virtuellen Gnome Filesystems gvfs.

Eine direkte Implementierung ist erst in Ubuntu 13. 04 "Raring Ringtail". Bis dahin, und bis sich ein Umstieg lohnt steht jedoch ein PPA für 12.04+ zur Verfügung, in dem das ganze nachinstalliert werden kann. Folgende Befehle sollten das ganze nachinstallieren:

sudo add-apt-repository ppa:langdalepl/gvfs-mtp
sudo apt-get dist-upgrade
sudo apt-get upgrade

Abmelden und neu anmelden sollte das ganze aktivieren. Ein Neustart ist meistens nicht erforderlich.

Ich habe das Procedere auf meinem Lenovo x220 Tablet und einem Samsung Galaxy Note 2 Tab getestet. Funktioniert ohne Probleme

Zurücksetzen

Einfach das PPA wieder entfernen und das Dateisystem gtvfs downgraden:


sudo ppa-purge ppa:langdalepl/gvfs-mtp
sudo apt-get update

Fertig! 🙂

Trivialimplementierung: MySQL in C++

Ich habe eine sehr einfache Implementierung einer Zugriffsklasse auf MySQL in C++ geschrieben. Dient mehr als Schulungsmaterial und als Vorlage für eigene Implementierungen denn für den produktiven Einsatz.

Download

Im übrigen denke ich ernsthaft darüber nach, die Repository für diverses umzustellen und handlicher zu machen. Das Nackte Apache-Directory Listing ist mir mittlerweile zu einfach geworden 😉

Hello World Kernel Module

Heute geht's um Linux Kernel Module.

Ich zeige euch, wie ihr ein ganz simples "Hello World!" Modul erstellen könnt.

Ich benutze die Shell und einen Texteditor. Mehr brauchst du nicht für dein erstes Kernel-Modul!

 

Benötigte Vorkenntnisse

  • Linux - sudo und Root-Rechte
  • Texteditor
  • gcc
  • Makefile
  • C

Los geht's!

Und wir legen los. Am besten erstellst du ein neues Verzeichnis (ich arbeite im temp/hello_kernel Ordner) für das ganze

Und genau hier wird nun die datei module.c mit dem folgenden Inhalt erstellt. Die Datei könnt ihr hier downloaden.

Damit öffnet ihr vi als Texteditor und schreibt nun folgenden Inhalt in die Datei (i eingeben, um in den INSERT-Mode zu kommen).
(Randbemerkung: Hier gibt die Vi-Cheat Sheats. Ausdrucken und an die Wand nageln!!)
#include <linux/module.h>
MODULE_AUTHOR("Flex");
MODULE_LICENSE("Dual BSD/GPL");
MODULE_DESCRIPTION("Hello World module");
static int start__module(void) {
/* Use printk for debug prints of a kernel module */
printk(KERN_INFO " *** Hello linux! *** \n");
/* There are eight Loglevel-Strings, defined in <linux/kernel.h> */
/* (More precise: /linux/printk.h) */
/*
* #define KERN_EMERG
* #define KERN_ALERT
* #define KERN_CRIT
* #define KERN_ERR
* #define KERN_WARNING
* #define KERN_NOTICE
* #define KERN_INFO
* #define KERN_DEBUG
*
*/
/* Always use return 0 instant of EXIT_SUCCESS. On the
* kernel level, we return with 0 on success!
*/
return 0;
}
static void end__module(void) {
printk(KERN_INFO " *** Hello module exit *** \n");
}
/* This pointers design the entrance end exit functions of the module */
module_init(start__module);
module_exit(end__module);

Die Kommentare sollten für sich sprechen. mit STRG+C wechselt ihr in den Kommando-Modus von vi, und mit

Wird die Datei geschrieben und vi geschlossen.

Nur brauchen wir noch eine Makefile. Die Datei könnt ihr hier downloaden. Los gehts:

mit dem folgenden Inhalt

obj-m := module.o
PWD := $(shell pwd)
all:
make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) clean

 

Auf den genauen Inhalt will ich jetzt hier nicht eingehen. Betrachtet es einfach mal als von Gott gegeben, und benutzt die File. 😉

OK, nun wird das Modul kompiliert:

Fertig! Die Modul-Datei ist die module.ko, die brauchen wir nun.

 

Modul einbinden

Wir benutzen insmod mit Superuser-Rechten. Unter Ubuntu läuft mit sudo alles wunderbar

Und überprüft, ob das Modul geladen wurde

Sollte euch euer geladenes Modul anzeigen.

 

Nun wollen wir aber noch den Output vom printk anschauen. Das tool dazu ist dmesg. Wir pipen dmesg an tail, damit wir nur die letzten Zeilen erhalten.

gibt euch hoffentlich soetwas ähnliches wie die folgende Zeile aus:

Say hello to your little friend 🙂

 

Modul entfernen

Fertig. Wir pipen wieder dmesg an tail (Aber mit zwei Zeilen, damit wir sehen, wie lange das Modul gelaufen ist)

das Resultat schaut (hoffentlich) ungefähr so aus

Und so schaut das ganze am Bildschirm aus

Viel Spass beim Kernel-Hacking 🙂

PowerDNS und .local domain

In unserem Heimnetzwerk soll nun jeder Computer einen eigenen DNS-Eintrag im internen DNS-Nameserver erhalten.

Heute wollen wir PowerDNS mit PowerAdmin konfigurieren.

Voraussetzungen:

  • PowerDNS mit PowerAdmin (Backend ist egal)
  • Grundlegende DNS Kenntnisse
  • Funktionierender, konfigurierter PowerDNS (dieser Artikel ist hilfreich für Debian Systeme)

First attempt

Der erste Versuch eine .local Domäne anzulegen schlägt mit folgender Meldung fehl:

Ein Hobby-Admin lässt sich von solchen lächerlichen Meldungen natürlich nicht abhalten.

Lösung

Wir editieren die Datei /inc/config-me.inc.php im PowerAdmin Verzeichnis (auf dem Webserver) und finden dort die folgende Line

Die Line zwingt PowerAdmin zu überprüfen, ob es sich um eine strikt gültige Top-Level-Domain (tld) handelt und wirft eine eingegebene Adresse zurück, wenn dies nicht der Fall ist. Die 1 wird 'ne 0 und schon war's das!

Anschließend kann, wie gewohnt eine local-Domäne erstellt, und Records hinzugefügt werden.

 

Viel Spass!

Solution for the broken r8169 driver in Ubuntu

I had troubles with the Ubuntu r8169 driver and my Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller for a long time.

Finally it semms that I found a solution for a stable ethernet connections: The new r8168 driver (Version 8.031.00 - found here on Google Code) seems to work quite good out of the box.

Just extract it, and run (as root) autorun.sh via

Of course, you have to do this after a kernel update once again.
Don't forget this - It frakked me one time!

Thats all 🙂

Seems to do it's work quite good