GPS Gem Find - TangoGPS

I’ve been looking for a simple, no-hassles GPS display program for Linux, and I believe I finally found one: TangoGPS. My requirements were quite simple; I needed something that would talk to gpsd, and display a dot on OpenStreetMaps. I’ve been able to do this in other programs (even in 3d in WorldWind), but I wanted something to download the maps for me, and GTK+ would be a plus.

TangoGPS was easy to install (apt-get install tangogps), and on my test ‘drive’ home tonight on the train, worked a treat. See related screenshots.

ISO Code Error

I’ve received this error a few times when working with pytz:

Error reading file '/usr/share/xml/iso-codes/iso_3166.xml'

In short, install the ‘iso-codes’ package in Ubuntu/Debian. I’m sure this is covered in the manual that I didn’t read, but I’m sure others didn’t read it too.

apt-get install iso-codes

Installing Debian 5.0 on Vortex86DX

After writing about compiling a new kernel for the Vortex86DX, I’ve had quite a few people email me asking how I installed Debian in the first place. The installation is actually quite straightforward, but it involved several quirky techniques. After doing another install I decided to keep track of the process of installing Debian 5.0 on my eBox-3300.

The following guide assumes a few things. First, you are currently using Linux and a debian variety (although instructions could be altered if using Windows). Second, your USB shows up as /dev/sdb. Third, your eBox-3300 has the HDD set in Native mode. Forth, you are patient.

  1. Download the custom vmlinuz and initrd.gz files from my site. Also, download the custom deb files we’ll use near the end of installation:
http://cdn.kelvinism.com/ebox/vmlinuz
http://cdn.kelvinism.com/ebox/initrd.gz
http://cdn.kelvinism.com/ebox/linux-headers-2.6.29.3-vortex86dx.deb
http://cdn.kelvinism.com/ebox/linux-image-2.6.29.3-vortex86dx.deb

EDIT 16-03-2025: I’ve since removed these files.

  1. Download an i386 netinst iso:
http://www.debian.org/CD/netinst/
  1. Make sure the USB has an MBR installed:
apt-get install syslinux mtools mbr
install-mbr /dev/sdb
  1. Format the device as FAT32 with whatever tool you like.
  2. Run syslinux on it:
syslinux /dev/sdb1
  1. Mount the USB (or pull it out and plug it in again so it shows up on your desktop), and copy the downloaded vmlinuz, initrd, netinst.iso and deb files onto the USB. There should be a file called ldlinux.sys already; create a file called syslinux.cfg and put the following in it:
default vmlinuz
append initrd=initrd.gz root=/dev/rd/0 devfs=mount,dall rw DEBCONF_PRIORITY=medium
  1. Unmount the USB, and put it in your eBox-3300. When the system boots up initially, hit F11. Select your USB device. Depending how you created the MBR it might come up as saying “MBR FA:”. Press “A”. When 1234F comes up, press “1”. Press enter at the SYSLINUX “boot:” screen.
  2. Proceed as normal through the menu. It will search for an ISO image, and should detect the netinst image you inserted earlier. When you get to the “Load installer components” section, it will complain about no kernel modules found. Select YES. On the next screen you shouldn’t need to load any components, so hit continue. Proceed as normal.
  3. If you are ever asked about starting PC card services, hit NO. Proceed as normal.
  4. Eventually you will hit a screen that says LVM is not available, hit CONTINUE. Proceed as normal.
  5. Near the end it will toss up a list of available kernels. Select either, it shouldn’t matter. When you are allowed to select drivers to include in the initrd, select TARGETED. Proceed as normal.
  6. You might get to a point where it says Install GRUB boot loader on a hard disk. This will fail. That’s ok, just skip it and select “continue without boot loader”.
  7. You will end up on the “Finish the installation” menu. DO NOT finish! We now need to swap out the current kernel with one that works. Scroll down and select “Execute a shell”. Press CONTINUE. Try these steps when the shell prompt appears:
cd hd-media
cp *.deb /target/usr/src/
cp vmlinuz /target/boot/vmlinuz-2.6.26-2.486
cp initrd.gz /target/boot/
cd /target/boot
gunzip initrd.gz
mv initrd initrd.img-2.6.26-2-486
reboot

