Michal Čihař - Posts tagged by linux

ColorHug with non English locales

Since infamous erasing of factory calibration in my ColorHug device and restoring calibration matrix, I noticed it did screen calibration wrong. However I did not find time to properly investigate the issue. Yesterdays mail from Richard was actually trigger for me so I've opened up this topic.

In the end it turned out to be caused by Little CMS wrongly parsing CCMX in case you are using locales which use something else than . as decimal point.

After lot of googling, I've realized there is probably no good way of parsing floats independent on current locales, so I used one of hacks I found and I think it's less intrusive - get current decimal point by printing float string using printf and then convert the string to it. I know it looks ugly, but including own implementation of strtod is also not nice and playing with locales is definitely something not thread safe to do within widely used library.

Anyway I've asked upstream to merge my patches, so let's see what they think of it.

Configuring standalone XBMC

I have a laptop used for playing music (and occasionally also videos) which is currently running Windows XP with XBMC. Reinstalling this beast to Linux is on my todo list for ages and now I've finally found time to try that.

Starting Debian installer worked like charm and in few minutes I got Debian system running. I've chosen to run sid, well for reason I run it usually on place where I want latest software. Installing XBMC from Debian multimedia worked also fine and you can easily find some howtos for directly starting XBMC.

And that's where I ran into trouble - XBMC is damn slow. Notebook has oldish nVidia GeForce FX Go5200 card, which seems to be poorly supported by nouveau (and "Do not file bug reports about this driver." suggest that this is what authors do expect). Okay, I can survive having some binary crap so let's try nVidia proprietary drivers. I've quickly realized that the legacy drivers won't work with recent xserver and probably also not with the kernel.

Maybe I should try installing something older, what would run binary drivers, but for now I gave up and system is back on Windows (with all problems I have there...).

Linux hardware support

Remembering not so far away history, I'm always a bit afraid when I'm about to use new hardware with Linux. It used to be troublesome to make some devices work.

After getting Linux based phone last week, I've also received new notebook, where I want to run Debian as well. I expected various troubles, but surprisingly everything works like a charm without single line of configuration. Wireless networking, docking station, card reader, webcam, fingerprint reader and so on.

All I had to do is to pull SSD out of old X60 notebook and put it into new X220. The only (though unnecessary) change was installation of 64-bit kernel (I currently see no big benefit in migrating to 64-bit userspace) and everything is working. Can your operating system do this?

Thanks to all people who have helped in this.

CTest not submitting to IPv6 dashboard

For some time, I observed that Gammu test dashboard does not get updates from my Debian box. Looking the CTest logs, the problem was in using IPv6 even when the box does not have it enabled:

Failed to connect to 2001:1528:136:dead:beef::1003: Network is unreachable

Due to lack of time I ignored it, but it looks all what was needed is to update curl. The bug was caused by using c-ares resolver, which for some reason favors AAAA records even when the system has no IPv6.

Upgrading OpenWrt

While doing some bigger downloads, my wifi network used to have big problems, seeing tx errors, frame errors on the router. The router is old ASUS WL-500g Deluxe which was running OpenWrt Kamikaze up to now. I was anyway thinking going for something with 802.11a or 802.11n support, so I started to look for replacement. While looking for it and checking what newer boxes are supported by OpenWrt, I noticed, that I can finally try using 2.6 kernel and I should get working wireless as well with free (what was not possible for very long time).

I gave it a try and upgraded to Backfire 10.03.1-rc4. And looks there is no need to upgrade hardware right now. No more tx errors, the wireless is much more stable and faster.

Thanks to anybody who helped to create free drivers for Broadcom 4306 wireless chip.

PS: Upgrading OpenWrt while keeping configuration lead to horrible mess in my case, so I rather did clean install reconfiguring everything and rediscovering all errors I've made in the past.

Looking for VServer alternative

It seems like VServer is not something for long run because it does not seem to want to be upstream and there is also no good future for having it as patch in Debian for long run. So I should look for alternatives and probably migrate to some other solution while upgrading my server to Squeeze (once it is released or really close to the release).

There are various options, starting with OpenVZ, through Linux Containers (LXC) up to full virtualization (probably KVM based). With OpenVZ the situation won't be much better, so it is not a real option. For various reasons I don't want to go to full virtualization, I simply thing containers are good enough and avoid too much overhead in some situations.

So the only remaining solution seems to be LXC. There even seem to be some people who managed to migrate from VServer, which is good and will be definitely helpful. Now it's time to play with lxc a bit before I will try to implement it for real.

Configuring system for SSD

I decided to upgrade my notebook to SSD disk. The disk replacement went easy, installed fresh Debian on it and now comes the tricky part how to properly tune system to use as much as SSD can provide.

The first obvious thing for me is changing IO scheduler. But which one to choose? Most of howtos seem to suggest noop or deadline, without stating benefits of each. For now I've chosen deadline, without string coninfidence, that I'm doing the right thing.

The next major part of tips includes removing filesystem journalling. Well I think journalling exists for good reason and disabling it won't help me much (no, I really don't want to wait for fsck after each crash).

