您的位置:首页 > 运维架构 > Linux

linux上支持.NET,一次艰难的配置mono过程 推荐

2007-07-03 14:18 591 查看
由于有ASP.NET的页面要放到linux上面,这还满新鲜的,以前没搞过,说是要装mono.装起来没想到这么麻烦,用了一天半的时间.以下就是整个过程,其中很大的篇幅是失败时的调试信息,很希望谁能帮我分析一下

环境[/b]:[/b]
redhat9,apache2,mysql5,php5
已经配了PHP环境,并能正常工作.

安装过程[/b]:[/b]
保险起见,安装过程中停掉了apache,mysql,所装版本是1.2.4,用rpm安装
1.[/b]首先安装[/b]mono[/b]的[/b]rpm[/b]包[/b][/b]
用rpm–vih*.rpm时停住不动,估计是要加—nodeps
所以用如下的顺序一个一个装
[align=left]libgdiplus[/align]
[align=left]mono-core[/align]
[align=left]mono-data[/align]
[align=left]mono-data-firebird[/align]
[align=left]mono-data-oracle[/align]
[align=left]mono-data-postgresql[/align]
[align=left]mono-data-sqlite[/align]
[align=left]mono-data-sybase[/align]
[align=left]ibm-data-db2[/align]
[align=left]mono-nunit[/align]
[align=left]mono-locale-extras[/align]
[align=left]rpm-ivhmono-web-1.2.4-3.novell.i586.rpm–nodeps[/align]
[align=left]//这个和下面的winforms相互依赖,实在不行,所以加上了—nodeps参数[/align]
[align=left]rpm-ivhmono-winforms-1.2.4-3.novell.i586.rpm[/align]
[align=left]rpm-ivhmono-devel-1.2.4-3.novell.i586.rpm[/align]
[align=left]rpm-ivhmono-extras-1.2.4-3.novell.i586.rpm[/align]
[align=left]rpm-ivhmono-jscript-1.2.4-3.novell.i586.rpm[/align]
[align=left]rpm-ivhmono-basic-1.2.4-0.novell.noarch.rpm[/align]
[align=left]rpm-ivhbytefx-data-mysql-1.2.4-3.novell.i586.rpm[/align]
rpm-ivhmono-complete-1.2.4-3.novell.i586.rpm

