关于什么是 Mono,请翻我上篇博文《在Linux上运行.NET——Mono》(● ̄(エ) ̄●)

本来想用 Apache + mod_mono 来架设 Web 服务器,但是想想最后还是决定使用 Mono + Jexus 的方法架设。好久没有使用国人写的东西了,心里还有些小激动呢(°∀°)ノ

关于怎么使 Apache/Nginx 和 Jexus 同时生效,只要用 Apache/Nginx 搭个反向代理就 ok 了。

 

更新时间:2016.06.04

 

安装 Mono

安装 Mono 有三种方法,以下博主将逐一介绍:

 

一、yum 安装 Mono(仅支持 CentOS 7)

使用 yum 也是 Mono 官网建议的安装方式,不同的系统安装方式略有不同,像 openSUSE 还有官方的发行包,在这里有官方提供的各平台安装方法。

针对 CentOS 用户来说,CentOS 7 可以直接用 yum 安装,也就是说 CentOS 6 就别想了_(:3」∠)_

 

1.添加 Mono 和 EPEL 的源,并安装依赖包

以下 Shell 需要使用 root 权限运行

yum -y install yum-utils
# 安装必须工具
rpm --import "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF"
#添加Mono的GPG密钥
yum-config-manager --add-repo http://download.mono-project.com/repo/centos/
#添加Mono的仓库地址
yum -y install epel-release
#添加EPEL源
yum -y install bison cairo-devel freetype-devel gcc gcc-c++ gettext giflib-devel make libexif-devel libjpeg-devel libpng-devel libtiff-devel pkgconfig
yum -y update

 

2.安装 mono-complete

因为是 CentOS 7,其最新 GLIBC 版本是 2.17,高于最低限制 glibc 2.16 可以正常安装。而且用于安装依赖包 libgdiplus0 的 4.0 版 libtiff 和 1.5 版 libpng 也集成在 CentOS 7 中。

要知道 CentOS 6 的 glibc 只有 2.12libtiff 只有 3.9libpng 只有 1.2。这就是无法跨越的鸿沟…

 

安装 mono-complete 会安装全部的 mono 相关的包。

yum -y install mono-complete

 

二、编译安装 Mono

若是使用 CentOS 7 以下的版本 ,就不要考虑 yum 命令直接安装了,还是老老实实编译安装吧。

 

1.安装必须的库

先安装必须的库,安装完成后再升级下需要升级的库。

yum -y install autoconf automake bison cairo-devel freetype-devel gcc gcc-c++ gettext giflib-devel glib2-devel make libexif-devel libjpeg-devel libpng-devel libtiff-devel libtool
#安装必须的库
yum -y update

 

2.编译安装 libgdiplus

安装用于实现 System.Drawinglibgdiplus。至博主编译时,libgdiplus 最新版本为 4.2,在这里下载最新版 libgdiplus

在安装 libgdiplus 时,建议将其安装在 /usr 里,这样在编译 Mono 的时候,系统会自动找到需要链接的文件,也就不需要去修改 /etc/ld.so.conf.d 里的内容了。

cd /usr/local/src
wget http://download.mono-project.com/sources/libgdiplus/libgdiplus-4.2.tar.gz
tar -zxf libgdiplus-4.2.tar.gz
cd libgdiplus-4.2
./configure --prefix=/usr
make
make install

安装完 libgdiplus 后,就可以安装 Mono 了。

 

3.编译安装 Mono

Mono 官网提醒,如果安装 2.8 版本以下的 Mono ,需要先安装低版本的 Mono ,然后再安装高版本的 Mono 。因为 2.8 之前的版本不能自己生成 C# 的编译器,需要使用低版本的 C# 编译器,而从 Mono 2.8 开始,Mono 将自己生成 C# 的编译器供自己使用。

(碎碎念:为嘛前面一句话让我想到了:你再 poipoi 地叫小心我 poi 了你哦 poi Σ(゚д゚;))

至博主编译时,Mono 最新稳定版本为 4.2.3.4,在这里下载最新版 Mono。

cd /usr/local/src
wget http://download.mono-project.com/sources/mono/mono-4.2.3.4.tar.bz2
tar -jxvf mono-4.2.3.4.tar.bz2
cd mono-4.2.3
./configure --prefix=/usr/local
make
make install
#如果有多个线程,可以使用make -j 线程数 使用多线程编译Mono,提高编译速度

经过漫长地编译安装过程,终于装完了…好歹有 700M 啊

其实我想了想,觉得把它装在一个文件夹内貌似更好 –prefix=/usr/local/mono

 

4.测试 Mono 是否安装成功

mono -V
Mono JIT compiler version 4.2.3 (Stable 4.2.3.4/832de4b Sat Jun 4 20:43:24 CST 2016)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
 TLS: __thread
 SIGSEGV: altstack
 Notifications: epoll
 Architecture: amd64
 Disabled: none
 Misc: softdebug 
 LLVM: supported, not enabled.
 GC: sgen

如果出现了上面的版本信息,那么表示 Mono 安装成功,否则安装失败了…

 

三、使用 Git 安装 Mono

使用 Git 会取得最新的 Mono 版本,但是最新的版本不一定是稳定的版本,是否使用最新版本请自己拿捏。

记得先自己装上 Git,不然没法用 git 命令哦~

 

1.安装必须的库

先安装必须的库,安装完成后再升级下需要升级的库。

yum -y install autoconf automake bison cairo-devel freetype-devel gcc gcc-c++ gettext giflib-devel glib2-devel make libexif-devel libjpeg-devel libpng-devel libtiff-devel libtool
#安装必须的库
yum -y update

 

