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
update-grub
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.

apache.conf.erb:

<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 %>
   </Location>
<% end -%>
<% end -%>
</IfModule>
mount.psgi.erb:
#!/usr/bin/perl
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;    } };

 

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!

Via

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.

LXC

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.

KVM

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.

VMWare ESXi

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.

Xen

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.

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 1.2.3.4 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.

16 Apr 2011, 13:14

VBoxAdm: Mailinglist and API

A short status update regarding VBoxAdm.

Mailinglist

Finally I’ve created a Mailinglist: http://www.vboxadm.net/support.html#mailinglist

Refactoring

I’ve been refactoring the Code for a while to turn it more into a MVC-Shape. This means separating the Model from the Controller (former VBoxAdm::Frontend, now VBoxAdm::Controller::Frontend). The ultimate goal of this work is to support code reuse and support for multiple ways to manipulate the data. Once the Model classes are stable I’ll finish the command line interface as well as the HTTP-API. This will provide three ways to modify the underlying data:
  • Web Frontend
  • HTTP-API (no REST for now, maybe later)
  • CLI
The Mailarchive is postponed for the time being.

Auto Configuration

Most Mailclients, like Outlook, Thunderbird and KMail, support a way of client auto-configuration. When setting up a new mail account they request a certain URL derived from the mail address and if they find an XML document with the expected information there they’ll use this information to set the correct username, mailserver and protocols. Support for this was added recently. There is even support for the weird way MS Outlook does this. However Outlook support is, so far, based solely on the documentation on Technet. Due to the lack of a Outlook license I wasn’t able to test it. Please provide feedback.

Future Work

After the refactoring, API and CLI are finished I’m going to look into the Mailarchive again. After that I’ll look into Quota Support, Mailman integration and I’d like to find a way to get the Postfix Logs into the database to ease support work. Having the Log in the database in a parsed format - no raw syslog to db - would make support request more easy to handle. No more need to log into the server and grep through the mail.log.

Further feature request are always welcome. Please direct any ideas and comments to the mailinglist at vboxadm@vboxadm.net.

10 Mar 2011, 06:37

Postfix: partial relaying to Exchange

Recently I’ve tried to migrate an Exim4 mailserver to Postfix. This was pretty straightforward, however there was one issue that took me some time to figure out.

The exim mailserver handled several domains and one of those had mailboxes as well locally as remote on some remote Exchange mailserver. The exim did accept known mailboxes, performed recipient callout verification to the exchange and if it did accept this recipient the exim did so as well.

The friendly guys at the postfix.user mailing list tried to help with that, but either I did not make my problem clear or I missed some information. Hoever they couldn’t help me with this.

After reading some while in the (german) Postfix Buch, I’ve found a setup that led me to the solution in the end: Define the (partially) local domain as a relay_domain and let the transport map decide if the mail gets relayed to some remote host or a local transport.

That did work out pretty well and this is how I did it.

First I’ve included the domain in question, let’s say ‘domain.tld’ in my relay_domains:

relay_domains = domain.tld

Then I’ve added another transport map, pointing to some SQL file:

transport = mysql:/etc/postfix/virtual_transport_maps.cf

In this file I’ve defined a rather complex SQL query that would return my local transport (dovecot) for known mailboxes and default to the remote Exchange host for unknown mailboxes.

query = SELECT DISTINCT IFNULL((SELECT 'dovecot:' FROM domains AS d LEFT JOIN  mailboxes AS m ON m.domain_id = d.id WHERE d.name = '%d' AND  m.local_part = '%u' AND d.is_active AND  m.is_active),'smtp:[exchange.domain.tld]') FROM domains WHERE  'domain.tld' = '%d' AND NOT LOCATE('+','%u');

Then I’ve added the smtpd_recipient_restriction reject_unverified_recipient. This would reject any recipient which could not be verified at the Exchange server.

It also works with VBoxAdm.

Update: I’ve added the AND NOT LOCATE(‘+’,‘%u’) part at the end of the query to avoid getting false positives if recipient_delimiter=+ is set. You should set the ‘+’ in the query to whatever your recipient delimiter is set to or just drop this part of the where clause if you haven’t set recipient_delimiter.

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 …

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;

our $VERSION = '@VERSION@';

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 {
        return;
    }
}

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) );
            $i++;
        }

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

        # 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
        return;
    }
}

1;

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

25 Aug 2010, 18:16

Lightning strikes

Lightning sucks. A thunderblot struck our house and toasted my dsl splitter and my router. Did you ever want to know how a splitter that has been hit by a thunderblot looks? Here are the pictures.

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 - 192.168.10.1
vs-buildd-amd64 - 192.168.10.2
vs-buildd-i386 - 192.168.10.3
First we need to create these vservers:
newvserver –ip 192.168.10.124 –domain localdomain –hostname vs-buildd-rep –vsroot /srv/vserver/ –mirror http://ftp.de.debian.org/debian –interface eth0 –dist lenny –arch amd64
newvserver –ip 192.168.10.224 –domain localdomain –hostname vs-buildd-amd64 –vsroot /srv/vserver/ –mirror http://ftp.de.debian.org/debian –interface eth0 –dist lenny –arch amd64
newvserver –ip 192.168.10.324 –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:

:%s/lenny/squeeze/g
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.

23 Jun 2010, 11:51

Speedport W722V - Features? We ain't need no Features!

Dear Deutsche Telekom, I’ve just got to love your great CPE products. The Speedport W722V ist a great product, a impressive piece of german engineering! It provides lots and lots of usefull features. For example you can us it as a doorstop, paperweight or to prettify your home.

