CentOS 6.3下 安装 Mono 3.2 和Jexus 5.4

时间:2023-11-11 10:27:08

最新更新参看: Centos 7.0 安装Mono 3.4 和 Jexus 5.6

2012年初写过一篇《32和64位的CentOS 6.0下 安装 Mono 2.10.8 和Jexus 5.0》,2013年7月24日Mono 3.2发布了,3.2版本有很多期待的新特性,具体参看《跨平台的 .NET 运行环境 Mono 3.2 新特性》,本文主要就是这篇文章的更新。

CentOS是一个基于RHEL的Linux发行版,其目的是为了提供一套免费与*的企业等级Linux发行版。CentOS的名称来自于「Community ENTerprise Operating System」,从名称便可以知道这是一套由社区主导、并以企业级用户为主要目标的操作系统。

目前CentOS是网页服务器用途的主机中最广为使用的一套Linux发行版。根据统计,目前大约有30%的Linux服务器使用CentOS。许多书籍、网站在介绍Linux的操作方式时,也会援引CentOS作为操作接口。通常CentOS都会在RHEL推出新版本之后,经过一小段时间的修改与测试之后再推出新的版本,而其版本编号大多也会跟随RHEL的版本编号,例如目前最新版本的CentOS 6,其相对应的RHEL版本便是RHEL 6。

Jexus web server for linux 是一款基于.NET兼容环境,运行于Linux/unix操作系统之上,以支持ASP.NET为核心功能的高性能WEB服务器,用于替换Apache+mod_mono、Nginx+FastCgi 方案运行ASP.NET。Jexus不但具有跨平台ASP.NET服务器这样的标志性特征,同时还拥有内核级的安全监控、入侵检测、URL重写、无文件路由等一系列重要功能和专有特性。

Mono Xsp 和Jexus有什么区别呢:

  1. 速度方面: 对于ASP.NET网页,大压力访问时Jexus处理速度更快; 对于静态文件,Jexus远快于XSP,而且对磁盘的要求和影响小N倍;
  2. 功能方面:   XSP是以ASP.NET测试工作开发的,功能单调,而Jexus是作为生产环境使用的真实的WEB服务开发的,功能全面,因此,xsp与Jexus在功能上可比性
  3. 稳定性方面: Jexus有良好的容错和自动纠错能力,可以长期不间断运行,而XSP是单进程程序,没有任何自动纠错机制,无法保持不间断运行。
  4. 安全性方面: Jexus有关键的入侵检测功能,XSP没有任何安全检测功能,没有可比性;
  5. 多站点支持: XSP支持一站,Jexus支持任意多网站。

Jexus for linux 有如下特点:

  1. 支持多种操作系统:Jexus最初的设计目标是“跨平台的ASP.NET WEB服务器”,由于在Windows系统上,IIS已经是ASP.NET的优秀平台,所以,当前的Jexus以支持Linux和FreeBSD等非Windows系统为主要设计目标。正因为这个原因,就Linux/FreeBSD等平台的ASP.NET建设而言,Jexus具有特别重大的意义。
  2. 高性能:“高性能”是Jexus的重要的设计目标。虽然Jexus基于Mono环境运行,但Jexus并非全部由Mono的.NET组件构成,对于涉及性能的关键代码,Jexus非常巧妙地大量采用了Linux/Unix本身的优秀特性,从代码层保证了Jexus的性能优势。
    同时,Jexus的框架特征也为高性能提供了基础保证。Jexus不象XSP那样,纯HTML也需要经过ASP.NET处理,更不象Apache和Nginx等服务器,需要通过插件的形式间接地对ASP.NET进行支持,Jexus把HMTL静态文件处理模块、ASP.NET处理模块、静态文件高速缓存机制、epoll/poll数据传输机制等进行了高度集成,从架构本身入手,最大限度地提高WEB服务器的处理能力和传输速度。
  3. 安全性:Jexus内核含有安全监控机制,绝大多数恶意访问在进入网站前就会被Jexus直接禁止,这是Jexus有别于其它WEB服务器的又一大特色,所以,Jexus特别适合那些对安全要求较高的企业网站或*网站使用。
  4. 稳定性:从运行机制而言,Jexus系统中,有专门检测工作进程执行状态的管理单元,任何一个进程退出或者任何一个ASP.NET网站应用程序域退出,被会被管理单元发现并得到重启,从而保证了Jexus能够7*24小时不间断工作;从程序本身而言,Jexus程序代码力求简洁,BUG很少,同时,Jexus的每个版本在正式发布之前,都要经过严格的压力测试,影响稳定性的因素,几乎在正式发布之前即已被全部排除。
  5. 功能强大:Jexus支持URL重写,支持多目标服务器的反向代理,支持PHP,支持GZIP压缩传输,并且,可以利用不同端口、不同虚拟路径、不同域名设置任意数量的网站,这些功能要素,表明了Jexus是一款功能完整而强劲的WEB服务器。
  6. 安装、配置、操作极为简单,服务社区化,各种问题能得到快速的处理,有良好的后续服务支撑能力。

