在 Ubuntu Server 上安装配置 Mono 生产环境

在 Ubuntu Server 上安装和配置 Apache2 + Mono 生产环境的记录。 服务器环境是 Ubuntu Server 13.04 虚拟机模式 (Virtual Machine Mode), 安装的 Mono 的版本是 3.2.1 , 最终环境如下图所示:

准备编译环境

还是老话题, 先准备 GCC 编译环境, 这样才可以从源代码编译安装所需要的软件。 首先需要安装的是基本的编译工具, 只要输入下面的命令即可:

sudo apt-get install g++ gettext autoconf

接下来输入用户名和密码, 就可以自动安装必须的命令行编译工具了。

从源代码编译安装 libgdiplus

对于服务器来说, 主要运行 Apache、 ASP.Net、 Mvc 以及 WCF 等服务端程序, 一般不会运行图形界面, 因为图形界面会消耗额外的内存和处理器资源, 所以说 libgdiplus 不是必须安装的, 不过一个常见的场景是需要在服务端动态生成图片, 也会用到 libgdiplus , 因此 libgdiplus 还是推荐安装的。 如果服务器上不需要生成图片, 则可以不用安装 libgdiplus 。

先安装编译 libgdiplus 所需的依赖项, 输入下面的命令:

sudo apt-get install libglib2.0-dev libpng12-dev libexif-dev libx11-dev libfreetype6-dev libfontconfig1-dev libjpeg62-dev libgif-dev libxrender-dev

下载 libgdiplus 最新版的源代码:

wget https://download.mono-project.com/sources/libgdiplus/libgdiplus-2.10.9.tar.bz2

下载完成之后解压, 并且换到源代码的目录:

tar -jxvf libgdiplus-2.10.9.tar.bz2

cd libgdiplus-2.10.9

配置并检查 libgdiplus 的编译选项:

./configure

这是最关键的步骤, 如果 configure 命令中途出错, 则一般是缺少了某个依赖的库, 只要根据提示安装相应的依赖库就可以了, configure 命令运行结果如果如下图所示, 则表示可以进行下一步了:

上图中的配置结果不支持 tiff , 因为在服务端动态生成 tiff 图片的需求很小, 所以这个 tiff 可以直接忽略了, 如果需要生成 tiff, 只要安装 libtiff-dev 再次执行 configure 命令即可。

接下来接着输入下面的命令就可以编译并安装 libgdiplus 了:

make

sudo make install

常见问题:

如果在 make 的过程中出现类似如下错误:

Making all in pixman

make[4]: Entering directory `/usr/local/src/libgdiplus-2.10.9/pixman/pixman'

source='pixman-access.c' object='pixman-access.lo' libtool=yes \

DEPDIR=.deps depmode=none /bin/sh ../depcomp \

/bin/sh ../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -Wall -fvisibility=hidden -c -o pixman-access.lo pixman-access.c

../libtool: line 852: X--tag=CC: command not found

../libtool: line 885: libtool: ignoring unknown tag : command not found

../libtool: line 852: X--mode=compile: command not found

../libtool: line 1018: *** Warning: inferring the mode of operation is deprecated.: command not found

../libtool: line 1019: *** Future versions of Libtool will require --mode=MODE be specified.: command not found

../libtool: line 1162: Xgcc: command not found

../libtool: line 1162: X-DHAVE_CONFIG_H: command not found

../libtool: line 1162: X-I.: command not found

../libtool: line 1162: X-I..: command not found

../libtool: line 1162: X-g: command not found

../libtool: line 1162: X-O2: command not found

../libtool: line 1162: X-Wall: command not found

../libtool: line 1162: X-fvisibility=hidden: command not found

../libtool: line 1162: X-c: command not found

../libtool: line 1214: Xpixman-access.lo: command not found

../libtool: line 1219: libtool: compile: cannot determine name of library object from `': command not found

make[4]: *** [pixman-access.lo] Error 1

make[4]: Leaving directory `/usr/local/src/libgdiplus-2.10.9/pixman/pixman'

make[3]: *** [all-recursive] Error 1

make[3]: Leaving directory `/usr/local/src/libgdiplus-2.10.9/pixman'

make[2]: *** [all] Error 2

解决方法是输入下面的命令, 然后再继续执行 make 命令:

export echo=echo

如果出现类似这样的错误:

/usr/lib64/libglib-2.0.so.0: could not read symbols: Invalid operation

collect2: error: ld returned 1 exit status

make[2]: *** [testgdi] Error 1

make[2]: Leaving directory `/usr/local/src/libgdiplus-2.10.9/tests'

make[1]: *** [all-recursive] Error 1

make[1]: Leaving directory `/usr/local/src/libgdiplus-2.10.9'

make: *** [all] Error 2

解决方法是:

先执行 ./configure 命令, 然后编辑 test/Makefile 文件;

将 130 行的 LIBS = -lpthread -lfontconfig 改为 ` LIBS = -lpthread -lfontconfig -lglib-2.0 -lX11`;