But the point is: It is absolutely useless as a Internet-Router for me! It doesn’t allow incoming ICMP (Ping), it got no internal S0 (ISDN) Bus and it doesn’t allow VPN-Passthrough (GRE, Protocol 21). I even suspect it to have a severely broken QoS, but I can’t proof that right now. And this is only after a few days of playing around with this device. Not to think of what I’d find if I gave it some more time.

Die Konfiguration unserer Speedports ist auf Einfachheit getrimmt. Der Reichtum an einstellbaren Funktionen und Konfigurationsoptionen ist nicht das Ziel der Entwicklung, eher schon eine Reduktion auf das Wesentliche.
[Telekom Team @ T-Online Foren]

The quote says that they aim for simplicity and not for features, and they’re good at it. Very good. This device is so simplistic that it is basically useless for all but the most basic users.

I’ll look for a better CPE and try to return this device as soon as possible. Maybe they find somebody who can make better use of it than me.

Update: It looks like the Speedport is killing long running connections after a while (a few hours at most). I’ve heard about that one … that’s very disappointing when working over SSH.

01 Apr 2010, 21:15

Threads in Perl are broken

Ok, for most experienced perl programmers this is not new, but let me repeat it:

Threads in Perl are broken. Really, really, severe broken. Do not use threads with Perl.
Thread async is probably ok for smaller computations but for anything else use fork().

Not only are IPC-Signals really dangerous with threads and DBI can’t work with threads but also the memory usage is magnitudes higher with threads than with fork(). At the moment I’m hacking a perl app that uses a lot ressouces but I was impressed how fast I could kill my system with fair amout of concurrent threads. From Java I was used to threads being very lightweight, but with Perl this is the other way round. My app has its core part modularized and I’ve wrote it once using threads and once using fork(). The threads-version uses about 300MB RSS while the fork()ing version uses no more the 30MB RSS for the same workload. Quiet a difference.

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
pvscan
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
update-grub
In case you encounter any error let me know, I’ll try to help.

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 0.7.0.100. 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 (195.182.96.28 and 195.182.96.61).
  • 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 192.168.2.0/24 -o eth0 -j MASQUERADE
iptables -A INPUT -i vmnet1 -s 192.168.2.0/24 -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.

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 …

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, 21:56

OSM Fun

Funny OSM Map

Sometimes OpenStreetMaps can be quite funny.

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
Update:
  • 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.

20 Oct 2008, 15:51

OpenWRT

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 192.168.1.1. Note: If you already have a device using the address 192.168.1.1 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.

19 Oct 2008, 08:31

New Harddrives

Recently I’ve got myself two new harddrives. I’ve always sticked to Western Digital in the past, but I didn’t find a good offer this time. I’ve found the HD103UJ from Samsung but at first I hesitated because there were reports of high failure rates, obviously in one of the first charges. In the end I’ve got myself two of these and am pretty happy with them. Transfer speed is ok and they stay really cool. About 36°C after several hours of operation with steady cooling. Since the IBM 307030 I’ve always equipped my HDDs with active cooling.

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"
EndSection
Section "Extensions"
Option "Composite" "Enable"
EndSection
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"
EndSection
Section "Screen"
Identifier     "Screen0"
Device         "nvidia0"
Monitor        "monitor0"
DefaultDepth    24
SubSection     "Display"
Depth       24
Modes      "1280x1024" "1024x768" "800x600" "640x480"
EndSubSection
Option "AddARGBGLXVisuals" "True"
Option "DisableGLXRootClipping" "True"
Option "PixmapCacheSize" "1000000"
Option "AllowSHMPixmaps" "0"
Option "AddARGBGLXVisuals" "True"
EndSection

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 10.8.0.0” if you use the suggested subnet of “10.8.0.0”.

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]
</VirtualHost>

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:

  • “AHCI SATA support” (CONFIG_SATA_AHCI) for SATA
  • “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.

28 Mar 2008, 14:00

GIMP Hotkeys

Die wichtigsten GIMP Hotkeys auf einen Blick.

28 Mar 2008, 08:00

WTFPL

GPL? BSD? MIT?

WTFPL!

Freier geht nicht mehr.

27 Mar 2008, 06:00

MySQL for Dummies

For beginners, a useful startup option is –safe-updates (or –i-am-a-dummy, which has the same effect).
Quelle: MySQL Tips

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

25 Mar 2008, 19:02

South Park Episoden im Internet

Unter South Park Studios gibt es alle bisher veröffentlichten South Park Episoden in voller Länge als Streams. Legal und kostenlos.

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

dsld

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"
EndSection
# Composing aktivieren, sollte schon aktiv sein
Section "Extensions"
Option "Composite" "Enable"
EndSection
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"
EndSection
Section "Screen"
Identifier     "Screen0"
Device         "nvidia0"
Monitor        "monitor0"
DefaultDepth    24
SubSection     "Display"
Depth       24
Modes      "1280x1024" "1024x768" "800x600" "640x480"
EndSubSection
Option "AddARGBGLXVisuals" "True"
Option "DisableGLXRootClipping" "True"
EndSection

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.

14 Mar 2008, 12:00

FRITZ!Box mit IPv6

Nachdem mir IPv6 schon eine ganze Weile am Herzen liegt weil ich mir damit ein Ende der leidigen NATs und mehr Adressen für SSL-Mass-Hosting verspreche und es auch schon einige Provider mit nativen IPv6 Verbindungen - auch DSL-Provider - gibt, habe ich mal beim Hersteller des wohl bekanntesten Consumer Routers, AVM, nachgefragt wie es eigentlich mit IPv6 Unterstützung für deren Flagschiff, die FRITZ!Box, aussieht.

