Choosing a SQL database for Mono

I have got Mono ASP.NET working on Apache 2. Now I need to pick up a SQL database for some of the applications I need to run or develop. I’m running MoveableType which supports both MySQL and PostGresSQL. I also run PhpBB, which runs on Postgres currently. I would just need to pick one of them.

I’m using a reference for comparison.

Based on a two mintues of browsing the comparisons, I picked Postgres SQL as my database engine for Linux/Mono.

I installed Postgres a few years ago, but almost forgot everything about it. Here’s the site I’m checking on documentation.

Installing mod_mono for Apache 2

1. Download mod-mono from ftp.ximan.com and unzup it to /home/mono
2. cd /home/mono and ./configure –prefix=/usr
[root@localhost mod_mono-1.0]# ./configure –prefix=/usr
checking for a BSD-compatible install… /usr/bin/install -c
checking whether build environment is sane… yes
checking for gawk… gawk
checking whether make sets $(MAKE)… yes
checking for gcc… gcc
checking for C compiler default output… a.out
checking whether the C compiler works… yes
checking whether we are cross compiling… no
checking for suffix of executables…
checking for suffix of object files… o
checking whether we are using the GNU C compiler… yes
checking whether gcc accepts -g… yes
checking for gcc option to accept ANSI C… none needed
checking for style of include used by make… GNU
checking dependency style of gcc… gcc3
checking build system type… i686-pc-linux-gnu
checking host system type… i686-pc-linux-gnu
checking for ld used by GCC… /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld… yes
checking for /usr/bin/ld option to reload object files… -r
checking for BSD-compatible nm… /usr/bin/nm -B
checking for a sed that does not truncate output… /bin/sed
checking whether ln -s works… yes
checking how to recognise dependent libraries… pass_all
checking command to parse /usr/bin/nm -B output… ok
checking how to run the C preprocessor… gcc -E
checking for egrep… grep -E
checking for ANSI C header files… yes
checking for sys/types.h… yes
checking for sys/stat.h… yes
checking for stdlib.h… yes
checking for string.h… yes
checking for memory.h… yes
checking for strings.h… yes
checking for inttypes.h… yes
checking for stdint.h… yes
checking for unistd.h… yes
checking dlfcn.h usability… yes
checking dlfcn.h presence… yes
checking for dlfcn.h… yes
checking for ranlib… ranlib
checking for strip… strip
checking for objdir… .libs
checking for gcc option to produce PIC… -fPIC
checking if gcc PIC flag -fPIC works… yes
checking if gcc static flag -static works… yes
checking if gcc supports -c -o file.o… yes
checking if gcc supports -c -o file.lo… yes
checking if gcc supports -fno-rtti -fno-exceptions… yes
checking whether the linker (/usr/bin/ld) supports shared libraries… yes
checking how to hardcode library paths into programs… immediate
checking whether stripping libraries is possible… yes
checking dynamic linker characteristics… GNU/Linux ld.so
checking if libtool supports shared libraries… yes
checking whether to build shared libraries… yes
checking whether to build static libraries… yes
checking whether -lc should be explicitly linked in… no
creating libtool
checking if building mod_mono_old is requested… no
checking for –with-apxs… no
checking for –with-apr-config… not specified
checking for apxs2 in /usr/local/apache/sbin… no
checking for apxs in /usr/local/apache/sbin… no
checking for apr-config in /usr/local/apache/sbin… no
checking for apxs2 in /usr/local/apache2/bin… no
checking for apxs in /usr/local/apache2/bin… no
checking for apr-config in /usr/local/apache2/bin… no
checking for apxs2 in /usr/sbin… no
checking for apxs in /usr/sbin… found, we’ll use this. Use –with-apxs to specify another.
checking for apr-config in /usr/sbin… no
checking for apr-config… /usr/bin/apr-config
checking for Apache libexec directory… /usr/lib/httpd/modules
checking for Apache include directory… -I/usr/include/httpd
checking Apache version… 2.0
checking for pkg-config… /usr/bin/pkg-config
checking whether byte ordering is bigendian… no
checking for setenv… yes
checking for putenv… yes
checking for mono installation prefix… /usr
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating man/mod_mono.8
config.status: creating man/Makefile
config.status: creating include/mod_mono_config.h
config.status: executing depfiles commands

Configuration summary for mod_mono

