01 Sep 2013, 17:03

Replace a failed HDD in an SW RAID

This post describes how to replace an failed HDD from an Linux Software-RAID while fixing GRUB. This is mostly for my own reference but posted here in the hope that someone may find it useful.

If one of your HDDs in a Software-RAID failed and your system is still running you should first mark all partitions of this device as failed. Let’s assume that /dev/sdb failed.

cat /proc/mdstat # check RAID status# mark the devices as failed, neccessary to remove them
mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm --manage /dev/md1 --fail /dev/sdb2
mdadm --manage /dev/md2 --fail /dev/sdb3
cat /proc/mdstat # check RAID status
# remove the failed devices
mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm --manage /dev/md1 --remove /dev/sdb2
mdadm --manage /dev/md2 --remove /dev/sdb3

Now you should replace the HDD. Usually this means shutting the system down - unless you have a very rare setup which allows for hot-plug of non-HW-RAID disks.

If the failed disk was part of the OS paritions you’ll proably need to boot into some kind of rescue system first to perform the follwing steps.

After the system is back up you have to copy the partition table from the old disk to the new one. This used to be done w/ sfdisk, however since HDDs are getting to big for MBR to handle many system are switching over to using GPT which isn’t handled by classic UNIX/Linux HDD tools. Thus we’ll be using GParted.

sgdisk -R=/dev/sdb /dev/sdb # copy partition table, be sure to get the devices right
sgdisk -G /dev/sdb # randomize GUID to avoid conflicts w/ first disk

Now you can re-assemable the RAID devices:

mdadm --manage /dev/md0 --add /dev/sdb1
mdadm --manage /dev/md1 --add /dev/sdb2
mdadm --manage /dev/md2 --add /dev/sdb3

You should let the system run until the RAID arrays have re-synced. You can check the status in /proc/mdstat.

Perhaps your bootloader got corrupted as well, just in case this are the steps necessary to re-install GRUB.

mount /dev/md1 /mnt # mount your /
mount /dev/md0 /mnt/boot # mount your /boot
mount -o bind /dev /mnt/dev # mount /dev, needed by grub-install
mount -o bind /sys /mnt/sys # mount /sys, needed by grub-install
mount -t proc /proc /mnt/proc
cp /proc/mounts /mnt/etc/mtab
chroot /mnt /bin/bash
grub-install --recheck /dev/sda
grub-install --recheck /dev/sdb
exit # leave chroot

Now you should wait until all MD Arrays are back in shape (check /proc/mdstat), then reboot.

reboot # reboot into your fixed system

29 Aug 2013, 12:37

Deploying Perl Web-Apps with Puppet

Since I was asked for I’d like to show one way of how you can deploy your perl web apps using debian packages and puppet.

This post assumes that you want to install some Plack webapps, e.g. App::Standby, Monitoring::Spooler and Zabbix::Reporter.

Those are pretty straight-forward Plack Apps built using Dist::Zilla.

cd Monitoring-Spooler
dzil build
I’ve built debian packages of these CPAN modules. Using dh-make-perl this is reasonably easy, although you’ll need some switches to make dh-make-perl a little less picky:
dh-make-perl –vcs rcs –source-format “3.0 (native)” Monitoring-Spooler-0.04
After building and uploading these packages to my repository I continue to use Puppet to install and configure those.

For each of these packages there is a custom puppet module, e.g. app_standby for managing App::Standby. This module create all necessary directories, manages the configuration and installs the package from my repository. It does not, however, set up any kind of webserver or runtime wrapper. This is done by another module: starman.

For running my Plack apps I use Starman which is managed by it’s own puppet module. It will install the starman package, manage it’s config and create an apache config. The interesting part is that I use puppet to automatically create an apache config and a simple Plack/PSGI multiplexer app that allows me to handle requests to all three (or more) of these apps using a single starman instance.

If these apps were rather busy I’d use a separate starman instance for each one, but as it is I’m more than happy to avoid the overhead of running multiple starman instances.