Wenn ich die Antwort richtig interpretiere ist zwar noch nichts geplant, aber man hat mir versprochen den Vorschlag an den zuständigen “Produktmanager” weiter zu leiten. Was das bedeutet kann ich nicht sagen, aber da es keine Änderungen in der Hardware erfordern würde kann man zumindest darauf hoffen, dass es irgendwann in der nahen Zukunft umgesetzt wird.

13 Mar 2008, 17:02

Google über IPv6

Seit kurzem ist Google unter der Adresse ipv6.google.com bzw. 2001:4860:0:2001::6 auch über IPv6 erreichbar. Yeah!

Wird auch langsam Zeit.

27 Feb 2008, 10:07

TD im Browser

Lust auf eine kleine Runde Tower Defense? Mit Vector TD 2 gibts ein spannendes und anspruchsvolles TD für den Browser.

14 Feb 2008, 10:08

Warum tauchen meine Bilder nicht in der Bildersuche auf?

Ich hatte eine Weile das Problem, dass meine Bilder nicht in den Bildersuchen von Google, Yahoo, etc. vertreten waren. Das Problem war einfach, dass ich die Bilder zwar sehr Benutzerfreundlich in einen HTML-Container verpackt hatte, aber dass in diesem Container leider gar kein Text stand und die Sumas so keinerlei Keywords zuordnen konnten.

Daher sollte man sich merken, wenn man will, dass die eigenen Bilder gefunden werden, folgende Richlinien zu befolgen:

  • Aussagekräftier Dateiname
  • Alt und Title Attribute des img-Tags ausfüllen
  • Das Bild, am besten in Originalgröße, direkt, d.h. im selben HTML-Container (div, …) wie den Text der sich auf das Bild bezieht zu platzieren
Eigentlich nichts neues, aber manchmal übersieht man auch offensichtliche Dinge.

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-2.6.24.1. Möglicherweise auch 2.6.24.2.

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

11 Feb 2008, 18:43

Objekte freistellen in GIMP

Fotos sind was feines, aber ganz besonders praktisch sind Bilder deren Objekte freigestellt sind, da man diese Problemlos in eigene Bilder oder Anwendungen übernehmen kann. Um Objekte eines Bildes frei zu stellen gibt es diverse Möglichkeiten und reichlich Anleitungen, insb. für Photoshop. Oftmals sind diese Techniken auch mit GIMP anwendbar, aber für einen Laien wie mich erschließt sich nicht immer die äquivalente GIMP Funktion zu dem Photoshop Pendant. Selbst so manches GIMP Tutorial ist für mich nicht gänzlich verständlich, daher möchte ich hier eine Methode aufzeigen die bei mir gut funktioniert hat. Ich muss noch anmerken, dass ich in Bezug auf Photographie und Bildbearbeitung ein absoluter Laie bin und nehme daher gerne konstruktive Kritik in den Kommentaren entgeben.

Hier die Schritt-für-Schritt Anleitung von Objekten mit GIMP 2.4+. Eine wichtige Vorraussetzung ist, dass das Objekt vor einem möglichst homogenen Hintergrund, am besten weißes Papier, mit gleichmäßiger Ausleuchtung aufgenommen wurde. Bei anderen Szenen empfehle ich eher die Hochpass-Methode oder evtl. auch SIOX/Vordergrundauswahl.

  • Das Bild öffnen
  • Freistellen - Ausgangsbild
  • Den Hintergrund mit dem Zauberstab markieren. Ggf. die Selektion mit den Maskenwerkzeugen und Shift (+) bzw. Strg (-) korrigieren
  • Freistellen - Maskieren
  • Freistellen - Maskieren 2
  • Einen Rechtsklick auf den Hintergrund, “Alphakanal hinzufügen” auswählen
  • Freistellen - Ebenenmaske
  • Noch einen Rechtsklick auf den HG, “Ebenenmaske hinzufügen” und dann “Weiß (volle Deckkraft)” auswählen
  • Freistellen - Ebenenmaske 2
  • Mit dem Füllwerkzeug den Inhalt der Maske schwarz füllen, ggf. von Hand nachbearbeiten.
  • Filter -> Weichzeichnen -> Bewegungsunschärfe mit Weizeichnungsart “Zoom” und 5-10 Einheiten Länge oder Gaußscher Weichzeichner mit 50 Pixel Radius ausführen
  • Freistellen - Gauss
  • Auswahl entfernen
  • Eine neue Ebene einfügen, mit beliebiger Farbe füllen und hinter den HG schieben
  • Freistellen - Endprodukt

07 Feb 2008, 23:15

AIM, ICQ und MSN mit Jabber Unterstützung

So wie es aussieht bahnt sich eine breite Unterstützung für Jabber von Seiten der propitären Messenger-Firmen an.

Im Beitrag zu MSN ist zwar nur die Rede von “GTalk”, aber da Google Talk ja vollkommen auf Jabber aufbaut bedeutet das anscheinend eine mögliche Jabber Unterstützung für den MSN Messenger.

Das wäre fast zu schön um wahr zu sein, wenn ich endlich keine Multi-Protkol-Clients mehr bräuchte um mit dem ganzen ICQ Nutzern zu kommunizieren.

06 Feb 2008, 06:00

htaccess Dateien im Browser erstellen

Auf der Seite .htaccess Editor ist es ganz einfach möglich .htaccess Dateien für den Apache Webserver Online zu erstellen.

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.

25 Jan 2008, 12:23

