很早之前就知道mono的大名了,但复杂的安装配置过程让人望而却步。由于最近开始考虑将公司的部分项目移植到Linux+mono上,因此进行了一些尝试,由于安装过程较长,可能以下步骤并非尽善尽美,望见谅:
相关网址:
ubuntu server 8.10: http://www.verycd.com/topics/422364/
mono源代码下载:http://ftp.novell.com/pub/mono/sources-stable/
参考:http://www.119797.com/howto/nginx-mono/
操作系统:ubuntu 8.10 server
mono :mono 2.01 mod_mono 2.0 xsp 2.0 gdiplus 2.0
终端软件:putty或Xmanager
1.安装ubuntu server 8.10
没什么好讲的,网上教程也很多,安装时选择LAMP。需要注意的是ubuntu server默认的root密码是随机的,在你使用安装时的用户登录后:
- xud@xd-mobi:~$ sudo passwd root
修改密码,以方便以后的使用
2.安装mono 2.01
首先检查安装必须的包:
- xud@xd-mobi:~$ sudo apt-get build-dep mono
注意:该过程可能会很长(呵呵,我的默认安装,好多没有啊...)
- xud@xd-mobi:~$ wget http://ftp.novell.com/pub/mono/sources/mono/mono-2.0.1.tar.bz2
- xud@xd-mobi:~$ tar -jvxf mono-2.0.1.tar.bz2
- xud@xd-mobi:~$ cd monbo-2.0.1
- xud@xd-mobi:~$ ./configure --prefix=/usr/local
- xud@xd-mobi:~$ make
- xud@xd-mobi:~$ sudo make install
- xud@xd-mobi:~$ mono --version
Mono JIT compiler version 2.0.1 (tarball)
Copyright (C) 2002-2008 Novell, Inc and Contributors. www.mono-project.com
TLS: __thread
GC: Included Boehm (with typed GC)
SIGSEGV: altstack
Notifications: epoll
Architecture: x86
Disabled: none
至此mono安装成功。
- xud@xd-mobi:~$ wget http://ftp.novell.com/pub/mono/sources/xsp/xsp-2.0.tar.bz2
- xud@xd-mobi:~$ tar -jvxf xsp-2.0.tar.bz2
- xud@xd-mobi:~$ cd xsp-2.0
- xud@xd-mobi:~$ ./configure
- xud@xd-mobi:~$ make
- xud@xd-mobi:~$ sudo make install
下载mod_mono源代码,减压、编译、安装
- xud@xd-mobi:~$ wget http://ftp.novell.com/pub/mono/sources/mod_mono/mod_mono-2.0.tar.bz2
- xud@xd-mobi:~$ tar -jvxf mod_mono-2.0.tar.bz2
- xud@xd-mobi:~$ cd mod_mono-2.0
- xud@xd-mobi:~$ ./configure
- xud@xd-mobi:~$ make
- xud@xd-mobi:~$ sudo make install
注意:在ubuntu默认安装时,会因缺少包而无法编译,请核对所缺的包,并实用sudo apt-get后再继续编译。
- xud@xd-mobi:~$ wget http://ftp.novell.com/pub/mono/sources/libgdiplus/libgdiplus-2.0.tar.bz2
- xud@xd-mobi:~$ tar -jvxf libgdiplus-2.0.tar.bz2
- xud@xd-mobi:~$ cd libgdiplus-2.0
- xud@xd-mobi:~$ ./configure
- xud@xd-mobi:~$ make
- xud@xd-mobi:~$ sudo make install
注意:ubuntu server默认未安装exif/tiff/gif支持,如果需要支持这些格式,请先行下载
至此,在linux上运行asp.net 2.0的条件已经具备。
3.xsp2测试
为了验证asp.net是否可以正常运行,首先使用xsp进行测试:
使用xshell连接上服务器,并打开xftp,将我写的一个测试项目上传到服务器的/var/www/xdb
- xud@xd-mobi:~$ xsp2 --root /var/www/xdb
在浏览器中输入: http://192.168.1.202:8080(xsp默认端口为8080,需要注意),运行正常!
4.配置apache运行asp.net
编辑/etc/apache2/httpd.conf
xud@xd-mobi:~$ sudo vi /etc/apache2/httpd.conf
在配置文件中加入
ServerName 127.0.1.1
Include mod_mono.conf
Alias /xdb "/var/www/xdb"
MonoApplications "/xdb:/var/www/xdb"
<Location /xdb>
SetHandler mono
</Location>
按esc键后输入 :wq退出vi
重启apache2
xud@xd-mobi:su
root@xd-mobi:~# export APACHE_RUN_USER=www-data
root@xd-mobi:~# export APACHE_RUN_GROUP=www-data
root@xd-mobi:~# service apache2 restart
root@xd-mobi:~# exit
请注意:
如果mod_mono安装正常,则mod_mono.conf应该存在于/etc/apache2目录下
第一行加入ServerName是为了apache2启动时不再报错。
export APACHE_RUN...两行是为了在重启服务时不报错。
在本地计算机浏览器中输入 http://192.168.1.202/xdb/,访问正常。
5.总结
安装mono还是比较麻烦的,大部分时间都花在如何解决包的依赖性上了。
发现的问题:
*mono中的XmlSerializer和.net 2.0中略有不同,在测试项目中,windows上能顺利进行Xml序列化输出的类报错。
*在使用存储过程分页的时候,.net 2.0中返回三个表,第一个为空表。而mono中貌似比较正常,返回两个表
*System.Web.Hosting中略有不同,IsHosted始终为false.似乎在apache下Web Application无宿主程序。(在IIS上是w3p3??)
*在项目中有使用反射调用类方法的时候,上传到后因为程序集名称大小写问题无法调用,解决到大小写后仍然报错,可能mono的反射机制与.net 2.0不太相同
最严重的一个问题:项目重新编译上传后,访问时发现Apache死锁,重启后才可以访问