linux ubuntu安装 mono,在 Ubuntu Server 上安装配置 Mono 生产环境
在 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 生产环境相关推荐
- ppa java 8_通过 ppa 在ubuntu server 上安装java 8
第一步:使用ppa/源方式安装,安装ppa sudo add-apt-repository ppa:webupd8team/java sudo apt-get update 第二步:安装 oracle ...
- WIN10系统安装Ubuntu子系统并在此基础上安装ncl
WIN10系统安装Ubuntu子系统并在此基础上安装ncl Windows10系统安装Ubuntu子系统 在安装了Windows10的基础上,如何安装Ubuntu子系统?网上已经有很多关于如何下载安装 ...
- 在 Ubuntu 20.04 LTS 桌面版上安装 MS 字体
在 Ubuntu 18.04 LTS 桌面版上安装 MS 字体 如下所示安装 MS TrueType 字体: $ sudo apt update $ sudo apt install ttf-msco ...
- 如何在安装了Windows操作系统的电脑上安装Linux操作系统
[原创]如何在安装了Windows操作系统的电脑上安装Linux操作系统 一.不得不知道的一件事 相信中国大多数个人用的电脑在买回来时已经 安装了Windows,并且大家习惯了用Windows,而且有 ...
- Ubuntu上sublime配置nodejs运行环境
Ubuntu上sublime配置nodejs运行环境 如果阅读无障碍的话可以直接查看https://packagecontrol.io/packages/Nodejs上面说的很详细 如果不想看的话, ...
- Red Hat Enterprise 5 server 上安装 memcached 的问题记录
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
- 在安装了Sql2000的基础上安装Sql2005的详细过程
在安装了Sql2000的基础上安装Sql2005的详细过程 2008-09-04 19:10 在安装了Sql2000的基础上安装Sql2005的详细过程 Sql2005版本:Sql2005开发版,两张 ...
- Docker-Compose简介与Ubuntu Server 上安装Compose
Compose简介 Compose是Docker官方的开源项目,负责对Docker容器集群的快速编排. Compose是定义和运行多个Docker容器的应用. 举例来说: 一个项目除了Tomcat容器 ...
- firewallD卸载Linux,在Ubuntu 18.04/16.04系统上安装和使用Firewalld的方法
本文介绍Firewalld在Ubuntu 18.04或Ubuntu 16.04发行版上的安装方法及基本用法. 简介 Firewalld是Linux防火墙管理工具,支持IPv4.IPv6.以太网桥和IP ...
最新文章
- oracle自动还原,什么是oracle自动恢复操作
- 为什么每个请求都要有用户名密码呢,那不是每次都要查询一下了,token,表示这个用户已经验证通过了,在token有效期内,只需要判断token是否有效就可以了...
- linux守护进程fifo,linux守护进程配置文件
- 推动IT转型的三大法宝
- Docker实战(精简版本)
- -ia utopia 里的乌托邦
- VMD如何确定分解层数(一):最优变分模态分解(OVMD)---VMD分解的基础上确定分解层数和更新步长
- Vue番外之循环数组从指定下标开始
- 春松客服:一个开源的智能客服系统
- Oracle数据库字段翻译
- 在word中写出打勾的方框
- stm32f105vct6例程_STM32F105VCT6_USB_TEST
- java rmi tcp_Tomcat启动失败报错[RMI TCP Connection(4)-127.0.0.1] [RMI TCP Connection(3)-127.0.0.1]...
- 两部委联合叫停“基因测序”体检
- 大数据是如何定义,多大的数据是大数据?
- HIVE常用命令之MSCK REPAIR TABLE命令简述
- IOS越狱相关-2017
- ptr *ptr 关系_如何在PTR服务器上试用新的《守望先锋》英雄
- Deep Decentralized Multi-task Multi-Agent Reinforcement Learning under Partial Observability
- 华硕X550C系列安装ubuntu后wifi显示被硬件禁用的解决方法
热门文章
- python cmp函数未定义_python用plt画图时,cmp设置方法
- cad多个窗口并排显示_你早该这么做!并排查看Excel工作表其实一个小动作就搞定!...
- linux函数进程撤销,Linux进程控制函数
- ElasticSearch 核心概念介绍_02
- elasticsearch-7.15.2 同时支持中文ik分词器和pinyin分词器
- 使用IntelliJ IDEA 2019.3.2 x64 远程连接oracle数据库
- 网络发现协议服务器,关于 DHCP 服务器和网络发现
- 关于解决jdbc版本错误问题
- C语言 void 指针 - C语言零基础入门教程
- java $1参数_jmap命令详解----查看JVM内存使用详情