WSDL2Flash-GUI Generator

Ich habe gerade erfahren, dass es Code-Generatoren gibt um aus WSDL Beschreibungen Flash GUIs zu erzeugen.

Ohman, da haben sich zwei Hammer-Technologien gesucht und gefunden ;)

21 Jan 2008, 18:08

Yacy - Verteilte Websuche

Durch einen Artikel in der iX bin ich mal wieder auf die verteilte Websuche Yacy aufmerksam geworden.

Nachdem ich letztes Jahr selbst etwas ähnliches implementiert habe, und durch die erdrückende Marktmacht von Google motiviert habe ich mich entschlossen Testweise selbst als Peer am Yacy Suchnetzwerk teilzunehmen.

Die Installation ist erfreulich einfach:

Das wars. Einfacher gehts wirklich nicht. Dann noch schnell im Webinterface ein Passwort vergeben und schon kann die Suche losgehen.

Wer anderen Peers Zugriff auf den eigenen Index gewähren will, der sollte noch Port 8080 in der Firewall (Router, etc.) freischalten.

Yacy macht wirklich einen guten Eindruck. Mal sehen, wenn sich der Client als stabil erweist lasse ich ihn vielleicht in Zukunft auf einem Root-Server laufen.

15 Jan 2008, 10:18

Scaffoldr 2.0

Wer bei PHP/MySQL Projekten die CRUD Seiten fürs Backend nicht dauernd von Hand bauen will und keine Lust hat sich in ein riesiges Framework einzuarbeiten der sollte sich mal meinen CRUD Code Generator Scaffoldr anschauen.

Das ist ein Template basiertes PHP Script das die CRUD Seiten für eine komplette Datenbank innerhalb weniger Sekunden erstellt. Inkl. differenzierter Behandlung der einzelnen Feld-Datentypen, sortierbaren Spalten sowie “Pageination”.

Ich benutze das oft als Basis für das Administrationsbackend von Webprojekten. Für ein Benutzer-Frontend ist es dagegen weniger geeignet, da weitgehend auf Sicherheitsüberprüfungen verzichtet wird. Daher vorsicht vor SQL-Injection Attacken wenn man nicht vertrauenswürdige Benutzer ran lässt.

07 Jan 2008, 12:34

Datenschutz-Pannen durch frei zugängliche Zugrifsstatistiken

Mit Google lassen sich immer mal wieder interessant Entdeckungen machen.

Sucht man z.B. nach einem User-Agent String (aus einem HTTP-Header) finden man eine ganze Reihe von frei zugänglichen Zugrifsstatistiken. Na wenn das nicht mal Datenschutz par excellence ist.

18 Dec 2007, 19:36

Neue Firmware für FRITZ!Box 7170

Jetzt wo die neuen 7270 fertig ist, gibt AVM endlich die finale Version der neuen Firmeware, bisher nur als Laborversion erhältlich, raus.

Anscheinend steht auch schon eine Firmeware mit der Möglichkeit zum Faxempfang bereit. Das klingt doch sehr gut :)

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.129.98.4.165.1196102178.squirrel@mail.host.com&gt;: 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

Zugriffsprobleme

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’

25 Nov 2007, 14:33

Haltestellenaushangfahrpläne des RMV

Tipp: Spart viel Zeit und Nerven.

22 Nov 2007, 12:12

Safari unter Windows

Nachdem es Apples Webbrowser Safari nun schon eine Weile für Windows gibt wollte ich ihn jetzt auch mal ausprobieren.Im klassischen Apple Design gehalten, bin ich die ganze Zeit irritiert da unter Windows so sonst nur iTunes aussieht.Er wirkt etwas langsamer als Firefox und Opera, aber gemessen habe ich das nicht.Gleich beim ersten Start hat er sich allerdings kommentarlos verabschiedet.Um ab und zu mal Webseiten auf die Darstellung zu überprüfen ist er ok, aber dauerhaft damit arbeiten will ich zur Zeit (noch) nicht. 

21 Nov 2007, 06:00

Testbericht: Netgear GS108T Managed Gbit-Switch

Da es mit meinem bisherigen “Switch Ersatz” (Linksys WRT54G) hin und wieder Probleme gab und ich den Router eigentlich als Open/FreeWRT Testplattform verwenden wollte, wurde es Zeit für einen adäquaten Ersatz. Natürlich GBit. Am besten “managed”. Leider waren die Geräte mit Web-Interface bis vor kurzem nicht bezahlbar, und in Ausführungen mit wenigen Ports (< 16) auch gar nicht verfügbar.

Jetzt hat Netgear aber vor kurzem einen sog. “Smart Switch” herausgebracht. Den GS108T. Mit seinem halbwegs moderaten Preis war mir sofort klar, dass das etwas für mich sein könnte.

Nachdem ich einige Zeit darauf warten musste bis ich einen Shop gefunden habe der diesen Switch auf Lager hat, ist mein Paket von Avitos jetzt endlich da.

Der Switch macht einen guten Eindruck, wobei natürlich nur die inneren Werte wirklich zählen. Die ersten Durchsatzmessungen stimmen mich sehr zuversichtlich. Demnächst werde ich die VLAN und QoS Features gründlich testen und dann nochmal darauf zurück kommen.

Netgear GS108T - Auspacken (I) Das Paket ist ziemlich schwer, ca. 2KG. Netgear GS108T - Auspacken (II) Der Pakungsinhalt bietet relativ wenige Überraschungen, das Übliche halt … Netgear GS108T - Netzteile Aber hey, was ist das: Zwei Netzteile? Hat der Switch etwa eine redundate Stromversorgung? Nein, da ist nur ein Anschluss für ein Netzteil, aber das zweite Netzteil hat auch einen UK-Stecker. Der erste Gedanke war so etwa “WTF?”, aber da war es wohl billiger eine EU-Version zu machen anstatt zwei getrennte Modellreihen zu produzieren.

