Running Eclipse Orion on a Raspberry Pi

Last week I joined the company of about a million others and became the proud owner of a Raspberry Pi. I got it just for fun; write some software and maybe make use of the GPIO ports.

I already knew I wanted to do something Eclipse related with this quite capable device, so why not run Eclipse Orion (Tools for the web, on the web) on it? During my research I discovered that someone already did that. Ken Walker of IBM Canada/Orion Project even demonstrated such a set-up as a teaser for a talk at last year´s EclipseCon Europe. Now he used the Node.js port of Orion – I had in mind to use the full package. Note that Ken also has a talk on the subject at this year’s EclipseCon in Boston.

Installing Linux

Support for software floating point is required for Java; so we have to pick a Linux distribution that provides this. The Soft-float Debian “wheezy” is a good choice. Note that I had trouble getting the image downloaded from the torrent to work. The direct download of the zip file was OK. Compare the SHA1 hashes to make sure.

torkild@Isis:~$ openssl sha1 Downloads/2012-08-08-wheezy-armel.zip 
SHA1(Downloads/2012-08-08-wheezy-armel.zip)= db28d031d5f925a667c2a478c638222d9b405d5a

Now we need to write the disk image to the SD card. First you must figure out where the card is mounted. On my MBP this is /dev/disk2. We must first unmount it. Note that these instructions are for OS X, if you’re on Linux there are some differences. If you’re on Windows you’re on your own. Sorry about that.

torkild@Isis:~$ diskutil unmountDisk /dev/disk2

We can now write the image. Execute the command below and be prepared to wait for quite a while. All depending on the performance of your SD-card.

torkild@Isis:~$ sudo dd bs=1m if=Downloads/2012-08-08-wheezy-armel.img of=/dev/rdisk2

When done, insert the SD-card, connect the Ethernet cable and USB power. The green LED should start blinking and after a while all LEDs should be on. This means you should be able to log into a shell on the device. First you need to figure out it’s IP-address. You can do this from the terminal if you have a screen and keyboard hooked up. I used the nifty iNet iOS application for that and found 192.168.1.105.

torkild@Isis:~$ ssh -l pi 192.168.1.105

Enter the default password (“raspberry”) and you should be greeted with a welcome message. The shell prompt will also change, indicating that you’re now logged in as pi on raspberrypi. We should start with some initial setting up.

Install mDNS

Now, would it not be nice if we could access the Raspberry Pi without having to remember it’s IP-address (and without having to set up a DNS server)? We can do this by making use of multicast DNS (mDNS).

pi@raspberrypi ~ $ sudo apt-get install avahi-daemon

Now the Raspberry Pi can be accessed using it’s name. Try it:

torkild@Isis:~/git$ ping raspberrypi.local
PING raspberrypi.local (192.168.1.105): 56 data bytes
64 bytes from 192.168.1.105: icmp_seq=0 ttl=64 time=52.174 ms
64 bytes from 192.168.1.105: icmp_seq=1 ttl=64 time=1.380 ms

Upgrade software and kernel

Things move fast in the open source world so the software that comes with the Raspberry Pi is unlikely to be up to date. Hence we should upgrade to the latest version of both the software and the kernel.

pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get upgrade

Expand root partition

In order to make more room we can make the root partition expand to fill the entire SD-card, start raspi-config. Select expand_rootfs then exit and reboot.

pi@raspberrypi ~ $ sudo shutdown -r now

Wait a bit and log in again. The root partition should be much larger than the 1.8GB default.

pi@raspberrypi ~ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs           15G  1.4G   13G  10% /
...

Configure RAM

If you got your Raspberry Pi recently you probably have one with 512MB RAM, but all of that memory is not necessarily available. Check the memory chip to see which type you have and run free -h to see if the memory is there. My Raspberry Pi is a 512MB variant, but reported only 231MB available. In order to fix this we need to update the firmware. Thankfully we can make use of a nice script to do this.