本文是在Windows Azure云平台上 使用CentOS 6.3 + Mono 3.2 + Jexus 5.4 的安装简要教程:

一、更新系统,安装编译环境,为编译Mono源码做准备。Mono 3.2的源码编译要求系统中存在一个Mono 2.4以上的环境,所以我们按照《32和64位的CentOS 6.0下 安装 Mono 2.10.8 和Jexus 5.0》这篇文章编译安装完成2.10.8 环境,下面我简要列一下:

1、 更新系统

yum –y update

2、安装Mono源码安装需要的库

yum -y install gcc gcc-c++ bison pkgconfig glib2-devel gettext make libpng-devel libjpeg-devel libtiff-devel libexif-devel giflib-devel libX11-devel freetype-devel fontconfig-devel  cairo-devel

在执行yum 更新系统的时候就发生了如下错误:

--> Running transaction check ---> Package gc.x86_64 0:7.1-10.el6 will be installed    ---> Package glibc-headers.x86_64 0:2.12-1.80.el6_3.5 will be installed    --> Processing Dependency: kernel-headers >= 2.2.1 for package: glibc-headers-2.                                                                                                 12-1.80.el6_3.5.x86_64    --> Processing Dependency: kernel-headers for package: glibc-headers-2.12-1.80.e                                                                                                 l6_3.5.x86_64    --> Finished Dependency Resolution    Error: Package: glibc-headers-2.12-1.80.el6_3.5.x86_64 (updates)               Requires: kernel-headers    Error: Package: glibc-headers-2.12-1.80.el6_3.5.x86_64 (updates)               Requires: kernel-headers >= 2.2.1    You could try using --skip-broken to work around the problem    ** Found 1 pre-existing rpmdb problem(s), 'yum check' output follows:    kernel-2.6.32-220.13.1.el6.x86_64 has missing requires of kernel-firmware >= ('0                                                                                                 ', '2.6.32', '220.13.1.el6')

解决方法:修改文件vi /etc/yum.conf 将exclude=kernel*前加注释即可解决,此参数的意思是排除安装或更新kernel开头的软件,而我们安装gcc需要依赖kernel相关的软件glibc-headers-2.12-1.80.el6_3.5.x86_64 。

3、安装Mono需要的GDI+兼容API的库Libgdiplus

cd /usr/local/src/

wget http://download.mono-project.com/sources/libgdiplus/libgdiplus-2.10.tar.bz2

tar -jxvf libgdiplus-2.10.tar.bz2

cd libgdiplus-2.10

./configure --prefix=/usr

make

make install

4.1、源码安装Mono

cd /usr/local/src/

wget http://download.mono-project.com/sources/mono/mono-3.2.1.tar.bz2

tar -jxvf mono-3.2.1.tar.bz2

./configure --prefix=/usr

make

make install

输入 mono -V 如有mono版本信息,则安装成功.