Netgear GS108T - Webinterface

Der Funktionsumfang ist für einen Switch der SOHO/Consumer-Klasse sowieso extrem reichhaltig und geht von Gbit, über VLAN, QoS bis hin zu Port-based RADIUS Authentifizierung.

Die Features im einzelnen:

  • Webinterface
  • IP/Subnetz/Mac ACL
  • RADIUS Client für Port-basierte Authentification
  • NTP-Client
  • LLDP
  • Logging (Local Ram, Flash oder Remote via Syslog)
  • Konfiguration pro Port möglich, inkl. Priorität und Geschwindigkeit
  • QoS
  • VLANs
  • Link Aggregation
  • Monitor/Sniffer Unterstützung (Konfigurierbarer Monitor Port)
  • Jumbo Frames
  • Rate Limiting
  • Storm Control
  • RSTP (Rapid-Spanning-Tree-Protocol)
  • SNMP
Im Moment bin ich dabei die SNMP-Unterstützung unter die Lupe zu nehmen und zur Überwachung des Switches zu nutzen.

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 192.168.1.9, TCP port 5001

TCP window size: 0.00 GByte (default)

[ 4] local 192.168.1.11 port 55796 connected with 192.168.1.9 port 5001 [ ID] Interval Transfer Bandwidth [ 4] 0.0-10.0 sec 0.59 GBytes 0.51 Gbits/sec [ 5] local 192.168.1.11 port 5001 connected with 192.168.1.9 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.

16 Nov 2007, 14:23

PuTTyTray

PuTTy + Transparenz + Standby-Support = PuTTyTray

14 Nov 2007, 08:59

Google AdSense Zeitzone

Wer zu den Nutzern von AdSense gehört, der hat sich sicher schon manchmal gefragt wie die Angaben “Heute”, “Gestern”, etc. zu verstehen sind, da die Werte oftmals nicht zu stimmen scheinen. Die Vermutung liegt nahe, dass AdSense nicht die lokale Zeitzone des Benutzers verwendet sondern eher eine der US-Zeitzonen.

Auf einem Blog habe ich einen Hinweis dazu gefunden, die von AdSense verwendete Zeitzone liegt wohl -7 Stunden, relativ zur MEZ.

Das würde sich auch mit meinen Vermutungen und Beobachtungen decken.

Update: Ich habe nochmal nachgerechtnet und halte eher -8 bis -9 Stunden für wahrscheinlich, anyway das ist etwa die Größenordnung mit der man rechnen muss. Wäre aber schon nett wenn Google anzeigen würde in welcher Zeitzone sich die “Google-Master-Clock” befinden.

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.

blog-domain-umzug-analytics.jpg

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

LD_LIBRARY_PATH

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

Synergy

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.

Linux

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.

Windows

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

01 Nov 2007, 07:30

RAID Levels

Was bedeutet eigentlich RAID?

Ursprünglich wurde RAID als “Redundant Array on Inexpensive Disks” eingeführt, wobei sich das “Inexpensive” nicht auf die niedere Qualität der einzelnen Platten bezog sondern einfach auf die Tatsache, dass sich mit einem Array von kleineren Platten wesentlich einfacher und günstiger die gewünschte Kapazität erreichen lies als mit einer einzelnen, sehr teuren, Platte.

Später wurde der Begriff in “Redundant Array of Independent Disks” geändert, da sich die Hersteller hiervon Marketingvorteile erhofften.

Wenn man über RAID redet geht man meistens davon aus, dass die Daten gegen den Ausfall einzelner Platten abgesichert sind. Man sollte allerdings nicht vergessen, dass gar nicht jedes RAID-Level zusätzliche Datensicherheit bietet. Um das näher zu Erläutern werde ich auf die einzelnen Level eingehen.

Warum eigentlich RAID?

Jedes Gerät hat eine MTTF, bzw. für jedes Gerät kann eine MTTF, Mean-Time-to-Failure, also die durchschnittliche Zeit bis zu einem Ausfall, ausrechnen. Dieser Wert ist für ein Gerät meistens unveränderlich vorgegeben und nur bedingt maximierbar. Da so ein “Failure” im Normalfall mit dem Verlust der Daten einhergeht versucht man mit eine RAID diese MTTF, bezogen auf das gesamt System, stark zu erhöhen. Dies wird in der Regel realisiert indem man die Redundanz, also die Anzahl der Datenträger auf denen eine “Information” gespeichert ist, erhöht.

Ein weiterer Aspekt ist die Performance, sei es jetzt Read-/Write-Throughput oder Zugriffszeit. Diese ist ebenfalls pro Gerät vorgegeben und auch nur schwer veränderbar (z.B. durch hohe Investitionen). Um den Durchsatz zu erhöhen kann man die Daten auf mehrere Platten verteilen.

RAID 0 - Stripping

Hier werden die Daten über n identische Datenträger verteilt. Je nach Implementierung wird ja 1/n Sektoren auf jede Platte gestiegen. Damit lässt sich die maximale Kapazität aus den Platten rausholen und bei einem guten Controller auch Transferraten von bis zum n-fachen der einzel Platte erreicht werden. Allerdings steigt auch die Ausfallrate, oder MTTDL (Mean Time to Data Loss) von MTTF auf MTTF/n an. Ein kleines Beispiel: Wenn eine einzelne Platte eine MTTF von 5 Jahren hat und ich 10 Platten im System habe ist meine MTTDL nur noch 182.5 Tage oder knapp ein halbes Jahr!

