« 關於波紋號(tilde/swung dash) | Main | 圈數字 »
這些沒有原始碼,又尚未有 FreeBSD native binary 的軟體不少,例如
Adobe PDF Reader®、Mathematica®、Maple™、MATLAB®、Oracle® 等等,這些軟體有 GNU/Linux binary,但並沒有 FreeBSD binary,而且也沒有原始碼,縱使想自行編譯也拿他們一點辦法也沒有。
在 FreeBSD 有實作 Linux ABI(Application Binary Interface),他能夠很巧妙的在執行 Linux binary 時,把該呼叫的函式,轉為呼叫 Linux 的函式,這樣就能『直接』在 FreeBSD 上執行 Linux binary 了。雖然官方文件仍然沿著歷史的因素,稱呼為 Linux emulator,但他其實並不是模擬器,因為執行時也載入真正的 Linux kernel/lib 供應用軟體呼叫,也因此有人稱他為 Linuxulator。
當然,要達成這樣子的功能,必須先安裝一套 GNU/Linux base system。Linux 核心(系統呼叫的部份)也需先載入 linux 模組(linux.ko)。GNU/Linux base system 可以從 ports 安裝,目前有 Fedora Core/Gentoo/Debian/SuSE 等可供選擇,這樣就行了。
我們就來試試看這個 Linux ABI 的能耐,這裡以 Adobe Reader 來做測試,這個軟體滿常用到的,而前陣子 FreeBSD port 中只有 7.0.1 的版本(目前已經有 7.0.8),由於這個新版本有一些突破性的功能,例如 3D Object,我們就來試試看如何在 FreeBSD 執行 Linux binary。
cd /usr/ports/emulators/linux_base-fc4 make install clean vi /boot/loader.conf 加入 linux_load="YES" 或尚未載入而又不想重開機的話,可以使用 kldload 來載入: kldload linux這樣就可以直接執行 Linux binary 了,當然這些 binary 所需要的額外動態函式庫(*.so)要自行 copy 到:
/usr/compat/linux/usr/lib 或 /usr/compat/linux/usr/X11R6/lib 並執行 /usr/compat/linux/sbin/ldconfig這樣執行 Linux binary 時才找得到所需要的動態函式庫。
Adobe Reader 就比較單純,因為必要的 lib 是本身就有附上,而其他 lib 在所安裝上的 linux_base 中就已經有了,所以只要解開在一個獨立目錄,修改一下 acroread 這個 sh script:
Linux)
ACRO_CONFIG=intellinux
把他修改成:
Linux|FreeBSD)
ACRO_CONFIG=intellinux
就成了。我個人使用的是英文版的,但有加裝中日韓文字型,所以閱讀不內嵌中日韓文字型的 PDF 就沒有問題了。
萬一你要執行的 linux binary,系統無法辨識(較新的 GNU/Linux 所編譯出來的可執行檔大部份情形都可以辨識),例如:
file your_linux_binary | awk '/Linux/ {print $10,$12}'
並沒有輸出任何資料的話(一般 Linux binary 會輸出 `GNU/Linux' 字樣),那麼可以利用 brandelf 把他標示上去:
brandelf -t Linux your_linux_binary這樣系統就會辨識出他是 GNU/Linux binary。或者由於相關的可執行檔太多,一個一個去修正會很麻煩,我們可以讓系統對於無法辨識的 binary,就把他當做是 GNU/Linux binary:
sysctl kern.fallback_elf_brand=3 想一開機就有這個設定的話,在 /etc/sysctl.conf 加入: kern.fallback_elf_brand=3那個 ELF ABI 代號 3 是 ELF 的型態,是由 SCO/USL(Unix Systems Laboratories)所訂定的,要得知目前所能支援的 ELF ABI 代號,可執行:
[edt1023@lgj ~]$ brandelf -l known ELF types are: FreeBSD(9) Linux(3) Solaris(6) SVR4(0)即可得知。 這個 Adobe Reader 的例子算是比較單純的,一些複雜些的軟體,可能需要做 lib 的對應(/etc/libmap.conf)。一些大型的商業軟體的使用可以參考: FreeBSD handbook 第十章。
相關參考資料:
http://www.bsdforums.org/forums/archive/index.php/t-909.html
http://kerneltrap.org/node/13
| « | 九月 2010 | » | ||||
|---|---|---|---|---|---|---|
| 一 | 二 | 三 | 四 | 五 | 六 | 日 |
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 | |||