* Installation prefix = /usr
* Apache version = 2.0
* Apache modules directory = /usr/lib/httpd/modules
* apxs = /usr/sbin/apxs
* apr-config = /usr/bin/apr-config
* mono prefix = /usr
* Build old module: no

[root@localhost mod_mono-1.0]# make
Making all in src
make[1]: Entering directory `/home/mono/mod_mono-1.0/src’
source=’mod_mono.c’ object=’mod_mono.lo’ libtool=yes
depfile=’.deps/mod_mono.Plo’ tmpdepfile=’.deps/mod_mono.TPlo’
depmode=gcc3 /bin/sh ../depcomp
/bin/sh ../libtool –mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I../include -g -O2 -I/usr/include/httpd -c -o mod_mono.lo `test -f ‘mod_mono.c’ || echo ‘./’`mod_mono.c
mkdir .libs
gcc -DHAVE_CONFIG_H -I. -I. -I../include -g -O2 -I/usr/include/httpd -c mod_mono.c -MT mod_mono.lo -MD -MP -MF .deps/mod_mono.TPlo -fPIC -DPIC -o .libs/mod_mono.lo
gcc -DHAVE_CONFIG_H -I. -I. -I../include -g -O2 -I/usr/include/httpd -c mod_mono.c -MT mod_mono.lo -MD -MP -MF .deps/mod_mono.TPlo -o mod_mono.o >/dev/null 2>&1
mv -f .libs/mod_mono.lo mod_mono.lo
/bin/sh ../libtool –mode=link gcc -g -O2 -I/usr/include/httpd -o libmod_mono.la -rpath /usr/lib -module mod_mono.lo
rm -fr .libs/libmod_mono.la .libs/libmod_mono.* .libs/libmod_mono.*
gcc -shared mod_mono.lo -Wl,-soname -Wl,libmod_mono.so.0 -o .libs/libmod_mono.so.0.0.0
(cd .libs && rm -f libmod_mono.so.0 && ln -s libmod_mono.so.0.0.0 libmod_mono.so.0)
(cd .libs && rm -f libmod_mono.so && ln -s libmod_mono.so.0.0.0 libmod_mono.so)
ar cru .libs/libmod_mono.a mod_mono.o
ranlib .libs/libmod_mono.a
creating libmod_mono.la
(cd .libs && rm -f libmod_mono.la && ln -s ../libmod_mono.la libmod_mono.la)
make[1]: Leaving directory `/home/mono/mod_mono-1.0/src’
Making all in man
make[1]: Entering directory `/home/mono/mod_mono-1.0/man’
make[1]: Nothing to be done for `all’.
make[1]: Leaving directory `/home/mono/mod_mono-1.0/man’
make[1]: Entering directory `/home/mono/mod_mono-1.0′
make[1]: Nothing to be done for `all-am’.
make[1]: Leaving directory `/home/mono/mod_mono-1.0′