RAID 1 - Mirroring

Dies ist mit die sicherste und einfachste Betriebsart. Es werden einfach alle Daten auf n Platten geschrieben. Damit liegt jeder Sektor n-mal vor und die MTTDL ist etwa MTTFn. Dies wirkt sich sehr positiv auf die Lese-Tranferrate aus die bis zu n(Leserate der Einzelplatte) beträgt, die Schreibrate bleibt allerdings auf die Leserate einer Einzelplatte beschränkt. Intelligente RAID 1 Implementierungen schreiben die Verwaltungsdaten für das RAID an des Ende des Datenträgers, so dass die Daten im Falle eines Falles auch ohne ein RAID fähiges System gelesen werden können. In so einem Fall sollte man natürlich vermeiden auf die Daten schreiben zuzugreifen wenn man es nicht vorher gestet hat, da dies undefinierbare Folgen haben kann.

Dieses Setup wird häufig in Szenarien verwendet wo Verfügbarkeit und ein garantierter Durchsatz wichtiger sind als Effizienz (in Bezug auf den benötigten Speicherplatz).

RAID 2 - ECC, wie bei RAM

In dieser Betriebsart werden die Paritätsdaten wie bei ECC-gesichertem Hauptspeicher gebildet und auf einige zusätzlichen Platten abgelegt. Dadurch bedingt werden bei einer kleinen Anzahl von Platten sehr viele Paritätsplatten benötigt und das System erst ab einer großen Anzahl von Platten effizient. Aus diesem Grund war RAID 2 fast nur bei Großrechnern zu finden und ist heute quasi ohne Bedeutung.

RAID 3 - Bit-interleaved Parity

Bei diesem Verfahren werden die Nutzdaten über alle Platten gleichmäßig verteilt und die Paritätsdaten alle auf eine zusätzliche Platte geschrieben. Dies bringt zwei wichtige Nachteile dieses System. Zum einen muss für jeden Schreibzugriff auf alle Platten, Daten und Parity, zugegriffen werden und für jeden Lesezugriff auf alle Datenplatten. Damit lässt sich zwar ein hoher Durchsatz erzielen, aber für Umgebungen mit vielen Schreib-/Lesezugriffen ist dieses Level weniger geeignet. Die Parity-Disk wird in jedem Fall zum Flaschenhals.

RAID 4 - Block-interleaved Parity

Dieses Level entspricht dem leicht abgewandelten Level 3. Hier werden nicht die Sektoren linear auf die Platten verteilt, sondern in etwas größere Blöcke zusammen gefasst. Dadurch ist es bei einem Schreibzugriff nicht mehr unbedingt notwendig auf jede Platte zuzugreifen. Ansonsten gilt hier das für Level 3 gesagte auch.

RAID 5 - Block-interleaved Distributed Parity

Dies ist die wohl am weitesten Verbreitete RAID Betriebsart da sie den besten Kompromiss aus Effizienz, Platz, Kosten und Sicherheit bietet. Hierbei werden alle Daten, also Nutzdaten und Parity-Daten, linear über alle verfügbaren Datenträger verteilt. Dieses Konzept erlaubt den Ausfall einer einzelnen Platte ohne beeinträchtigung des Gesamtverbundes. Sobald allerdings weiter Platten ausfallen sind alle Daten sofort verloren, da eine Wiederherstellug nicht mehr möglich ist wenn mehr als eine Platte verloren geht. Wer mehr Sicherheit benötigt muss sich RAID 6 anschauen.

Das Konzept von RAID 5 beseitigt den Flaschenhals von Level 3 und 4, da es keine einzelne Platte mehr für die Paritätsdaten gibt.

Für die Paritätsdaten wird eine zusätzliche Platte benötigt. Die Effizienz steigt also mit der Anzahl der Platten im Array deutlich an. Wenn 5 Platten benutzt werden lieft die effektive Kapazität bei 80%, in einem System mit 36 Platte liegt die brutto Kapazität hingeben schon bei 97,2%. Natürlich muss man beachten, dass durch die rechenintensiven Paritätsberechnungen die Performance leiden kann und unbedingt ein leistungsfähiger RAID-Controller benötigt wird.

RAID 6 - Block-interleaved Distributed Parity

Dieses Level ist die logische weiterentwicklung von RAID 5. Hier wird die Datensicherheit mit zwei, versetzten Partitätscodes erhöht, so dass bis zu zwei Platten gleichzeitig ausfallen können. Das Problem hierbei ist hauptsächlich, dass die notwendige Rechenleistung durch die doppelten Paritätscodes stark ansteigt.

Beiden Levels, also 5 & 6, ist, dass sie eher ungeeignet für viele, kleine, Schreibvorgänge sind, da hier ständig auf alle Platten zugegriffen werden muss um die Paritätsdaten zu aktualisieren.

RAID 10 - Hierachical RAID (RAID 0 über RAID 1 Subarrays)

Wie bei allen “zweistelligen” RAID Leveln handelt es sich hierbei um eine Kombination von zwei Subarrays. Die Notation RAID XY steht im allgemeinen dafür, dass zunächst ein RAID X über die einzelnen Subsets von Platten gebildet wird und dann über die gesamten Subarrys ein großen Array mit Level Y. Allerdings muss man ein wenig aufpassen, da einige Hersteller die Notation einfach umdrehen und ein RAID XY mit RAID YX bezeichnen.