再次执行 make 命令即可。

最终, 在 make 命令执行成功之后, 在继续执行 sudo make install 命令进行安装。

从源代码编译安装 mono 、 xsp

安装好了 libgdiplus 之后, 接下来的 mono 和 xsp 就是一路顺风了, 只要简单的敲几行命令就可以了:

wget https://download.mono-project.com/sources/mono/mono-3.2.3.tar.bz2

tar -jxvf mono-3.2.3.tar.bz2

cd mono-3.2.3

make

sudo make install

wget https://download.mono-project.com/sources/xsp/xsp-2.10.2.tar.bz2

tar -jxvf xsp-2.10.2.tar.bz2

cd xsp-2.10.2.tar.bz2

make

sudo make install

执行上面的命令, 一般都不会出现什么错误了。 现在可以测试一下安装的 mono 和 xsp , 在终端输入:

mono --version

可以得到如下图的提示:

编译安装 xsp 之后, 会在 /usr/local/lib/xsp/test 目录下生成一个 .net 测试网站, 我们可以用这个测试站点来测试 mono + xsp 的安装, 输入下面的命令:

cd /usr/local/lib/xsp/test

ls

xsp

可以看到的命令行输出如下:

打开浏览器, 访问服务器的 8080 端口, 可以看到的如下的画面, 说明 mono + xsp 已经安装成功了。

安装 apache2 和 apache2-dev

前面已经安装好了 mono + xsp , 用来测试应用的话足够了, 但是不能做为服务器生产环境使用, 因此还需要继续安装 apache http server , 并将 mono 做为 apache 的模块挂载上去。 Apache http server 我们选择从 Ubuntu Server 的软件仓库中安装, 只要输入下面的命令即可:

sudo apt-get install apache2 apache2-prefork-dev apache2-threaded-dev

第一个软件包是 Apache Http 服务器, 另外两个是 Apache 的开发包, 接下来要安装的 mod_mono 依赖这两个开发包, 因此一并安装。

从源代码编译安装 mod_mono

现在, 安装 mod_mono 也是非常简单的:

wget https://origin-download.mono-project.com/sources/mod_mono/mod_mono-2.10.tar.bz2

tar -jxvf mod_mono-2.10.tar.bz2

cd mod_mono-2.10

./configure

make

sudo make install

这个一般也不会出现什么错误, 基本上都能正确安装。

配置 apache2 和 mod_mono

现在, 可以说万事具备, 只欠东风, 只要将 mod_mono 配置并加载到 apache 中就可以了, apache 在 Ubuntu Server 上的配置目录是 /etc/apache2 , 在编译安装 mod_mono 的时候, 已经将 mod_mono.conf 复制到这个目录了, 我们只要修改 apache2 的配置, 引用这个文件即可, /etc/apache2 的目录结构如下:

通过查看 /etc/apache2/apache2.conf 文件可以知道各个目录的含义, 只要在 /etc/apache2/mods_enabled 目录新建一个链接文件, 指向 /etc/apache2/mod_mono.conf 即可加载 mod_mono , 切换到 /etc/apache2/mods-enabled 目录, 输入下面的命令添加链接:

cd /etc/apache2/mod-enabled

sudo ln -s ../mod_mono.conf ./mod_mono.conf

现在输入 ls -l /etc/apache2/mods-enabled/mod_*.conf , 输出如下所示:

ls -l /etc/apache2/mods-enabled/mod_*.conf

lrwxrwxrwx 1 root root 16 Sep 6 13:34 mod_mono.conf -> ../mod_mono.conf

看到有 mod_mono.conf -> ../mod_mono.conf 的输出提示, 说明链接链接已经做好了, 重启 Apache 服务就会加载 mod_mono 。

有兴趣的可以输入命令 more /etc/apache2/mod_mono.conf 查看一下这个文件的内容, 看是不是很熟悉的 aspx 、 asmx 、 ashx 等都出现了。

现在在默认站点下添加一个名为 MonoTest 的测试程序, 需要编辑 /etc/apache2/sites-available/default 文件, 在文件的最后, CustomLog 指令之前, 插入下面的配置:

Alias /MonoTest "/usr/local/lib/xsp/test"

MonoServerPath MonoTest "/usr/bin/mod-mono-server2"

MonoDebug MonoTest true

MonoSetEnv MonoTest MONO_IOMAP=all

MonoApplications MonoTest "/MonoTest:/usr/local/lib/xsp/test"

Allow from all

Order allow,deny

MonoSetServerAlias MonoTest

SetHandler mono

SetOutputFilter DEFLATE

SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png)$" no-gzip dont-vary

AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript

保存并关闭这个文件, 然后输入下面的命令重启 Apache2 服务:

sudo service apache2 restart

然后再次打开浏览器, 输入地址: https://server-name-or-address/MonoTest , 看到类似下面的画面就大功告成了:

