在Linux(RHEL5.5)里用mono2.8.2和jexus4.1运行.net3.5下的MVC2.0过程记录
本篇文章做个记录,从安装Mono到运行好.net程序,到安装好jexus,配置并且运行起windows下面基于.net3.5开发的mvc2.0程序的过程。但不同linux系统,方法可能会有不一样,仅供参考。
之前我用虚拟机装的RHEL4.8版,装好mono后,运行.net程序总是报错,根据错误提示,安装libgdiplus组件老是不成功,最后安装好yum客户端,却还是有各种错误,最后我重新装了RHEL5.5的linux版本,用yum才装好很多需要的组件。
Linux系统安装好后,安装mono2.8.2,分别提示需要安装gcc,g++环境,可以直接下载相应的rpm包自己安装,但rpm包有依赖关系,很多时候需要在报错后下载很多rpm包,于是我用yum来安装需要的组件包,它自动把有依赖关系的包下下来并安装,下面先说我在rhel5.5卸载Yum组件和安装yum组件,因为默认的yum要提示注册,因此重新下载安装了新的yum,并且指定yum服务器地址,安装yum,主要参考了http://www.docin.com/p-74302564.html这个文档,我blog里也再写一下。
先把系统的yum删除掉,在终端里输入 rpm -qa|grep yum
,把列表里的所有组件全部删除掉,rpm -e ....... - nodeps,(....是找到的rpm包名称,多个rpm用空格分开,如:
rpm -e yum-metadata-parser-1.1.2-3.e15.centos yum-3.2.22-26.e15.centos - noteps),
然后在中科大的网站(http://centos.ustc.edu.cn/centos/5.5/os/i386/CentOS)下载下面4个rpm包
yum-3.2.22-26.el5.centos.noarch.rpm,
yum-fastestmirror-1.1.16-14.el5.centos.1.noarch.rpm ,
yum-metadata-parser-1.1.2-3.el5.centos.i386.rpm ,
yum-updatesd-0.9-2.el5.noarch.rpm .
把下载下来的4个rpm包放到一个目录,比如我放到/root/myfile/里,然后终端cd进入该目录,
执行rpm -ivh yum*.
安装基本上结束了,需要下载配置文件,指定yum源,通过:http://centos.ustc.edu.cn/CentOS-Base.repo.5,下载下来,把该文档改名为CentOS-Base.repo,并且放到/etc/yum.repos.d/目录下,由于该文档时所有版本的都用该文件,因此文档里用了$releasever作为版本变量,我现在把文档里$releasever替换为5.5,然后保存。如果一切正常,yum就可以用了。
mono2.8.2可以在这里http://ftp.novell.com/pub/mono/sources/mono/mono-2.8.2.tar.bz2 下载源码,并执行安装。
我把它放到/root/src/目录里,cd进入该目录,tar xjf mono-2.8.2.tar.bz2,执行解压,执行./configure --prefix=/usr。
我机器分别提示需要安装gcc,g++,bison,我这里就用yum来安装他们了,尤其是gcc,关联了很多包,直接下载rpm包安装,很麻烦,我在命令行里输入yum install gcc,大约安装了7个包,过了一会安装成功后,会显示complete!,然后安装g++,安装g++,是输入yum install gcc-c++安装。最后yum install bison,等待几分钟,就安装好了。
然后就可以安装Mono了,configure完成后,我这里比较慢,花了好几十分钟,然后再make,再make install,等了很久,终于安装成功了,可以再终端输入mono --version,查看到正确显示,比如我这里显示:
Mono JIT compiler version 2.8.2(.........),说明安装好了。
但真正运行windows下开发的.net程序,还要安装libgdiplus及相关组件,之前我在RHEL4.8里,下载了很多源码包来安装,比如cairo,freetype,libgdiplus等等,但安装起总是报各种各样的错误,最后还是用yum安装好的。
安装libgdiplus,我是用yum来安装好的,yum install libgdiplus,安装好后,就可以运行windows开发的.net程序了。
但运行过程中,可能会报System.DllNotFoundException: gdiplus.dll 错误,需要把一个组件重命名,输入命令:find / -name "*libgdiplus*",查询libgdiplus相关文件,如果这个目录/usr/lib/libgdiplus.so.0有这个文件,输入命令:mv /usr/lib/libgdiplus.so.0 /usr/lib/libgdiplus.so,把这个复制一份,并且改名为libgdiplus.so即可。再输入ldconfig -p |grep libgdiplus命令,这个命令具体含义我也不清楚,我认为是查询当前libgdiplus组件是否正确关联吧,如果显示libgdiplus.so.0 (libc6) => /usr/lib/libgdiplus.so.0,即表示关联成功了,现在可以正确的运行.net程序了。
然后安装jexus,一个类试IIS的web服务器,可以在http://linux.j66.net/down/jexus-4.1.tar.gz下载现在的最新版本4.1,可以wget http://linux.j66.net/down/jexus-4.1.tar.gz下载到指定目录,再解压tar -zxvf jexus-4.1.tar.gz,再安装。
一般把jexus加压后的文件放到其他一个指定目录,比如放到/etc/jws,输入命令:mkdir /etc/jws,把加压后的文件全部放到该目录里,jws.regsvr、jws.start、jws.restart、jws.stop 设为可执行,我现在系统里几个文件已经自动为可执行了,注册全局程序集,直接在该目录输入:./jws.regsvr。
现在在/etc/jws里有两个配置文件了,第一个是jws目录下的jws.conf,另一个是/jws/siteconf/里的默认的default文件,jws.conf命名固定了,指向网站配置文件和网站日志文件路径,一般默认指定为网站配置文件在siteconf里,它自动从该目录下的所有文件读取配置信息,比如我现在又两个文件,第一个默认的default,第二个是我新建的mysite,default文件内容如下:
#for default
port=80
root=/ /var/www/default
hosts=*
.....下面的都是#开始的注释信息,可以选的配置信息。
mysite里的内容如下:
port=81
root=/ /var/www/mysite
hosts=*
....下面的都是#开始的注释信息,可以选的配置信息。
表示不同端口,映射到不同目录,注意root=/ /var/www....,两个//中间有个空格“/ /var.....”,第一个/表明该端口的绝对目录,空格后面为用户输入/绝对目录时,映射到这个文件目录位置。
最后测试性的输入mono /etc/jws/jws.exe,把jws进程开启,可以ctrl+c停止服务。开启服务后,把自己的网站程序放到/var/www/对应目录下,比如default文件夹下,mysite文件夹下,就可以访问了。
这里先复制一份别人写好的jexus操作方法:
启动jexus:
1、基本的启动命令的格式(仅作例子,不建议使用)
mono /etc/jws/jws.exe
如:mono /etc/jws/jws.exe
这个命令运行后,用 Ctrl+c 组合键退出程序
2、以“服务”方式进行后台运行, 只需要基本命令后加一空格再加一“&”号(仅作例子,不建议使用)
mono /etc/jws/jws.exe &
3、开机自动启动:
在/etc/rc.local 中加入下面这一行命令:
mono /etc/jws/jws.exe >/dev/null 2>&1 &
最简单最常用的办法是在“/etc/rc.local”文件中添加下面一句:
/etc/jws/jws.start
(注意:不同的Linux系统可能有不同的启动方式,用户应根据不同系统的特点灵活定制)
(提示:jws.start是脚本文件,用户可以根据自己系统的特点去适当修改它,以便其启动)
4、使用脚本操作Jexus(推荐使用):
Jexus自带了三个脚本,分别是:
/etc/jws/jws.start
/etc/jws/jws.restart
/etc/jws/jws.stop
jws.start 的作用是启动JEXUS服务,可以写入rc.local文件中,从而达到开机自启动的目的;
jws.stop 的作用是停止Jexus的运行。
jws.restart 的作用是重启Jexus;
注意,这些脚本需要具有可执行权限,同时操作者也必须拥有管理员(root)权限。
使用脚本时,请一定要注意Jexus安装文件夹的位置,脚本默认的文件夹是“/etc/jws”,如果你的路径不同,请修改脚本内容。
卸载:
1、注销全局程序集jxAspx.dll,命令是:
sudo gacutil -u jxAspx
2、在rc.local文件中删除你手工添加的开机自动启动Jexus的命令行
3、删除 /etc/jws文件夹及全部内容。
根据我当前的配置,80,81端口已经映射到不同目录了,我在windows下开发的基于.net3.5的mvc2可以直接跑起来了,跑出来的截图如下:
做个记录,以备以后参考。