这篇文章主要是向大家介绍如何在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这次便成功了。