2009年10月20日 星期二

RayGUI 2.3 on Linux安裝筆記

A. Something about RayGUI

RayGUI 2.1是USGS(美國地質調查所,相當於台灣的中央地質調查所)所開發的一套用來foward and inverse ray-tracing的一套圖形介面程式。目前的版本為2.1,自2.0以降的版本就支援Linux以及MacOS,由Jian-Li Song以及Uri ten Brink所開發。

RayGUI 2.1主要由兩大部份構成:GUI圖形介面,以及rayinvr這隻程式。 RayGUI提供圖形介面讓使用者可以自由的修改速度模型以及ray-tracing的參數;而rayinvr便是執行ray-tracing的主要程式。當tracing完成後,RayGUI可以秀出觀察到的以及模型的走時。也許兩位作者各有所長,RayGUI是由JAVA寫成的,作者並未開放原始碼;rayinvr則是用fortran 77寫成的;因為需要編譯,所以是看得到原始碼的。另外還有些部份還需要C語言以及X11的lib,我後面會提到。

在開始之前,我希望各位能先將RayGUI的手冊先準備好,雖然在安裝的部份內容有些謬誤,但我會在後面告訴各位如何修正這些錯誤。

B. Where to get RayGUI?

各位可以在這個頁面下載較新版的RayGUI。這篇文章裡,我分別用Debian Lenny以及Fedora 11測試均正常無誤;如果您是別的linux發行套件而遇到安裝上的問題,歡迎留言給我。

首先我們先安裝RayGUI所需要的小工具:fortran 77。
For Debian users:

aptitude install fort77 -y
For Fedora users:
yum install compat-gcc-34-g77
到這裡,我們擁有fortran 77的compiler了。Debian的使用者請再加上:
ln -s /usr/bin/f77 /usr/bin/g77

第二,我們需要JRE的環境:
For Debian users:

aptitude install sun-java6-jre -y
For Fedora users:
yum install java-1.6.0-openjdk
事實上,任何一間廠商的JRE都可以跑;java已經變成一種規範,規範於良性的競爭內,這就是java壯大的原因。如果各位眼尖的話,可以看出Debian的JRE是sun的,而Fedora的JRE是OpenJDK,亦即社群所維護的JAVA。

接著,下載RayGUI 2.1:

wget -c http://woodshole.er.usgs.gov/ftp/RayGUI/RayGUI2.1.5_for_Linux.tar.gz .
tar zxvf RayGUI2.1.5_for_Linux.tar.gz -C /opt
rm -rf RayGUI2.1.5_for_Linux.tar.gz
我們把RayGUI解壓縮放到/opt裡。事實上解壓縮到任何位置都可以,只是在多人的工作站上,放在/usr/local或是/opt通常是為了便於管理。