Your system will now reboot, and it should actually boot correctly. However, you’re using a kernel that doesn’t have any headers or modules, which means you can’t activate anything. Once the box boots up, login and install the included custom kernels:

cd /usr/src
dpkg -i linux-image-2.6.29.3-vortex86dx.deb
dpkg -i linux-headers-2.6.29.3-vortex86dx.deb
reboot

Once the system comes back up, you should be running a spiffy 2.6.29 kernel, with the ability to add modules.

You may want to follow the tuning section from the MicroClient page on Google Groups. I also modified my fstab file to help reduce wear on the CF card:

tmpfs /var/run tmpfs defaults,noatime 0 0
tmpfs /var/lock tmpfs defaults,noatime 0 0
tmpfs /var/tmp tmpfs defaults,noatime 0 0

Contribution 1: Francois Fleuret emailed through a kind reminder that the qemu-onto-SD card method is a viable option. So, if you want to go the SD route, and have an SD reader, this might be what you’re after!

Basically, install Debian on a SD card with qemu (start qemu with the
install disk iso as cdrom and the SD card as hda), while you are still
in qemu, download and install the kernel deb file

ftp://ftp.icop.com.tw/upload/Shawn/linux-image-2.6.27.9-vortex86dx_2.6.27.9-vortex86dx_i386.deb

then quit qemu, put the SD card in the box and reboot. You are done!

EDIT 16-03-2025: I have since removed these files.

If you want the source file for the above kernels, you can get it from here: 2.6.29-3 source. I recently recompiled the kernel with some extra modules enabled (e.g. ecryptfs), so if you would like to try a newer kernel, you can download my updated kernels too:

http://cdn.kelvinism.com/ebox/linux-headers-2.6.30.4-vortex86dx.deb
http://cdn.kelvinism.com/ebox/linux-image-2.6.30.4-vortex86dx_2.6.30.4.deb

EDIT 16-03-2025: I have since removed these files.

Contribution 2: Trent L has also recompiled a 2.6.28 kernel with wireless extensions built into it, which is what was needed for his wireless card. He has kindly allowed me to distribute them; you can find them here:

http://cdn.kelvinism.com/ebox/linux-source-2.6.28.10_vortex86dx.deb
http://cdn.kelvinism.com/ebox/linux-image-2.6.28.10_vortex86dx.deb
http://cdn.kelvinism.com/ebox/linux-headers-2.6.28.10_vortex86dx.deb
http://cdn.kelvinism.com/ebox/2.6.28.config

EDIT 16-03-2025: I have since removed these files.

Contribution 3: If you have the ebox-3310, you can still read through this, but you may also want to see a suggested installation method and kernels from Stefan.

Contribution 4: Alexandru T. sent through some instructions directly received from ICOP. I’ve added another page with the details. Thanks Alex!

Contribution 5:: Rainbow sent through the solution if your kernel panics with:

it report "kernel bug at fs/buffer.c 1864" and system go mad, even
> "halt" "reboot" take no effect.

Rainbow reported that:

this issue cause by an error Vcore, 0.90v refered by datasheet, and it should be above 0.97.

Contribution 6:: Bob’s also sent through his config file.

Contribution 7: Bob A. has sent through some resources about a special ISO specific for the ebox. It has been added to another page.

Update: I’ve needed to recompile a new Lenny vortex86dx-enabled kernel for 2.6.31.5: image, headers, source and config.

Operation Cold House

Status: ✅

My house is cold. I want to start playing with simple electronics before starting Operation Field, so have created Operation Cold House.

This is just simply sticking a temperature sensor onto an Arduino, linking that up to my little home “server”, and uploading that to my website. I’ll display some nifty graphs, too, and link it to Pachube. Stay tuned.

Update: Complete! The proof is in the pudding. I now have a personal website from home (sorry, not public) that displays the daily and weekly temperature at home. The process is basically like this: my little Arduino gathers the temperature, and is polled every minute with a python script via cron. This script then sticks the time and temperature into MySQL. It also exports the temperature to Pachube. Every 30m I have a script that queries MySQL and uses Google’s Chart’s API to graph the temperature. Looks great, I’ll post a graph soon.

Downloading VMWare with Firefox

I’ve had this issue happen to me several times, and I’m finally writing myself a note to fix it in the future. There seems to be an issue with downloading VMWare Workstation (.bundle). I first tried it with Firefox, but it just died at loading it into /tmp. Next, I tried it with Lynx, but alas, it tried to download it as a text file.