pi@raspberrypi ~ $ sudo -i
root@raspberrypi:~# rm -rf /boot/*.elf /boot/*.bin /boot/*.img
root@raspberrypi:~# apt-get install git
root@raspberrypi:~# wget http://goo.gl/1BOfJ -O /usr/bin/rpi-update && sudo chmod +x /usr/bin/rpi-update
root@raspberrypi:~# rpi-update

As we’re going to use the Raspberry Pi without a graphical user interface it may be a good idea to limit the GPU memory to 16MB, this will allow applications to use more. Edit /boot/config.txt and add gpu_mem=16 to the bottom of the file. Now we need to restart again. After the device has booted we should see a lot more memory.

pi@raspberrypi ~ $ free -h
             total       used       free     shared    buffers     cached
Mem:          485M        74M       411M         0B        10M        31M
-/+ buffers/cache:        32M       453M
Swap:          99M         0B        99M

Install Java

At this point we’re ready to start installing the additional stuff. The Oracle download pages have been cleverly designed so that they are pretty impossible to use with a command line client. Hence you’ll have to pick the archive using your favourite web browser and transfer it to your Raspberry using SSH. Download the Java SE Embedded 7 , EABI, VFP, SoftFB ABI, Little Endian version and transfer it.

torkild@Isis:~$ scp Downloads/ejre-7u10-fcs-b18-linux-arm-vfp-client_headless-28_nov_2012.tar.gz pi@192.168.0.9:~/

You should know how to log into the Raspberry Pi by now. Do that again (unless you’ve cleverly kept the terminal window open) and execute the following:

pi@raspberrypi ~ $ tar -xvzf ejre-7u10-fcs-b18-linux-arm-vfp-client_headless-28_nov_2012.tar.gz
pi@raspberrypi ~ $ sudo mv ejre1.7.0_10 /usr/local/
pi@raspberrypi ~ $ sudo ln -s /usr/local/ejre1.7.0_10/bin/java /usr/local/bin/
pi@raspberrypi ~ $ sudo ln -s /usr/local/ejre1.7.0_10/bin/keytool /usr/local/bin/
pi@raspberrypi ~ $ java -version

The last command should reveal something like this:

java version "1.7.0_10"
Java(TM) SE Embedded Runtime Environment (build 1.7.0_10-b18, headless)
Java HotSpot(TM) Embedded Client VM (build 23.6-b04, mixed mode)

NICE!

Installing Eclipse Orion

Eclipse Orion can be found at the projects website. I picked the 1.0 release for 32-bit Linux and downloaded it to my workstation. Use scp again to copy it to your home folder on the Raspberry Pi.

Eclipse Orion can launch stand-alone websites, which is quite useful for testing your work. However we need to use virtiual host names for these sites. This is done by setting the orion.site.virtualHosts property in the server configuration file. Create a file named orion.confand add the following:

orion.site.virtualHosts=*.raspberrypi.local

All sites will now be created on the form .raspberrypi.local. We’re going to start the “Hello World” example project so we’ll need a CNAME alias for this:

pi@raspberrypi ~ $ sudo apt-get install python-avahi
pi@raspberrypi ~ $ sudo wget https://gist.github.com/raw/4645066/64b8ad371b0cad5784e162b8382de0d4786317e6/avahi-alias.py -O /usr/local/bin/avahi-alias.py && sudo chmod a+x /usr/local/bin/avahi-alias.py
pi@raspberrypi ~ $ avahi-alias.py hello.raspberrypi.local &

Now we’re ready to start Eclipse Orion

pi@raspberrypi ~ $ unzip eclipse-orion-1.0-linux.gtk.x86.zip 
pi@raspberrypi ~ $ java -jar eclipse/plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar

It will take some time to start. When everything looks good, open your web browser and enter the address to the running Eclipse Orion instance. It’s running on port 8080 (http://raspberrypi.local:8080/). You should be greeted by a welcome page. Create an account and log in.

Click Sample HTML5 Site and leave the defaults as they are. Simply click Submit in the dialog that pops up. Now go to Sites and create a new site. Name this one “hello” and add the “Hello World” project to it. You can now start the site and view the example project using http://hello.raspberrypi.local:8080/index.html.

That was fun! Now it’s time to read getting started with Orion