FreeBSDでもclojure
先日は、すっかりclojureという面白いものにハマッテしまった訳であるが、おしい
かな、動かした舞台は Windows上の事。
Javaのキャッチフレーズ Write onece Run anyware からすれば、他の環境、、
LinuxとかSolarisとか*BSDとかでも、動いて当たり前のはず。
まあ、SolarisはSunのお膝元だから、当然として、LinuxもSolarisの代役を務める
ご時世だから、これもまあ難なく動くだろう。
ならば、*BSDはどうか? 手元にあるFreeBSD 6.4-stableで、最近のJava事情を
確かめてみる事にする。
まずは、/usr/ports/java/を見てみる。使えそうなのを見繕うと
diablo-jre16
jdk16
linux-sun-jre16
FreeBSDは、Linuxとしても使えるので、linux-sun-jre16を試してみよう。
makeを始めると
======================================================================
Warning: This JRE may be unstable. You are advised to use the native
FreeBSD 1.6 JDK, in ports/java/jdk16.
This Java VM will attempt to obtain some system information by
accessing files in linux's procfs. You must install the Linux
emulation procfs filesystem for this to work correctly. The JVM
will exhibit various problems otherwise. This can be accomplished
by adding the following line to your /etc/fstab file:
linprocfs /compat/linux/proc linprocfs rw 0 0
and then, as root, executing the commands:
kldload linprocfs
mount /compat/linux/proc
======================================================================
いきなり出鼻をくじかれるようなメッセージが出てきたよ。
まあ、お遊びだから、楽(直ぐに使える)な路線で行ってみよー。
root@fb /usr/ports/java/linux-sun-jre16]# make
===> linux-sun-jre-1.6.0.03 You must manually fetch the JRE self-extracting file for the Linux platform (jre-6u3-linux-i586.bin) from http://java.sun.com/javase/downloads/index.jsp, place it in /usr/ports/distfiles and then run make again.
*** Error code 1
Stop in /usr/ports/java/linux-sun-jre16.
Sunのサイトに行って、取ってこいですって。で、行ってみると指定の
jre-6u3-linux-i586.binはもう無いみたい。しょうがないので、最新のやつを取って
きて、それに合わせてちょいとMakefileとかdistinfoを変更。
===> Extracting for linux-sun-jre-1.6.0.12
===> linux-sun-jre-1.6.0.12 depends on file: /compat/linux/etc/fedora-release - found
register_JDK: not found
/usr/ports/java/linux-sun-jre16/work/install.sfx: 22: Syntax error: "else" unexpected
*** Error code 2
register_JDKって言うコマンドなんて聞いた事ないぞ。それに文法間違いも有る
とは、、Makefileを見つつ、workの現場に駆けつけて、現場検証だな。
---------------------------------------------------------
:
# Service Tag support and JDK product registration
register_JDK "$javahome" "${BINARY_NAME}" "$1"
else
if [ "$1" = "-x" ]; then
echo "Extraction of RPM Done."
:
----------------------------------------------------------
else に対する ifが無いんよ。そりゃエラーにするわな。要するに、スクリプトの
頭の方がカットされているのだ。これは、JRE_REVISION= 03 を 12 に強引に
書き換えた祟りだろう。Makefileをじっと見直すと、、、
----------------------------------------------------------
do-extract:
@${MKDIR} ${WRKDIR}
@cd ${WRKDIR} \
&& ${TAIL} -n +403 ${DISTDIR}/${DISTNAME}${EXTRACT_SUFX} > ${WRKDIR}/install.sfx \
&& ${CHMOD} +x ${WRKDIR}/install.sfx \
&& ${WRKDIR}/install.sfx > /dev/null
-----------------------------------------------------------
謎のMagic Number +403 を発見。こいつが悪い、こやつを調整してやろう。
今度は、エラーが出なくなったけど、待てど暮らせど、一向に動いている
そぶりが無い。
業を煮やして、work/install.sfx を直接実行してみると、、
For inquiries please contact: Sun Microsystems, Inc., 4150
Network Circle, Santa Clara, California 95054, U.S.A.
Do you agree to the above license terms? [yes or no]
ライセンスに同意を求めてきたよ。/dev/nullに捨てられていたので、これが
見えなかっただけね。了解しましただ。
こうして、インストール完了。
[sakae@fb ~]$ java -version
java version "1.6.0_12"
Java(TM) SE Runtime Environment (build 1.6.0_12-b04)
Java HotSpot(TM) Client VM (build 11.2-b01, mixed mode, sharing)
[sakae@fb ~]$ uname -v
FreeBSD 6.4-STABLE #0: Sat Mar 7 04:16:29 JST 2009 root@fb.kuma.net:/usr/obj/usr/src/sys/SAKAE
さて、いよいよお目当ての clojureだな。Windows機から、そのまま持って
きたものを試してみる。
[sakae@fb ~/clj]$ java -jar clojure.jar
Clojure
user=> (+ 1 2 3 4 5 6 7 8 9 10)
55
user=> (/ 1 0)
java.lang.ArithmeticException: Divide by zero (NO_SOURCE_FILE:0)
user=> (/ 1 3)
1/3
user=> ^Z
[1]+ Stopped java -jar clojure.jar
ああ、動いているぽいね。
終了しようと思ったら、裏側に回っちゃったよ。ついでだから
[sakae@fb ~/clj]$ ps
PID TT STAT TIME COMMAND
667 v0 I 0:00.03 -bash (bash)
669 v0 I+ 0:00.01 /bin/sh /usr/local/bin/startx
687 v0 I+ 0:00.01 xinit /home/sakae/.xinitrc -- -auth /home/sakae/.serv
693 v0 I 0:00.11 twm
722 v0 I 0:00.20 kinput2 -jserver localhost -wnn
2122 p0 Is+ 0:00.03 bash
822 p1 Ss 0:00.08 -bash (bash)
2576 p1 T 0:00.05 /usr/local/linux-sun-jre1.6.0/bin/java -jar clojure.j
2683 p1 S 0:00.00 /usr/local/linux-sun-jre1.6.0/bin/java -jar clojure.j
2684 p1 T 0:03.98 /usr/local/linux-sun-jre1.6.0/bin/java -jar clojure.j
2685 p1 T 0:00.35 /usr/local/linux-sun-jre1.6.0/bin/java -jar clojure.j
2686 p1 T 0:00.00 /usr/local/linux-sun-jre1.6.0/bin/java -jar clojure.j
2687 p1 T 0:00.00 /usr/local/linux-sun-jre1.6.0/bin/java -jar clojure.j
2688 p1 T 0:00.00 /usr/local/linux-sun-jre1.6.0/bin/java -jar clojure.j
2689 p1 T 0:00.55 /usr/local/linux-sun-jre1.6.0/bin/java -jar clojure.j
2690 p1 T 0:00.00 /usr/local/linux-sun-jre1.6.0/bin/java -jar clojure.j
2691 p1 T 0:00.02 /usr/local/linux-sun-jre1.6.0/bin/java -jar clojure.j
2713 p1 R+ 0:00.00 ps
こんなにたくさんjavaが動いているのは、FreeBSDの事情によるもの? それとも
clojureの特殊事情で仕事を振り分けでもしてるの?
[sakae@fb ~/clj]$ fg
java -jar clojure.jar
(* 1111111111 1111111111)
1234567900987654321
user=> ^D
[sakae@fb ~/clj]$
最後に、
言うまでもないけど、1行GUIと摂氏華氏変換のGUIも動くのを確認済み。