Raspberry Pi and Scala
This is a little experience report how to bring up Scala on my RaspberryPi
[]
(/assets/img/2012/09/wpid-13490104119771.jpg)
Step 1: Java
I have connected my Raspberry only with power and network (no keyboard/mouse/display) for now and log in via ssh from my Linux desktop. Not only to save cables on the desk, but also to allow copy and paste between desktop and RaspberryPi. I am running Raspbian wheezy 2012-08-16 downloaded from the Raspberry website.
Java is installed quick and easy with:
$ sudo apt-get install openjdk-7-jdk
This pulls all its prerequisites and takes a few minutes. Next I was curious to check and just took a little test program like this “hello.java”
class hello
{
public static void main(String args[])
{
System.out.println("Hello World!");
}
}
Just compile with
$ javac hello.java
and run with
$ java hello
Curious about performance I took some measurements, first measuring the speed of compilation for a minimal program like this:
$ time javac hello
results: 14 sec. Then I tried to measure the memory size and added a sleep in the program like this:
class hello
{
public static void main(String args[])
{
System.out.println("Hello World!");
try {
Thread.sleep(10000); // 10 sec
} catch (Exception e) {
}
}
}
and run with
$ java hello &
$ ps u
Result: Virtual Size (VSZ): 215 MB, Resident Size (RSS): 9MB
Step 2: set up sbt
download with
$ wget http://scalasbt.artifactoryonline.com/scalasbt/sbt-native-packages/org/scala-sbt/sbt/0.12.0/sbt.tgz
unpack and copy to a directory of your choice I have used
$ tar tvozf sbt.tgz
$ mv sbt $HOME
The sbt directory contains a “bin” directory which needs to go in your path by adding this to your $HOME/.bashrc:
$ export PATH=$HOME/sbt/bin:$PATH
open a new shell to reload .bashrc and execute
$ sbt -mem 128 -help
you should see a help message. The parameter -mem 128 will allow 128 MB for the JVM, the default of 1536 MB is way too big for the little Raspberry Pi.
Alternatively you can put a file .sbtopts in your current directory with the sbt command line switches required, in ths case “-mem 128″.
Now, when starting
$ sbt
it will pull some files and updates, slowly, and after some minutes… The sbt prompt comes up fine.
Next I created a small “Hello world” program like this in “hello.scala”:
package greeter
object Hello extends App {
println("Hello, World!")
}
and started with
$ sbt run
this compiles the scala and java files in your directory – this takes a fair while – and then success:
[info] Running greeter.Hello
Hello, World!
[success] Total time: 507 s, completed 16-Sep-2012 19:02:03
Wow, over 8 minutes for this little piece. But it worked.
What next?
I have seen some discussion on the web that the Oracle JVM may be faster, but also not compatible with Raspbian, so this will be a topic for further investigation. For now it looks like we have to wait for Oracle to release a compatible version, or choose another OS for Raspberry, one alternative approach using Debian Wheezy instead of Raspbian Wheezy can be found here: http://www.savagehomeautomation.com/projects/raspberry-pi-installing-oracle-java-development-kit-jdk-170u.html
Comments