Ahah! The quickest solution I could find is to right click the link, save as, and save it as a zip. Rename it to .bundle when you’re done.

Create a Movie from Images

I’ve started leaving my webcam on as a motion detector to find out who is leaving the shopping cards on our lawn, and ultimately have found it useful to stitch the images together into a movie. There are several ways to do this - and my way maybe isn’t the best - but it works for me.

I first installed and configured motion, which I’ve used for years. I then created a file in ~/.motion called motion.com:

$ cat ~/.motion/motion.conf

height 480
width 640
framerate 2

By creating this file, it allows me to start motion without modifying the global motion.conf file permissions, or gasp running it under sudo. There are lots of options you can put in your motion.com file.

With motion installed, and configured, now install mencoder.

I prefer to generate a seed file based on the creation date for each image. If you try to use mencoder with just a *.jpg, it works, but my video jumped around.

$ pwd
/home/path/Desktop/motion
$ ls -rt *.jpg > list.txt

This list.txt file now has the filenames, in chronological order, ready for consumption. I create the video like so:

mencoder mf://@list.txt -o `date +%G%m%d`.avi -ovc lavc -lavcopts vcodec=mjpeg

This will output a file with today’s date in a few seconds. Remember, the `’s are the key by the #1, not quotes.

Compiling kernel for Vortex86dx

Update: I’ve written up a short tutorial on the method I used to install Debian 5.0 on this device.

A few months ago I purchased the eBox-3300 from WDL Systems. The system was promptly shipped, and there were no “gotchas” from WDL. The little box fit my exact needs - it is small, and built very, very well. I flew back to Australia and, after some trial and error, installed Debian 5.0 on it. For quite some time I was just using the vmlinuz file provided by WDL, which was provided by ICOP (DMP). This worked well, but there were two issues:

  1. I couldn’t load any modules (e.g. NFS).
  2. I received an annoying email from OSSEC every few hours telling me it couldn’t find modules.dep.

At the end of last week I finally decided to do something about it, and considering this little box is “x86 compliant”, I figured it wouldn’t be too hard to create a new package. It has been several years since I last created a self-compiled Debian-packaged kernel, so I decided to document the process for the next time I do it. These steps are really just a summary - but if you have much Linux experience, they should be enough to guide you. If I’m unclear, just send me an email.

Because the eBox-3300 is embedded, I logically decided to create the package on another system. However, I wanted to maximize the chances of it working, so I installed Debian 5.0 in VirtualBox, updated it, and proceeded.

As a prep, you may need to install ncurses-dev and kernel-package in your build environment.

apt-get install ncurses-dev kernel-package
  1. Download latest kernel from: http://www.kernel.org/pub/linux/kernel/v2.6/
  2. Download the DMP provided patch/config file for 2.6.27.3, copy it to /usr/src. Alternatively, you can borrow my 2.6.29.3 config Make a backup.
  3. Untar kernel, cd into the kernel directory. Issue:
make menuconfig
  1. Configure kernel. If you used my config file, a lot of these should already be ticked.
  • Load alternative config file, I selected mine as /usr/src/config-2.6.27.9-vortex86dx, or if you downloaded the one from me, use config-2.6.29.3-vortex86dx
  • Enable generic x86 support
  • Enable Kernel .config support
  • Device drivers -> Network -> 10 or 100Mbit -> RDC R6040, set at built in
  • Turn off generic IDE support
  • Exit, make sure to save the kernel
  • Verify .config exists. If it doesn’t, copy the config-2.6.x.x-vortex86dx file to .config
  1. Create the kernel debs. In the kernel directory, issue these commands. This will build the kernel image, the headers, and the modules.
make-kpkg --initrd kernel_image kernel_source kernel_headers modules_image
  1. Make coffee
  2. Copy the debs to your running ebox by sftp (or usb, or whatever is available)
  3. Install kernel in eBox-3300
dpkg -i linux-source-2.6.29.3-vortex86dx.deb
dpkg -i linux-headers-2.6.29.3-vortex86dx.deb
dpkg -i linux-image-2.6.29.3-vortex86dx.deb
  1. Reboot. If you want my compiled kernel/sources/header .DEBs, just shoot me an email and I’ll make them available.

Summary: My only gripe about this little box was the lack of an easily customizable kernel, but no more. I’m still very happy with this $150 purchase.

Fixing locale errors in Ubuntu 8.04

I’ve hit this problem a few times, and figured I’d leave a note for myself how to fix it. Ubuntu 8.04 seems to hiccup sometimes (on a VPS) for generating the correct locales. In particular, I get this error, a lot:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

Normally I just do ‘dpkg-reconfigure locales’, but with 8.04, this doesn’t seem to do squat. The solution is to edit the /var/lib/locales/supported.d/local file, and insert the correct locales (it will normally not exist, so create it):

# cat /var/lib/locales/supported.d/local
zh_TW.UTF-8 UTF-8
zh_TW BIG5
zh_TW.EUC-TW EUC-TW
en_US.UTF-8 UTF-8
en_US ISO-8859-1
en_US.ISO-8859-15 ISO-8859-15

You can then do a ‘dpkg-reconfigure locales’ and they will be generated correctly. For a list of supported locales, try this:

cat /usr/share/i18n/SUPPORTED | grep US

Fixing mysql warning message

After restoring databases from one server to another I sometimes get this error on Ubuntu or Debian:

error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'

This makes a lot of sense, and the solution is pretty simple. If you look in:

cat /etc/mysql/debian.cnf

You’ll see the defaults for your system. Copy the password listed there, and open a connection to MySQL as root (or some other user). Next, enter this (lets say your password specified in debian.cnf was ‘abracadabra’:

mysql> select PASSWORD('abracadabra');
+-------------------------------------------+
| PASSWORD('abracadabra')                   |
+-------------------------------------------+
| *38794E19D534EBA4F0F78903FA00F1DA2989DCA2 | 
+-------------------------------------------+
1 row in set (0.00 sec)

Next, since we already have the prompt open, do this command:

mysql> USE mysql;
mysql> UPDATE user SET password='*38794E19D534EBA4F0F78903FA00F1DA2989DCA2' where user='debian-sys-maint';
mysql> FLUSH privileges;

Restart MySQL, and the error should have gone away.

Operation Field

Status: ❌

It is time for a new project. I’ve finally decided I want to do some electronics stuff - at least play around in that realm a little. However, I want to “get out and about” a little as well, so this leads me to my idea: a controllable long-range RC plane.

I’ve been debating whether to go the embedded Linux route, or the more simple microcontroller route. One of the first things I stumbled upon was ArduPilot, a cheap Arduino-based board allowing for a UAV. However, after looking through the requirements I would have needed to purchase an RF transmitter, and they aren’t cheap. This made me rethink the ArduPilot route and to evaluate what I really wanted to do: control the plan. My ultimate goal is to attach a joystick to my computer and be able to control the RC plane. This presents another problem with the ArduPilot, however, as there isn’t an extra Rx pin available on the ArduPilot board (or so the forums say), I wouldn’t be able to transmit coordinates on the fly.

After much research, I think I’ve determined what I’m going to do. I’m ultimately going to adopt the best parts of the ArduPilot, and fill in the gaps with my own board. I’m going to take an EasyStar, combine it with an Arduino Mini, Xbee, XY Sensor, GPS module, servos, H-bridges and a custom PCB, and hope it works.

One thing I’ve learned from YS is to stage our the things I buy. For instance, instead of signing up for a year at a local gym, try a month first. This project won’t be any different, and while most of the equipment is very reasonably priced, I still want to make sure I enjoy this type of thing. The first stage is going to be to buy the Arduino Mini, breadboard, servos and h-bridge (and a cheap DC motor), and see if I can get it all working. If I can, I’ll buy the EasyStar and see if I can control it with a joystick. If still successful, I’ll acquire the Xbees and GPS module - and these represent the majority of the cost.

Another element I’ve considered is how to visualize the RC plane flying around. I had contemplated looking into using Google Earth, but I’d really prefer to use a free variant. I also want to strengthen my Java knowledge, so have opted to use the SDK for WorldWind. I was very excited to see that they also have support for OSM, which is just spectaculous. I plan to have a HUD that on the right displays the plane’s location in WorldWind, and on the left display current altitude, tilt and RF strength. Since I’ve been flying through a book on Processing, this looks like a perfect real-life opportunity to use it.

I’m likely to start putting my money where my mouth is in the next two weeks.