Angenommen man will ein RAID 10 über 10 Platten einrichten. Dann gibt es die Möglichkeit zunächst einzelne RAID 1 Arrays über je zwei (oder mehr) Platten zu erzeugen und dann ein RAID 0 Array über die Subarrays oder aber zwei RAID 0 Arrays über jeweils 5 Platten und danach ein RAID 1 Array über alles.

Es ist ganz wichtig, dass man sich klarmacht, dass es ein Unterschied ist ob man zunächst ein RAID 1 und dann ein RAID 0 anleget oder anders herum. Im einen Fall können bis zu fünf Platten ausfallen, im zweiten (bei RAID 0+1) maximal 2!

Warum?

In den zwei Subarrays (mit Level 0) des RAID 0+1 darf keine Platte ausfallen oder das ganze Subarray ist verloren. Sobald dann eine Platte aus dem anderen Subarray ausfällt ist das ganze System down. Natürlich reichen im RAID 10 auch schon zwei Plattenausfälle um das ganze System lahm zu legen, aber hier ist es deutlich unwahrscheinlicher, da die Platten in “kleine” RAID 1 Arrays zusammengefasst werden und auch beim Ausfall der fünften fehlerhaften Platte die Daten noch vorhanden sind - solange nicht zwei im gleichen Subarray ausfallen.

RAID 50 - Hierachical RAID (RAID 0 über RAID 5 Subarrays)

Hier werden zunächst zwei RAID 5 über jeweils n Platten angelegt und diese dann zu einem RAID 0 zusammengefasst. Eine eher teure und aufwendige Konstruktion.

RAID 0+5 - Hierachical RAID (RAID 5 über RAID 0 Subarrays)

Hier werden zunächst jeweils zwei (oder mehr) Platten zu RAID 0 Subarrays zusammen gefasst und dann über diese Subarrays ein großes RAID 5 erstellt.

RAID 0+1 - Hierachical RAID (RAID 1 über RAID 0 Subarrays)

Hier werden über die hälfte der Platten RAID 0 Arrays angelegt und diese Subarrays dann zu einem RAID 1 zusammengefasst.

Siehe auch RAID 10.

JBOD - Just a bunch of Disks

Obwohl eigentlich kein RAID, wird JBOD, gerade von moderne, günstigen, RAID-Controllern in einem Atemzug mit RAID genannt. Eigentlich ist es ähnlich zu RAID 0. Doch anstelle die einzelnen Blöcke gleichmäßig auf die Platten zu verteilen werden die Platten einfach aneinander gehängt. JBOD ist dann von vorteil wenn man viele unterschiedliche Platten hat und einfach eine große Menge von zusammenhängenden Speicher ohnd jede Verfügbarkeitsgarantie benötigt. Allerdings existieren in Zeiten von LVM & Co. hier auch noch (bessere) Möglichkeiten.

Ende

Ich hoffe hiermit einen Überblick über die verfügbaren RAID Levels gegeben zu haben.

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.

DK2

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.

21 Oct 2007, 07:30

P2P Wiki in Java

Unter dem Namen jP2PWiki habe ich eine Beispielimplementierung eines P2P Wikis in Java veröffentlicht.

Das ganze ist nicht als stabile Software sondern eher als Proof-of-Concept anzusehen, aber möglicherweise hat der eine oder andere Interesse an dieser Thematik.

Alle weiteren Details finden sich auf der Projektseite.

20 Oct 2007, 08:00

No Spam!

Gestern bin ich durch eine Anzeige auf das Buch “No Spam! Besser vorbeugen als heilen” von Tobias Eggendorfer aufmerksam geworden.

In der Anzeige wurden unter andem die folgenden Punkt angeführt:

  • Woher haben Spammer die Adressen?
  • Grundlegende Vorsichtsmaßnahmen
  • eMail Adressen verstecken
  • Harvester blockieren
  • Absichern von Mailinglisten und Newslettern
Wenn ich das Inhaltsverzeichnis so lese, fage ich mich ernsthaft warum man dieses Thema auf ca. 160 Seiten aufblähen muss, und warum man dazu ein ganzes Buch verfasst. Die angesprochenen Punkt lassen sich eigentlich in ein paar Zeilen zusammenfassen, und genau das werde ich hier versuchen.

Was ist Spam?

Der Begriff Spam stammt aus einem Monty Python Sketch und ist die Umgangssprachliche Bezichnung für UCE/UCB was für “Unsolicited Commercial E-mail” bzw. “Unsolicited Commercial Bulk E-mail” steht. Gemeint sind damit unerwünschte Nachrichten die in großem Umfang an eine Vielzahl von Benutzern verschickt wird. Ein weiteres Merkmal von Spam ist, dass in der Regel keine (bewusste) Anmeldung/Einwilligung zum Empfang desselben erfolgte.

Woher haben Spammer die Adressen?

Wer eine möglichst große Anzahl an Personen im Internet erreichen will, kommt über kurz oder lang vielleicht auf die blöde Idee einfach Massenhaft Mails mit Werbung zu verschicken. Doch woher bekommt man die ganzen Adressen? Dafür gibt es ein paar Möglichkeiten. Der naivste Ansatz ist die Brute-Force Methode, d.h. einfach einen Mailserver kontaktieren und alle möglichen Kombinationen von zulässigen Zeichen als Emfänger auszuprobieren. Dies ist natürlich sehr Zeit- und Resourcen intensiv und führt wahrscheinlich bei den meisten Mailservern dazu, dass der sendende Host komplett ausgesperrt wird.

