详解一次艰难的Mono开发环境的部署

开发 后端
今天我们将要分享本文作者的一次艰难经历,如何在Linux下部署Mono开发环境。中间遇到的问题,希望大家都能引以为戒。

现在总结一下我在suse 10中部署Mono开发环境遇到的一些问题及其处理办法。

腾讯社区开放平台提供的体验区的服务器环境是这样的:

操作系统:Linux version 2.6.16.60 (gcc version 4.1.2 20070115 (SUSE Linux))

这个Linux内核的版本号应该是SLES(SUSE Linux Enterprise Server 10 SP2)的操作系统。Mono原来的版本号是1.2.2,而我们需要2.8.2的Mono。所以,***步的工作就是升级Mono。

通过腾讯的跳板机登录到服务器后,需要跟腾讯的运维人员申请root权限,这个就不用多说了。

部署Mono开发环境的具体步骤如下:

1、下载Mono并上传到腾讯的服务器上。

腾讯的服务器是没有配置dns解析功能的,所以不能直接用yast2来通过更新源来升级Mono;对于可以用yast2安装的,可以参考我的《在openSUSE中部署基于apache的Mono环境》。而用rpm手工安装,太多的程序依赖处理起来很麻烦,只好用通过编译Mono源码的方式来安装了。

在这里可以下载到Mono的源码,我们只需要Mono-2.8.tar.bz2/xsp-2.8.tar.bz2/mod_Mono-2.8.tar.bz2。Mono-2.8.tar.bz2当然是Mono的核心了,xsp-2.8.tar.bz2是一个轻量级的web服务器,而mod_Mono-2.8.tar.bz2是apache的模块,使用这个来解析.net开发的网站。

上传文件到腾讯的服务器需要分2部走,首先用rz -be把文件上传到腾讯的跳板机,然后再用scp命令把文件传到目标服务器。

2、安装Mono-2.8.tar.bz2。

切换到Mono-2.8.bar.bz2的目录,执行

  1. tar xf Mono-2.8.tar.bz2 

解压Mono源码包。之后再

  1. cd Mono-2.8 

进入解压出来的文件夹后,执行配置命令,这里都使用默认配置,如果使用–prefix指定目录的话,需要修改很多配置,操作起来非常麻烦。

  1. ./configure 

之后就是最常规的

  1. make 

进入漫长的编译过程。中间过程如果出错,根据它的提示安装相当的文件。然后直接进行安装。

  1. make install 

到这里,Mono就安装完成了。这步非常简单。我走的弯路是腾讯要求要把软件都安装到/usr/local/services/目录,而Mono指定安装目录后,需要设置系统变量及在后面的软件安装过程都要显式的指定Mono目录,一直都没有折腾好,***只好使用默认安装,结果一次就好了。

3、安装xsp-2.8.tar.bz2。

一样解压文件并执行configure,

123 tar xf xsp-2.8.tar.bz2cd xsp-2.8./configure

到这里一直都是正确的,但是执行

  1. make 

的时候,就不能进行下去了。会有这样一个提示:

Your sqlite3 version is old – please upgrade to at least v3.5.0!

Unhandled Exception:System.EntryPointNotFoundException: sqlite3_next_stmt

…….

提示这个错误是因为linux本身的sqlite3版本号不够,默认的是3.1.3。你要么升级sqlite要么修改xsp的文件。查看xsp的安装文件发现是在编译xsp的demo文件时产生的错误。在$XSP_PATH/test/1.1/webcontrols目录下有dbpage1.aspx/dbpage1.sqlite/dbpage2.aspx/dbpage2.sqlite/dbpage_test_setup.cs这几个文件,错误就是在编译这些文件的时候产生的。于是我修改了这个目录下的Makefile/Makefile.am/Makefile.in这三个文件,把和sqlite有关的都删除掉了。

分别编辑这三个文件,找到:

  1. samples_Data = 

把这个值的

  1. dbpage1.aspx\  
  2. dbpage2.aspx\ 

把这两个删掉,还有:

  1. sqlitedir = $(pkglibdir)/test/1.1/webcontrols  
  2. sqlite_DATA = dbpage.sqlite \   
  3. dbpage2.sqlite   
  4. samplesbindir = ....  
  5. samplesbin_SCRIPTS = ...  
  6. dbpage_test_setup_build = ...  
  7. EXTRA_Dist = $(sqlite_DATA) ...  
  8. all: all-am  
  9.  

这些都删掉。在页面的底部还有:

1234 dbpage_test_setup.exe :$(dbpage_test_setup_build)....# ...... 一直到 ......dbpage2.sqlite: dbpage_test_setup.exe    $(RUNTIME) dbpage_test_setup.exe

全部都需要删掉。三个页面都执行这样的删除操作。删除完后,再make,就能成功编译了。完了再

  1. make install 

安装Mono最麻烦的问题就是这里编译出错。网上查这个编译错误,貌似很多人都有遇到,但是又都没有说怎么解决。期间我还尝试升级sqlite3,可是没有升级成功。***一个文件一个文件打开来看,才发现Makefile文件的秘密。主要是***次折腾linux系统,所以多走了很多弯路。

4、安装mod_Mono-2.8.tar.bz2。

安装这个也没有遇到什么问题,主要是如果你的apache文件不是安装在默认目录的,需要在configure命令时指定apache的bin目录。

5、都安装好后,剩下的就是配置apache了。

编辑$APACHE_PATH/conf/httpd.conf文件,增加一个配置:

  1. #Mono module  
  2. Include conf/mod_Mono.conf 

安装mod_Mono之后,这个mod_Mono.cnf是自动生成的,和apache的httpd.conf在相同的目录。