[root@localhost mod_mono-1.0]# make install
Making install in src
make[1]: Entering directory `/home/mono/mod_mono-1.0/src’
/usr/sbin/apxs -i -a -n mono libmod_mono.la
/usr/lib/httpd/build/instdso.sh SH_LIBTOOL=’/usr/lib/httpd/build/libtool’ libmod_mono.la /usr/lib/httpd/modules
/usr/lib/httpd/build/libtool –mode=install cp libmod_mono.la /usr/lib/httpd/modules/
cp .libs/libmod_mono.so.0.0.0 /usr/lib/httpd/modules/libmod_mono.so.0.0.0
(cd /usr/lib/httpd/modules && rm -f libmod_mono.so.0 && ln -s libmod_mono.so.0.0.0 libmod_mono.so.0)
(cd /usr/lib/httpd/modules && rm -f libmod_mono.so && ln -s libmod_mono.so.0.0.0 libmod_mono.so)
cp .libs/libmod_mono.lai /usr/lib/httpd/modules/libmod_mono.la
cp .libs/libmod_mono.a /usr/lib/httpd/modules/libmod_mono.a
ranlib /usr/lib/httpd/modules/libmod_mono.a
chmod 644 /usr/lib/httpd/modules/libmod_mono.a
libtool: install: warning: remember to run `libtool –finish /usr/lib’
chmod 755 /usr/lib/httpd/modules/libmod_mono.so
[activating module `mono’ in /etc/httpd/conf/httpd.conf]
make[1]: Leaving directory `/home/mono/mod_mono-1.0/src’
Making install in man
make[1]: Entering directory `/home/mono/mod_mono-1.0/man’
make[2]: Entering directory `/home/mono/mod_mono-1.0/man’
make[2]: Nothing to be done for `install-exec-am’.
/bin/sh ../mkinstalldirs /usr/man/man8
mkdir -p — /usr/man/man8
/usr/bin/install -c -m 644 ./mod_mono.8 /usr/man/man8/mod_mono.8
make[2]: Leaving directory `/home/mono/mod_mono-1.0/man’
make[1]: Leaving directory `/home/mono/mod_mono-1.0/man’
make[1]: Entering directory `/home/mono/mod_mono-1.0′
make[2]: Entering directory `/home/mono/mod_mono-1.0′
make[2]: Nothing to be done for `install-exec-am’.
make[2]: Nothing to be done for `install-data-am’.
make[2]: Leaving directory `/home/mono/mod_mono-1.0′
make[1]: Leaving directory `/home/mono/mod_mono-1.0′

[root@localhost mod_mono-1.0]# libtool –finish /usr/lib
PATH=”$PATH:/sbin” ldconfig -n /usr/lib
———————————————————————-
Libraries have been installed in:
/usr/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR’
flag during linking and do at least one of the following:
– add LIBDIR to the `LD_LIBRARY_PATH’ environment variable
during execution
– add LIBDIR to the `LD_RUN_PATH’ environment variable
during linking
– use the `-Wl,–rpath -Wl,LIBDIR’ linker flag
– have your system administrator add LIBDIR to `/etc/ld.so.conf’

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.

3. vi /etc/httpd/conf/httpd.conf and add these lines
Alias /demo “/usr/share/doc/xsp/test”
MonoApplications “/demo:/usr/share/doc/xsp/test”
and these lines

<br /> <location /demo><br /> SetHandler mono<br /> </location><br />
4. apachectl restart

Here’s the demo pages.

Data Grid sample.


Web Service sample.

Installing Mono 1.0 on Redhat 9.0

I’m documenting my installation experience.
1. Download mono-all.zip for RH 9.0.
2. Unzip it to /home/Mono
3. cd /home/Mono
4. rpm -Uvh *rpm
[root@localhost Mono]# rpm -Uvh *rpm
error: Failed dependencies:
libpixman >= 0.1.1 is needed by cairo-0.1.23-2.ximian.6.1
libgtkhtml3.0_4 is needed by gtk-sharp-1.0-1.ximian.6.0
5. download libpixman and libgtkhtml from ftp.ximan.com
6. rpm -Uvh *rpm
[root@localhost Mono]# rpm -Uvh *rpm
warning: libgtkhtml3.0_4-3.0.10-0.ximian.6.1.i386.rpm: V3 DSA signature: NOKEY, key ID fd4fe9e9
warning: package libpixman = 0.1.0-1.ximian.6.2 was already added, replacing with libpixman <= 0.1.1-0.ximian.6.0 error: Failed dependencies: libgal-2.0.so.6 is needed by libgtkhtml3.0_4-3.0.10-0.ximian.6.1 libgal-a11y-2.0.so.6 is needed by libgtkhtml3.0_4-3.0.10-0.ximian.6.1 7. download libgal from ftp.ximan.com 8. rpm -Uvh *rpm [root@localhost Mono]# rpm -Uvh *rpm warning: libgal2.0_6-1.99.11-0.ximian.6.1.i386.rpm: V3 DSA signature: NOKEY, key ID fd4fe9e9 warning: package libpixman = 0.1.0-1.ximian.6.2 was already added, replacing with libpixman <= 0.1.1-0.ximian.6.0 Preparing... ########################################### [100%] 1:mono-preview ########################################### [ 2%] 2:mono-ziplib ########################################### [ 3%] 3:mono-web-forms ########################################### [ 5%] 4:mono-winforms ########################################### [ 7%] 5:mono-web-services ########################################### [ 8%] 6:perl-XML-NamespaceSuppo########################################### [ 10%] 7:libpixman ########################################### [ 11%] 8:libicu26 ########################################### [ 13%] 9:mono-core ########################################### [ 15%] 10:mono-ikvm ########################################### [ 16%] 11:cairo ########################################### [ 18%] 12:perl-XML-SAX ########################################### [ 20%] 13:mono-nunit ########################################### [ 21%] 14:wine ########################################### [ 23%] 15:perl-XML-LibXML-Common ########################################### [ 25%] 16:libgdiplus ########################################### [ 26%] 17:mono-drawing ########################################### [ 28%] 18:libpixman-devel ########################################### [ 30%] 19:bytefx-data-mysql ########################################### [ 31%] 20:mono-data-postgresql ########################################### [ 33%] 21:mono-ms-extras ########################################### [ 34%] 22:mono-remoting ########################################### [ 36%] 23:ibm-data-db2 ########################################### [ 38%] 24:mono-basic ########################################### [ 39%] 25:mono-cairo ########################################### [ 41%] 26:mono-data ########################################### [ 43%] 27:mono-data-oracle ########################################### [ 44%] 28:mono-data-sqlite ########################################### [ 46%] 29:mono-data-sybase ########################################### [ 48%] 30:mono-directory ########################################### [ 49%] 31:mono-locale-cjk ########################################### [ 51%] 32:mono-locale-mideast ########################################### [ 52%] 33:mono-locale-other ########################################### [ 54%] 34:mono-locale-rare ########################################### [ 56%] 35:mono-ms-enterprise ########################################### [ 57%] 36:mono-novell-directory ########################################### [ 59%] 37:mono-peapi ########################################### [ 61%] 38:mono-posix ########################################### [ 62%] 39:mono-xml-relaxng ########################################### [ 64%] 40:perl-XML-NodeFilter ########################################### [ 66%] 41:perl-XML-LibXML ########################################### [ 67%] 42:libgal2.0_6 ########################################### [ 69%] 43:libgtkhtml3.0_4 ########################################### [ 70%] 44:gtk-sharp ########################################### [ 72%] 45:gecko-sharp ########################################### [ 74%] 46:monodoc ########################################### [ 75%] 47:gtksourceview ########################################### [ 77%] 48:gtksourceview-sharp ########################################### [ 79%] 49:cairo-devel ########################################### [ 80%] 50:gtk-sharp-gapi ########################################### [ 82%] 51:icu ########################################### [ 84%] 52:ikvm ########################################### [ 85%] 53:libicu-devel ########################################### [ 87%] 54:mono-complete ########################################### [ 89%] 55:mono-complete-devel ########################################### [ 90%] 56:mono-core-devel ########################################### [ 92%] 57:monodevelop ########################################### [ 93%] 58:mono-runtime-devel ########################################### [ 95%] 59:wine-devel ########################################### [ 97%] 60:winelib ########################################### [ 98%] 61:xsp ########################################### [100%]

Here’s my first Mono Gnome/Gtk HelloWorld! Running IDE in VPC is really slow. The MonoDevelop IDE is nice. I have not figured out whether or not it has drag and drop on WinForm.

It took me a while to move to the next step after the installation since the monodoc web site was down and I was trying to find sample codes to test the installation. I did a find / -name “mono*” -print and found monodevelop. So I launched it from xterm. Everything works fine so far! My next step is to get ASP.NET running on Apache 2.

Trying latest Mono …

I’m working on installing Mono again. This time, I will install Red Hat 9.0 on a Virtual PC and then install Mono RedHat 9 RPMs directly. My goal is to test ASP.NET on Mono to get a feel for its performance compared to Windows .NET.

On a Virtual PC, you can install any kind of OS on a Windows box. It’s pretty cool to test any new systems before installing them in a production box.

VPC does not support shared folder addition on Linux, so I have to set up Samba file share from the RH9 as file drop folder.

Mono 0.30

I spent two hours trying to build Mono 0.30 release on my Linux box last night. I built Mono runtime successfully, but could not get Mod_Mono for Apache 2 to compile without rebuilding Apache 2. Since I’m still running RedHat 8, the RPM binary build for Mono 0.30 can not be used. I don’t follow Linux very closely, it always takes me a while to get up to the speed with the latest development, so I’m reluctant to upgrade to the latest distribution. My goal is to get Mono .30 and Apache 2 work on my Linux box without making any change other than Mono itself.

On the other note, my new multi-functional printer was delivered yesterday from buy.com. I orrder it first on buy.com, then found out that amazon.com had better deal. I cancelled the buy.com order and ordered one from amazon.com. However, amazon.com messed up my order and shipment, I had to email them many times to get full credit back. Finally buy.com had the printer at $375.99 again and I ordered it right away. I like everything I see from the printer except that it dims my home office’s light bulb when operating. It is a big power sucker drawing almost 1KW juice.