C. How to install RayGUI on Linux?

  1. 修改Makefile:
    vi /opt/rayguidir/rayinvrpk/rayinvr/Makefile
    把上面兩段修改成:
    EXEDIR=/opt/rayguidir/bin
    PLTLIB=/opt/rayguidir/rayinvrpk/pltlib
  2. 刪除object code:
    真是奇怪,為什麼讓使用者下載的檔案要保留這些.o檔呢?真是給人不專業感覺!
    rm -f /opt/rayguidir/rayinvrpk/rayinvr/*.o
    rm -f /opt/rayguidir/rayinvrpk/pltlib/*.o
  3. 開始編譯:
    cd /opt/rayguidir/rayinvrpk/rayinvr/
    make
    通常,這個階段一定會造成編譯失敗,原因出在系統缺少xbuplot.c這個檔案所宣告的Xlib.h,而這點手冊上並沒有詳載。解決的方法必須要安裝Xorg的headers:
    For Debian users:
    aptitude install libx11-dev -y
    For Fedora users:
    yum install libX11-devel -y
    然後重作一次刪除object code的步驟(作者沒有寫clean的script,所以無法用make clean...),再make一次,假設不是停在因錯誤而exit的狀態,就表示編譯成功。
  4. 編譯dmplstsqr
    cd /opt/rayguidir/rayinvrpk/misc
    g77 -o /opt/rayguidir/bin/dmplstsqr dmplstsqr.f
    假設到目前為止都順利的話,編譯的部份已經完成囉!

D. Setting up RayGUI for users

倘若你根據手冊照本宣科的設定,在設定多人使用的時候必定會發生錯誤,因為手冊的撰寫人可能是很不熟悉linux跟java;

  1. 請勿將PATH設定包含當前目錄:
    手冊的第10頁要求使用者把PATH設定成包含當前的工作目錄,這是危險的!無論任何情況、任何理由,都不應該做這件事! 正確作法:
    作者是因為後面要設定alias而要求此步,這是不必要且要不得的,請略過他。
  2. 把RayGUI的執行目錄加到PATH變數裡:
    手冊的第10頁要求使用者把/opt/rayguidir/bin/xrayinvr加到~/.bashrc裡,是不對也恰當的;首先,PATH設定的就是path阿,因此指定的是目錄而非檔案;其次,PATH設定依照linux的規範應該設定在.profile(Redhat系的會是.bash_profile),.bashrc通常是設定alias以及PS1等終端機輸出模式等參數設定。 正確作法:
    vi /etc/profile (or ~/.profile)
    修改PATH那行,變成像是:
    export RAYGUI=/opt/rayguidir/bin
    export PATH="$PATH:$RAYGUI"
    使用者需重新登入。(或source ~/.profile即刻生效)
    Fedora的使用者則是.bash_profile,這裡就不重覆寫了。
  3. 設定alias
    手冊第11頁的alias設定需要把當前環境加到PATH裡,且一個alias需要兩道指令,實在不是一個好作法。("cd ..." 究竟是什麼東西阿?manual的品質有待加強...) 正確作法:
    vi /etc/bashrc (or ~/.bashrc)
    新增一行alias,像是這樣:
    alias raygui="java -cp /opt/rayguidir/raygui/ RayGui"
    使用者須重新登入(或source ~/.bashrc即刻生效)。
  4. For Multiusers:
    手冊上這段設定不但多餘,而且還是錯的。首先,GNU/Linux本來就是多人多工的系統,每個人的工作目錄絕不可能重複(除非有一個愚蠢的系統管理員); 第二,"-d"是javac才有的參數,透過javac -d來設定要將編譯過後的.class檔放位置,java是沒有-d參數的! 正確作法: 什麼也不用做,大笑三聲就好。

E. 測試看看:

記得你需要重新登入,(或source ~/.bashrc即刻生效)。 如果你可以跑出像這樣的畫面,恭喜你,只剩一點了!如果跑不出來並出現一堆NoClassDefFoundError的Exception,沒關係,請再繼續往下走。

(不過真是奇怪,我們一開始下載的版本是2.1.5,但是為何跑起來還是顯示2.0呢?)

F. 升級至RayGUI 2.3
下載RayGUI 2.3:

wget -c http://woodshole.er.usgs.gov/ftp/RayGUI/raygui23.tar
tar xvf raygui23.tar
rsync -av --delete rayguiv23Class/ /opt/rayguidir/raygui/
rm -rf rayguiv23Class/
您可以順利執行raygui了嗎?恐怕不行。我們看看rayguidir下究竟什麼東西在搞鬼:
[root@localhost rayguidir]# ls -l
total 16
drwxrwxr-x  2 501 501 4096 Apr 15 00:44 bin
drwxrwxr-x  2 501 501 4096 Jul 14  2005 example
drwx-----T  6 500 500 4096 Feb  3  2006 raygui
drwxrwxr-x 11 501 501 4096 Jul 14  2005 rayinvrpk
我不知道為什麼RayGUI的作者要把raygui目錄設定stick bit(後面的T),這不具有任何意義;加上群組以及其他這兩類屬性完全沒有任何讀取的權限,導致使用者執行raygui會顯示找不到class這類窘境,並且怪罪java不好用。事實上,這是作者對於linux權限不甚了解所導致的結果,請多執行下列步驟便可以解決這個問題。
find /opt/rayguidir -type d -exec chmod 0755 {} \;
find /opt/rayguidir -type f -exec chmod 0644 {} \;
chmod +x /opt/rayguidir/bin/*
之後,你可以退回一般使用者並且直接執行raygui,會發現可以順利跑出你期待已久的RayGUI圖形介面! 這回他們總算記得修改GUI介面了!

延伸資源:假如你編譯過程還是失敗,缺少適合你平台的rayinvr可能會不能正常使用RayGUI,你可以到這裡下載原始碼,至於編譯與安裝請參考Rayinvr installation on Linux
你也可以從這裡閱讀RayGUI的一些documents。不過安裝的部份您還是略過別看,因為照他的步驟做一定不會成功的。

關於升級成2.3,你可能需要知道一些注意事項:raygui23readme

Share

2 則留言:

  1. fedora17,gcc4.7.2/3.4.6,make時“Initialization of Large Aggregate Area”,搜索到的解決方法都是修改`gcc/f/data.c'里的`FFEDATA_sizeTOO_BIG_INIT_'值,但我找不到那個文件。。。怎麼辦?

    回覆刪除