This article is out-of-date, and needs to be updated.
Please see the talk page for discussion.


[edit] Two choices

A) Be hardcore and install sbox semi-manual using the CLI installer script, B) Be clever and download the GUI installer for the Maemo 5 SDK from Forum Nokia!

[edit] You choose A

Continue with "Getting started - plot summary".

[edit] You choose B

Choice B will reward you with a fully working sbox and two targets (X86, ARMEL) so you can directly jump installing the Qt libs in their sbox environment.

Inside sbox:

 [sbox-FREMANTLE_X86: ~] > fakeroot apt-get install libqt4-maemo5-dev

Repeat for the ARMEL target:

 [sbox-FREMANTLE_X86: ~] sb-conf select FREMANTLE_ARMEL
 [sbox-FREMANTLE_ARMEL: ~] > fakeroot apt-get install libqt4-maemo5-dev

Continue with "Compiling Miniature inside Scratchbox".

[edit] Getting started - plot summary

WARNING: This list does not necessarily explain what every step does, nor will it help you in case you run into problems! Also, I will assume your host machine has a i386 architecture (I use Jaunty, 64 bit installation instructions are not covered here).

[edit] Scratchbox installation

Read the director's cut if you run into problems, it has become very accurate! Again, you have been warned. This stuff is potentially dangerous.

On the host machine (= your computer, the other side is inside scratchbox, your cross compiling environment to create binaries/packages for the N900):

 $ sudo vi /etc/sysctl.conf

Copy and paste those three lines to the top:

 vm.vdso_enabled = 0
 vm.mmap_min_addr = 4096

(NB: Its "abi.vsyscall32=0" for Linux kernels newer than 2.6.25)

Save with <ESC> :wq (or use nano as an editor). Then reload sysctl.conf with:

 sudo sysctl -p

Start with the Maemo SDK installation:

 $ sudo apt-get install xserver-xephyr
 $ wget
 $ wget
 $ chmod a+x ./
 $ sudo ./ -u USER
 $ newgrp sbox
 $ chmod a+x ./
 $ ./
 $ /scratchbox/login

Install Qt 4.6 here

Get tokenized Maemo/Nokia repo here, enter token code and keep page open. You'll soon need the repo link.

Inside scratchbox:

 [sbox-FREMANTLE_X86: ~] > fakeroot echo "<repo link from token page>" >> /etc/apt/sources.list
 [sbox-FREMANTLE_X86: ~] > fakeroot apt-get update #simply repeat if it aborts in-between, ignore bad GPG
 [sbox-FREMANTLE_X86: ~] > fakeroot apt-get install nokia-binaries #repeat if interrupted/incomplete
 [sbox-FREMANTLE_X86: ~] > fakeroot apt-get install libqt4-maemo5-dev
 [sbox-FREMANTLE_X86: ~] > fakeroot apt-get install maemo-debug-scripts #enables native-gdb and other neat stuff

Now do the same for the ARMEL target (= same architecture as device):

 [sbox-FREMANTLE_X86: ~] sb-conf select FREMANTLE_ARMEL
 [sbox-FREMANTLE_ARMEL: ~] > fakeroot echo "<repo link from token page>" >> /etc/apt/sources.list
 [sbox-FREMANTLE_ARMEL: ~] > fakeroot apt-get update #simply repeat if it aborts in-between, ignore bad GPG
 [sbox-FREMANTLE_ARMEL: ~] > fakeroot apt-get install nokia-binaries #repeat if interrupted/incomplete
 [sbox-FREMANTLE_ARMEL: ~] > fakeroot apt-get install libqt4-maemo5-dev

[edit] Compiling Miniature inside Scratchbox

Back to the FREMANTLE_X86 target, so you can run Miniature from inside scratchbox. Use your *private* gitorious url instead of the public clone url if you want to push changes, too.

 [sbox-FREMANTLE_ARMEL: ~] sb-conf select FREMANTLE_X86
 [sbox-FREMANTLE_X86: ~] mkdir source
 [sbox-FREMANTLE_X86: ~] cd source
 [sbox-FREMANTLE_X86: ~] git clone git://
 [sbox-FREMANTLE_X86: ~] cd miniature
 [sbox-FREMANTLE_X86: ~] ./ QT_PATH=/opt/qt4-maemo5/bin && make

On your host machine (i.e., outside of scratchbox, do not close your sb session though):

 $ Xephyr -ac -host-cursor -br -screen 480x800x16 :2

Back to scratchbox (keep the Xephyr server running, of course):

 [sbox-FREMANTLE_X86: ~] export DISPLAY=:2
 [sbox-FREMANTLE_X86: ~] start

Lots of lines of useless information flow by, give it 10 seconds and test with <ENTER> whether you can continue typing. Then start miniature:

 [sbox-FREMANTLE_X86: ~] src/miniature

On your host machine, go to your Xephyr server and enjoy Miniature.

If you managed to do all this in under one hour consider yourself lucky - you saved yourself a alot of time!

[edit] Compiling binaries for the N900

This is of course the cool part, and it also shows why we want to keep autotools/autotroll as our build system (I am serious).

Inside scratchbox:

 [sbox-FREMANTLE_X86: ~] sb-conf select FREMANTLE_ARMEL
 [sbox-FREMANTLE_ARMEL: ~] cd ~/source/miniature
 [sbox-FREMANTLE_ARMEL: ~] make distclean # dont worry if this fails
 [sbox-FREMANTLE_ARMEL: ~] ./ QT_PATH=/opt/qt4-maemo5/bin && make

Copy the binary onto the device (even if totally unsecure: let's just assume opensshd is installed and running on your N900):

 [sbox-FREMANTLE_ARMEL: ~] scp src/miniature root@<IP_ADDRESS_OF_N900>/home/user/

I usually copy the binary using scp *from* the device. It allows me to remove the ssh server and to only keep the client. But there are many more ways to get the binary onto the device. The only important part is to move the binary away from the FAT partition (that is why we used /home/user above) - you cannot mark files as executable on VFAT.

On the N900:

  • Open a terminal
 $ cd ..
 $ ./miniature


[edit] Closing scratchbox

Do *not* ignore this section, sb uses dark symlink magic which can mess up your system! This is extra advice to cleanly shutdown scratchbox after you're done.

Inside scratchbox:

 [sbox-FREMANTLE_X86: ~] sb-menu

Go to "Killall", confirm with enter twice. Only now close your session

On your host:

 $ sudo /etc/init.d/scratchbox-core stop

If you get an error message be very careful with what you delete and what data you move around. Scratchbox might still have active symlink pointing to folders on your *host machine*. Your best solution, if you don't know what else to do, is a clean restart of your host machine!