Mittwoch, 22. August 2012

JRuby läuft auf dem Raspberry Pi, jffi-Library wird benötigt

Nachdem mein erster Versuch, JRuby 1.7 unter Java 7 auf dem Raspberry Pi zum Laufen zu bekommen gescheitert ist, hier eine Anleitung, wie das dann doch klappt -  es sind allerdings ein paar Hürden zu überwinden..

Grundlagen:

  • Der Raspberry Pi ist ein kleiner Linux-Rechner (256MB RAM, ARM-Prozessor, Ethernet, USB, HD-Video usw), der sehr günstig zu haben ist (etwa 40€). JRuby darauf wäre doch mal nett..
  • Für die ARM-Architektur und damit den Raspberry Pi fehlt die jffi-Library (Java Foreign Function Interface), die wird von JRuby benötigt und musste von mir selbst kompiliert werden, da sie architekturspezifisch und momentan noch nicht in der JRuby-Distribution drin ist. Dazu braucht man git und maven und den JDK. Wer das nicht selbst machen will, kann die fertig kompilierte Libary hier runterladen und nach jruby-1.7.0.preview2/lib/native/arm-Linux kopieren.
  • Ich verwende Oracle Java, da der Java-Compiler benötigt wird (siehe unten) und OpenJDK wohl etwas langsam ist.
  • Oracles Java braucht  eine Distribution mit der "armel"-Architektur, da es das Soft Float ABI verwendet. Das schließt die normale Raspbian-Distribution aus, da diese "armhf" (Hardware-Floating-Point) verwendet!

komplette Installation:

  1. Auf http://www.raspberrypi.org/downloads gibt es ein Debian Wheezy-Image mit "armel"-Architektur, bei mir war das 2012-08-08-wheezy-armel.zip
  2. Dieses Image entpacken und per "dd" (Linux) oder entsprechendem Windows-Tool auf eine SD-Card bringen (min 2GB)
  3. Raspberry ans Ethernet klemmen, schauen was er für eine IP-Adresse erhält, per ssh einloggen und konfigurieren (sudo raspi-config, locale und ssh). Neu starten.
  4. Bei Oracle den SDK runterladen. Das geht über http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1637583.html, dort muß man ein paar Fragen beantworten. Leider geht das nicht vom Raspberry Pi aus, sondern nur über einen richtigen Browser..
  5. Java-SDK auf den Raspi kopieren, dann auf dem Raspberry Pi einloggen
  6. Java-SDK als Root installieren und als Standard setzen
  7. mkdir /opt/javacd /opt/java
    tar -zxf /home/pi/jdk-7u6-linux-arm-sfp.tar.gz
    update-alternatives --install "/usr/bin/javac" "javac" "/opt/java/jdk1.7.0_06/bin/javac" 1
    update-alternatives --install "/usr/bin/java" "java" "/opt/java/jdk1.7.0_06/bin/java" 1 
  8. Wer die jffi-Library nicht selbst kompilieren will, kann sie hier runterladen und nach jruby-1.7.0.preview2/lib/native/arm-Linux kopieren, die Schritte 9-16 entfallen dann.
  9. git auf dem Raspberry Pi installieren: sudo apt-get install git 
  10. Die folgenden Schritte als User "pi"
  11. maven auf dem Raspberry Pi installieren. Das habe ich nicht per apt-get gemacht, da dann gleich OpenJDK mit installiert wird, sondern Maven direkt von http://maven.apache.org/download.html geholt, entpackt und den PATH des Users "pi" entsprechend erweitert.
  12. jffi holen: git clone https://github.com/jnr/jffi
  13. jffi-Library kompilieren: cd jffi; mvn install
  14. Als User "pi" das neueste jruby-1.7.2 (momentan http://jruby.org/2012/08/07/jruby-1-7-0-preview2) runterladen und entpacken.
  15. Kompilierte Library ins richtige JRuby-Verzeichnis kopieren: mv ./jffi/target/jni/arm-Linux jruby-1.7.0.preview2/lib/native/
  16. Nun noch Pfade und JRUBY_HOME setzen:
     export JRUBY_HOME=/home/pi/jruby-1.7.0.preview2
     export PATH=$PATH:$JRUBY_HOME/bin
  17. Jetzt kann z.B. Rails (dauert sehr lange) oder Sinatra installiert werden: 
jruby -S gem install rails
Fetching: i18n-0.6.0.gem (100%)
.
.
Successfully installed rails-3.2.8
28 gems installed

Warum das Ganze?

Um zu sehen, was auf der kleinen Kiste geht. Die Performance habe ich mir noch nicht angeschaut, da kommt sicher noch ein Blog-Eintrag.

Keine Kommentare:

Kommentar posten