对于网站的配置,Mono的官方网站有一个mod_Mono的配置生成工具,建议使用里面的Virtual Host的方式来生成配置文件。它能帮我们生成这样的配置文件:

  1. <VirtualHost *:80>    
  2. ServerName mono.moozi.net    
  3. ServerAdmin moozi@moozi.net    
  4. DocumentRoot /srv/www/mono.moozi.net    
  5. # MonoServerPath can be changed to specify which version of ASP.NET is hosted    
  6. mod-mono-server1 = ASP.NET 1.1 / mod-mono-server2 = ASP.NET 2.0    
  7. # For SUSE Linux Enterprise Mono Extension, uncomment the line below:    
  8. # MonoServerPath mono.moozi.net "/opt/novell/mono/bin/mod-mono-server2"    
  9. # For Mono on openSUSE, uncomment the line below instead:    
  10. MonoServerPath mono.moozi.net "/usr/bin/mod-mono-server2"     
  11. # To obtain line numbers in stack traces you need to do two things:    
  12. # 1) Enable Debug code generation in your page by using the Debug="true"    
  13. #    page directive, or by setting <compilation debug="true" /> in the    
  14. #    application's Web.config    
  15. # 2) Uncomment the MonoDebug true directive below to enable mod_mono debugging    
  16. MonoDebug mono.moozi.net true     
  17.  
  18. # The MONO_IOMAP environment variable can be configured to provide platform abstraction    
  19. # for file access in Linux.  Valid values for MONO_IOMAP are:    
  20. #    case    
  21. #    drive    
  22. #    all    
  23. # Uncomment the line below to alter file access behavior for the configured application    
  24. MonoSetEnv mono.moozi.net MONO_IOMAP=all    
  25.  
  26. #    
  27. # Additional environtment variables can be set for this server instance using    
  28. # the MonoSetEnv directive.  MonoSetEnv takes a string of 'name=value' pairs    
  29. # separated by semicolons.  For instance, to enable platform abstraction *and*    
  30. # use Mono's old regular expression interpreter (which is slower, but has a  
  31. # shorter setup time), uncomment the line below instead:    
  32. # MonoSetEnv mono.moozi.net MONO_IOMAP=all;MONO_OLD_RX=1     
  33.  
  34. MonoApplications mono.moozi.net "/:/srv/www/mono.moozi.net"    
  35. <Location "/">      
  36. Allow from all      
  37. Order allow,deny      
  38. MonoSetServerAlias mono.moozi.net      
  39. SetHandler mono    
  40. </Location> 
  41. </VirtualHost>  

为了提高apache的处理性能,我们需要对这个配置再做一些修改,***的配置如下:

  1. <VirtualHost *:80>    
  2. ServerName mono.moozi.net    
  3. ServerAdmin mono@moozi.net    
  4. DocumentRoot /srv/www/mono.moozi.net/     
  5.  
  6. MonoServerPath mono.moozi.net "/usr/local/bin/mod-mono-server4" #这里我用.net 4.0    
  7. MonoDebug mono.moozi.net true    
  8. MonoSetEnv mono.moozi.net MONO_IOMAP=all      
  9.  MonoApplications mono.moozi.net  "/:/srv/www/mono.moozi.net/"    
  10. <Location "/">      
  11. Allow from all      
  12. Order allow,deny      
  13. MonoSetServerAlias mono.moozi.net      
  14. SetHandler mono    
  15. </Location>    
  16. <Location ~ "^/(styles|scripts|images)/">      
  17. SetHandler default-handler    
  18. </Location>    
  19. <Location ~ "^/[^/]+\.(txt|html|ico|js|css|jpg|jpeg|gif|png)">      
  20. SetHandler default-handler    
  21. </Location> 
  22. </VirtualHost>  

这里我们增加了两个<Location />配置节,让静态资源文件使用apache的默认handler处理。

***,重启apache就好了。

经过了近一周时间的折腾,终于成功地在腾讯社区开放平台部署好Mono环境。

我们的应用是腾讯社区开放平台的***.NET应用,测试了一下午,程序运行状态良好。从感官上来看,响应比IIS还快…当然,事实还有待于验证。

原文链接:http://www.cnblogs.com/moozi/archive/2011/01/26/1945754.html

【编辑推荐】

  1. 使用开源工具MonoDevelop开发GTK#图形界面
  2. 详解Mono 2.8上如何部署ASP.NET MVC 2框架
  3. 详解在Mono中如何创建ASP.NET程序
  4. Mono2.0发布 Linux下的.NET框架成熟吗?
  5. 讨论:Mono这只猴子招惹了谁? 
责任编辑:彭凡 来源: 博客园
相关推荐

2021-05-13 08:51:20

GC问题排查

2009-03-20 10:58:47

2011-06-28 10:41:50

DBA

2011-07-08 14:34:50

开发框架

2021-12-27 10:08:16

Python编程语言

2020-10-24 13:50:59

Python编程语言

2011-04-07 11:20:21

SQLServer

2017-07-10 07:55:50

虚拟化Windows IO云计算

2014-10-29 19:34:55

微软cocos2d-x触控科技

2021-11-01 17:29:02

Windows系统Fork

2012-08-28 09:21:59

Ajax查错经历Web

2009-08-03 10:11:44

JSP开发环境配置

2013-03-22 10:42:09

开发人员软件开发

2013-12-23 15:46:42

2013-05-13 11:35:53

独立开发开发经验开发感悟

2023-12-13 09:01:40

2022-03-23 15:43:26

Android客户端架构

2015-07-17 10:04:33

MKMapView优化

2018-01-15 14:50:49

APP转让App账号

2021-04-02 06:18:27

Docker镜像
点赞
收藏

51CTO技术栈公众号