当然, 一切只是个开始, 接下来将继续测试 ASP.Net MVC 、 EntityFramework 、 NHibernate 等常用组件在 Mono 上的表现。

参考资料

linux ubuntu安装 mono,在 Ubuntu Server 上安装配置 Mono 生产环境相关推荐

  1. ppa java 8_通过 ppa 在ubuntu server 上安装java 8

    第一步:使用ppa/源方式安装,安装ppa sudo add-apt-repository ppa:webupd8team/java sudo apt-get update 第二步:安装 oracle ...

  2. WIN10系统安装Ubuntu子系统并在此基础上安装ncl

    WIN10系统安装Ubuntu子系统并在此基础上安装ncl Windows10系统安装Ubuntu子系统 在安装了Windows10的基础上,如何安装Ubuntu子系统?网上已经有很多关于如何下载安装 ...

  3. 在 Ubuntu 20.04 LTS 桌面版上安装 MS 字体

    在 Ubuntu 18.04 LTS 桌面版上安装 MS 字体 如下所示安装 MS TrueType 字体: $ sudo apt update $ sudo apt install ttf-msco ...

  4. 如何在安装了Windows操作系统的电脑上安装Linux操作系统

    [原创]如何在安装了Windows操作系统的电脑上安装Linux操作系统 一.不得不知道的一件事 相信中国大多数个人用的电脑在买回来时已经 安装了Windows,并且大家习惯了用Windows,而且有 ...

  5. Ubuntu上sublime配置nodejs运行环境

    Ubuntu上sublime配置nodejs运行环境 如果阅读无障碍的话可以直接查看https://packagecontrol.io/packages/Nodejs上面说的很详细 如果不想看的话, ...

  6. Red Hat Enterprise 5 server 上安装 memcached 的问题记录

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  7. 在安装了Sql2000的基础上安装Sql2005的详细过程

    在安装了Sql2000的基础上安装Sql2005的详细过程 2008-09-04 19:10 在安装了Sql2000的基础上安装Sql2005的详细过程 Sql2005版本:Sql2005开发版,两张 ...

  8. Docker-Compose简介与Ubuntu Server 上安装Compose

    Compose简介 Compose是Docker官方的开源项目,负责对Docker容器集群的快速编排. Compose是定义和运行多个Docker容器的应用. 举例来说: 一个项目除了Tomcat容器 ...

  9. firewallD卸载Linux,在Ubuntu 18.04/16.04系统上安装和使用Firewalld的方法

    本文介绍Firewalld在Ubuntu 18.04或Ubuntu 16.04发行版上的安装方法及基本用法. 简介 Firewalld是Linux防火墙管理工具,支持IPv4.IPv6.以太网桥和IP ...

最新文章

  1. oracle自动还原,什么是oracle自动恢复操作
  2. 为什么每个请求都要有用户名密码呢,那不是每次都要查询一下了,token,表示这个用户已经验证通过了,在token有效期内,只需要判断token是否有效就可以了...
  3. linux守护进程fifo,linux守护进程配置文件
  4. 推动IT转型的三大法宝
  5. Docker实战(精简版本)
  6. -ia utopia 里的乌托邦
  7. VMD如何确定分解层数(一):最优变分模态分解(OVMD)---VMD分解的基础上确定分解层数和更新步长
  8. Vue番外之循环数组从指定下标开始
  9. 春松客服:一个开源的智能客服系统
  10. Oracle数据库字段翻译
  11. 在word中写出打勾的方框
  12. stm32f105vct6例程_STM32F105VCT6_USB_TEST
  13. java rmi tcp_Tomcat启动失败报错[RMI TCP Connection(4)-127.0.0.1] [RMI TCP Connection(3)-127.0.0.1]...
  14. 两部委联合叫停“基因测序”体检
  15. 大数据是如何定义,多大的数据是大数据?
  16. HIVE常用命令之MSCK REPAIR TABLE命令简述
  17. IOS越狱相关-2017
  18. ptr *ptr 关系_如何在PTR服务器上试用新的《守望先锋》英雄
  19. Deep Decentralized Multi-task Multi-Agent Reinforcement Learning under Partial Observability
  20. 华硕X550C系列安装ubuntu后wifi显示被硬件禁用的解决方法

热门文章

  1. python cmp函数未定义_python用plt画图时,cmp设置方法
  2. cad多个窗口并排显示_你早该这么做!并排查看Excel工作表其实一个小动作就搞定!...
  3. linux函数进程撤销,Linux进程控制函数
  4. ElasticSearch 核心概念介绍_02
  5. elasticsearch-7.15.2 同时支持中文ik分词器和pinyin分词器
  6. 使用IntelliJ IDEA 2019.3.2 x64 远程连接oracle数据库
  7. 网络发现协议服务器,关于 DHCP 服务器和网络发现
  8. 关于解决jdbc版本错误问题
  9. C语言 void 指针 - C语言零基础入门教程
  10. java $1参数_jmap命令详解----查看JVM内存使用详情