Ein besserer Ansatz, für den Spammer, ist es im Internet nach echten Adressen zu suchen. Dazu werden, ähnlich wie bei Suchmaschinen, sogenannte Spider bzw. Harvester eingesetzt, die von einer Seite aus starten und dann jedem ausgehnden Link folgen und alle Mail-Adressen, erkennbar an dem “mailto:” Prefix, in einer Datenbank speichern. Hier ist auch gleich der erste Ansatz den Spammern die Tour zu vermiesen: Die eigenen eMails verschleiern. Dazu gibt es mehrere Möglichkeiten, aber dazu später mehr.

Grundlegende Vorsichtsmaßnahmen

Hier lautet die oberste Devise: Datensparsamkeit. Man sollte generell möglichst sparsam mit seinen Daten, in diesem Fall der Mail-Adresse, umgehen. Wenn man jedoch seine Adresse seine eigene Adresse veröffentlichen muss, der sollte sicher Gedanken darüber machen wie er diese für Harvester unbrauchbar macht.

Dafür gibt es verschiedene Möglichkeiten:

  • eMail Adresse verschleiern/verstecken
  • einmal Adressen, d.h. eine Adresse pro Nutzungszweck
  • ablaufende Adressen
Auf die einzelnen Punkte gehe ich gleich nochmal ein.

eMail Adresse verstecken

Wenn man seine Adresse für Menschen zugänglich machen will, oder muss, Stichwort Impressumspflicht, dann sollte man diese entweder durch Ersetzungen unkenntlich machen, z.B. info@gauner.org wird zu into_AT_gauner_DOT_org, wobei es hier auch die Möglichkeit gibt, dass Spammer diese Ersetzungen einfach enttarnen können. Eine weiter Möglichkeit ist es die ganze Adresse, oder einen Teil davon, durch Grafiken zu ersetzen. Eine dritte Möglichkeit ist den “mailto:info@gauner.org” Teil durch eine Javascript Funktion zu ersetzen die beim anklicken die richtige Adresse erzeugt.

Einmal Adressen

Eine gute Möglichkeit die Menge des eingehenden Spams zu steuern und zu kontrollieren woher der Spam kommt ist das verwenden von sog. einmal Adressen. Hierbei legt man für jeden Verwendungszweck, z.B. Registrierung in einem Forum oder Blog, eine eigene Adresse wie z.B. gauner-blog@xy.host.tld an und leitet diese auf seine eigentliche Adresse weiter. Wenn man jetzt einmal Spam erhällt kann man anhand der Empfänger-Adresse einfach feststellen wie der Spammer an die Adresse gekommen ist. Jetzt kann man jederzeit diese Adresse zu löschen und man wird auf diesem Weg keinen Spam mehr erhalten. Der Nachteil hierbei ist, dass man eine ziemlich große Zahl an Weiterleitungen anlegen muss und einen Provider benötigt der dies unterstützt.

Ablaufende Adressen

Es ist auch möglich einfach Adressen zu verwenden aus denen deutlich wird, wann Sie ablaufen. Diese Adressen haben die form Max.Mustermann-expires20071031@gauner.org. Diese Adresse können dann nach belieben Benutzt werden, da man Sie nach einer gewissen Frist, meist wenige Monate, einfach nicht mehr benutzt. Ein Nachteil ist natürlich, dass man diese Adresse dann ggf. an vielen Stellen ändern muss. Mir persönlich wäre dieser Aufwand einfach zu groß.

Harvester blockieren

Um den Spammern das Leben weiterhin schwer zu machen gibt es sog. Honeypot Ansätze, die versuchen Harvester in eine Falle zu locken. Diese Falle ist eine speziell angelegte Webseite mit jeder Menge interner Verweise und künstlich erzeugten, ungültigen eMail-Adressen, die die Ressourcen der Harvester binden und mit unnützen Adressen überfluten soll.

Absichern von Mailinglisten und Newslettern

Zum absichern von Mailinglisten und Newslettern ist es generell sinnvoll entweder die vorhandenen Funktion zur Entfremdung der Mail-Adressen der Nutzer zu verwenden, oder sich selbst Gedanken über eine solche Funktion zu machen. Der, in meinen Augen, beste Ansatz ist die verwendung von Bilder zur Darstellung der Mail-Adressen, bzw. von Teilen davon. Dabei darf man natürlich nicht vergessen, dass der Inhalt der, im Bild dargestellten Zeichenkette, nicht im alt Tag angegen werden sollte. Dies läuft zwar der Barrierefreiheit entgegen, aber das ist wohl einer der Kompromisse die man im Moment eingehen muss.

Fragen?

Ich hoffe, dass ich hiermit einige vorbeugende Schritte zur Spam Vermeidung ein wenig erläutern konnte und falls noch Fragen auftauchen steht natürlich die Kommentar Funtkion jederzeit offen. Da man auch hier nicht von Spam verschont bleibt ist leider das lösen einer kleinen Rechenaufgabe notwendig. Aber zum Thema Kommentar-Spam werde ich ein anderes mal etwas sagen …

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).

Fertig.

15 Oct 2007, 22:40

ThinkPad is back

Seit heute morgen ist mein ThinkPad aus der Reperatur zurück.

Das war leider schon das zweite mal, dass mein Notebook nach Heppenheim musste.

Beim ersten Mal war der USB Controller gestorben, diesmal war die Grafikkarte kaputt, was lauter bunte Streifen auf dem Display zur Folge hatte.

Ich hoffe, dass es nicht nochmal seinen Geist aufgibt, denn die Garantiezeit ist bald vorbei und so eine Reparatur kann teuer werden …

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.