這篇文章主要是向大家介紹如何在FreeBSD運行Acrobat Reader for Linux,這其中涉及的都是一些非常基本的知識,如果你是一個FreeBSD熟手,那麼我建議你不要再往下看了,因為我不想浪費你寶貴的時間,好了,現在我們開始進入主題。
[root@freebsd]# mount -t cd9660 /dev/acd0c /cdrom
[root@freebsd]# cd /cdrom/packages/All/
[root@freebsd]# pkg_add linux_base-6.1.tgz
安裝後,在系統/modules中便多了一個名為linux.ko的module。
接下來找到Acrobat Reader的安裝路徑,並運行Acrobat Reader:
CODE:
[root@freebsd]# mount -t ext2fs /dev/ad0s2 /mnt //跟根自己的實際情況更改
[root@freebsd]# cd /mnt/usr/local/Acrobat5/bin //Acrobat Reader的執行文件路徑
[root@freebsd]# ./acroread
ERROR: Cannot find installation directory.
看來Acrobat Reader啟動時要檢測安裝目錄,這次運行就這樣失敗了。習慣性的打入一個ls -l,發現acroread是一個腳本文件,突然靈機一動。
[root@freebsd]# less acroread
#!/bin/sh
#
ver=5.0
install_dir=/usr/local/Acrobat5/Reader
#
# Prepend a colon separated environment variable
# $1 string to be prepended
# $2 environment variable
#
prepend()
{
if [ -z "$2" -o "$2" = "$1" ] ; then
echo "$1"
else
first="`expr "$2" : '\([^:]*\):'`"
if [ "$first" = "$1" ] ; then
echo "$2"
else
echo "${1}:${2}"
fi
fi
}
...
注意到上面的install_dir=/usr/local/Acrobat5/Reader沒有,Acrobat Reader不是告訴我們安裝路徑不對嗎?現在它指向/usr/local/Acrobat5/Reader,而在我的FreeBSD中根本沒有這個文件夾當然要出錯,不管那麼多,先改了再說,但為了讓Acrobat Reader能同時在linux和FreeBSD中運行,因而先復制一個acroread的副本acroread-bsd,以下我們所做的修改都是在 acroread-bsd中進行,將acroread-bsd中的install_dir=/usr/local/Acrobat5/Reader改為 install_dir=/mnt/usr/local/Acrobat5/Reader,保存後運行acrobat-bsd。
[root@freebsd]# ./acroread-bsd
The OS named FreeBSD version 4.3-RELEASE is currently not installed.
Try running on an installed platform and connecting to your display.
Installed platform(s) include the following:
Intel/Linux
這次Acrobat Reader告訴我們該版本只能在linux上運行,難道沒有辦法讓它運行了嗎?acroread既然是一個腳本,它是怎麼知道我使用的是FreeBSD 4.3 release呢?這其中很可能是調用了uname來檢測系統信息的,打開acroread-bsd,發現其中有如下內容:
#
# setup the configuration from uname
#
os_name=`uname -s`
if [ "$os_name" = "AIX" ] ; then
os_release=`uname -a | ( read name host minor major foo ; echo $major.$minor )`
else
os_release=`uname -r`
fi
case "$os_name" in
SunOS)
case "$os_release" in
4.1.3*|4.1.4*|4.1C)
ACRO_CONFIG=sparcsun
export ACRO_CONFIG
;;
5.*)
machine_type=`uname -p`
case "$machine_type" in
sparc)
ACRO_CONFIG=sparcsolaris
export ACRO_CONFIG
;;
intel|i386)
ACRO_CONFIG=intelsolaris
export ACRO_CONFIG
;;
ppc)
ACRO_CONFIG=ppcsolaris
export ACRO_CONFIG
;;
esac
;;
esac
;;
HP-UX)
case "$os_release" in
*09.0*|*10.*|*11.*)
ACRO_CONFIG=hppahpux
export ACRO_CONFIG
;;
*)
;;
esac
;;
AIX)
case "$os_release" in
4.*)
ACRO_CONFIG=rs6000aix
export ACRO_CONFIG
;;
*)
;;
esac
;;
Linux)
ACRO_CONFIG=intellinux
export ACRO_CONFIG
;;
esac
看來我沒有猜錯,其中的os_name=`uname -s`便是檢測系統信息的,現在我想大家都知道我要做什麼了,既然我安裝的是Acrobat Reader for linux那麼就要讓Acrobat Reader誤以為我是在linux中運行它 ,將acroread-bsd中的:
#
# setup the configuration from uname
#
os_name=`uname -s`
改為:
#
# setup the configuration from uname
#
# os_name=`uname -s`
os_name=Linux
運行acroread-bsd,成功了,Acrobat Reader的啟動界面出現了。本以為這樣就完了,沒想到當我重新啟動機器後,再次執行acroread-bsd時卻出現了如下錯誤提示:
ELF binary type "0" not known.
Abort
提示是說不認識該ELF格式,這時才突然想到我們所安裝的linux兼容包是一個module,重新啟動後該module還沒有加載,於是先運行linux(或 kldload linux),再次運行acroread-bsd這次便成功了。