4.2、Git安装 mono

cd /usr/local/src/

wget http://download.mono-project.com/sources/mono/mono-2.10.8.tar.bz2

tar -jxvf mono-2.10.8.tar.bz2

cd mono-2.10.8

./configure --prefix=/usr

make

make install

输入 mono -V 如有mono版本信息,则安装成功.

如果是64位版本的CentOS,在后续安装好Jexus 5,启动的时候会发生以下错误:

Sender: jws.exe, Sender TypeName: AppDomain
Exception Source: jws, TargetSite Name: A
Message is:
An exception was thrown by the type initializer for Mono.Unix.Native.Stdlib
StackTrace is:
  at A.G.A (System.String[] A) [0x00000] in <filename unknown>:0 
IsTerminating: True

建议你运行下命令ldconfig,建议大家在安装mono后,都 ldconfig一下 。(ldconfig命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表. )

另外有一点也非常重要,要在编译Mono的是指定安装到/usr(./configure --prefix=/usr),如果安装到一个系统根本"不了解"的文件夹,仅ldconfig都不行,还要在/etc/ld.so.conf文件或/etc/ld.so.conf.d 中添加路径后再 ldconfig才行呢。

二、源码编译mono 升级到最新3.2 版本,我这里用了Git方式安装,从Mono的主干上拉下来的代码编译后是3.3版本:

安装前把mono所需的依赖包安装好:

yum –y install build-essential automake autoconf libtool bison libglib2.0-dev libfreetype6-dev libfontconfig-dev gettext libgif-dev libtiff4-dev libpng12-dev libexif-dev libx11-dev libxft-dev libjpeg-dev

git clone git://github.com/mono/mono.git
./autogen.sh --prefix=/usr    [要注意目标文件夹,一定要指定同一个地方,强烈建议用 --prefix=/usr 参数]
make

编译完后,进入安装mono 2.10.8 的源文件夹,以管理员身份运行 “make uninstall”。

cd /usr/local/src/mono-2.10.8

sudo make uninstall

然后进入mono-3.2.0 目录

sudo make install

运行mono -V命令就可以看下下面的结果表示安装成功:

CentOS 6.3下 安装 Mono 3.2 和Jexus 5.4

三、安装Jexus 5.4 :从5.3.1版本开始,Jexus的安装过程简化了,内置了两个新的脚本,它们分别是“install”和“upgrade”,对应原来的“安装”和“升级”,将Jexus的安装过程自动化了。jexus本身的安装和升级方式并没有发生更多的变化,因此对于已经习惯于5.3.1之前版本的使用方式的用户,你们仍然可以采用之前的安装方式。

wget http://www.linuxdot.net/down/jexus-5.4.tar.gz
tar -zvxf jexus-5.4.tar.gz

cd jexus-5.4
sudo ./install

安装完成~!!!在执行install脚本时,jexus默认是安装到/usr/jexus/中,如果想安装到其他目录,可以在执行该脚本时增加一个目录的参数(比如 sudu install /usr/local/jexus/)。对于升级就是执行upgrade脚本。

启动jexus 检查是否正常了

cd /usr/jexus

sudo ./jws start

CentOS 6.3下 安装 Mono 3.2 和Jexus 5.4

看到了Jexus已经成功启动的日志,我们还可以通过浏览器来检查下:http://mono.cloudapp.net/info

CentOS 6.3下 安装 Mono 3.2 和Jexus 5.4

四、放一个网站上去测试下,我这里放个小泥鳅的Mono兼容代码版本上去,可以从这里获取https://github.com/geffzhang/LoachsMono

使用VS编译后通过Winscp 上传到服务器,具体可以参看《使用WinSCP软件在windows和Linux中进行文件传输》。

访问http://mono.cloudapp.net/ 就可以看到我们的成功了:

CentOS 6.3下 安装 Mono 3.2 和Jexus 5.4

最新更新参看: Centos 7.0 安装Mono 3.4 和 Jexus 5.6