推崇开源系统的原因很简单,就是降低企业级系统的入门门槛。Linux也好,FreeBSD也好,Mono也好,都是这个原因。多一个选择没有什么不好,毕竟还没有挑花眼…
推崇FreeBSD而不是Linux的原因也很简单,Linux有很多种,而FreeBSD只有一种,恐怕不会有人问“我的程序可以在哪一种FreeBSD上面运行”!
mono作为.net的一个开源实现,可以很好的在某种程度上替换微软的平台,FreeBSD也是这样。那么在FreeBSD上面运行mono也就更加意义非凡…
继续保持关注……
FreeBSD 5.3发布了,可以在新的平台上测试mono了。于是就把原来的文章续出来了一个(5)。
这次让我比较兴奋前面都成功了
mono通过ports就可以编译
xsp也可以编译了
只不过需要gmake替代make就可以了
引用:
./configure –prefix=/usr
gmake
gmake install
测试静态页面还是没有问题的。
但是测试它的名为test的ASP.NET应用就出了问题。前一段时间听说是因为线程库的问题,看来是真的了。
引用:
fd53# mono /usr/local/bin/xsp.exe –port 80
Adding applications ‘/:.’…
Registering application:
Host: any
Port: any
Virtual path: /
Physical path: /root/xsp-1.0
Listening on port: 80
Listening on address: 0.0.0.0
Root directory: /root/xsp-1.0
Hit Return to stop the server.
Segmentation fault (core dumped)
Nov 15 15:17:57 fd53 kernel: pid 44678 (mono), uid 0: exited on signal 11 (core dumped)
Nov 15 15:24:33 fd53 kernel: pid 44701 (mono), uid 0: exited on signal 11 (core dumped)
Unhandled Exception: System.IO.FileNotFoundException: Could not find file "[Unkown]" in <0x00076> System.IO.FileStream:WriteInternal (byte[],int,int)
in <0x00073> (wrapper remoting-invoke-with-check)System.IO.FileStream:WriteIntrnal (byte[],int,int)
in <0x00198> System.IO.FileStream:Write (byte[],int,int)
in <0x0006c> System.IO.StreamWriter:FlushBytes ()
in <0x0004f> (wrapper remoting-invoke-with-check) System.IO.StreamWriter:FlushB
tes ()
in <0x00055> System.IO.StreamWriter:Flush ()
in <0x00088> System.IO.StreamWriter:Write(string)
in <0x00032> System.IO.SynchronizedWriter:Write (string)
in <0x00012> System.Console:Write (string)
in <0x0004c> Mono.CSharp.Driver:Main (string[])
终于狠下心来将那块SCSI的硬盘取下,为了mono~~~~~~
取下来硬盘之后,立刻就可以安装FreeBSD5.2.1了。
现阶段已经发布的最新的FreeBSD版本4.10和5.2.1都不能正常安装mono-1.0的ports。
据mono的ports的制作人讲mono的ports在4.10上不能安装是因为libc里面有一个死锁错误,导致在安装dll的时候随机性的死锁。
而mono还不支持在5.2.1上面安装,是因为mono需要的一个内核特性5.2.1还没有。
这样如果安装mono的ports需要升级成5.2-current。根据我的经验,升级后使用ports安装没有任何问题。
下面在安装xsp和mod_mono的时候预见的问题比较大:
xsp不能正确地make。
而mod_mono可以正常编译安装,但是ModMono.dll却不能正常编译。
在mono实现的ASP.NET的方案当中,xsp和ModMono.dll起着很重要的角色,就是起到真正运行一切ASP.NET程序的作用,而mod_mono只在apache当中拦截所有的被看作到ASP.NET请求,转发至ModMono.dll或者xsp去。
接下来要解决的就是正确编译xsp或者modmono.dll,我想我要解决这个问题,还是先从make文件如何编写入手,或者你们谁给我一个编译好的?
昨天,将前次安装的mono-1.0又重新作了编译,问题依旧。于是又用ports编译了mono-0.97。但是仍然不能顺利安装。问题是相同的:在向GAC里面安装各种动态链接库的时候!
我自己手动编译的mono在安装第一个dll的时候就出现了问题,ports编译的mono-0.97安装dll出问题的点是随机的。
我自己手动编译的mono在安装dll时候,有2个ltmono进程,而且总是处于poll状态。ports编译的mono-0.97安装dll的时候,只有一个mono进程,并且是RUN状态,CPU占用率也很高(最高到99%),但是很长时间(6个小时左右)没有反应,但是可以用Ctrl+C中断。
在mono社区 里面也看到有人报告mono官方发布的给FedoraCore2的安装rpm不能安装。google上面显示的资源也给人感觉mono并没有让dotNET的开发人员有太强列的兴趣,而开源社区的人对dotNET也没有太大的兴趣。
这次使用之后可能要间隔一段时间,才能在进行更深一步的测试了。时间大约是在周末。
家里买了一个宽带路由器,原来的代理服务器被我格了,配好宽带路由器上的虚拟服务器(NAT端口转发),咱们也来感觉一下在家托管。对了,还有动态域名。前两天看有人问luyan,他的花生壳是怎么装到Linux上去的,有人估计是在Linux上装虚拟机了,咱们不那么搞,咱们找一个支持FreeBSD的免费动态域名就好。首先声明:我不是在做广告——我用的是科迈的动态域名,感觉还不错,最关键的是免费而且支持FreeBSD。
言归正传:开始安装FreeBSD。
先说我的机器的配置,我的主板是QDI的工作站主板,694x芯片组,集成ATI RageMobile显卡,Intel百兆网卡,和一个双通道160兆的SCSI控制器。我装了一个PIII 766铜矿CPU,256Mb PC133内存,一个雅马哈724声卡,以及一块8139网卡。两块一盘,一块Seagate 18G SCSI硬盘,一块Seagate20G IDE硬盘。由于现在FreeBSD 5 的BootCD有问题,FreeBSD 5的光盘没办法在这个机器上启动,又没有软驱,所以选择装FreeBSD 4.10。
我把18G的SCSI硬盘作为主盘,20G的IDE硬盘作为/ftp挂点,准备将来提供FTP服务之用。我选择的是X+Developer安装,这样会把必要的编译工具和X都安装到机器上面,以便测试Windows App之用。我选的Windows Manager是KDE,没有装中文的环境,上中文的网站字体会比较乱,但是这还不是咱们的主要工作,所以忽略。第一次运行KDE的时候,会提示检测到有声卡(我单插的雅马哈724),但是没有驱动没办法工作,由于和前面同样的理由,也忽略。之后,可以安装cvsup,到cvsup.freebsdchina.org 去升级ports,这样安装操作系统的工作基本完成。
这个时候我们开始检查ports树,在/usr/ports/lang 下面可以找到mono这个目录,阅读里面的说明,可以得知这个ports还是仍然是为mono-0.97制作的。这样我们得自己编译mono-1.0,当然我们自己也可以制作ports,但是这个不是我们这篇文章的目的。mono的源码可以去他的mono-project网站下载。在正式编译mono之前还要检查一下系统内的几个库是否安装了,比如bison,glib和icu2。由于我们安装了X,以及KDE,这样glib就已经装好了。安装其他的应用或库,可能会依赖bison,所以之前要检查ports记录,可以用pkg_list命令。安装这些可以用ports直接安装,如果你的机器在网上建议直接在ports所在的目录make install,除非没连到互联网的时候再用网站上编译好的packages。bsion、glib、icu2都在/usr/ports/devel目录。
icu是ibm的一个unicode处理的库,我以前也没接触过,仔细观察了它的编译过程,发现里面还带有各个国家和公司的不同字符编码码表,以及到unicode的映射关系表,以方便不同的编码作相互转换。FreeBSD的ports中带有两个icu,一个是icu,一个是icu2。我们使用icu2。icu2的安装需要自己下载源码,这可能是因为ibm的发布许可不允许第三方发布吧!下载地址
这些mono依赖的部件都安装好之后,我们就可以开始编译了。解压生成mono-1.0这个目录。进入这个目录,根据文档得知,直接使用./configure就可以将代码进行编译前的配置。我们也可以使用./configure -h来查看这个脚本可以带的参数,也可以检查configure默认的设置,其中prefix是默认的安装目录。我们看到prefix的默认值是/usr/local,这个目录正好是FreeBSD里面ports安装的默认路径,所以我们不需要做什么修改,直接使用./configure。在这个脚本结束之后,会显示配置的结果。主要内容好像是虚拟机在单进程内执行,支持JIT,多语言支持使用的是icu2.8。
之后可以直接make,若干分钟以后(我的机器大约是半个小时不到),就可以编译成功。比自己编译JDK快多了。之后可以make check验证一下编译结果,也可以直接make install。我的make install在最后一个生成MONO_PATH的时候停住了,我睡了一觉早上看还是停在那里没有动,估计是有什么问题,早上上班没时间管,晚上再看看吧!
(持续)
在看了luyan的linux上使用mono的文章,我就开始心痒痒,mono也可以在FreeBSD上面用啊!
这里的朋友应该没几个不知道Linux的,但是对FreeBSD很了解的就不多了。FreeBSD是以BSD4为基础发展起来一个开源的Unix操作系统,使用BSD许可发布。BSD发布许可的内容很简单,就是:可以以任何方式来使用FreeBSD的源码和二进制程序,使用的时候只需声明代码来自FreeBSD。这样使用这个发布许可,你就可以在自己的代码任意使用FreeBSD的代码,而不用交费或者继续开源。这很有一点教科书的意味,恐怕没有谁为教科书上的知识而付过任何费用或者为此而不能申请自己的专利或者版权。
FreeBSD以及整个BSD系列的开源操作系统的风格也同样非常学院派。系统追求稳定可靠的同时,不断改进,对于软件包的发布集中控制。这样在FreeBSD的世界里面,不会有一个软件包会针对不同的FreeBSD版本发布很多个,因为FreeBSD只有一个发布人——就是FreeBSD的发布小组。
FreeBSD内建了很多令人瞠目结舌的机制。最醒目的是一个内置的操作系统模拟器,在这里面可以模拟linux、novell等等i386上面的操作系统,像Linux下面的二进制格式软件(jdk,oracle8/9)几乎都可以直接运行在FreeBSD当中。
由于FreeBSD的这些优秀特性,FreeBSD已经被很多大型企业用于各自的生产环境当中,很多网络设备的嵌入式系统也有FreeBSD的影子。同时FreeBSD也是微软认同的开源操作系统之一,早在2000年,FreeBSD就已经是微软 CLI 1.0 跨平台运行环境示范平台之一。
上面介绍完了FreeBSD,接着说说在FreeBSD上面实现mono和ASP.Net的事情。
我首先查阅了FreeBSD的ports列表,这里面显示ports安装只支持mono-0.97,也不支持mod_mono,看来只好自己安装了。
首先去http://www.mono-project.com下载mono1.0的源码,准备编译。
近期评论