My starman module is invoked from one of my service classes like this:

  class { ‘starman’:
    configure => {
      mounts    => {
        ‘zreporter’     => ‘/usr/bin/zreporter-web.psgi’,
        ‘monspooler’    => ‘/usr/bin/mon-spooler.psgi’,
        ‘monapi’        => ‘/usr/bin/mon-spooler-api.psgi’,
        ‘standby’       => ‘/usr/bin/standby-mgm.psgi’,
The starman module itself is pretty straight-forward, but below are the templates for the apache config and the PSGI multiplexer.


<IfModule mod_proxy.c>
<% if @configure.has_key?(“mounts”) -%>
<% @configure[“mounts”].keys.sort.each do |mount| -%>
   <Location /<%= mount %>>
      Allow from all
      ProxyPass           http://localhost:<%= @configure.has_key?(‘starman_port’) ? @configure[“starman_port”] : ‘5001’ %>/<%= mount %>
      ProxyPassReverse    http://localhost:<%= @configure.has_key?(‘starman_port’) ? @configure[“starman_port”] : ‘5001’ %>/<%= mount %>
<% end -%>
<% end -%>
use strict;
use warnings;

use Plack::Util; use Plack::Builder;

my $app = builder { <% if @configure.has_key?(“mounts”) -%> <% @configure[“mounts”].keys.sort.each do |mount| -%>    mount ‘/<%= mount %>‘  => Plack::Util::load_psgi(’<%= @configure[“mounts”][mount] %>’); <% end -%> <% end -%>    mount ‘/‘           => builder {         enable ‘Plack::Middleware::Static’, path => qr#/.+#, root => ‘/var/www’;         my $app = sub { return [ 302, [‘Location’,‘/index.html’], [] ]; };         $app;    } };


04 Dec 2012, 18:04

GitLab behind a Reverse-Proxy

Running GitLab behind a (second) Reverse-Proxy over https?

In that case you should undefine the

proxy_set_header   X-Forwarded-Proto

header in the backend nginx and set it in the frontend nginx. Otherwise GitLab/RoR will redirect you to http on various ocasions. You should also set https in the config/gitlab.yml.

15 Oct 2012, 07:47

Escaping Filenames with Whitespaces for rsync

If you need to sync from a source path containing whitespaces you’ll need to escape those for the remote shell as well as for the local shell, so your command may look like this:

  rsync -ae ssh 'user@host.tld:/path/with\ some/gaps/' '/another/one with/ a gap/'

Don’t escape the whitespaces on the local side twice or you’ll end up with weired filenames!


08 Oct 2012, 17:16

Watching 3D Movies in 2D using Mplayer

In case you’ve got an 3D Movie w/o an 3D capable output device try mplayer w/ the

-vo gl:stereo=3

switch to get it in 2D. It works at least on Linux w/ an Nvidia Card.

16 Jul 2012, 14:24

Options for running Linux-Vserver on Debian wheezy


If you’re running Debian squezze with a Linux-Vserver kernel you’ll soon have to face the fact that support for non-mainline virtualization patches will soon be dropped from Debian stable.

The Debian kernel team stated very clearly that they won’t continue to provide custom patched kernel packages. In general I think that is a very good decision. Taking the workload for the team into account and the unwillingness of the Linux-Vserver and OpenVZ maintainers to cooperate with Debian this is very much understood.

So what to do now if have vservers running your business?

These are the options I could think of so far, feel free to suggest further:

  • Stay with Squeeze
  • LXC
  • KVM w/ Squeeze VM
  • VMWare ESXi w/ Squeeze VM
  • Custom patched Kernel
  • Xen w/ Squeeze domU

Staying with Squeeze

If you plan to stay with squeeze you’re good to go for quite a while. Of course squeeze security updates will end some time after the Wheezy release, but what to do with newer hardware which is not supported by Squeeze? So not an option I think.


Linux Containers (LXC) are the preferred contextualization from Wheezy on. They are maintained within the mainline kernel are said to have a very good intregration with it. The biggest drawback however, are the userspace tools. While the team developing those used to be quite active it has slowed down a bit recently without having brought the tools anywhere close to util-vserver - which aren’t perfekt either.

KVM w/ Squeeze VM and Vserver Kernel

You could run Wheezy or Squeeze w/ an Backport Kernel on your host and run an squeeze vserver kernel inside KVM. That sounds ugly and means having to set up a network bridge on your host.


Of course you could also turn all your vservers into KVM VMs. This is very much work and means completly migrating to an entirely differnt virtualization architecture. Not very nice.


Long story short: The management of an ESXi is an PITA.

Xen w/ Squeeze VM and Vserver Kernel

Same as KVM w/ Squeeze kernel. See above.


Same as KVM. See above.

Custom patched Kernel

While the Linux-Vserver team isn’t always cheered about debian they are still very active and continue to provide patches for recent kernel. The biggest drawbacks here are, that you have to care about security update yourself and that you need to build a custom set of util-vserver. Older versions from squeeze won’t work with newer kernels.

02 May 2012, 13:20

Stop writing useless programs


It’s kinda rude, but they aren’t entirely wrong …

13 Feb 2012, 11:29

Installing Ubuntu 11.10+ alternate via USB

If you’re not satisfied with the options the standard ubuntu installer provides you and want to more flexibility, e.g. installing on LVM and/or crypto devices, try yourself the hassle I had and do it this way: - get UNetBootIn - Attach the USB-Stick - Select “Ubuntu” -> “11.10_NetInstall_x64” - Boot the target system from the stick

Everything else, esp. using the HDMedia option does not work, as documented in several Bugreports. The NetInst Method in contrast seems to work pretty flawlessly.

17 Jul 2011, 13:01

Squid - HTTPS broken w/o tcp_outgoing_address

If you happen to run a squid inside a Linux-Vserver you should make sure that you’ve set tcp_outgoing_address to the primary IP of the vserver or you’ll encounter strange issues resulting in https not working from within the vserver:

1310903352.277      0 TCP_MISS/500 0 CONNECT bugzilla.redhat.com:443 user NONE/- -

27 Jun 2011, 08:00

Mount KVM Images

Want to mount a KVM image?

losetup /dev/loop0 foo.img
kpartx -av /dev/loop0
mount /dev/mapper/loop0p1 /mnt
unmount /mnt
kpartx -dv /dev/loop0
losetup -d /dev/loop0

via 1.

05 Feb 2011, 10:30

VBoxAdm Setup

The latest issue of the german Linux Magazin had a nice article about VBoxAdm.

They critisized that the installation on OpenSuSE is painful and I think they are right. The development of VBoxAdm is done on Debian and I have little knowledege about other distributions. If someone would be able to help out with packaging for OpenSuSE and other distributions that’d be great.

Meanwhile I’m working on a improved setup script that will handle most of the setup and make installing and setting up VBoxAdm a breeze.

05 Feb 2011, 09:54

Debian Squeeze Release in Progress

Thanks to Liveblogging at identi.ca/debian everyone can follow the release progress during this weekend. Too sad theres no release party nearby …

24 Jan 2011, 21:38

Linux IProute - Source based routing

Source based routing is usefull if you want to divert your traffic to different outgoing network interfaces based on their source IP. Of course this is only usefull if your system has more than on IP address and network interface.

The key to source based routing is the concept of multiple routing tables. Each of these routing tables has its own set of rules, including lo and a default gateway. These tables are created using the ip route command with a table NR suffix. The packets enter these tables if they are direct there by ip rules create with the ip rule command.

If you want to handle all traffic from sourceip /netmask via interface ethX, you’d need two rules for this traffic and some default rules for the remaining traffic as show below.

ip rule flush

ip rule add prio 200 from <sourceip/netmask> lookup 250
ip rule add prio 32700 from all lookup main
ip rule add prio 32750 from all lookup default

ip route add dev lo table 250
ip route add destip/net via dev ethX table 250
ip route add default via <defaultgw> table 250 <defaultgw> <sourceip>

22 Dec 2010, 19:07

Tutorial: ISP Mail Server mit VBoxAdm

Als Dokumentation zu VBoxAdm und als Nachfolger zu meinem ISP-Mailserver Tutorial, habe ich ein neues Tutorial basierend auf Postfix, Dovecot, VBoxAdm und Debian squeeze geschrieben. Zu finden das ist ein erster Entwurf unter ISP Mail Server mit VBoxAdm, MySQL, SpamAssassin, Postfix und Dovecot auf Debian GNU/Linux Squeeze.

Im Moment gibt es das ganze nur auf Deutsch, irgendwann vielleicht auch auf Englisch.

19 Dec 2010, 17:38

Handling salted passwords in Perl

While working on VBoxAdm I’ve came to a point where I did want to support salted passwords. Salted passwords however are a bit difficult since you need to extract the salt from the existing password hash and compare it to the user supplied password to hash it and compare the result. You can’t simply hash the supplied pass and use a random salt, that would produce different hashes.

If you’re not into salted hashes, I’ll try to explain how salted hashes are generated, why they are and how you can handle them.

What are salted hashes and why do you need them?

The simplest way to store passwords in a database would be to use plaintext. Let’s assume for the remainder of this post that we’ll use the password ‘password’ and the salt ‘salt’. If you use plaintext you just store the string ‘password’ in your database. That is easy to implement since you don’t need to do anything with the password and this gives you much flexibility since you can do anything with the password, e.g. support challenge response authentication schemes. However this has a major drawback: The (database) administrator and perhaps others, as well as any intruders that gain access to your database can see all users passwords. In a perfect world this wouldn’t be a big problem since all users should use a unique password for every service they use. Yet in the real world there is small but important problem: Many users will re-use their passwords for other services. This would allow an intruder to abuse the passwords to access (maybe) much more important accounts of your users and cause much trouble to them and possibly bad PR to you.

It’d be much better if the passwords would be encrypted in some way so the cleartext is not directly visible from the database. This would help with security and give your users more privacy. At least I would not want that anybody knows what passwords I use. Not even the administrator of the site I use the password for. This is were hashing comes into play. Hashes are cryptographic one-way functions that have the ability to produce an (almost) unique output for a given input. The same input always produces and same output and it is a very rare occasion that two different inputs produce the same output (which would be called a collision).  This solves much of the initial problem, but still some issues remains: If two users use the same password this would be immediately visible because they would have the same hashes. Another issue is that you can easily lookup the cleartext for a given hash in a rainbow table. I’m sure that at least intelligence services will have huge rainbow tables.

Luckily someone came up with the idea of salted hashes. A salted hash is generated by creating a random salt for every hashing operation and appending this salt onto the cleartext. Since there must be a way to compare hashes later the salt is usually appended to the resulting hash and can be extracted from there for subsequent hashing and comparison. This makes salted hashes pretty much safe against a wide area of attacks and meets many privacy requirements.

How to deal with these salted hashes in perl?

I’ll use the salted hashes created by Dovecots dovecotpw utility as an example since these were the hashes of my concern and they aren’t to most simple ones. These hashes are created by generating a random salt, appending it to the cleartext and appending the salt to the hash.
SSHA(password, salt) = SHA(password, salt) + salt
The SHA1 hash uses 20 bytes of (binary) data for the hash. The salt is variable length and consists of binary data. This is important: The salt is not just ASCII (7-bit) or UTF-8 (variable lenght, limited value range) but uses the full eight bit of each byte to allow for maximum entropy. This is important. If you doubt it get a good book on cryptograhpy and read up on the issue of randomness, entropy and cryptanalysis. The problem here is that perl is tailored to deal with text data and numbers but not binary data. I C this would be an easy task, but perl needs special care to handle this requirements.

Generating an salted hash is pretty easy: Generate a number of valid byte values (0-254) and pack() it into a binary string, e.g.:

sub make_salt {
    my $len   = 8 + int( rand(8) );
    my @bytes = ();
    for my $i ( 1 .. $len ) {
        push( @bytes, rand(255) );
    return pack( ‘C*‘, @bytes );
However if you want to compare a user-supplied pass with the salted hash in your database you have to take some more steps. You’ll first need to retreive the old salted hash from the database, extract the salt and hash the user supplied password toegether with this salt. If you’d use another salt the resulting hashes would be different and the user would not be able to login although the passwords match.

In my implementation I did separate the code into a split_pass method that dissects the old hash and extracts the salt (and possibly the password scheme used) and a make_pass method that takes a cleartext, a password scheme and a salt to generate a hashed password. The resulting hash is them compared with the stored hash and if they match the user may login or do whatever the authorization was requested for.

The split_pass method basically strips of the password scheme stored in front of the hash between curly brackets, decodes the Base64 encoded hash, unpack()s it and packs everything after the hash again into a binary string using pack(‘C*‘,@salt). The pack() template represents a one byte char, which is what we need here.

For the actual implementation I suggest you look at the Perl Module VBoxAdm::DovecotPW distributed with VBoxAdm.

package VBoxAdm::DovecotPW;

use strict;
use warnings;

use MIME::Base64;
use Digest::MD5;
use Digest::SHA;


my %hashlen = (
    'smd5'    => 16,
    'ssha'    => 20,
    'ssha256' => 32,
    'ssha512' => 64,

# Usage      : my $hash = VBoxAdm::DovecotPW::plain_md5('pwclear');
# Purpose    : ????
# Returns    : ????
# Parameters : ????
# Throws     : no exceptions
# Comments   : none
# See Also   : http://wiki.dovecot.org/Authentication/PasswordSchemes
sub plain_md5 {
    my $pw = shift;
    return "{PLAIN-MD5}" . Digest::MD5::md5_hex($pw);

sub ldap_md5 {
    my $pw = shift;
    return "{LDAP-MD5}" . pad_base64( Digest::MD5::md5_base64($pw) );

sub smd5 {
    my $pw = shift;
    my $salt = shift || &make_salt();
    return "{SMD5}" . pad_base64( MIME::Base64::encode( Digest::MD5::md5( $pw . $salt ) . $salt, '' ) );

sub sha {
    my $pw = shift;
    return "{SHA}" . MIME::Base64::encode( Digest::SHA::sha1($pw), '' );

sub ssha {
    my $pw = shift;
    my $salt = shift || &make_salt();
    return "{SSHA}" . MIME::Base64::encode( Digest::SHA::sha1( $pw . $salt ) . $salt, '' );

sub sha256 {
    my $pw = shift;
    return "{SHA256}" . MIME::Base64::encode( Digest::SHA::sha256($pw), '' );

sub ssha256 {
    my $pw = shift;
    my $salt = shift || &make_salt();
    return "{SSHA256}" . MIME::Base64::encode( Digest::SHA::sha256( $pw . $salt ) . $salt, '' );

sub sha512 {
    my $pw = shift;
    return "{SHA512}" . MIME::Base64::encode( Digest::SHA::sha512($pw), '' );

sub ssha512 {
    my $pw = shift;
    my $salt = shift || &make_salt();
    return "{SSHA512}" . MIME::Base64::encode( Digest::SHA::sha512( $pw . $salt ) . $salt, '' );

sub make_pass {
    my $pw     = shift;
    my $scheme = shift;
    my $salt   = shift || &make_salt();
    if ( $scheme eq 'ldap_md5' ) {
        return &ldap_md5($pw);
    elsif ( $scheme eq 'plain_md5' ) {
        return &plain_md5($pw);
    elsif ( $scheme eq 'sha' ) {
        return &sha($pw);
    elsif ( $scheme eq 'sha256' ) {
        return &sha256($pw);
    elsif ( $scheme eq 'sha512' ) {
        return &sha512($pw);
    elsif ( $scheme eq 'smd5' ) {
        return &smd5( $pw, $salt );
    elsif ( $scheme eq 'ssha' ) {
        return &ssha( $pw, $salt );
    elsif ( $scheme eq 'ssha256' ) {
        return &ssha256( $pw, $salt );
    elsif ( $scheme eq 'ssha512' ) {
        return &ssha512( $pw, $salt );
    else {
        return "{CLEARTEXT}" . $pw;

sub make_salt {
    my $len   = 8 + int( rand(8) );
    my @bytes = ();
    for my $i ( 1 .. $len ) {
        push( @bytes, rand(255) );
    return pack( 'C*', @bytes );
# this method was copied from some module on CPAN, I just don't remember which one right now
sub pad_base64 {
    my $b64_digest = shift;
    while ( length($b64_digest) % 4 ) {
        $b64_digest .= '=';
    return $b64_digest;

sub verify_pass {

    # cleartext password
    my $pass = shift;

    # hashed pw from db
    my $pwentry = shift;

    my ( $pwscheme, undef, $salt ) = &split_pass($pwentry);

    my $passh = &make_pass( $pass, $pwscheme, $salt );

    if ( $pwentry eq $passh ) {
        return 1;
    else {

sub split_pass {
    my $pw       = shift;
    my $pwscheme = 'cleartext';

    # get use password scheme and remove leading block
    if ( $pw =~ s/^\{([^}]+)\}// ) {
        $pwscheme = lc($1);

        # turn - into _ so we can feed pwscheme to make_pass
        $pwscheme =~ s/-/_/g;

    # We have 3 major cases:
    # 1 - cleartext pw, return pw and empty salt
    # 2 - hashed pw, no salt
    # 3 - hashed pw with salt
    if ( !$pwscheme || $pwscheme eq 'cleartext' || $pwscheme eq 'plain' ) {
        return ( 'cleartext', $pw, '' );
    elsif ( $pwscheme =~ m/^(plain-md5|ldap-md5|md5|sha|sha256|sha512)$/i ) {
        $pw = MIME::Base64::decode($pw);
        return ( $pwscheme, $pw, '' );
    elsif ( $pwscheme =~ m/^(smd5|ssha|ssha256|ssha512)/ ) {

        # now get hashed pass and salt
        # hashlen can be computed by doing
        # $hashlen = length(Digest::*::digest('string'));
        my $hashlen = $hashlen{$pwscheme};

        # pwscheme could also specify an encoding
        # like hex or base64, but right now we assume its b64
        $pw = MIME::Base64::decode($pw);

        # unpack byte-by-byte, the hash uses the full eight bit of each byte,
        # the salt may do so, too.
        my @tmp  = unpack( 'C*', $pw );
        my $i    = 0;
        my @hash = ();

        # the salted hash has the form: $saltedhash.$salt,
        # so the first bytes (# $hashlen) are the hash, the rest
        # is the variable length salt
        while ( $i < $hashlen ) {
            push( @hash, shift(@tmp) );

        # as I've said: the rest is the salt
        my @salt = ();
        foreach my $ele (@tmp) {
            push( @salt, $ele );

        # pack it again, byte-by-byte
        my $pw   = pack( 'C' . $hashlen, @hash );
        my $salt = pack( 'C*',           @salt );

        return ( $pwscheme, $pw, $salt );
    else {

        # unknown pw scheme


07 Dec 2010, 10:44

VBoxAdm 0.0.16: Debian package and translation updates

The latest release of VBoxAdm features Debian Packaging and translation updates. Several new translations are now available. Please note that most of these are machine translations, so I’d gladly accept any suggestions for improvements.

06 Dec 2010, 19:56

debsign: clearsing failed: secret key not available

Have you ever had the problem that you could not build and sign a debian package because gpg/debsign/dpkg-buildpackage did claim that your secret key was not available although the key was there and you used the -k option to tell dpkg which key to use and the environment variable DEBFULLNAME and DEBEMAIL were set?

Well, dpkg does something very stupid: It takes the Name and Email from the last changelog entry (Ok, so far) and does a full string match (Ouch!!!)! Why is this stupid? Because my key contains an alias, and if you’re reading this yours probably, too.

I don’t want my alias in the changelog entry, but until now this is the only solution I’ve found for this issue.

So, if you get errors like this:

Now signing changes and any dsc files...
signfile package_0.1-1.dsc Firstname Lastname &lt;user@domain.tld&gt;
gpg: skipped "Firstname Lastname &lt;user@domain.tld&gt;": secret key not available
gpg: /tmp/debsign.XdvV0Yi2/package_0.1-1.dsc: clearsign failed: secret key not available
debsign: gpg error occurred!  Aborting....
debuild: fatal error at line 1246:
running debsign failed
debuild -i -I returned 29
Couldn't run 'debuild -i -I'

Then you should look at the output of gpg -K and the last debian/changelog entry:

sec   2048D/DEADBEEF 2010-01-01
uid                  Firstname Lastname (nickname) &lt;firstname.lastname@domain.tld&gt;

package (0.0.1-1) unstable; urgency=low

* Initial release

-- Firstname Lastname &lt;user@domain.tld&gt;  Mon, 06 Dec 2010 18:22:40 +0100

The problem here was the last line of the latest changelog entry. After changing it to

-- Firstname Lastname (nickname) &lt;user@domain.tld&gt;  Mon, 06 Dec 2010 18:22:40 +0100

everything worked.

If you ask me: This is a bug with dpkg which should be fixed.

30 Nov 2010, 11:58

VBoxAdm - Management-GUI for Postfix and Dovecot

Last weekend I’ve released a new web-based management GUI for Mailservers running Postfix and Dovecot. It is called VBoxAdm.

Its features:

  • All-in-one mailserver solution
  • written in Perl (despite some tiny bits of PHP for the Roundcube integration)
  • MySQL Backend
  • Sane Database schema, w/ normalized tables
  • Roundcube integration which allows users to change their vacation messages and passwords
  • ships with its own Anti-Spam Proxy (no need for AMAViS, SpamPD or others)
  • and vacation auto-responder (RFC 3834 compliant)
You can grab it directly from here or get to its page for more details and some more screenshots.

Please beware, this is ALPHA quality code. Don’t use it in production yet. Some parts of the application haven’t even been tested partly. But the code ist more or less complete so besides testing and minor fixes it is in pretty good shape.

There are still some issues on my Todo list, most important is the password issue as well as localization and the ability to export the data to CSV and/or XML.

Before anyone yells at me: The design (CSS) is a complete ripoff of Postfix.Admin, but since both apps are open source (GPL2+) and I give full credit to Postfix.Admin, I think that’ll be ok. The reason for that is that, while investigating web-based management solutions for Postfix, I stumbled over Postfix.Admin but were rather unsatisfied with some of its features (Language its written in, Database Layout). So I’ve started my own. Since I was very happy with their design and I’m pretty bad at webdesign I’ve just borrowed most of their CSS.

Trivia: Somehow the (german) Admin-Magazin wrote about it before I did. Kudos.

11 Nov 2010, 10:17

Installing Dell OpenManage on Debian squeeze

Recently Dell made their own OMSA packages available for Ubuntu. Unfortunately they didn’t provide a version for Debian and the dependencies can not be fulfilled with Debian package only. To be able to install OMSA from Dell you need to follow the steps on their page but before you proceed with aptitude install srvadmin-all you need to download two packages from Ubuntu and install them.

Afterwards you’ll be able to install and use OMSA in Debian squeeze. No lenny, sorry. The binary versions don’t add up.

28 Sep 2010, 21:25

Resize a Xen disk image

Its as easy as appending zeros to the disk image.

Here I append 10 GB to disk.img. Please note that resize2fs will, of course, only work if your disk contains a ext2/3 partition.

cd /var/lib/xend/domains/domain/
dd if=/dev/zero bs=1024 count=10000000 >> disk.img
resize2fs -f disk.img

07 Jul 2010, 11:39

mini-buildd and Linux-Vserver

After discovering mini-buildd, a tiny Debian buildd, I’ve tried to set it up inside some vservers. mini-buildd uses LVM-Snapshots to avoid duplicate work when creating build chroots. I will setup a base debian chroot once and create a snapshot each time a build chroot is needed. This, however, is where the fun begins. The problem is that Linux-Vserver prevents its guests from performing most of the syscalls and ioctls needed by lvm2.

I didn’t manage to get the setup fully working so far but I wanted to share my experience in case anyone tries the same!

The basic setup of mini-buildd is quiet easy. I’ve decided for a setup with three versers, one for the repository, one buildd for amd64 and ond buildd for i386.

vs-buildd-rep -
vs-buildd-amd64 -
vs-buildd-i386 -
First we need to create these vservers:
newvserver –ip –domain localdomain –hostname vs-buildd-rep –vsroot /srv/vserver/ –mirror http://ftp.de.debian.org/debian –interface eth0 –dist lenny –arch amd64
newvserver –ip –domain localdomain –hostname vs-buildd-amd64 –vsroot /srv/vserver/ –mirror http://ftp.de.debian.org/debian –interface eth0 –dist lenny –arch amd64
newvserver –ip –domain localdomain –hostname vs-buildd-i386 –vsroot /srv/vserver/ –mirror http://ftp.de.debian.org/debian –interface eth0 –dist lenny –arch i386
After installing the vservers we need make some adjustments for LVM and set some capabilities:
cp -a /dev/loop* /srv/vserver/vs-buildd-amd64/dev/
cp -a /dev/mapper/control /srv/vserver/vs-buildd-amd64/dev/mapper/
echo “SECURE_MOUNT” >> /etc/vserver/vs-buildd-amd64/ccapabilities
echo “SECURE_REMOUNT” >> /etc/vserver/vs-buildd-amd64/ccapabilities
echo “ADMIN_CLOOP” >> /etc/vserver/vs-buildd-amd64/ccapabilities
echo “ADMIN_MAPPER” >> /etc/vserver/vs-buildd-amd64/ccapabilities
echo “MKNOD” >> /etc/vserver/vs-buildd-amd64/bcapabilities
echo “SYS_RESOURCE” >> /etc/vserver/vs-buildd-amd64/bcapabilities
echo “SYS_ADMIN” >> /etc/vserver/vs-buildd-amd64/bcapabilities
cp -a /dev/loop* /srv/vserver/vs-buildd-i386/dev/
cp -a /dev/mapper/control /srv/vserver/vs-buildd-i386/dev/mapper/
echo “SECURE_MOUNT” >> /etc/vserver/vs-buildd-i386/ccapabilities
echo “SECURE_REMOUNT” >>  /etc/vserver/vs-buildd-i386/ccapabilities
echo “ADMIN_CLOOP” >> /etc/vserver/vs-buildd-i386/ccapabilities
echo “ADMIN_MAPPER” >> /etc/vserver/vs-buildd-i386/ccapabilities
echo “MKNOD” >> /etc/vserver/vs-buildd-i386/bcapabilities
echo “SYS_RESOURCE” >> /etc/vserver/vs-buildd-i386/bcapabilities
echo “SYS_ADMIN” >> /etc/vserver/vs-buildd-i386/bcapabilities
Please note that these capabilities give the vs-buildd guests pretty much control over the host, so be careful how far you trust your buildds!

Now start the vservers, fix some broken defaults, upgrade to squeeze and install the requried packages.

When editing the sources.list you should replace all occurences of lenny by squeeze like so:

The reason for not installing squeeze directly with newvserver is that, at the time of this writing, newvserver can not handle squeeze.

For the repository vserver:

vserver vs-buildd-rep start
vserver vs-buildd-rep enter
update-rc.d cron defaults; /etc/init.d/cron start; vi /etc/apt/sources.list; aptitude update && aptitude install aptitude apt && aptitude updgrade; aptitude dist-upgrade; aptitude install mini-buildd-rep vim htop screen ssh exim4
a2endmod userdir
dpkg-reconfigure tzdata
dpkg-reconfigure locales
dpkg-reconfigure exim4-config
The Vservers need some way of sending mail, so the best would be to setup a mailserver somewhere, e.g. in the host, and then confiure it as a smarthost inside the vservers.

The next one is the amd64 buildd:

vserver vs-buildd-amd64 start
vserver vs-buildd-amd64 enter
dpkg-reconfigure locales; update-rc.d cron defaults; /etc/init.d/cron start; vi /etc/apt/sources.list; aptitude update && aptitude install aptitude apt && aptitude updgrade; aptitude dist-upgrade; aptitude install mini-buildd-bld vim htop screen ssh exim4
a2endmod userdir
dpkg-reconfigure tzdata
dpkg-reconfigure exim4-config
And the same for i386:
vserver vs-buildd-i386 start
vserver vs-buildd-i386 enter
dpkg-reconfigure locales; update-rc.d cron defaults; /etc/init.d/cron start; vi /etc/apt/sources.list; aptitude update && aptitude install aptitude apt && aptitude updgrade; aptitude dist-upgrade; aptitude install mini-buildd-bld vim htop screen ssh exim4
a2endmod userdir
dpkg-reconfigure tzdata
dpkg-reconfigure exim4-config
The setup of the mini-buildd is a bit tricky since the repository and the buildds depend on each other. So after performing the above steps you’ll probably need to reconfigure each.
  • in vs-buildd-rep: dpkg-reconfigure mini-buildd-rep
  • in vs-buildd-amd64 and vs-buildd-i386: dpkg-reconfigure mini-buildd-bld

To be continued!

Thats it for now. Howevery, so far I didn’t manage to get the buildds working. There are still some issues with the LVs. I’ll update this post as soon as I figure out how to fix this.

14 Mar 2010, 12:44

KDE4.4: Getting rid of Akonadi-MySQL Startup Errors

Since upgrading to KDE4.4 I’ve got startup errors each time Akonadi was started due to some missing MySQL system tables.

It’s easy to fix this:

akonadictl stop
mysql_install_db  –datadir=$HOME/.local/share/akonadi/db_data
akonadictl start
And don’t forget to install akonadi-kde-resource-googledata. Thanks to Trumpton.

25 Feb 2010, 20:02

Voyage Linux on an ALIX.2D13

I’ve just spent far too much time trying to install voyage linux on my new ALIX.2D13. Everything was fine, the only problem was that I did try to use GRUB and that wasn’t working. After changing to LILO it works like a charm. The problem is probably caused by a huge version gap between etch and sid. Etch has some something like 0.9x and sid 1.9x. I thought that the Voyage installer would use the shipped grub inside a chroot. Anyway, LILO works and this is fine. I have no special requirements for this box’s bootmanager. As soon as everything is set up and tested the box is going to be deployed.

The installation of voyage linux itself is covered in detail in the Getting Started guide.

Very usefull information can be found at networksoul and this chaos wiki.

I recommend picocom to connect to the serial console:

picocom –baud 38400 –flow n –databits 8 /dev/ttyUSB0
If your computer doesn’t have a serial port anymore, like mine, I recommend the LogiLink “USB2.0 to Serial Adapter” (UA0043 v.2.0). It’s cheap and works flawlessly. Another great LogiLink product I can reommend in this context is the LogiLink “USB2.0 Aluminum All-in-one Card Reader” (CR0001B v.2.0). Why I mention these two here? I find it hard to find cheap linux compatible adapters of which I know that they work on linux, so here is the information I would have like had before I bought those. The USB-Serial-Adapter is recognized as “Prolific Technology, Inc. PL2303 Serial Port”. The Card-Reader is shown as four separate drives.

24 Feb 2010, 21:50

DS18S20: CRC Error

I just got me some DS18S20 (1-wire Temperature sensors) and a DS2940 (1-wire to USB adapter). The first two did work like a charm, but the third one gave me CRC errors.

CRC Failed. CRC is 63 instead of 0x00
The reason was just that, after running the first two for a while, I did just disconnect them and attached the thrid one. My mistake was not to delete/re-initialize the .digitemprc. After moving the .digitemprc out of the way and re-initializing the new one the thrid one did also work.

Show all devices on the 1-wire bus:

digitemp_DS2490 -sUSB -w
Initialize the .digitemprc:
digitemp_DS2490 -sUSB -i
Read all sensors:
digitemp -sUSB -a -r750
Thanks to Marc for the hint.

Some usefull links:

Here are some pictures of my 1-wire bus:

18 Feb 2010, 12:35

Qt 4.6.2 ready to upload

It looks like Qt 4.6.2 is ready to upload. That means the upload of KDE 4.4 to Debian unstable should be very close.

09 Feb 2010, 21:05

Moving Root-FS to Crypto-Raid

Have you ever tried to move your Debian root filesystem to a RAID? Ok, no problem so far. What about LVM-on-RAID? Still no trouble? Then what about Root-on-LVM-on-Crypto-on-RAID? Sounds funny. Debian has several helpscripts which are able to create a suitable initrd file for this kind of setup. This is good and bad at the same time. The good thing is that they can detect a correct setup and create an appropriate initrd. The bad about this is that it won’t work if you just moving your system to this kind of setup. Imagine you’re still on an ordinary partition without all this fancy crypto, raid and LVM stuff. If you just execute update-initramfs -k <kernel> -u/-c the initramfs tools and the supplied hook scripts won’t know about your intentions. So you’ll have to create a full equipped chroot, set everything up like it would be on a realy Root-on-LVM-on-Crypto-on-RAID-System and run update-initramfs there. Of course you could build the initrd by hand, but I’m not going this Gentoo way.

So, what do you have to do? First you’ll have to create your RAID, luks Volume and LVM on top of each other. See the Gentoo tutorial above for these steps. This should be pretty straight forward. The interesting part starts as soon as you try to boot from your new root. If you did follow the tutorial you should have a working Grub but it won’t be able to boot your system since it can’t unlock your root fs.

So, after you’re back into your good ol’ system setup the chroot. This includes assembling the RAID, unlocking your luks Volume and mounting the LV. So these are the steps, assuming sane defaults for folders, partitions and device names:

mdadm –assemble /dev/md2 /dev/sdc2 /dev/sdd2
cryptsetup luksOpen /dev/md2 cryptoroot
vgchange -ay vg
mount -t ext3 /dev/mapper/vg-root /mnt
mount -t ext2 /dev/sdc1 /mnt/boot
mount -t proc proc /mnt/proc
mount –bind /dev /mnt/dev
LANG=C chroot /mnt /bin/bash
So, now you’re inside your proper chroot. You could just run update-initramfs, but that’ll probably fail. You need to setup mdadm first and create your crypttab.

Your /etc/mdadm/mdadm.conf should at least contain the partitions to scan and your array.

The command mdadm –detail –scan >>  /etc/mdadm/mdadm.conf should do it. But verify the file yourself!

Next you have to tell the mdadm-initramfs-script to start this array on boot. This is set in the file /etc/default/mdadm. Insert the full name of your array (e.g. /dev/md2) into the INITRDSTART variable in this file.

Now define a proper crypttab and you should be ready to create a working initrd. Make your crypttab look something like this:

cryptoroot   /dev/md2  none  luks,tries=3
Just generate a new initramfs, update grub (if necessary) and reboot.
update-initramfs -k all -u
In case you encounter any error let me know, I’ll try to help.

04 Feb 2010, 20:16

KDE 4.4 is ready!

A few minutes ago KDE 4.4 was tagged in the SVN. Soon the package maintainers will start building binary packages and hopefully they will arive in Debian sid soon. I can’t wait to try out the new Akonadi-powered KDE-PIM packages and the improved plasma shell.

Let’s see which other features will be presented in the release notes.

Update: The Announcement on dot.kde.org is out:  KDE Software Compilation 4.4.0 Introduces Netbook Interface, Window Tabbing and Authentication Framework

30 Nov 2009, 13:41

Groupware with Kontact

Kontact, a part of the Kolab project, has some very nice Groupware features that were presented on the MK09.

Fortunately most of these are very well usable even without a Kolab server.

Unfortunately these are not so well documented (or the documentation is not very easy to find).

When trying out these features in noticed that the groupware features will only work properly (at least with Kontact from KDE 4.3) if you access your mailbox via “Disconnected IMAP”. If you fail to do so you’ll probably get an “Write access denied” error.

Please note, that Kontact is very unstable sometimes, but again, this depends heavily on the version of Kontact/KDE you use. My experience is based on KDE 4.3 from Debian unstable.

Right, it is called unstable for a reason …

12 Sep 2009, 12:36

IPv6 Revisited

I’ve been following the IPv6 development for a while now and have looked at most IPv6 stuff. Today I did take a look at the Teredo proctoll and I’m impressed how well it works. Really nice. Try out Miredo on Linux or BSD.

11 Jul 2009, 18:16

Fonic, UMTS and Debian lenny on the EeePC

Recently I’ve got an EeePC 1000HE and lately also an UMTS-Stick, the Fonic Surf-Stick (a Huawei E160). I’ve read before that many people got this UMTS-Stick running on Linux, some even with Fonic, but none of them - it seems - used Debian lenny. Most were using Ubuntu which ships the Network-Manager > 0.7 which is capable of connecting to 3G-Networks. Unfortunately this version of Network-Manager is not available for Debian stable. There are Backports but they are not available for i386 at the time of this writing.

There are several way of getting your Netbook “on-the-air”:

  • pppd / Kppp / wvdial - I didn’t succeed with those. But the best choice seems to be wvdial which almost got me connected. PPPd failed without given any helpful output.
  • UMTSMon - This looks like a great tool, but it didn’t manage to get the connection running. It seemed to PPPd’s fault, though.
  • Network-Manager 0.7 and newer - Many people report to have no Problem whatsoever with this application, but it was not available for my system. Update: I did just verify my assumption: The Stick works flawlessly on Ubuntu with the Network Manager It took less than 30 seconds to get a working connection.
  • Vodafone Mobile Connect - This is very nice tool which works great. Not only is it able to detect the E160 Stick, it also has a very nice UI.
Here is a quick step-by-step instruction how to get online with your “Fonic Surf-Stick” on Debian lenny:
  • Boot your system, don’t connect the Stick yet.
  • When logged in connect the Stick.
  • Start Vodafone Mobile Connect, grab it from betavine before.
  • It will recognize your Stick as an Huawei E220 although it is a E160, but this doesn’t seem to matter.
  • Enter pinternet.interkom.de as APN, Username and Password can be left empty or use “fonic” for both. You should set the preferend connection type to “3G prefered” and use static DNS ( and
  • Mobile Connect will ask for your PIN it is needed.
  • Get a sufficient connection strength and click “Connect” in the UI. You should be online within a few seconds. If the connection fails, first try to get a better connection (just move the UMTS-Stick a bit around).
Please note that I’m running a custom Kernel (2.6.30) and thus didn’t need to use usb_modeswitch. If you’re running an older Kernel you’ll probably need to install an configure usb_modeswitch to get access to the modem part of the stick.

15 Jun 2009, 08:00

VMWare on Debian (64bit)

Since VMWare made their Server available at no cost this has risen to be an highly interesting alternative for virtualisation. Anyone can download it from their website and get serials for free. This is highly mature software and is rather easy to install. However, on 64-bit Systems there are a few caveats. If you happen to have the problem that VMWare won’t accept your serials, than you have to install the ia32-libs package. Also see the comments on this howto.

When you did successfully install VMWare, you probably want to provide your VMs with network connecitivity. There are several ways to achieve this and the approach depends on how you use your servers.

Interface Aliases: http://www.derkeiler.com/Mailing-Lists/securityfocus/focus-linux/2002-01/0094.html

Routing: Use Host-only network

iptables -t nat -A POSTROUTING -s -o eth0 -j MASQUERADE
iptables -A INPUT -i vmnet1 -s -j ACCEPT
iptables -A FORWARD -i eth0 -o vmnet1 -j ACCEPT
iptables -A FORWARD -o eth0 -i vmnet1 -j ACCEPT
iptables -t nat -I PREROUTING -p tcp -d  -i eth0 –dport  -j DNAT –to :

01 Jun 2009, 17:55

Synchronizing Amarok and Rhythmbox Metadata

Sometimes the world is cruel. Although most of the applications I use from day to day are open source its not easy to exchange metadata between those programs. Sometimes I switch my music player. Usually I switch between Amarok and Rhythmbox. But since I heavily rely on the Metadata, especially my song ratings, this can get very frustrating. Most of the metadata is stored within the MP3 files but the most important ones are not. After some searching around it looked like there is no proper solution to synchronize the metadata of my favourite music players. There are some approaches to import the music library from iTunes but it looks like nobody did ever want to do a two-way synchronization between Amarok and Rhythmbox.

After looking at the metadata formats (XML for Rhytmbox, MySQL for Amarok) I did start my own synchronization script. Right now it is working but needs some more polishing or it could eat your kittens.

Grab the script from Bifröst.

18 Apr 2009, 08:00

reStructured Text

I’ve discovered reStructured Text some time ago and have been using it since then for several tutorials, like the ISP Mailserver or the Rootserver ones.


I’d suggest to have a look at those if LaTeX would be too much of an overkill.

17 Apr 2009, 12:00

Prevent Debian from corrupting your manual Nvidia driver installation

Upgrades of the xserver packages have been corrupting my manual Nvidia driver (the proprietary blob version) for a long time. It looks like there is a feasible alternative: dpkg-divert. I’d saved myself from much hassle if I’d RTFM, but this is how live goes.

This two commands should help:

dpkg-divert –local –add /usr/lib/libGL.so dpkg-divert –local –add /usr/lib/libGL.so.1

17 Apr 2009, 08:00

rm Inode

Some files are hard to “catch” because of strange filenames. In this cases it’s best to remove them by their inodes.

Get the inode with “ls -i” and remove the file with this command:

find . -inum [inode-number] -exec rm -i {} \;

26 Feb 2009, 12:38

KDE4.2 and Nepomuk on Debian

Since the features of KDE4 were announced I was eager to try out the promised semantik desktop. Since I’ve been working on onologies once, I know that it is a great idea, but sometimes difficult to implement. So I wanted to see how the KDE guys did implement this. Sadly it didn’t work on Debian very well since the Debian packagers, did not - for some very good reasons - package the sesame2 backend for nepomuk which is required to get the most out of strigi/nepomuk. Today I was thinking about nepomuk again and was lucky to find a very good explaination how to get sesame2 for nepomuk running on Debian sid with KDE4.2 form experimental. The post I found is in german, so I’ll give a quick summary of what I’ve done here:

  • First you should get your system up-to-date: apt-get update && apt-get upgrade
  • Then install the required packages: apt-get install libqt4-dev build-essential cmake subversion qmake strigi-utils sun-java6-jdk sun-java6-jre
  • I prefer sun-java6, but you could also use openjdk-6-jre and openjdk-6-jdk instead.
  • Now checkout the kdesupport sources: svn co svn://anonsvn.kde.org/home/kde/tags/kdesupport-for-4.2/kdesupport
  • Change to the source directory: cd kdesupport/soprano
  • Create the build directory for cmake: mkdir build
  • Go into the build dir: cd build
  • Now you have to properly set JAVA_HOME: export JAVA_HOME=/usr/lib/jvm/java-6-sun, use /usr/lib/jvm/java-6-openjdk for openjdk
  • Create the makefiles: cmake ..
  • This should emit something like this:
    – Soprano Components that will be built:
       * Sesame2 storage backend (java-based)

    – Soprano Components that will NOT be built: * Redland storage backend * Raptor RDF parser * Raptor RDF serializer

    * The CLucene-based full-text search index library

    – Configuring done – Generating done

  • Now compile using make: make
  • And install: sudo make install. Please note that this will install the backend into /usr/local.
  • Then you should (re-)move your old redland repository: rm -rf ~/.kde4/share/apps/nepomuk. You’ll loose all your existing metadata (tags, ratings, etc.) this way. So maybe you want to backup this information instead.
  • You should stop strigi and nepomuk now in the system settings dialog of KDE.
  • Then edit the configuration file in ~/.kde4/share/config/nepomukserverrc with your favourite editor and change it like this:
    [Basic Settings]
    Configured repositories=main
    Start Nepomuk=true

    [Service-nepomukmigration1] autostart=false

    [Service-nepomukstrigiservice] autostart=true

    [main Settings] Storage Dir[$e]=$HOME/.kde4/share/apps/nepomuk/repository/main/ Used Soprano Backend=sesame2 rebuilt index for type indexing=true

  • Now you can enabled nepomuk and strigi again. Strigi should display an icon in the system area and you should see /usr/bin/nepomukservicestub nepomukstorage eating up a lot ressources.
Of course you can use aptitude instead of apt-get if you like.

02 Feb 2009, 11:49

Debian 5.0 'lenny' release planned for Mid-February

It seems as if the release-cylce of the next stable release of Debian, called lenny, will soon come to an end. The planned release date is the weekend around the 14th februar.

Let’s hope everything works out as planned …

14 Jan 2009, 14:33


Today Qt Software made an very important announcement: They are going to release Qt 4.5 with an additional license option: the LGPL. This means that Qt can be used in closed-source-software (and more restrictive OSS licenses) without paying royalties to Qt Software. This is great news. I hope that now there will be a SWT-Qt binding for eclipse which could improve the speed and responsiveness of eclipse by an order of magnitude (if it’s done right).

This is very, very promising.

11 Jan 2009, 13:50

KDE 4.2beta

It’s been a long time since the last post … Finally I’ve got something to say, again ;)

For some time now I’m using the KDE4.2beta packages for Debian from kde42.debian.net and they work very well. Much better than KDE 4.1 from experimental. Today I tried upgrading my system and the package management tried to remove my whole KDE 4 installation. After some digging around I found out that libstreamanalyser0 held back kdelibs5 from being upgraded and due to unsatisfied dependencies the whole KDE installation was going to be removed. After upgrading libstreamanlyser0 by hand and some other packages, everything is fine again.

13 Nov 2008, 22:49

VirtualBox filters ICMP Packets

VirtualBox’s NAT code doesn’t forward ICMP packets. Remember when you try to ping some destination from inside the virtual machine, this won’t work. See here for more information in german.

05 Nov 2008, 19:24

KDE 4.1.3

Slowly the packages of KDE 4.1.3 arrive in experimental. I’m always desperately waiting for the latest release, because KDE 4.1 still has several small issues and each maintenance release improves the situation a bit. I expect the release announcement in a few days.

Update: There it is. The new release is named “Change”. Where that may come from … ;)

05 Nov 2008, 09:21

Garmin Forerunner on Linux

Recently I’ve got a Forerunner 305 from Garmin and, of course, I don’t want to have to use windows in order to communicate with this device. Fortunately it has been for sale some time now and Garmin seems to document their USB protocol well, so there are several tools which help you with this device.

  • Blacklist garmin_gps. Most tools (gpsbabel, garmin forerunner tools) have trouble with this. Add the following lines to /etc/modprobe.d/blacklist:

# stop loading of garmin_gps to serial module for Garmin USB devices blacklist garmin_gps

  • Install gpsbabel and garmin-forerunner-tools: “apt-get install gpsbabel garmin-forerunner-tools”
  • Set proper permissions on the device node. Create a file named /etc/udev/rules.d/51-garmin.rules with this line in it:

SYSFS{idVendor}==“091e”, SYSFS{idProduct}==“0003”, MODE=“666”

  • You want to import your track to Google Earth? Use garmin_save_runs which gives you a *.gmn file. Then use garmin_gpx on this file to get a gpx file and filnally use gpsbabel to convert the gpx to a kml file like this: gpsbabel -i gpx -f <inputfile>.gpx -o kml -F <outfile>.kml
  • To get a list of time, position and hearth rate use this command: gpsbabel -t -i garmin -f usb:0 -o garmin301 -F <outfile>. See also this post in the ubuntu forums.
  • If usb:0 as input file doesn't work try a negativ number to get a list of recognized devices. If this command fails make sure that the module garmin_gps is NOT loaded.
  • Have a look at Trainingchart and PyTrainer
  • Reading waypoints can be done either by garmin tools or by gpsbabel: gpsbabel -t -i garmin -f usb:0 -o gpx -F <outfile>.gpx
  • Writing Waypoints to the Forerunner is easy as well: gpsbabel -i gpx -f <infile>.gpx -o garmin -F usb:0
  • Entering Waypoints (especially for geocaching): The Forerunner supports entering waypoints on the device. For you it may seem obvious, but it took me a long time to find out that this is possible at all. Just enter the Navigation menu, go to "save waypoint" and move the cursor to the position field. There you can <enter> the new values.
  • Display the current time: In the menus the Forerunner displays the current time. I think you can also display it on the main screen if you customize the layout.

02 Nov 2008, 13:29

MySQL: InnoDB won't shrink

I just found out that the InnoDB Tablespace won’t shrink. I’m shocked! Seriously, that is annoying.

02 Nov 2008, 13:25

DCOP Trouble

DCOP is the former desktop communication (IPC) protokol of KDE before version 4. Several legacy applications still use DCOP, e.g. Amarok. Sometime Amarok told me that the dcopserver was not available. I didn’t care, but soon I found out that amarok kept spamming my .xsession-errors. This flodded my home partition in a few minutes and rendered the desktop unuseable. The solution was to fix DCOP. DCOPserver didn’t start because of stale files in /tmp. I did try to delete the content of /tmp, but rm wouldn’t let me do so because there were stale NFS references. Although I don’t use NFS at all. I didn’t want to waste time on this issue and just re-created the filesystem on my /tmp partition. Now everything is working fine again.

20 Oct 2008, 15:51


Since I got a Fritz!Box as my Home-Router, the good old Linksys WRT54G just lay in the corner and settled dust. Is became aware of OpenWRT a long time ago, but I didn’t take the time to try it out. One reason was that I didn’t want to loose the comfortable web GUI for configuration internet access. Today I finally got the latest release of OpenWRT (Kamikaze 7.09).

The installation of the OpenWRT Firmware was quiete easy. At first I did backup my old router configuration in the Webinterface, then I did an Firmware Upgrade, also from the Webinterface. After the firmware was uploaded the router took about one or two minutes to reboot and did then respond to pings on Note: If you already have a device using the address on the network, you’d better connect the WRT54 directly to your pc.

The documentation for OpenWRT is quite scattered around the wiki. Probably the first page to look at is the page about configuring Kamikaze. One thing that confused me at frist was how I could log in to the router after the upgrade. Since OpenWRT, by default, doesn’t offer a webinterface and I couldn’t find a default password for SSH I was curios how to log in. The solution is fairly simple: Just connect via telnet, set a root password and the log in via SSH. If you want to change the ip address, go to /etc/config/network and change the address of the “br-lan” interface. You should also add a default gateway and an DNS server, in case your router isn’t going to be connected over his wan interface.

13 Oct 2008, 21:47

gpg: waiting for lock ...

Recently I did experience a very strange problem related to GnuPG. My mail program, KMail, stopped responding as soon as I did try to open a PGP signed mail or even if I did write a mail. I tracked the problem down to GnuPG. Some long-gone process didn’t release his lock and caused strange troubles.

After removing the locks (pubring.gpg.lock and .#*) it did work fine again.

01 Sep 2008, 16:15

rsync for replication

If you want to replicate the contents of a computer to another one over unsecure networks you can use rsync in combination with ssh to acomplish this.

rsync –delete -avze ssh user@hostname.domain.tld:/home/user/ /home/user/backup
This command will replicate the content of the remote machine to the local host. In case you want to use the other directon you can use the following command.
rsync –delete -avze ssh /home/user user@hostname.domain.tld:/home/user/backup
In case you need root privileges for replication take a look at pam_access.

Also take a look at the Ubuntu Wiki.

22 Aug 2008, 12:49

Test drive KDE4.1 on Debian Lenny

The Debian KDE Maintainers recently released inofficial Backports of KDE4.1 for Debian Lenny for those who didn’t wan’t to use experimental packages or wait for lenny to become stable. I was waiting for this packages for a long time. Since I’ve used KDE 4.0 at work I did want to use it at home, too. But I did not want to break my system more than absolutly necessary and I didn’t like some of the shortcoming of KDE 4.0, so I had to wait. The 4.1 release looked very promising to me and so I did decide to give it a try. Many people told me not to use KDE 4.1 but I did really like KDE 4 since my first contact. Unfortunately there are known issues with KDE 4.1 and the proprietary Nvidia drivers which I use and the compositing features of KWin only work with TwinView and not Xinerama, so I did prepare myself to some hurdles. I want to give a short report of my experiences on KDE 4.1 on Debian GNU/Linux lenny. Basically I did follow the steps described on the Backports page:

  1. Add “deb http://kde4.debian.net/ lenny main” to the sources.list.
  2. aptitude update Then I did try to “aptitude install kde4”, but as the Backports page states, this didn’t work. So I had to clean up the dependency mess (aptitude -f install) and start with the minimal kde package aptitude install kde4-minimal and then install the modules one by one. At least one of them had unmet dependencies and couldn’t be installed but I hope those will be resolved soon.

When KDE4.1 was finally installed I re-installed kdm by aptitude install kdm and logged in for the first time. The startup took a rather long time - I guess all the initial confguration files were created (or whatever).

I soon realised that the KWin/Nvidia issues were really annoying so I did look for a solution. Fortunately there were already a lot of good hints on this. While trying to fix this I did notice that my Xinerama setup was not supported and I had to switch (back) to TwinView. I don’t remeber why I did use Xinerama instead of TwinView, but I suppose it did just work back then when I set up the two monitor configuration. So as for the performance issues: Depending on the hardware you have, there are a lot of possible bug-fixes. At first you should make sure that you use a recent release of the Nvidia drivers. I did use 177.67 (BETA) from Nvidia and sticked to the tweaks from Nvidia. I put my “nvidia-settings” command in a bash script inside “.kde4/Autostart”.

Below is a list of modifications I made to my xorg.conf. Please note that these are only the modifications I made to the xorg.conf, this is no complete configuration.

After this changes I restarted the X server and made a few small modifications to the KWin settings:

The result? My KDE4.1 desktop, full compositing features enabled, is blazing fast now!

Section "ServerFlags"
Option "Xinerama" "0"
Section "Extensions"
Option "Composite" "Enable"
Section "Device"
Identifier     "nvidia0"
Driver         "nvidia"
Option      "NoLogo" "True"
BusID       "PCI:1:0:0"
Screen      0
Option "HWcursor"
Option "CursorShadow"
Option "CursorShadowAlpha" "32"
Option "CursorShadowXOffset" "3"
Option "CursorShadowYOffset" "3"
Option "AllowGLXWithComposite" "True"
Option "TwinView" "True"
Option "TwinViewOrientation" "LeftOf"
Option "MetaModes" "1280x1024,1280x1024;1280x1024;1024x768,1024x768;800x600,800x600"
Option "SecondMonitorHorizSync" "UseEdidFreqs"
Option "SecondMonitorVertRefresh" "UseEdidFreqs"
Option "RenderAccel" "true"
Option  "UseEvents" "false"
Option "TripleBuffer" "1"
Option "DamageEvents" "1"
Option "BackingStore" "1"
Option "PixmapCacheSize" "70000"
Option "OnDemandVBlankInterrupts" "true"
Section "Screen"
Identifier     "Screen0"
Device         "nvidia0"
Monitor        "monitor0"
DefaultDepth    24
SubSection     "Display"
Depth       24
Modes      "1280x1024" "1024x768" "800x600" "640x480"
Option "AddARGBGLXVisuals" "True"
Option "DisableGLXRootClipping" "True"
Option "PixmapCacheSize" "1000000"
Option "AllowSHMPixmaps" "0"
Option "AddARGBGLXVisuals" "True"

17 Jul 2008, 16:15

OpenVPN: Static IP Assignments

OpenVPN is a great VPN solution: Easy to use, flexible and stable. But it lacks documentation. When trying to assign static ip adresses to my VPN clients I felt a bit lost. The solution is to create a directory inside the OpenVPN configuration directory and put the client-dependent configuration snippets there. Lets assume this directory is called “ccd” for “Client Configuration Directory”. Then you need to add the line “client-config-dir ccd” to your server.conf.

Inside the ccd you create one file for each client you want to configure and call the file exactly as the common name from the clients certificate. In this files you can use ordinary OpenVPN configuration statements. For assigning fixed IPs you would use “ipconfig-push 10.8.0.X” if you use the suggested subnet of “”.

26 Jun 2008, 19:56


Did you every want to actually improve your favorite distribution? Then go to http://ddtp.debian.net/ddtss/index.cgi/xx and help translating Debian to your language!

26 Jun 2008, 19:14

Firefox 3 keeps switching to offline mode

Since I’ve installed the final release of Firefox 3 on my Debian “lenny” system there is this annoying bug, that Firefox keeps switching to offline mode all the time, i.e. when I close it.

After some searching I found out that there are others who have the same problem and that this is a “feature” related to an application called “Network Manager”. Altough Network Manager is installed - I can’t tell why - I did never use it. So why does Firefox keeps annoying me? I don’t want to click on “File -> Work Offline” everytime I start Firefox to get access to the Internet. If you experience the same problem and wan’t to check if it is NM’s fault then run this command in a terminal and see if you get a result of “3” (which means that NM thinks you are online) or “4” (which means offline).

A developer claimed that setting “toolkit.networkmanager.disable” to true would cause Firefox to stop this behavior, I’ll try it out … Nope, doesn’t work. Only completly removing NetworkManager helps.

17 Jun 2008, 12:54

Apache: Force all Visitors to use HTTPS

When using Apache with SSL you may want to force all Visitors to use HTTPS instead of HTTP.

After configuring Apache for SSL you can achieve this by using this VirtualHost definition:

<VirtualHost <your-ip>:80>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^<strong>(</strong>.*<strong>)</strong> https://%{SERVER_NAME}/$1 [R,L]

You should have the SSL-enabled VirtualHost running on the same IP.

15 Jun 2008, 18:35

Asus Maximus Formula on Linux

Recently I bought the Asus Maximus Formula Mainboard in replacement for my old and unstable Abit AX8. I did this to get rid of the endless trouble a VIA Chipset can bring you. I did have lots of trouble with the VIA Chipset on the AX8. The board itself actually wasn’t so bad, but the chipset definetly is. The most remarkable problem was that my SATA2 hard drives weren’t recognized when connected to the board. I had to limit them to SATA1 for the board to recognize them. This shouldn’t be a problem in theory since SATA1 can transfer about 150MB/s, but after replacing the board I realized that I did waste a lot of performance on the old board. The hard drives perform much better on the new board. The Maximus Formula seems to be targeted at Gamers, but the board has proven to be rock-solid until now. You get lots of overclocking options but for the time being I won’t touch them. System stability is more important to me than raw speed and I don’t play games that often. Running Linux on the board is super easy. Actually it is more easy than running Windows Vista! Before you ask: I use Vista only for playing games that won’t run on Linux.

Asus Maximus Formula

Before buying this board I did some search on the web and found a greate page on Hentges.net which did resolve most of my issues before they became a problem. The page gives you all the information you need to get the board running with linux. Basically you only need to make sure to use the right Kernel version. Anything above 2.6.23 will run for sure. I did use a Debian GNU/Linux testing netinstall image to install the operating system. The stock kernel supports all of the important features of the board out of the box.

If you plan to build your own kernel, you’ll need this modules:

  • “JMicron JMB36x support” (CONFIG_BLK_DEV_JMICRON) for the IDE Controller
  • “Intel Core (2) Duo/Solo temperature sensor” (CONFIG_SENSORS_CORETEMP) for monitoring the CPU, given you have a Core CPU
  • “Winbond W83791D” for some of the sensors
  • “Winbond W83627DHG” for some other sensors
  • “ACPI Processor P-States driver” (CONFIG_X86_ACPI_CPUFREQ) for frequency scaling
  • “SysKonnect Yukon2 support” (CONFIG_SKY2) is you happen to use the on-board NICs
  • “Intel HD Audio” (CONFIG_SND_HDA_INTEL) for the soundcard
If you plan to install Windows Vista from a drive on the IDE Controller you need to dig for the appropriate driver somewhere on the Asus CD. It’s somewhere below “Driver -> … -> Application” or so.

The graphics card, a Geforce 9600 from Gainward, ist running perfectly well with the closed-source driver from nVidia.

10 Jun 2008, 11:33

GoogleEarth: Fehlercode 29

Nachdem ich mein Problem mit Eclipse lösen konnte, bin ich beim starten von Google Earth auf ein neues interessantes Problem gestoßen. Die installierte Version wollte erstmal gar nicht starten. Na gut, schnell die aktuelle Version runtergeladen (4.3) und installiert. Die ist dann auch gestartet aber die Erde wurde nicht angezeigt. Stattdessen ein “Fehlercode: 29”. In den Hilfeseiten von Google findet man dazu im Moment nichts, aber im Ubunutusersforum. Dort gab es auch die Lösung: Den 32-bit DNS-Resolver installieren.

aptitude install lib32nss-mdns

09 Jun 2008, 22:29

Eclipse unter Linux x64

Nach der Migration meines Systems von 32-bit auf einen 64-bit Kernel kam es beim Starten von Eclipse zu einer komischen Fehlermeldung:

libgtk2.0-0: error while loading shared libraries: libgtk-x11-2.0.so.0
Der Grund war einfach, dass ich eine 32-bit Version von Eclipse (SWT) hatte und die natürlich die entsprechenden Libraries nicht gefunden hat. Die Lösung habe ich in einem Debian Bugreport gefunden.

02 May 2008, 12:12

Amarok Probleme mit SQL-Lite

Amarok scheint in der aktuellen Version (1.4.9) ein Problem mit großen Musiksammlungen und SQL-Lite zu haben. Hier hilft i.d.R. MySQL als Backend zu verwenden. Dann ist die gefühlte Geschwindigkeit von Amarok deutlich besser. Siehe auch Bug #479068.

28 Mar 2008, 14:00

GIMP Hotkeys

Die wichtigsten GIMP Hotkeys auf einen Blick.

26 Mar 2008, 12:00

Apache 2 mit Deflate/gzip

Eine interessante Anleitung für mod_gzip/deflate unter Apache 2.2+ beim Gentoo Wiki.

26 Mar 2008, 06:00

X.Org mit serieller Maus

Falls man mal in die Verlegenheit kommt unter einem aktuellen X.Org eine serielle - und ich meine nicht USB - Maus betreiben zu müssen sollte man es mal mit “Protocol” “Microsoft” und “Device” “/dev/ttyS0” versuchen.

Section “InputDevice” Identifier “Configured Mouse” Driver “mouse” Option “CorePointer” Option “Device” “/dev/ttyS0” Option “Protocol” “Microsoft” Option “Emulate3Buttons” “true” EndSection

20 Mar 2008, 12:00

Autostart unter KDE

Es gibt gewisse Programme die möchte man bei jedem Start von KDE mitladen, z.B. Synergy.

Für die meisten GUI Applikationen ist das unter KDE kein Problem. Einfach beim abmelden offen lassen und sie werden das nächste mal automatisch neu gestartet. Bei Konsolen-Anwendungen sieht das allerdings anders aus. Hier muss man den Autostartordner unter “~/.kde/Autostart” bemühen. Dort einfach ein ausführbares Skript anlegen und es sollte beim nächsten Login automatisch mit gestartet werden.

19 Mar 2008, 20:07

FRITZ!Box Reconnect

Manchmal möchte man vielleicht seine Internetverbindung kurz trennen und wieder aufbauen um z.B. eine neue IP-Adresse zu erhalten. Wenn man eine FRITZ!Box verwendet ist das zumindest nicht über die Oberfläche möglich.

Es gibt verschiedene Methoden. Unter anderem über UPnP, wenn man diese Funktion nicht deaktiviert hat, oder über telnet.

Da ich aus Sicherheitsgründen bei mir die UPnP Fernwartungsfunktionen dekativiert habe, habe ich es heute mal über telnet versucht.

Zunächst muss man den Telnet Dämon starten. Das geht mit einer halbwegs aktuellen Firmware Version über folgende Telefoncodes:

#967 - Telnet anschalten

#968 - Telnet ausschalten

Einfach an einem Telefon eingeben das mit der FRITZ!Box verbunden ist und über die Kommandozeile “telnet fritz.box” aufrufen. Dann noch das Passwort der Weboberfläche eingeben und man ist verbunden.

Um die Verbindung zu trennen ruft man dann

dsld -s

auf um den DSL Dämon zu stoppen und kurz danach


um ihn wieder zu starten.

Fertig, jetzt sollte die FRITZ!Box neu verbunden sein. Ich gebe zu, dass der Weg etwas umständlich ist, aber mir reicht es.

19 Mar 2008, 17:34

Compiz mit Xinerama unter Nvidia Karten

Den composing Window Manager Compiz auf einem Xinerama Setup mit einer Nvidia Karte zum laufen zu bringen ist gar nicht so einfach, da es wohl bei der Verwendung von Xinerama und Composite zu einem Bug kommt der den Einsatz von Compiz verhindert. Wer dennoch nicht auf den zweiten Monitor verzichten will der kann anstelle von Xinerama das TwinView Feature der Nvidia Treiber benutzen. Diese stellen eine Xinerama kompatible Erweiterung da mit der dann auch Composing funktioniert.

Von einer funktionierenden Compiz Konfiguration für einen Monitor ausgehend müssen folgenden Punkte in der xorg.conf geändert bzw. ergänzt werden.

# Xinerama ausschalten
Section "ServerFlags"
Option "Xinerama" "0"
# Composing aktivieren, sollte schon aktiv sein
Section "Extensions"
Option "Composite" "Enable"
Section "Device"
Identifier     "nvidia0"
Driver         "nvidia"
Option      "NoLogo" "True"
# BusID anpassen, siehe lspci
BusID       "PCI:2:0:0"
Screen      0
Option "RenderAccel"
# Die HWcursor und Cursor* Optionen können weggelassen werden
Option "HWcursor"
Option "CursorShadow"
Option "CursorShadowAlpha" "32"
Option "CursorShadowXOffset" "3"
Option "CursorShadowYOffset" "3"
# Falls GLX genutzt werden soll
Option "AllowGLXWithComposite" "True"
# Wichtig: Die TwinView Optionen
Option "TwinView" "True"
# Je nachdem ob der zweite Monitor rechts oder links steht hier LeftOf bzw. RightOf eintragen
Option "TwinViewOrientation" "LeftOf"
# Die MetaModes, jeweils der primäre Monitor und der sekundäre. In den meisten Fällen dürften das identische Paare sein
Option "MetaModes" "1280x1024,1280x1024;1280x1024;1024x768,1024x768;800x600,800x600"
# Falls der zweite Monitor über Edid keine brauchbaren Informationen liefert muss man die Werte von Hand eintragen
Option "SecondMonitorHorizSync" "UseEdidFreqs"
Option "SecondMonitorVertRefresh" "UseEdidFreqs"
Section "Screen"
Identifier     "Screen0"
Device         "nvidia0"
Monitor        "monitor0"
DefaultDepth    24
SubSection     "Display"
Depth       24
Modes      "1280x1024" "1024x768" "800x600" "640x480"
Option "AddARGBGLXVisuals" "True"
Option "DisableGLXRootClipping" "True"

Wenn dann nach einem Neustart des X-Servers alles funktioniert würde ich mir auf jeden Fall CCSM anschauen. Weitere Informationen zu Dual-Head Setups gibts im Gentoo Wiki.

11 Feb 2008, 19:33

Lokaler Root-Exploit im Linux-Kernel

Im Linux Kernel gibt es aktuell einen lokalen Root-Exploit. Betroffen sind die Versionen 2.6.17- Möglicherweise auch

Hier noch das Debian Security Advisory und den neusten Kernel ( sowie die Meldung bei heise online.

03 Feb 2008, 06:00

Frets on Fire

Guitar Hero für Umsonst und draußen PC?

Frets on Fire!

Einfach nur genial dieses Spiel. Viel Spaß.

Gibts für Linux, Windows und Mac.

Unter Debian braucht man auf jeden Fall die Pakete python-glade2,  python-pygame und  freeglut3.

28 Jan 2008, 17:41

PHP5.2 bringt inkonsistente include_path Fehler

Es sieht ganz so aus als ob PHP5.2.x einen komischen Bug in Verbindung mit Apache VHosts und dort gesetzten include_paths hat.

Sobald man in einem VHost den include_path ändert funktioniert ini_set in allen Vhosts nicht mehr. Um das ganze noch ein wenig spannender zu machen tritt der Bug nicht immer auf, d.h. er ist extrem schwer zu debuggen.


Update: Die Lösung war keine Include_Paths in den Vhosts zu setzen, da das PHP5 Modul damit Probleme hat.

06 Dec 2007, 12:31

FRITZ!Box Fon Wlan 7270 ab sofort im Handel verfügbar!

Wie AVM sobeben mitgeteilt hat ist die neue, lange erwartete, FRITZ!Box Fon Wlan 7270 ab sofort im Handel verfügbar!

Die neue FRITZ!Box Fon WLAN 7270 des Berliner Kommunikationsspezialisten AVM ist ab sofort im Handel erhältlich. Das neue FRITZ!Box-Modell bietet in einem einzigen Gerät eine bisher nicht erreichte Vielfalt für den DSL-Anschluss. Der neue WLAN-Funkstandard IEEE 802.11n (Draft 2.0) sorgt in Verbindung mit der MIMO-Mehrantennentechnik für eine optimale Übertragung von Daten, Sprache und Filmen. Für Internet- und Festnetztelefonie bietet die FRITZ!Box Fon WLAN 7270 neben Anschlüssen für analoge und ISDN-Telefone erstmals eine integrierte DECT-Basisstation. Über den Medienserver ist gespeicherte Musik auch bei ausgeschaltetem Computer im gesamten Netzwerk verfügbar. So wird die FRITZ!Box Fon WLAN 7270 mehr denn je zur zentralen Datendrehscheibe für den heimischen Internetzugang.
[AVM Pressemitteilung]

Bis jetzt konnte ich noch keinen Shop finden, der dieses Modell als Lieferbar listet, aber der Preis liegt so um die 200€.

Ich bin gespannt wie erfolgreich das neue AVM Flagschiff sein wird, denn trotz des überwältigenden Funktionsumfangs ist sie doch deutlich teurer als viele vergleichbare Produkte.

Sollte bei mir in nächster Zeit ein Router-Neukauf anstehen, würde ich mich für die FRITZ!Box 7270 entscheiden. Wobei mir wichtig wäre, dass sich neben dem WLAN auch das DECT-Modul deaktivieren lässt um die Strahlenbelastung zu reduzieren.

05 Dec 2007, 10:49

Kopete-OTR Plugin for Debian lenny

This is probably my first english post.

When using GAIM/Pidgin I got used to the OTR Plugin which I really like because Mr. Schäuble, the german minister of the interior, likes to wiretap innocent citizen. When using an encryption plugin like OTR you retain at least a bit privacy.

The problem when I did switch my primary desktop environment from GNOME to KDE was that KDE’s Instant Messenger - which I also like a lot - doesn’t support OTR. There is a OTR plugin somewhere but I couldn’t find a debian package thats installable on my system. The packages were either not for Debian at all (Ubuntu) or for Unstable which is bad since I’m running lenny (testing).

The solution was to fetch myself the sources of the Unstable-Package from this place and recompile it for lenny.

The packages here are provided for your convenience, I make no promises whatsoever. If they work for you -> great, if they don’t -> don’t complain to me.

Download Kopete-OTR 0.7-1 for Debian lenny (i386) here.

01 Dec 2007, 15:49

Hotspot und Firewall Piercing

Nachdem ich darauf aufmerksam geworden bin, dass es bei vielen öffentlichen Hotspots wohl eine Lücke gibt, des ermöglicht kostenlos zu surfen, habe ich zu diesem Thema ein paar Informationen gesammelt.

Zunächst aber eine Warnung: Wenn man diesen Anleitungen folgt kann das möglicherweise rechtliche Kosquenzen haben, daher rate ich davon ab die beschriebenen Vorgehensweisen ohne die Einwilligung des Zugangsproviders zu testen. <!–01695360–>

Als erstes würde ich eine allgemeine Präsentation zum Thema Firwall Piercing empfehlen. Dort werden auch schon die ersten Möglichkeiten aufgezeigt eine Firewall - und nichts anderes wird auch von einem Hotspot verwendet um den Zugang zu kontrollieren - zu umgehen. Interessant sind insbesondere die Punkte Ping-Tunnel und DNS-Tunnel. Da auf vielen Hotspots entweder ICMP Nachrichten und/oder Port 65/UDP für DNS-Auflösungen geöffnet sind, werden diese Tunnel sehr interessant. Aber auch wenn der Port 65 geschlossen ist, und nur ein DNS-Server des Hotspot-Betreibers zur Verfügung steht ist es noch möglich dies auszunutzen, da man mit einem NSTX Tunnel die Datenpakete auch durch einen fremden DNS Server tunneln kann. Wenn der Port 65/UDP direkt offen ist, dann ist es am einfachsten einen OpenVPN-Server auf Port 65 lauschen zu lassen und diesen als Gateway zu benutzen.

27 Nov 2007, 21:51

Dovecot's Deliver zum Schweigen bringen

Seit ich Dovecots deliver als LDA/MDA zusammen mit exim verwende habe ich das Problem gehabt, dass deliver im syslog immer die Passwörter der Mail-Benutzer ausgegeben hat, was natürlich weder erwünscht noch sinnvoll ist. Ich habe lange Zeit keine Lösung gefunden, da meine Konfiguration eigentlich korrekt war, aber heute hat mir Tim Sirrainen, der Autor von Dovecot eine Lösung aufgezeigt.

Example from delivers logfile:

deliver(user@host.tld): "2007-11-26 19:37:40 "Info: auth input: user@host.tld
deliver(user@host.tld): "2007-11-26 19:37:40 "Info: auth input: user=user@host.tld
deliver(user@host.tld): "2007-11-26 19:37:40 "Info: auth input: password=password
deliver(user@host.tld): "2007-11-26 19:37:40 "Info: auth input: home=/home/mail/host.tld/user
deliver(user@host.tld): "2007-11-26 19:37:40 "Info: auth input: uid=8
deliver(user@host.tld): "2007-11-26 19:37:40 "Info: auth input: gid=8
deliver(user@host.tld): "2007-11-26 19:37:40 "Info: Loading modules from directory: /usr/lib/dovecot/modules/lda
deliver(user@host.tld): "2007-11-26 19:37:40 "Info: Module loaded: /usr/lib/dovecot/modules/lda/lib90_cmusieve_plugin.so
deliver(user@host.tld): "2007-11-26 19:37:40 "Info: maildir: data=/home/mail/host.tld/user/Maildir
deliver(user@host.tld): "2007-11-26 19:37:40 "Info: maildir: root=/home/mail/host.tld/user/Maildir, index=/home/mail/host.tld/user/Maildir, control=, inbox=
deliver(user@host.tld): "2007-11-26 19:37:40 "Info: cmusieve: Using sieve path: /home/mail/host.tld/user/.dovecot.sieve
deliver(user@host.tld): "2007-11-26 19:37:42 "Info: msgid=&lt;49403.;: saved mail to dovecot

Das Problem war ein Bug in Dovecot/deliver der dafür sorgte, dass die Zeile

mail_debug = no

nicht richtig ausgewertet wurde. Die Lösung war die betreffende Zeile auszukommentieren.

Hier noch meine Konfiguration vor der Korrektur.

Dovecot.conf w/o comments:

base_dir = /var/run/dovecot/
protocols = imap imaps pop3 pop3s
disable_plaintext_auth = no
shutdown_clients = yes
log_path = /var/log/dovecot.log
log_timestamp = "%Y-%m-%d %H:%M:%S "
ssl_disable = no
ssl_cert_file = /etc/ssl/certs/cert.crt
ssl_key_file = /etc/ssl/certs/key.pem
ssl_parameters_regenerate = 168
ssl_cipher_list = ALL:!LOW
login_dir = /var/run/dovecot/login
login_chroot = yes
login_user = dovecot
login_process_size = 32
login_process_per_connection = yes
login_processes_count = 3
login_max_processes_count = 128
login_max_connections = 256
login_greeting = Mailserver (powered by Dovecot) ready.
mail_location = maildir:/mail/%d/%n/Maildir
namespace private {
separator =
prefix =
location =
inbox = yes
mail_extra_groups = mail
mail_debug = no
first_valid_uid = 8
last_valid_uid = 8
max_mail_processes = 1024
mail_process_size = 256
mail_max_keyword_length = 50
umask = 0077
mbox_read_locks = fcntl
mbox_write_locks = dotlock fcntl
mbox_dotlock_change_timeout = 120
protocol imap {
imap_max_line_length = 65536
login_greeting_capability = yes

protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
protocol lda {
postmaster_address = postmaster@host.tld
mail_plugin_dir = /usr/lib/dovecot/modules/lda
sendmail_path = /usr/lib/sendmail
auth_socket_path = /var/run/dovecot/auth-master
mail_plugins = cmusieve
auth_process_size = 256
auth_cache_size = 256
auth_cache_ttl = 3600
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
auth_verbose = no
auth_debug = no
auth_debug_passwords = no
auth default {
mechanisms = plain
passdb pam {
passdb sql {
args = /etc/dovecot/dovecot-sql.conf
userdb passwd {
userdb prefetch {
userdb sql {
args = /etc/dovecot/dovecot-sql.conf
user = root
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
client {
path = /var/run/dovecot/auth-client
mode = 0600
user = mail
group = mail
dict {
plugin {

27 Nov 2007, 16:05

NFSv4 Einrichten

NFSv4 ist nicht gerade mit einer üppigen Dokumentation gesegnet, aber bei Ubuntu gibts - wie so oft - eine recht gute Anleitung die auch mehr oder weniger uptodate ist. Das soll noch mal jemand sagen Ubuntu wäre schlecht für Debian …

Debugging Information


26 Nov 2007, 19:56

Leerzeilen entfernen

Wenn man die Leerzeilen aus einer Datei entfernen will, so kann man das mit Hilfe von sed machen:

sed -e ‘/^$/d’

Um z.B. eine Konfigurationsdatei ohne Kommentare und Leerzeilen auszugeben reicht folgender Einzeiler auf der Konsole:

cat /etc/config.conf | grep -v “#” | sed -e ‘/^$/d’

20 Nov 2007, 07:00

Testbericht: Intel® Pro/1000 PT Desktop Adapter

Nachdem meine alte HP-Server-Netzwerkkarte mit Intel Pro/100 Chipsatz lange Jahre ihr Dienste geleistet hat - die Karte war schon “alt” als ich sie überhaupt erst in meinen PC eingebaut habe, sie stammt aus einem ausgemusterten HP-Server - ist sie inzwischen in die Jahre gekommen. Die Übertragungsrate von 100 MBit ist nicht mehr sonderlich zeitgemäß und wenn ich Enemy Territory spiele hat sie manchmal Aussetzer. Also wird es Zeit für eine neuen Netzwerkkarte. Zwar haben die meisten Mainboards heutzutage eingebaute GBit-NICs aber meine ICPlus IP-1000A wird von Linux nicht (vernünftig) unterstützt. Also habe ich mich auf die Suche nach einer zuverlässigen, Linux-tauglichen und schnellen Netzwerkkarte gemacht. Der einzige wirkliche Kandiat war, nach einem kurzen Auswahlprozess, der Intel Pro/1000 PT NIC.

Was diese Karte zu leisten vermag, möchte ich hier untersuchen.

Die Installation verlief, wie von einem Intel Chipsatz zu erwarten, ohne Probleme. Einfach das Kernel-Modul für die Intel PRO/1000 Serie aktiviert und die Karte war nach einem Neustart einsatzbereit. Ok, es ginge auch ohne Neustart, aber ich wollte den Treiber fest in den Kernel einkompilieren und bei der Gelegenheit gleich noch ein paar unnütze Treiber rausschmeißen.

Eine klitzekleines Problem gab es noch, das verhinderte, dass die Karte sofort nach dem Neustart einsatzbereit war. e1000: eth0: e1000_probe: Intel® PRO/1000 Network Connection net eth2: device_rename: sysfs_create_symlink failed (-17) udev: renamed network interface eth0 to eth2 Aus irgendeinem Grund ist udev der Meinung die Karte nach eth2 umzubennen zu müssen. Naja, schnell /etc/nework/interfaces angepasst und ein ifup eth2 erweckt die Karte zum Leben: e1000: eth2: e1000_watchdog: NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX ADDRCONF(NETDEV_UP): eth2: link is not ready ADDRCONF(NETDEV_CHANGE): eth2: link becomes ready eth2: no IPv6 routers present Jetzt wollte ich schnell mal die Geschwindigkeit messen, aber dafür musste erstmal ein geeignetes Bechmark her. Ich bin im c’t Software-Verzeichnis auf IPerf gesoßen, das auch ziemlich unkompliziert zu bedienen ist. Einfach runterladen, entpacken und mit iperf -s (Server) bzw. iperf -c server-ip (Client) aufrufen. Ein “-fg” sorgt dafür, dass die Ausgabe für Gbit optimiert werden.

Client connecting to, TCP port 5001

TCP window size: 0.00 GByte (default)

[ 4] local port 55796 connected with port 5001 [ ID] Interval Transfer Bandwidth [ 4] 0.0-10.0 sec 0.59 GBytes 0.51 Gbits/sec [ 5] local port 5001 connected with port 3934 [ ID] Interval Transfer Bandwidth [ 5] 0.0-10.0 sec 0.30 GBytes 0.26 Gbits/sec Die Übertragungsraten sind noch nicht so ganz das was ich mir erhofft hatte, aber möglicherweise lässt sich daran noch was drehen. Ein Problem ist wohl auch, dass auf der einen Seite einen PC mit Linux und auf der anderen ein Notebook mit Windows habe. Vielleicht sollte ich diese Tests zunächst mit einer homogeneren Kombination durchführen.

Weiter Messungen werde ich in kürze nach reichen.

13 Nov 2007, 07:00

Tipps für den Domain Umzug

In der Regel wird man versuchen einen Wechsel der Domain bei einer erfolgreichen Seite zu vermeiden, aber manchmal hat man keine andere Wahl oder es gibt gute Gründe die für einen Wechsel der Domain sprechen. Die nächste Frage ist dann natürlich wie man den Umzug gestaltet ohne Besucher oder Platzierungen in den Suchmaschinen zu riskieren.

Es gibt dazu zwar einige Informationen im Netz, aber ich möchte hier meine ganz persönlichen Erfahrungen dazu schildern.

  • Zunächst sollte man sich natürlich die Domain seiner Wahl registrieren. Am besten unabhängig vom Hosting-Provider bei einem externen Dienstleister.
  • Danach sollte man die neuen Domain zu seinem Portofolio bei den Google Webmaster Tools hinzufügen, authentifizieren sowie eine Sitemap erstellen und dort bekannt machen. Dann sollte man noch die “Bevorzugte Domain” angeben um Inkonsistenzen in den SERPs und “Duplicate Content” zu vermeiden.
  • Jetzt ist es an der Zeit die eigentlichen Inhalte umzuziehen und ausgiebig zu testen. Dies variiert je nach Front- und Backend. Ach ja, robots.txt nicht vergessen!
  • Sofern man Google Analytics verwendet, sollte man dieses auch anpassen. D.h. dort die Domain und den Namen des Profils ändern.
  • Möglicherweise muss man die neue Domain noch für AdSense authentifizieren.
  • Sobald diese Vorarbeiten erledigt sind kann man auf der alten Seite eine permanente Weiterleitung auf die neue einrichten. Dazu verwendet man am besten URL-Rewriting, bei Apache Webservern mit mod_rewrite, und den unten aufgeführten Code.
  • Nachdem nun auch die Umleitung funktioniert darf man sich jetzt daran machen möglichst viele der existierenden Backlinks umzubiegen bzw. neu zu erstellen.
  • Wenn man FeedBurner verwendet sollte man diesen ebenfalls anpassen.
  • Und zum Schluss das wichtigste: Geduld! Bis der Umzug bei allen Suchmaschinen angekommen ist vergehen in der Regel 1-3 Monate, bis der PageRank aktualisiert wird sogar bis zu 6 Monate. Aber keine Sorge, intern aktualisiert Google den PageRank deutlich häufiger. Nur sichtbar wird er eben erst nach diese Zeit. Wenn man auf seiner Seite Paid-Links schaltet könnte das ein Problem sein, aber nach den jüngsten PageRank Kapriolen dürfte das kaum noch ein Thema mehr sein.
Wie richte ich (mit Apache mod_rewrite) eine permanente (301) HTTP-Weiterleitung für eine ganze Domain ein?

Dazu legt man einfach im Wurzelverzeichnis der “alten” Domain eine Datei mit dem Namen “.htaccess” und dem folgenden Inhalt an.

RewriteEngine on RewriteCond %{HTTP_HOST} ^www.altedomain.tld$ [NC] RewriteRule ^(.*) http://www.neuedomain.tld/$1 [L,R=301]

Sollte der Server dann beim aufrufen der alten Domain ein Fehlermeldung bringen (Internal Server Error, o.ä.) dann ist Mod_Rewrite nicht aktiviert und man muss sich an seinen Hoster wenden. Im Erfolgsfall sollte man direkt zur neuen Domain geleitet werden.

Update I (14.11.07): Nach nur 24h hat Google fast alle Seiten unter der neuen Domain im Index.

Update II (20.11.07): So langsam hat die neue Domain die alte aus der SERPs verdrängt und es zeichnet sich ein deutlicher Knick in den Besucherzahlen ab. Ich mache jedoch den Domainumzug und den damit verbundenen PageRank-Verlust dafür verantwortlich und bin mir sicher, dass sich das in den nächste Tagen oder Wochen wieder normalisieren wird.


Update (17.04.08): Googles Webmaster Blog hat noch weitergehende Informationen.

12 Nov 2007, 15:07

Apache: Server-Signatur verstecken

Obwohl ich kein Fan von “Security-by-Obscurity” bin muss ich trotzdem nicht alle Versionsinformationen meines Webservers und der geladenen Module für alle Welt sichtbar machen.

Um die Server Signatur zu manipulieren gibt es hauptsächlich zwei Direktiven die beide im gloablen Kontext gesetzt werden sollten:

  • ServerSignature On|Off|EMail - Damit lässt sich die Signatur komplett abschalten.
  • ServerTokens Minimal|ProductOnly|OS|Full - Ich habe hier “ProductOnly” gewählt, damit zumindest noch angezeigt wird, dass es sich um einen Apache handelt, aber die Version verdeckt wird.

07 Nov 2007, 08:00

Ohloh - das Open-Source Netzwerk

Schon gewusst? Unter ohloh.net gibt es ein Open-Source Netzwerk das umfassende Statistiken zu verschiedenen Open-Source Projekten liefert. So ähnlich wie Freshmeat, nur mehr Web 2.0. Eigentlich ganz nett und recht informativ.

06 Nov 2007, 10:00


Wenn ein Programm seine Bibliotheken nicht findet (*.so) gibt es im Prinzip zwei Möglichkeiten das zu beheben:

  • In der /etc/ld.conf den Pfad zur Bibliothek eintragen und ldconfig ausführen
  • Das Programm mit LD_LIBRARY_PATH= /path/to/library/: ${LD_LIBRARY_PATH} /path/to/executable starten

05 Nov 2007, 09:00


Mit der Hilfe von Synergy ist es möglich mehere PCs, von denen jeder einen eigenen Monitor hat, mit nur einem Set von Tastatur und Maus zu steuern.

Das klingt jetzt nicht so wahnsinnig spannend aber der Effekt ist absolut genial.

Ich benutze für gewöhnlich mein Notebook (Windows XP) und meinen PC (Debian GNU/Linux) parallel, d.h. ich verwenden für die meisten Arbeiten meinen PC aber einige Applikationen, die nur unter Windows laufen, führe ich auf dem Notebook aus. Bis jetzt musste ich immer zwischen zwei Maus-/Tastatur-Paaren wechseln, mit Synergy habe ich nur noch eine Maus und eine Tastatur die per Netzwerk auf das andere System “verlängert” werden. Und das ganze sogar über Betriebssystemgrenzen hinweg, ohne irgendwelche Probleme. Die Konfiguration ist absolut simpel und macht (bei mir) keinerlei Probleme.

Ich bin beeindruckt … :)

Update: Hier noch ein paar Bilder um das ganze ein wenig zu illustrieren.

Synergy 01

Synergy 02

05 Nov 2007, 08:00

Vim als Entwicklungsumgebung

Wie kann man Vim als Entwicklungsumgebung nutzen? Lesen.

04 Nov 2007, 15:23

KDE4 und Debian

So langsam nähert sich KDE4.0 der Fertigstellung und es gibt anscheinend auch schon eine LiveCD [torrent] auf Debian Basis um das ganze mal auszuprobieren. Zwar gibt es auch pessimistische Stimmen, aber ich hoffe, dass KDE 4.0, oder besser noch 4.1, es in das nächste Stable Release schafft.

03 Nov 2007, 07:30

SSH-Login mit PublicKeys

Im Normalfall wird man sich an einem SSH-Server mit seinem Benutzernamen und Passwort authentifizieren. Wenn man aber das Passwort nicht immer eintippen möchte, z.B. weil man CVS über SSH benutzt, oder sich oft anmelden muss, dann kann es Sinn machen die Public-Key Anmeldung einzurichten.

Dazu benötigt man zuerst ein Public/Private-Key Pair und, unter Windows, PuTTy mit PuTTy Agent und PuTTyGen.


Unter Linux ist das erzeugen das Schlüsselpaares ganz einfach:

ssh-keygen -t rsa

Dann liegt der öffentliche Schlüssel unter ~/.ssh/id_rsa.pub. Diese kopiert man dann mit scp auf die Maschine an der man sich ohne Passwort anmelden möchte:

scp ~/.ssh/id_rsa.pub user@host.domain.tld:~/id_rsa.pub

Nun muss man sich noch einmal mit seinem Passwort an diese Maschine anmelden und dann dort folgenden Befehl ausführen:

cat id_rsa.pub >> ~/.ssh/authorized_keys

Fertig. Aber jetzt sollte man sich auch ohne sein Passwort eingeben zu müssen an dem Rechner anmelden können.


Unter Windows ist das Vorgehen ein kleines bischen komplizierter, aber nicht minder effektiv.

Zunächst einmal muss man sich PuTTy besorgen. Das komplette Archiv mit allen Hilfsprogrammen und dieses irgendwo entpacken.

Danach geht es wie folgt weiter:

  1. PuttyGen” starten.PuTTyGen Howto
  2. Im Bereich “Parameters” “SSH-2 RSA” auswählen.
  3. Im Bereich “Actions” auf “Generate” klicken.
  4. Die Maus über den leeren Bereich bewegen bis der Balken voll ist. Damit sammelt der Schlüsselgenerator zusätzliche Zufallsdaten.
  5. Auf Wunsch noch einen Kommentar zu dem Schlüssel in das Feld “Key comment” eintragen.
  6. Unter “Key passphrase” und “Confirm passphrase” ein Passwort eintragen mit dem der Schlüssel geschützt wird. Dieses muss beim ersten Zugriff auf den Schlüssel eingegeben werden.
  7. Mit “Save private Key” den privaten Schüssel abspeichern, und an einem sicher Ort aufbewahren. Wichtig ist es, ihn nie weiterzugeben!
  8. Mit “Save public Key” den öffentlischen Schlüssel an einem beliebigen Ort speichern. Dieses Schlüssel kann man an jeden weitergeben oder sogar auf die eigene Webseite stellen.
  9. Bevor man PuTTyGen beendet den öffentlichen Schlüssel aus dem Textfeld kopieren (Zwischenablage).
  10. Per PuTTy ganz normal auf dem entfernten Rechner einloggen und die Datei ~/.ssh/authorized_keys bearbeiten. Dort einfach in eine neue Zeile den öffentlichen Schlüssel aus der Zwischenablage einfügen. Abspeichern und wieder vom entfernten System abmelden.
  11. Jetzt muss man den Schüssel noch in den PuTTy Agent importieren. Dazu startet man “Pageant” und klickt doppelt auf das Icon mit dem Hut in der Kommandozeile. Pageant Icon
  12. Dort klickt man auf “Add Key” und wählt den eben gespeicherten Private-Key aus. Nachdem man noch einmal das Passwort des Private-Key eingegeben hat sollte man sich ohne weiter Passwort-Eingaben zum Server verbinden können.
Pageant Add Key

31 Oct 2007, 10:30

OTRS 2 unter Debian

Das Open Ticket Request System, kurz OTRS, gibt es freundlicherweise auch als Debian Paket. Sogar im offiziellen Archiv. Die Einrichtung geht auch weitgehend automatisch, wenn man sich an die Anleitung des Maintainers hällt muss man lediglich ein paar Fragen von debconf beantworten und schon läuft OTRS. Die ganze Sache hat leider einen kleinen Haken: Sobald man Änderungen an der Kernel/Config.pm vornimmt läuft OTRS nicht mehr.

Ich empfehle statt des Befehls “aptitude install otrs2 –with-recommends”, so wie es in der Anleitung steht, zunächst mit “aptitude install mysql-server” einen MySQL-Server zu installieren und dann anstelle von PostgreSQL MySQL zu verwenden. Warum? Ganz einfach, weil ich wenig Erfahrung mit PostgreSQL und relativ viel mit MySQL habe ;)

Nach der Installation von MySQL kann man dann wie empfohlen fortfahren, nur dass man bei den Debconf Dialogen halt MySQL anstelle von PostgreSQL auswählen muss. Bei mir war es auch so, dass die folgenden Dialog etwas inkonsistent waren und die Installation nur fehlerfrei durchgelaufen ist wenn es einen MySQL Benutzer root gab der sich von localhost ohne Passwort anmelden konnte. Ob das auf jedem System so ist kann ich nicht sagen.

Sobald die geführte Installation beendet ist sollte man die Datei /etc/otrs/Kernel/Config.pm bearbeiten und bei den Datenbank-Einstellungen einen gültigen Benutzer mit Passwort eintragen der auf die Tabelle otrs2 zugreifen kann. Möglicherweise muss dieser Benutzer zuvor über PhpMyAdmin, o.ä., angelegt werden.

Danach sollten sich auch die weitern Einstellungen, wie z.B. Sendmail oder LDAP, in der Config.pm vornehmen lassen.

Mein erster Eindruck von OTRS ist ein sehr komplexes, aber auch etwas fragiles System das durchaus bessere Fehermeldungen und eine sauberere Konfigurationsstruktur gebrauchen könnte. Möglicherweise wird mein Eindruck durch die Tatsache, dass ich ein Debian-Paket verwende, etwas verfälscht aber so ganz einfach ist OTRS trotzdem nicht - sollte es aber wohl auch nie sein. Wer installiert sich schon zuhause einen Request-Tracker.

29 Oct 2007, 08:30

Testbericht: Das Keyboard II

Nach langem, sehr langem zögern, habe ich mir Das Keyboard gekauft. Genauer: Das Keyboard II. Ursprünglich kommt es aus den USA und wird dort von DasKeyboard.com vertrieben. Hier in Europa ist es über getDigital erhälltlich.

Die Features lesen sich ziemlich elitär:

  • mechanische gold kontakt Schalter
  • schwarz
  • unbeschriftete Tasten um bis zu 100% schneller zu schreiben
  • hervorgehobene F und J Tasten für die Ausgangsposition beim 10-Finger-schreiben
  • kompatibel mit Linux, Windows und MacOS
  • nach dem Vorbild des IBM M Keyboards gestalltet
  • über 50.000.000 Anschläge pro Taste möglich, das entspricht einer MTBF von > 80.000 Stunden

Elitär ist allerdings auch der Preis: 89,00€ bei getDigital. In Zeiten wo man (gute) Keyboards für unter 10€ bekommt ist das ein verdammt hoher Preis. Dafür muss es erstmal zeigen was man dafür bekommt. Nach einem ausführlichen Test werde ich nochmal darauf zurückkommen, aber der erste Eindruck ist schonmal ziemlich gut :)

DK2 - Unpacking

Auspacken …

DK2 - Supermagnete

Eine Überraschung :)

DK2 - Auspacken

Mit Verpackung …

DK2 - Im Einsatz

… und im Einsatz.

DK2 - TFT-Schaltzeiten

Mir sind die “lahmen” Schaltzeiten des TFT noch nie so aufgefallen.


Update: Wer sich mit dem Preis des Keyboards so gar nicht anfreunden kann, für den ist vielleicht von Interesse, dass es auf dem Cherry G80-3000 basiert, was möglicherweise auch günstiger zu bekommen ist.

Update II: Achtung, der WAF ist nicht allzu hoch, da die Geräuschemission der Tastatur durchaus störend auf Nicht-Geeks wirken kann ;)

25 Oct 2007, 07:30

ROOT unter Debian kompilieren

Wer Probleme hat ROOT unter Debian zu kompilieren, dem empfehle ich folgendes:

make distclean && ./configure linux –enable-soversion –disable-asimage –disable-xrootd make -j8

24 Oct 2007, 15:44

Linux 2.6.24 bringt jede Menge Änderungen

Die kommende Version des Linux Kernels, 2.6.24, bringt jede Menge Änderungen mit sich. Allein das Changelog für das erste Release-Candidate ist 4.0 MB (!!!) groß, der entsprechende Patch “wiegt” ca. 9 MB.

Linus selbst schreibt dazu folgendes:

The patch is big. Really big. You just won’t believe how vastly hugely mindbogglingly big it is. I mean you may think it’s a long way down the road to the chemist, but that’s just peanuts to how big the patch from 2.6.23 is.

But it’s all good.

24 Oct 2007, 07:30

Was ist ein defunct oder: Zombies sind schon tot

Wer schon immer eine eingängige Erklärung für <defunct> Prozesse unter Unix gesucht hat sollte sich mal diese Seite der RBG an der Uni Bielefeld anschauen. Sehr schön und anschaulich wird es dort erklärt.

16 Oct 2007, 12:09

Für die Horde! - oder wie ein Imap Proxy dem Webmailer Beine macht ...

Nein, ich beziehe mich mit “Horde” nicht auf die Allianz von WoW oder WC3, sondern auf den Webmailer Horde. Der ist zwar sehr mächtig und komfortabel, aber leider auch ziemlich langsam wenn man eine “normale” IMAP/POP3 Verbindung nutzt - selbst wenn der Webserver auf localhost läuft.

Nun habe ich vor einigen Tagen einen Artikel gelesen in dem empfohlen wird, local den Imapproxy einzusetzen um damit die Geschwindigkeit zu erhöhen. Der Vorteil des Imapproxy ist, dass dieser die Verbindungen cacht und es somit den Umstand ausgleicht, dass der Webmailer für nahezu jede Aktion eine neue IMAP-Verbindung aufgauen muss.

Die Konfiguration ist unter Debian wirklich simpel:

aptitude install imapproxy

Und dann im debconf einfach den lokalen Server eingeben. Danach sollte man noch sichergehen, dass der Proxy nur auf localhost lauscht und, dass sich der Port nicht mit dem des “echten” IMAP-Servers überschneidet (siehe /etc/imapproxy.conf).


10 Oct 2007, 08:58

Linux 2.6.23 und der NVIDIA Closed-Source Treiber

Mit der neuen Kernel Version 2.6.23 lässt sich der NVIDIA Closed-Source Treiber, zumindest in Version 100.14.11, nicht mehr kompilieren.

Möglicherweise ist das nur auf meinem System so, aber mit der neusten Version, 100.14.19, geht es problemlos.

09 Oct 2007, 22:18

Linux Kernel 2.6.23 veröffentlicht

Vor ein paar Minuten wurde der neue Linux Kernel 2.6.23 freigegeben.

Die wichtigsten Änderungen im Überblick:

  • neuer CFS Scheduler (“fairer”)
  • On-Demand Read Ahead
  • XEN Guest Unterstützung
  • XFS und ext4 Verbesserungen
  • PPP over L2TP Support
  • Userspace Driver Framework
  • … (KernelNewbies)
Download / Changelog

01 Oct 2007, 19:37

Acrobat Reader 8.1 lässt Firefox abstürtzen

Ich denke, dass der Acrobat Reader nichts taugt. Weder unter Windows noch unter Linux.

Warum sonst stürtzt Firefox ab sobald ich - bei installiertem Acrobat Reader - ein PDF anklicke.

Zum Glück gibt es einfach Abhilfe. Unter Edit -> Preferences -> Cotntent -> File Types -> Manage -> PDF kann man Firefox beibringen PDFs wieder auf der Platte speichern zu lassen. Ziemlich frech, dass sich der Acrobat Reader hier von selbst einnistet.

28 Sep 2007, 09:15

Debian etch mit RAID per Debootstrap auf Rootserver installieren

Update: Dieses stichpunktartige Installationsprotokoll dürfte kaum zur Nachahmung geeignet sein. Daher existiert unter dem Titel “Rootserver mit RAID unter Debian GNU/Linux etch” ein Nachfolgedokument das zwar inhaltlich noch nicht ganz komplett ist, diesen Beitrag jedoch bereits deutlich übertrifft.

Dies soll ein kurzer Erfahrungsbericht sein, wie man Debian 4.0 aka etch mit RAID per Debootstrap über ein sog. Rescue-System auf einem Rootserver installiert. Es ist eher eine knappe Zusammenfassung als ein Tutorial und beantwortet daher möglicherweise nicht alle Fragen.
  • Resuce System booten
  • cfdisk /dev/sda
  • cfdsik /dev/sdb
  • Geeignetes Partitionierungsschema:
  • sda1 und sdb1 als /boot mit ext2, 128MB
  • sda2 und sdb2 als / mit ext3, 30GB
  • sda3 und sdb3 als swap, 2GB
  • (md0) sda5 und sdb5 als /tmp mit ext2 unter einem RAID0, 4GB
  • (md1) sda6 und sdb6 als /var/log mit ext3 unter einem RAID1, 4GB
  • (md2) sda7 und sdb7 als /var/lib/mysql mit ext3 unter einem RAID1, 6GB
  • (md3) sda8 und sdb8 als /srv mit ext3 unter einem RAID1, Restlicher Platz/2
  • (md4) sda9 und sdb9 als /backup mit ext3 unter einem RAID1, Restlicher Platz/2
  • mke2fs /dev/sd[ab]1
  • mke2fs -j /dev/sd[ab]2
  • mkswap /dev/sd[ab]3
  • sync; sync; sync
  • swapon /dev/sd[ab]3
  • mkdir /mnt/newroot
  • mount -t ext3 /dev/sda2 /mnt/newroot
  • mkdir /mnt/newroot/boot
  • mount -t ext2 /dev/sda1 /mnt/newroot/boot
  • mknod /dev/md1 b 9 2
  • mknod /dev/md2 b 9 3
  • mknod /dev/md3 b 9 4
  • mknod /dev/md4 b 9 5
  • mdadm –creat e /dev/md0 –level=0 –raid-devices=2 /dev/sd[ab]5
  • mdadm –creat e /dev/md1 –level=1 –raid-devices=2 /dev/sd[ab]6
  • mdadm –creat e /dev/md2 –level=1 –raid-devices=2 /dev/sd[ab]7
  • mdadm –creat e /dev/md3 –level=1 –raid-devices=2 /dev/sd[ab]8
  • mdadm –creat e /dev/md4 –level=1 –raid-devices=2 /dev/sd[ab]9
  • WARTEN bis die Festplatten syncronisiert sind. Tipp: “watch cat /proc/mdstat”
  • mkdir /mnt/newroot/tmp
  • mkdir -p /mnt/newroot/var/log
  • mkdir -p /mnt/newroot/var/lib/mysql
  • mkdir /mnt/newroot/srv
  • mkdir /mnt/newroot/backup
  • Die md0 bis md4 Partitionen formatieren
  • Partitionen mounten
  • ggf. debootstrap installieren
  • Das Grundsystem mit debootstap installieren:
    debootstrap –arch {amd64,i386} etch \
         /mnt/newroot http://ftp.de.debian.org/debian
  • Chroot in das neue System:
    LANG=C chroot /mnt/debinst /bin/bash
  • Terminal einstellen:
    export TERM=xterm-color
  • /etc/fstab anpassen: vim /etc/fstab
  • Das Proc Dateisystem mounten: mount -t proc proc /proc
  • aptitude update && aptitude install mdadm
  • tzconfig um die Zeitzone einzustellen
  • /etc/network/interfaces bearbeiten. localhost nicht vergessen.
  • /etc/resolv.conf anpassen.
  • /etc/hosts anlegen.
  • Einen Kernel installieren, z.b. aptitude install linux-image-2.6-amd64 für einen 64bit Kernel.
  • Boot Loader installieren:
    # aptitude install grub

    grub-install /dev/hda


  • Problem: Grub lässt sich nicht installieren. Lösung: chroot verlassen und ‘
    grub-install –recheck –no-floppy –root-directory=/mnt/newroot /dev/sda’ ausführen.
  • Wichtig: Wieder im chroot, mit passwd ein root Passwort setzen
  • Wichtig: OpenSSH Server installieren: aptitude install openssh-server
  • In /etc/fstab die Raid Partitionen eintragen aber am besten bis zum nächsten Neustart erstmal auskommentiert lassen.
  • Benutzer anlegen, administrative Benutzer in staff,users,adm,wheel und www-data aufnehmen.
  • Neu starten
  • /etc/sshd_config anpassen (no root logins, listen ip, etc.)
  • /etc/pam.d/su anpassen, dass nur Mitglieder der Gruppe whell su benutzen dürfen
  • aptitude install munin munin-node dirvish htop vim nload
  • Damit wäre die Grundeinrichtung abeschlossen.
Ich weiss, dass dies kein Howto ist, aber es sollte für erfahrende Benutzer zumindest einen groben Leitfaden für die Einrichtung bieten.

Wer Fragen hat möge bitte die Kommentarfunktion benutzen, dann werde ich versuchen darauf einzugehen.

25 Sep 2007, 08:03

Linux auf ICH5 Mainboards

Linux verhällt sich auf Intel ICH5-basierten Mainboards wie dem Asus P8C800-E Deluxe mitunter komisch. Es will einfach nicht booten. Wer vor dem gleichen Problem steht, der sollte im BIOS unter “Main -> IDE Configuration -> Onboard IDE Mode” vom “Enhanced Mode” auf den “Compatiblity Mode” umstellen. “compatiblity” bedeutet hier übrigens keine Geschwindigkeitseinbußen, sondern ändert nur die Abbildung der Anschlüsse auf die Controller-Ports.

Empfehlenswert ist weiterhin ein aktueller Kernel (2.6.18+) und evtl. die Option “irqpoll”, falls es weiterhin Problem mit dem Mainboard gibt.

23 Sep 2007, 19:06

Was wäre Wenn - Software RAID Edition

Da ich seit längerer Zeit schon Software-RAID unter Linux (mit mdadm) einsetze, habe ich mich hin und wieder gefragt

Was wäre wenn eine der Festplatten ausfallen würde?

Ich wollte nie das Risiko eingehen es auszuprobieren, aber heute hat es sich mal ergeben und das Ergebnis beruhigt mich.

  • RAID0 - Keine Chance, da die Daten über zwei Platten verteilt waren lassen sie sich nicht mehr lesen. Zum Glück setze ich das nur für /tmp ein.
  • RAID1 - Knoppix erkennt und mountet die Partition als gäbe es kein RAID. Alle Daten lassen sich ohne irgendwelche Probleme lesen.
  • RAIDX für x aus {3,5,10,50,…} - Dazu kann ich nichts sagen, da ich z.Z. nur RAID 1 und 0 einsetze.

21 Sep 2007, 13:22

SunRAY Server Software unter Debian

Wer noch ein paar SunRAY Terminals besitzt und die entsprechende Server Software (SRSS) lieber unter Linux, d.h. Debian GNU/Linux, laufen lassen will, der findet auf einer Seite der Uni Erlangen alles nötige.

Weiterhin sind diese und diese Seite möglicherweise interessant.

Update: Wenn man, wie im Anhang beschrieben, die Module für USB und Audio installieren will, darf man nicht vergessen vorher die Kernel Header zu installieren. Bei mir war das ein aptitude install linux-headers-2.6.18-4-48. Der Patch wird übrigens folgendermaßen eingespielt: cd /usr/src; patch -p0 </path/to/modules-3.1.1.diff.

20 Sep 2007, 11:36

Codezeilen zählen

Kurztipp: Wie kann ich die Zeilen eines (Programmier-) Projektes zählen? (SLOC)

Das beste Tool für diesen Zweck dürfe CLOC sein, zumindest und Unix/Linux.

Ein anderer Weg ist eine Unix-Command Folge:find . -regex ‘.*.(c|h|cxx|cpp)’ -print0 | xargs -0 cat | wc -l

20 Sep 2007, 09:42

Was wäre wenn Kein Loopback-Device vorhanden wäre

  • MySQL startet nicht
  • Munin macht Problem
  • exim4 startet nicht
  • Alle andern Programme laufen
Tja, das passiert wenn man vergisst das Loopback-Device zu aktivieren.

19 Sep 2007, 12:49

Das Windows Setup ist so lahm ...

Warum braucht das Windows XP Setup eigentlich 15+ Minuten um eine 40Gb Platte mit NTFS zu formatieren wenn ich mit ext3 oder XFS unter Linux eine 500GB Platte in 20s formatieren kann?

Vielleicht hätte ich doch “Quick Format” auswählen sollen.

Fragen, über Fragen …

19 Sep 2007, 10:23


IBM stellt Lotus Symphony aka OpenOffice+Eclipse RCP vor

Ich weiss nicht ob die Welt das braucht, aber es sieht auf jeden Fall schick aus und vielleicht fördert es ja die Verbreitung von OpenOffice in Unternehmen.

Netzbetreiber fordern USB Anschluss für alle Handys

Na das ist mal eine gute Idee. Die komischen propitären Stecker an den Handys und die umständlichen Software-Lösungen der Hersteller waren mir schon lange ein Dorn im Auge.

Open-Source Konkurent für Second Life

Anscheinend gibt es eine attraktive Alternative zu SecondLife. Ich denke ja, dass ein OpenSource-“SecondLife” deutlich bessere Marktchancen hätte.

Telekom bringt das iPhone

So wie es aussieht wird es bald offiziel angekündigt: Die Telekom bringt das iPhone. Zwar scheint die anfängliche Euphorie inzwischen verfolgen, aber spätestens mit der zweiten Generation des iPhones werde ich mir sehr ernsthaft überlegen mir auch so ein Gerät zu kaufen. Enttäuschend ist halt der Net-Lock.

Debian APT-Proxy in Java

Mit Japt-Proxy gibt es einen APT-Proxy in Java. Ob das was taugt? Ich werde es mal testen, da ich sowieso schon eine Weile nach einem APT-Proxy bin. Natürlich gibt es auch noch andere Implementierungen. Da muss ich einfach mal vergleichen.

18 Sep 2007, 09:35

PHP: Cannot access empty property

Kurztipp: Probleme nach der Migration von PHP4 zu PHP5 (I)

Folgendes Problem tritt nach der Migration von PHP4 zu PHP5 auf:

Fatal error: Cannot access empty property in /www/xyz/abc.php on line xy
Bei mir ist dieses Problem aufgetreten weil sich da ein $ eingschmuggelt hatte wo es nichts zu suchen hatte.

Vorher $this->free_result($this->$query_id);

Nacher $this->free_result($this->query_id);

Wie man sieht genügt es das $-Zeichen zu entfernen.

14 Sep 2007, 09:30


Was ist besser: KDE oder GNOME?

Nun, diese Frage stelle ich mir von Zeit zu Zeit. Darauf eine allgemeingültige Antwort zu finden ist wohl in etwa so leicht wie eine Antwort auf die folgenden Fragen zu finden: emacs oder vi, linux oder windows, ying oder yang, etc. pp.

Für mich persönlich sollte sich diese Antwort allerdings etwas leichter beantworten lassen, das hoffe ich zumindest.

Hier möchte ich einige Punkte auflisten die mir beim Thema KDE vs. Gnome einfallen.


  • viele Einstellungsmöglichkeiten
  • die Zwischenablage scheint (?) manchmal nicht richtig zu funktionieren
  • gute Xinerama/Mehrmonitor-Unterstützung
  • wenige Killer-Apps, aber einige gute (KMail, Konqueror)
  • super “Explorer” (Windows) Ersatz
  • oft zu unflexibel, viele Optionen lassen sich nicht, oder nur umständlich, einstellen
  • schlechte Xinerama/Mehrmonitor-Untersützung
  • viele gute Anwendungen (Killer-Apps) in GTK (Gimp, Firefox, Eclipse, Quod Libet, …)
  • “Explorer” Ersatz (Nautilus) kaum zu gebrauchen
  • Wechselmedien werden übersichtlicher (auf dem Desktop) angezeigt
Ich möchte mich für den Begriff “Explorer”-Ersatz hier entschuldigen, aber ich finde, dass der Windows Explorer (NICHT Internet Explorer!) eine ziemlich gute Anwendung ist. Es gibt viele die - unter Windows - dessen Vorzüge nicht schätzen und lieber auf Alternativen wie Total Commander ausweichen (unter Linux gibts dafür die ULTIMATIVE Alternative: Worker!) aber ich persönlich bin sehr vom Explorer überzeugt.

12 Sep 2007, 16:41

Serverumstellung auf PHP5

Der Server läuft jetzt mit PHP5. Bei der Umstellung habe ich kurz das Blog zerschossen - Safe Mode war aktiviert. Jetzt sollte es wieder gehen.