2.安装 libgdiplus

安装用于实现 System.Drawinglibgdiplus

在安装 libgdiplus 时,建议将其安装在 /usr 里,这样在编译 Mono 的时候,系统会自动找到需要链接的文件,也就不需要去修改 /etc/ld.so.conf.d 里的内容了。

cd /usr/local/src
git clone git://github.com/mono/libgdiplus.git
cd libgdiplus
./autogen.sh --prefix=/usr
make
make install

安装完 libgdiplus 后,就可以安装 Mono 了。

 

3.安装 Mono

cd /usr/local/src
git clone git://github.com/mono/mono.git
#大概有 100M 左右内容要下载
./autogen.sh --prefix=/usr/local
make
make install

漫长的等待…

 

4.测试 Mono 是否安装成功

mono -V

如果出现了版本信息,那么表示 Mono 安装成功,否则安装失败了…

 

编译安装如果所有安装路径都按博主的来,那么

libgdiplus 安装在 /usr 里,它的文件散落在 /usr/lib 文件夹中

Mono 安装在 /usr/local 里,文件散落在 /usr/local/include/usr/local/lib

将要安装的 Jexus 安装在 /usr/local/jexus 里,文件都在 /usr/local/jexus 中,默认网站目录为 /data/www/aspnet/default

 

安装Jexus

安装完成 Mono 后,就可以安装 Jexus 了。Jexus 的安装非常简单,相当于执行一个一键脚本。

Jexus 的官网是中文的,里面的说明什么的只要你是个中国人相信都能看懂,你也能在这里获得最新版本的 Jexus。

cd /usr/local/src
wget http://www.linuxdot.net/down/jexus-5.8.1.tar.gz
tar -zxf jexus-5.8.1.tar.gz
cd jexus-5.8.1
./install /usr/local/jexus
#默认安装在/usr/jexus中,可以设置为/usr/local/jexus中,只要在install最后加上路径即可,例如 ./install /usr/local/jexus

安装完成后,只要稍微配置下里面的配置文件即可,甚至可以不进行配置,默认网站目录是 /var/www/default ,只要把 .NET Web 程序放在这里面就行了。经过下面的配置,会把默认网站目录更改为 /data/www/aspnet/default

 

接下来我们将 Jexus 设置为开机启动,再进行一些配置:

chmod -R 755 /usr/local/jexus

sed -i 's@^root.*@root=/ /data/www/aspnet/default@' /usr/local/jexus/siteconf/default
#把默认网站目录修改为 /data/www/aspnet/default
sed -i 's@^# indexes.*@indexes=index.aspx,default.aspx,index.html,default.html@' /usr/local/jexus/siteconf/default
#设置默认文件
sed -i 's@^# UseGZIP=true@UseGZIP=true@' /usr/local/jexus/siteconf/default
#为网站开启gzip压缩

groupadd jexus
useradd -g jexus -s /sbin/nologin jexus
#为Jexus添加用户

mkdir -p /data/www/aspnet/default
chmod -R 755 /data/www/aspnet
chown -R jexus:jexus /data/www/aspnet
sed -i 's@^# httpd.User=www-data@httpd.User=jexus@' /usr/local/jexus/jws.conf
#让Jexus的工作进程和网站工作于指定的用户权限(身份)下

echo /usr/jexus/jws start >> /etc/rc.local
#设定开机启动
#请确认系统中没有把其他占用80端口的 Web 服务器设置为开机启动

ln -s /usr/local/jexus/jws /usr/bin/jws
sed -i 's@^JWS_HOME=.*@JWS_HOME=/usr/local/jexus@' /usr/local/jexus/jws
#为jws创建软链接,注意这里修改了jws文件,否则软链接无效

ln -s /usr/local/jexus/log /var/log/jexus
#日志软链接

sed -i 's@^# export MONO_IOMAP="all"@export MONO_IOMAP="all"@' /usr/local/jexus/jws
#使Jexus不区分文件大小写

jws start
#启动Jexus

 

值得注意的是多站点的配置,以下节选 Jexus 中 README 部分:

Jexus 支持多站点,可以用不同的端口、域名、虚拟路径设置任意多的网站。

必须把所有网站配置文件放到 jws.conf 指定的网站配置文件夹内(这个文件夹常常是 jws 工作目录内的 siteconf 文件夹),这个文件夹除了网站配置文件,不能有其它任何文件,因为 Jexus 会认为这儿的任何一个文件都代表着一个不同的网站。

每个网站有且只有一个配置文件,配置文件的文件名就是这个网站的名称,比如 www.mysite.cn 这个网站,配置文件名可以写成 mysite ,当然也可以写成其它文件名,以便管理员容易记忆和识别,但要特别注意:文件名不能有空格!

一个网站可以拥有任意多的域名,不同网站不能有相同的域名,没有域名的网站只能有一个,这个没有域名的网站叫做“默认网站”,而一台服务器最多只能有一个默认网站。

*** 再次强调:

1、网站配置文件的文件名不能有空格;

2、网站配置文件夹中只能有网站配置文件,不能有其它文件文件存在。

 

安装完成了,现在就可以在 Linux 上使用 .NET 了。

PS:如果要升级 Jexus,只需要在下载的新版本文件夹中运行 ./upgrade /usr/local/jexus 就好了,./upgrade 后面跟的是原本 Jexus 的安装目录。注意要是建立了软链接,记得执行 sed -i 's@^JWS_HOME=.*@JWS_HOME=/usr/local/jexus@' /usr/local/jexus/jws 使软链接生效。


原创文章,转载请以链接形式注明出处:http://blog.ttionya.com/article-1030.html