The last tweak seems to be using tmpfs for any temporary data (/tmp) or even for logs. For /tmp it might make sense, on cost of loosing available memory (or swapping it out, what really does not help the SSD anyway). However I definitely don't want to loose my logs on every reboot.

Maybe I'm missing some bit, but the only important thing seems to be the IO scheduler.

Bugged by duplicity file matching

I always wondered why backups of my sever using duplicity are so huge, but simply looking at list of files to include seemed to be correct. However I should really spend more time by reading documentation, because now it was obvious to me that the file list is simply wrong.

What a small difference in file list:

- /var/lib/vservers/
+ /var/lib

Versus the old one:

+ /var/lib
- /var/lib/vservers/

Changing network at home

Spending almost whole day on network infrastructure at home. I decided to say good bye to commercial provider and move to JM-Net, which is local community network. I bought EapStation earlier this week and tested the setup, but what was left was to install the device permanently and connect it to my home (OpenWRT based) router.

Everything went quite smoothly and I now use new connection. It's faster, lower latencies and cheaper than what I used to have. Plus as a bonus it should have soon native IPv6.

The only little issue I've faced is how to add additional IP address to otherwise DHCP interface in OpenWRT. Googling did not reveal much, however this seem to do the trick:

cat > /etc/hotplug.d/iface/40-second-ip << EOT
#!/bin/sh
[ "$ACTION" = "ifup" -a "$INTERFACE" = "eth0.1" ] && ip a add 192.168.1.100/24 dev eth0.1
EOT

Cygwin in Wine?

As some people complained that Gammu does not build under Cygwin, I decided to setup a test environment. And of course I'm not going to use real Windows, that would not allow me to use it effectively, so let's do it in Wine. I currently have 1.1.12, which is in Debian packages (in experimental), so I blindly downloaded Cygwins installer, started it and (even if Wine complained quite loudly about not supported things) it installed without a single problem!

So let's try to compile Gammu in it. First attempt fails, because Cygwin symlinks do not work in Wine. But there is an easy workaround - just copy as.exe and ld.exe instead of symlinks and now even the compiler works. Rest is surprisingly without any problems, so I can nicely get test results to Gammu dashboard.

Kudos to all people who make this work.

Icecream weirdness

Can somebody tell me, why ICECC_VERSION variable is used as path to file with used toolchain? Why does help say "see create-env" when there is no such thing I could see? Why does not it properly tell, that I have to use icecc --build-native and then use absolute path to resulting tarball as ICECC_VERSION and then it will start to work?

Quick notes for future:

icecc --build-native
export ICECC_VERSION=`pwd`/b98eeead34edf15d2edf2383c2c4e317.tar.gz

Speed up SSH logins

I just discovered (not new) feature of OpenSSH, which allows to have several sessions over a single network connection. If you are once connected to the server, all other sessions can use existing connections and this makes much faster things like working with remote SVN or shell completion of remote filenames.

All you need in config file to make it work is something like this:

Host *
    ControlPath ~/.ssh/sock/%r@%h:%p
    ControlMaster auto

Firefox hidden config of the day

browser.tabs.loadDivertedInBackground = True and Firefox 3 no longer steals focus when I open link from external application.

PS: This seems to be most interesting post in my blog, at least when counting email feedback - looks like there was lot of people annoyed by this behaviour and too lazy to search for solution :-).

Why to make sensible error messages?

Yesterday I faced problem with VMware server that it can not run 64-bit guest system. I'm using 64-bit SUSE and 64-bit VMware, so it should work, right? I can select 64-bit system in VMware, but the guest is simply 32-bit without any error.

In documentation, man can find only "VMware Server supports 64-bit guest operating systems only on host machines with supported processors.". How helpful! After a bit of googling, it turns out that VT needs to be enabled and usually it is not enabled in BIOS (any reason for this?).

So let's reboot, go to BIOS, enable VT and it should work. Unfortunately not, after reboot, still same problem. I was almost given up at this point, but I decided to recheck BIOS, whether I really enabled the right thing. Yes I did, but I did not notice small note, that to apply this setting, I need to power off and on the computer. That was the trick! Now it finally works. I just wonder why it has to be so complicated...

Why gpg-agent does not work?

Summary: If programs would have useful man pages or error messages, man would not have to look into source code.

I just set up Debian sid chroot on my computer and have to sign something inside this chroot (dpgk-buildpackage). Okay, I want it to use gpg-agent in my host system, that should not be hard. Looking at gpg man page, GPG_AGENT_INFO variable is used to forward information about agent socket, PID and protocol version, so I set this variable according to host system, but it still does not work, giving nothing saying error that agent is not working.

So let's debug this beast - strace reveals, that communication with agent works, but it replies "113 Server Resource Problem". Hmm, still not much useful information, but let's google for this problem. Fortunately Google reveals related Seahorse code, where man can find, that not set DISPLAY variable is causing this issue. Could not the error be more friendly, so that it tells me directly what is wrong?