CentOS 6.3下 安装 Mono 3.2 和Jexus 5.4
最新更新参看: 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有什么区别呢:
- 速度方面: 对于ASP.NET网页,大压力访问时Jexus处理速度更快; 对于静态文件,Jexus远快于XSP,而且对磁盘的要求和影响小N倍;
- 功能方面: XSP是以ASP.NET测试工作开发的,功能单调,而Jexus是作为生产环境使用的真实的WEB服务开发的,功能全面,因此,xsp与Jexus在功能上可比性
- 稳定性方面: Jexus有良好的容错和自动纠错能力,可以长期不间断运行,而XSP是单进程程序,没有任何自动纠错机制,无法保持不间断运行。
- 安全性方面: Jexus有关键的入侵检测功能,XSP没有任何安全检测功能,没有可比性;
- 多站点支持: XSP支持一站,Jexus支持任意多网站。
Jexus for linux 有如下特点:
- 支持多种操作系统:Jexus最初的设计目标是“跨平台的ASP.NET WEB服务器”,由于在Windows系统上,IIS已经是ASP.NET的优秀平台,所以,当前的Jexus以支持Linux和FreeBSD等非Windows系统为主要设计目标。正因为这个原因,就Linux/FreeBSD等平台的ASP.NET建设而言,Jexus具有特别重大的意义。
- 高性能:“高性能”是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服务器的处理能力和传输速度。
- 安全性:Jexus内核含有安全监控机制,绝大多数恶意访问在进入网站前就会被Jexus直接禁止,这是Jexus有别于其它WEB服务器的又一大特色,所以,Jexus特别适合那些对安全要求较高的企业网站或政府网站使用。
- 稳定性:从运行机制而言,Jexus系统中,有专门检测工作进程执行状态的管理单元,任何一个进程退出或者任何一个ASP.NET网站应用程序域退出,被会被管理单元发现并得到重启,从而保证了Jexus能够7*24小时不间断工作;从程序本身而言,Jexus程序代码力求简洁,BUG很少,同时,Jexus的每个版本在正式发布之前,都要经过严格的压力测试,影响稳定性的因素,几乎在正式发布之前即已被全部排除。
- 功能强大:Jexus支持URL重写,支持多目标服务器的反向代理,支持PHP,支持GZIP压缩传输,并且,可以利用不同端口、不同虚拟路径、不同域名设置任意数量的网站,这些功能要素,表明了Jexus是一款功能完整而强劲的WEB服务器。
- 安装、配置、操作极为简单,服务社区化,各种问题能得到快速的处理,有良好的后续服务支撑能力。
本文是在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.121.80.el6_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命令就可以看下下面的结果表示安装成功:
三、安装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
看到了Jexus已经成功启动的日志,我们还可以通过浏览器来检查下:http://mono.cloudapp.net/info
四、放一个网站上去测试下,我这里放个小泥鳅的Mono兼容代码版本上去,可以从这里获取https://github.com/geffzhang/LoachsMono
使用VS编译后通过Winscp 上传到服务器,具体可以参看《使用WinSCP软件在windows和Linux中进行文件传输》。
访问http://mono.cloudapp.net/ 就可以看到我们的成功了:
最新更新参看: Centos 7.0 安装Mono 3.4 和 Jexus 5.6
- 深入剖析Go语言编程中switch语句的使用
- MySQL中DDL、DML、DCL的那些语句
- 如何查看spark与hadoop、kafka、Scala、flume、hive等兼容版本【适用于任何版本】
- golang实现简单的udp协议服务端与客户端示例
- Oracle 12c系列(三)|存储资源隔离 Flex Diskgroup
- Scala的map实现key和value排序及各种排序比较等知识讨论
- crontab执行后发送邮件到指定邮箱
- PHP-魔术变量
- 日志分析实战之清洗日志小实例7:查看样本数据,保存统计数据到文件
- hdu----(1671)Phone List(Trie带标签)
- PHP-数组
- hdu---1506(Largest Rectangle in a Histogram/dp最大子矩阵)
- 日志分析实战之清洗日志小实例6:获取uri点击量排序并得到最高的url
- golang使用sort接口实现排序示例
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python爬虫-八佰词云
- python爬虫-beautifulsoup使用
- 深度学习-卷积神经网络原理
- 深度理论VGG-NET 网络
- 只要30行代码!7步教会你Python爬取网页抖音热门视频
- python苦短-CV2
- python实现语音在线合成,让你的小说自己念给你听
- Python爬虫实战:模拟登录淘宝网站
- Python制作动态二维码(附源码,复制再贴修改路径名字即可)
- 新手小白的福利,零基础也能上手的项目——学生信息管理系统
- Python制作小脚本,一键可以让你同事的电脑在你指定时间关机
- Python小白爬虫入门的第一个案例:爬取全站小说
- Python基础入门知识点——字符串的介绍
- 文章要保存为TXT文件,其中的图片要怎么办?Python帮你解决
- 分析B站弹幕,川普同志暴露的那一天,没有一个鬼畜up是无辜的