2.[/b]然后装xsp/mod_mono[/b]
(下载页面http://www.go-mono.com/download-stable/redhat-9-i386上面并没有单独的mod_mono的rpm包下载,将这两个软件写在了一起)所以应该是包含在一起了
rpm-ivhxsp-1.2.4-0.novell.noarch.rpm
[align=left]注:[/align]
[align=left]rpm安装的XSP的目录结构[/align]
[align=left]/usr/bin/xsp[/align]
[align=left]/usr/lib/mono/gac/xsp[/align]
[align=left]/usr/lib/xsp[/align]
[align=left]/usr/share/doc/packages/xsp[/align]
[align=left]rpm安装mono的目录结构[/align]
[align=left]/etc/mono[/align]
[align=left]/usr/bin/mono[/align]
[align=left]/usr/lib/mono[/align]
[align=left]/usr/share/mono-1.0/mono[/align]
[align=left]/usr/include/mono-1.0/mono[/align]
[align=left]/usr/lib/xsp/test测试目录[/align]
[align=left][/align]
不知道如何修改httpd.conf,因为mod_mono的库文件不知道装哪了,找不到
所以改用源码安装mod_mono,修改了httpd.conf用IE访问测试页面报错
[align=left]ServiceTemporarilyUnavailable[/align]
Theserveristemporarilyunabletoserviceyourrequestduetomaintenancedowntimeorcapacityproblems.Pleasetryagainlater.
[align=left]--------------------------------------------------------------------------------[/align]
Apache/2.0.54(Unix)mod_ssl/2.0.54OpenSSL/0.9.7amod_mono/1.2.4PHP/5.0.4Serverat192.168.0.111Port80
IE的标题栏显示503错误
没找到解决办法,此时参考到http://www.xiaojb.com/archives/it/mono.shtml里面写的”第一次[/b]mono[/b]和[/b]xsp[/b]都放到了[/b]usr[/b]以外的地方,结果[/b]apache[/b]报[/b]503[/b]的临时错误。估计是路径的问题,重新编译后就好了。[/b]”

参考这篇文章采用源码安装[/b],版本也用比较低的,恰好我的apache的安装路径和文章中的一样为/usr/local/apache2/,源码下载路径:http://go-mono.com/sources-maintenance/

1.[/b]首先安装[/b]libgdiplus-1.1.13.6[/b],但是报错要装glib-2.4.0,装了glib以后make仍然报错
[align=left]./configue正常,输出为:[/align]
[align=left]……前面省略[/align]
[align=left]cairowillbecompiledwiththefollowingsurfacebackends:[/align]
[align=left]Xlib:yes[/align]
[align=left]Quartz:no[/align]
[align=left]XCB:no[/align]
[align=left]Win32:no[/align]
[align=left]PostScript:no[/align]
[align=left]PDF:no[/align]
[align=left]glitz:no[/align]
[align=left][/align]
[align=left]thefollowingfontbackends:[/align]
[align=left]FreeType:yes[/align]
[align=left]Win32:no[/align]
[align=left]ATSUI:no[/align]
[align=left][/align]
[align=left]andthefollowingfeatures:[/align]
[align=left]PNGfunctions:yes[/align]
[align=left]---[/align]
[align=left]Configurationsummary[/align]
[align=left][/align]
[align=left]*Installationprefix=/usr/local[/align]
[align=left]*Codecssupported:[/align]
[align=left][/align]
[align=left]-TIFF:yes[/align]
[align=left]-JPEG:yes[/align]
[align=left]-GIF:yes[/align]
[align=left]-PNG:yes[/align]
[align=left][/align]
[align=left]NOTE:ifanyoftheabovesay'no'youmayinstallthe[/align]
[align=left]correspondingdevelopmentpackagesforthem,rerun[/align]
[align=left]autogen.shtoincludetheminthebuild.[/align]
[align=left][/align]
make报错信息为
……前面省略
[align=left]nfileincludedfrom../cairo/src/cairo-ft.h:47,[/align]
[align=left]fromgdip.h:38,[/align]
[align=left]fromadjustablearrowcap.c:27:[/align]
[align=left]/usr/include/ft2build.h:55:38:freetype/config/ftheader.h:Nosuchfileordirectory[/align]
[align=left]Infileincludedfromgdip.h:38,[/align]
[align=left]fromadjustablearrowcap.c:27:[/align]
[align=left]../cairo/src/cairo-ft.h:48:10:#includeexpects"FILENAME"or<FILENAME>[/align]
[align=left]Infileincludedfromgdip.h:38,[/align]
[align=left]fromadjustablearrowcap.c:27:[/align]
[align=left]../cairo/src/cairo-ft.h:60:parseerrorbefore"face"[/align]
[align=left]../cairo/src/cairo-ft.h:64:parseerrorbefore"cairo_ft_scaled_font_lock_face"[/align]
[align=left]cc1:warningsbeingtreatedaserrors[/align]
[align=left]../cairo/src/cairo-ft.h:64:warning:typedefaultsto`int'indeclarationof`cairo_ft_scaled_font_lock_face'[/align]
[align=left]../cairo/src/cairo-ft.h:64:warning:datadefinitionhasnotypeorstorageclass[/align]
[align=left]adjustablearrowcap.c:Infunction`gdip_adjust_arrowcap_clone_cap':[/align]
[align=left]adjustablearrowcap.c:75:warning:implicitdeclarationoffunction`memcpy'[/align]
[align=left]make[2]:***[adjustablearrowcap.lo]Error1[/align]
[align=left]make[2]:Leavingdirectory`/home/yahoon/mono/libgdiplus-1.1.13.6/src'[/align]
[align=left]make[1]:***[all-recursive]Error1[/align]
[align=left]make[1]:Leavingdirectory`/home/yahoon/mono/libgdiplus-1.1.13.6'[/align]
[align=left]make:***[all]Error2[/align]
查了好像与freetype有关,libgdiplus包里面还有一个cairo文件夹,它的安装说明提示要装freetype-2.1.4但是用src.rpm装freetype-2.1.4提示要symlinks,源码装又报错…受不了放弃了.还是回头用rpm把这个libgdiplus装好(很奇怪这样安装整个过程没报错)

2.装mono[/b]
解压mono-1.1.13.8.2.tar.gz
然后到目录下执行
./configure--prefix=/usr
make
makeinstall

装这个要很长时间

3.装mod_mono[/b]
在其README里面写到”mod_monoisanapachemodulethatprovidesASP.NETfunctionality.知道它就是给提供ASP.NET支持的apche模块.
解压缩mod_mono-1.1.13.5.tar.gz
[align=left]./configure--with-apxs=/usr/local/apache2/bin/apxs[/align]
[align=left]make[/align]
makeinstall

4.安装xsp[/b]
解压缩xsp-1.1.13.7.tar.gz
[align=left]./configure--prefix=/usr[/align]
[align=left]make[/align]
makeinstall

按照那篇文章里面讲的,修改httpd.conf配置文件
cd/usr/local/apache2/conf
mod_mono.conf已经存在了,只需要包含到httpd.conf里边就可以了
httpd.conf中加入
Include/usr/local/apache2/conf/mod_mono.conf
Alias/test"/usr/lib/xsp/test"
AddMonoApplicationsdefault"/test:/usr/lib/xsp/test"
SetHandlermono
AllowOverrideNone
Orderallow,deny
Allowfromall

检查语法是否有错
/usr/local/apache2/bin/apachectlconfigtest


这个地方报语法错误.最后我把后面三行都注释掉了
#AllowOverrideNone
#Orderallow,deny
#Allowfromall
启动apache
/usr/local/apache2/bin/apachectlstart


打开IE进行测试,地址是http://服务器IP/test/index.aspx
会看到XSP的欢迎页面.

但是发现我原来的PHP不能访问了,打开时会弹出一个下载文件的对话框.
查看了mod_mono的INSTALL文件,修改httpd.conf时,需要在SetHandler子句前后加上一个判断,修改后为
Include/usr/local/apache2/conf/mod_mono.conf
Alias/test"/usr/lib/xsp/test"
AddMonoApplicationsdefault"/test:/usr/lib/xsp/test"

<Location/test>
SetHandlermono
#AllowOverrideNone
#Orderallow,deny
#Allowfromall
</Location>
这样就PHP和测试页面都正常了.

打开mod_mono.conf,看到里面的内容为,就知道mono支持的文件类型了.
<IfModule!mod_mono.c>
LoadModulemono_module/usr/local/apache2/modules/mod_mono.so

AddTypeapplication/x-asp-net.aspx
AddTypeapplication/x-asp-net.asmx
AddTypeapplication/x-asp-net.ashx
AddTypeapplication/x-asp-net.asax
AddTypeapplication/x-asp-net.ascx
AddTypeapplication/x-asp-net.soap
AddTypeapplication/x-asp-net.rem
AddTypeapplication/x-asp-net.axd
AddTypeapplication/x-asp-net.cs
AddTypeapplication/x-asp-net.config
AddTypeapplication/x-asp-net.Config
AddTypeapplication/x-asp-net.dll
DirectoryIndexindex.aspx
DirectoryIndexDefault.aspx
DirectoryIndexdefault.aspx
</IfModule>

将开发的源码文件放到/test:/usr/lib/xsp/test下,假设目录为/usr/lib/xsp/test/CLRate,其主页文件为Main.aspx,访问地址http://ip/test/CLRater/Main.aspx,奇怪的是此时报页面错误.没办法了,修改httpd.conf,将test虚拟目录直接指到这里
Include/usr/local/apache2/conf/mod_mono.conf
Alias/test"/usr/lib/xsp/test/CLRater"
AddMonoApplicationsdefault"/test:/usr/lib/xsp/test/CLRater"

<Location/test>
SetHandlermono
#AllowOverrideNone
#Orderallow,deny
#Allowfromall
</Location>
访问http://IP/test/Main.aspx正常显示
至于为什么报页面错误,还不知道是啥原因.

整个的安装过程就是这样,有点乱,因为是整个安装的过程确实比较”曲折”.其中很多的问题没解决.欢迎大家一起讨论,提出一些建议和方法.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  .net linux asp apache mono