Trouble installing mod_mono on Mac OSX Lion

2019-06-07 15:25发布

问题:

There is another question regarding installing mod_mono on OSX, but I'm going to assume that was before Lion came about, which had some breaking changes for developers (like python versions).

I've followed the instructions in the INSTALL readme of mod_mono-2.10. No Avail.

Exactly what I've done is this:

tar xvfz mod_mono-2.10.tar.gz
cd mod_mono-X.Y.Z
./configure --prefix=/usr
make
make install

$ apachectl -t
httpd: Syntax error on line 54 of /private/etc/apache2/httpd.conf: Syntax error on line 8 of /private/etc/apache2/other/mod_mono.conf: Cannot load /usr/libexec/apache2/mod_mono.so into server: 
dlopen(/usr/libexec/apache2/mod_mono.so, 10): no suitable image found.  Did find:\n\t/usr/libexec/apache2/mod_mono.so: mach-o, but wrong architecture

It appears that mod_mono wasn't really the problem. It was mono itself.

smeatonj$ file /usr/bin/mono
/usr/bin/mono: Mach-O executable i386
smeatonj$ file /usr/libexec/apache2/mod_mono.so 
/usr/libexec/apache2/mod_mono.so: Mach-O 64-bit bundle x86_64
meatonj$ file /usr/sbin/httpd
/usr/sbin/httpd: Mach-O universal binary with 2 architectures
/usr/sbin/httpd (for architecture x86_64):  Mach-O 64-bit executable x86_64
/usr/sbin/httpd (for architecture i386):    Mach-O executable i386
smeatonj$ file /usr/bin/mono
/usr/bin/mono: Mach-O executable i386

The mono package itself is not compiled for 64 bit. Perhaps I should have fully read the install guide but here is the main bit of concern:

32 and 64 bit support

The Mono packages published on this web site provide a 32-bit Mono VM.

Support for 64-bit VMs as of Mono 2.10 is only available if you build Mono from source code and install your own copy of the VM. In the future we will ship both mono and mono64 binaries for our users.

The 64 bit support has a few limitations today which is why we have not entirely switched to it:

Our Windows.Forms implementation uses Carbon, and as such, it would not work with a 64-bit Mono. MonoDevelop uses Carbon for its menu integration so it would not run on a 64-bit VM. MonoMac bindings have not been ported to 64 bits. Supporting 64-bit Mono across the board would also require us to ship a 64-bit Gtk+ stack and that would increase the download size for most users.

I attempted to recompile mod_mono in i386 so that it can run with the mono runtime

sudo -s
CFLAGS="-arch i386" ./configure --prefix=/usr
make
make install

smeatonj$ file /usr/libexec/apache2/mod_mono.so 
/usr/libexec/apache2/mod_mono.so: Mach-O bundle i386

Same problem:

$ apachectl -t
httpd: Syntax error on line 54 of /private/etc/apache2/httpd.conf: Syntax error on line 8 of /private/etc/apache2/other/mod_mono.conf: Cannot load /usr/libexec/apache2/mod_mono.so into server: 
dlopen(/usr/libexec/apache2/mod_mono.so, 10): no suitable image found.  Did find:\n\t/usr/libexec/apache2/mod_mono.so: mach-o, but wrong architecture

Am I going to be able to run mod_mono on apache without compiling and installing a 64 bit version of mono? I guess I could do it side-by-side, but this whole process has been very very time consuming.. I'm not sure about maintaining the official package, and a different version just for a test webserver.

Here is the exact terminal output for the latest recompilation of mod_mono:

Josh-Mac:mod_mono-2.10 smeatonj$ ./configure 
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... ./install-sh -c -d
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking for C compiler default output file name... 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 ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
checking build system type... i386-apple-darwin11.2.0
checking host system type... i386-apple-darwin11.2.0
checking for a sed that does not truncate output... /usr/bin/sed
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for fgrep... /usr/bin/grep -F
checking for ld used by gcc... /usr/llvm-gcc-4.2/libexec/gcc/i686-apple-darwin11/4.2.1/ld
checking if the linker (/usr/llvm-gcc-4.2/libexec/gcc/i686-apple-darwin11/4.2.1/ld) is GNU ld... no
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm
checking the name lister (/usr/bin/nm) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 196608
checking whether the shell understands some XSI constructs... yes
checking whether the shell understands "+="... yes
checking for /usr/llvm-gcc-4.2/libexec/gcc/i686-apple-darwin11/4.2.1/ld option to reload object files... -r
checking for objdump... no
checking how to recognize dependent libraries... pass_all
checking for ar... ar
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm output from gcc object... ok
checking for dsymutil... dsymutil
checking for nmedit... nmedit
checking for lipo... lipo
checking for otool... otool
checking for otool64... no
checking for -single_module linker flag... yes
checking for -exported_symbols_list linker flag... yes
checking how to run the C preprocessor... gcc -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 for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fno-common -DPIC
checking if gcc PIC flag -fno-common -DPIC works... yes
checking if gcc static flag -static works... no
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/llvm-gcc-4.2/libexec/gcc/i686-apple-darwin11/4.2.1/ld) supports shared libraries... yes
checking dynamic linker characteristics... darwin11.2.0 dyld
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking whether byte ordering is bigendian... no
checking for pkg-config... /usr/bin/pkg-config
checking for sys/wait.h that is POSIX.1 compatible... yes
checking netdb.h usability... yes
checking netdb.h presence... yes
checking for netdb.h... yes
checking for unistd.h... (cached) yes
checking for an ANSI C-conforming const... yes
checking for pid_t... yes
checking for size_t... yes
checking whether time.h and sys/time.h may both be included... yes
checking vfork.h usability... no
checking vfork.h presence... no
checking for vfork.h... no
checking for fork... yes
checking for vfork... yes
checking for working fork... yes
checking for working vfork... (cached) yes
checking for ANSI C header files... (cached) yes
checking sys/select.h usability... yes
checking sys/select.h presence... yes
checking for sys/select.h... yes
checking sys/socket.h usability... yes
checking sys/socket.h presence... yes
checking for sys/socket.h... yes
checking types of arguments for select... int,fd_set *,struct timeval *
checking for memset... yes
checking for mkdir... yes
checking for unsetenv... yes
checking for putenv... yes
checking for setenv... yes
checking for setrlimit... yes
checking for select... yes
checking for strcasecmp... yes
checking for strerror... yes
checking for strrchr... yes
checking for dup2... yes
checking for strndup... yes
checking if debug mode is requested... no
checking What level debug messages should be printed at... debug output disabled
checking whether mod_mono should remove the DISPLAY variable from environment... no
checking if gcov compilation was requested... no
checking if gprof support was requested... no
checking for apxs2 in /usr/local/apache2/sbin... no
checking for apxs in /usr/local/apache2/sbin... no
checking for apxs2 in /usr/local/apache2/bin... no
checking for apxs in /usr/local/apache2/bin... no
checking for apxs2 in /usr/local/apache/sbin... no
checking for apxs in /usr/local/apache/sbin... no
checking for apxs2 in /usr/local/apache/bin... no
checking for apxs in /usr/local/apache/bin... no
checking for apxs2 in /usr/sbin... no
checking for apxs in /usr/sbin... /usr/sbin/apxs
checking for apr-1-config in /usr/sbin... no
checking for apr-config in /usr/sbin... no
checking for apr-1-config in /usr/local/apache2/sbin... no
checking for apr-config in /usr/local/apache2/sbin... no
checking for apr-1-config in /usr/local/apache2/bin... no
checking for apr-config in /usr/local/apache2/bin... no
checking for apr-1-config in /usr/local/apache/sbin... no
checking for apr-config in /usr/local/apache/sbin... no
checking for apr-1-config in /usr/local/apache/bin... no
checking for apr-config in /usr/local/apache/bin... no
checking for apr-1-config in /usr/sbin... no
checking for apr-config in /usr/sbin... no
checking for apr-1-config in /usr/bin... found.
checking for apu-1-config in /usr/sbin... no
checking for apu-config in /usr/sbin... no
checking for apu-1-config in /usr/local/apache2/sbin... no
checking for apu-config in /usr/local/apache2/sbin... no
checking for apu-1-config in /usr/local/apache2/bin... no
checking for apu-config in /usr/local/apache2/bin... no
checking for apu-1-config in /usr/local/apache/sbin... no
checking for apu-config in /usr/local/apache/sbin... no
checking for apu-1-config in /usr/local/apache/bin... no
checking for apu-config in /usr/local/apache/bin... no
checking for apu-1-config in /usr/sbin... no
checking for apu-config in /usr/sbin... no
checking for apu-1-config in /usr/bin... found.
checking Apache version... 2.2
checking for http_protocol.h... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating mod_mono.conf
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
config.status: executing libtool commands
config.status: executing quiet commands
./config.status: line 2068: ./scripts/patch-quiet.sh: No such file or directory
config.status: executing quiet-libtool commands
---
Configuration summary for mod_mono

   * Installation prefix = /usr/local
   * Apache version = 2.2
   * Apache modules directory = /usr/libexec/apache2
   * apxs = /usr/sbin/apxs
   * apr-config = /usr/bin/apr-1-config
   * apu-config = /usr/bin/apu-1-config
   * CFLAGS = -g -O2 -I/usr/include/apache2  -I/usr/local/include  -I/usr/include/apr-1    -I/usr/include/apr-1 
   * Verbose logging (debug) = no
   * GCOV options used = no
   * Profiling enabled = no
   * mono prefix = /Library/Frameworks/Mono.framework/Versions/2.10.8
   * Default MonoApplicationsConfigDir = /private/etc/apache2/mod-mono-applications

---
Josh-Mac:mod_mono-2.10 smeatonj$ make
Making all in src
/bin/sh ../libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I../include   -g -O2 -I/usr/include/apache2  -I/usr/local/include  -I/usr/include/apr-1    -I/usr/include/apr-1  -g -O2 -I/usr/include/apache2  -I/usr/local/include  -I/usr/include/apr-1    -I/usr/include/apache2 -g -O2 -I/usr/include/apache2  -I/usr/local/include -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -g -O2 -I/usr/include/apache2  -I/usr/local/include   -I/usr/include/apr-1   -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK  -I/usr/include/apr-1  -Wall -DDFLT_MONO_CONFIG_DIR=\"/private/etc/apache2/mod-mono-applications\" -g -O2 -I/usr/include/apache2  -I/usr/local/include  -I/usr/include/apr-1    -I/usr/include/apr-1  -MT mod_mono_la-mod_mono.lo -MD -MP -MF .deps/mod_mono_la-mod_mono.Tpo -c -o mod_mono_la-mod_mono.lo `test -f 'mod_mono.c' || echo './'`mod_mono.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I../include -g -O2 -I/usr/include/apache2 -I/usr/local/include -I/usr/include/apr-1 -I/usr/include/apr-1 -g -O2 -I/usr/include/apache2 -I/usr/local/include -I/usr/include/apr-1 -I/usr/include/apache2 -g -O2 -I/usr/include/apache2 -I/usr/local/include -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -g -O2 -I/usr/include/apache2 -I/usr/local/include -I/usr/include/apr-1 -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -I/usr/include/apr-1 -Wall -DDFLT_MONO_CONFIG_DIR=\"/private/etc/apache2/mod-mono-applications\" -g -O2 -I/usr/include/apache2 -I/usr/local/include -I/usr/include/apr-1 -I/usr/include/apr-1 -MT mod_mono_la-mod_mono.lo -MD -MP -MF .deps/mod_mono_la-mod_mono.Tpo -c mod_mono.c  -fno-common -DPIC -o .libs/mod_mono_la-mod_mono.o
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I../include -g -O2 -I/usr/include/apache2 -I/usr/local/include -I/usr/include/apr-1 -I/usr/include/apr-1 -g -O2 -I/usr/include/apache2 -I/usr/local/include -I/usr/include/apr-1 -I/usr/include/apache2 -g -O2 -I/usr/include/apache2 -I/usr/local/include -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -g -O2 -I/usr/include/apache2 -I/usr/local/include -I/usr/include/apr-1 -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -I/usr/include/apr-1 -Wall -DDFLT_MONO_CONFIG_DIR=\"/private/etc/apache2/mod-mono-applications\" -g -O2 -I/usr/include/apache2 -I/usr/local/include -I/usr/include/apr-1 -I/usr/include/apr-1 -MT mod_mono_la-mod_mono.lo -MD -MP -MF .deps/mod_mono_la-mod_mono.Tpo -c mod_mono.c -o mod_mono_la-mod_mono.o >/dev/null 2>&1
mv -f .deps/mod_mono_la-mod_mono.Tpo .deps/mod_mono_la-mod_mono.Plo
/bin/sh ../libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I../include   -g -O2 -I/usr/include/apache2  -I/usr/local/include  -I/usr/include/apr-1    -I/usr/include/apr-1  -g -O2 -I/usr/include/apache2  -I/usr/local/include  -I/usr/include/apr-1    -I/usr/include/apache2 -g -O2 -I/usr/include/apache2  -I/usr/local/include -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -g -O2 -I/usr/include/apache2  -I/usr/local/include   -I/usr/include/apr-1   -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK  -I/usr/include/apr-1  -Wall -DDFLT_MONO_CONFIG_DIR=\"/private/etc/apache2/mod-mono-applications\" -g -O2 -I/usr/include/apache2  -I/usr/local/include  -I/usr/include/apr-1    -I/usr/include/apr-1  -MT mod_mono_la-mono-io-portability.lo -MD -MP -MF .deps/mod_mono_la-mono-io-portability.Tpo -c -o mod_mono_la-mono-io-portability.lo `test -f 'mono-io-portability.c' || echo './'`mono-io-portability.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I../include -g -O2 -I/usr/include/apache2 -I/usr/local/include -I/usr/include/apr-1 -I/usr/include/apr-1 -g -O2 -I/usr/include/apache2 -I/usr/local/include -I/usr/include/apr-1 -I/usr/include/apache2 -g -O2 -I/usr/include/apache2 -I/usr/local/include -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -g -O2 -I/usr/include/apache2 -I/usr/local/include -I/usr/include/apr-1 -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -I/usr/include/apr-1 -Wall -DDFLT_MONO_CONFIG_DIR=\"/private/etc/apache2/mod-mono-applications\" -g -O2 -I/usr/include/apache2 -I/usr/local/include -I/usr/include/apr-1 -I/usr/include/apr-1 -MT mod_mono_la-mono-io-portability.lo -MD -MP -MF .deps/mod_mono_la-mono-io-portability.Tpo -c mono-io-portability.c  -fno-common -DPIC -o .libs/mod_mono_la-mono-io-portability.o
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I../include -g -O2 -I/usr/include/apache2 -I/usr/local/include -I/usr/include/apr-1 -I/usr/include/apr-1 -g -O2 -I/usr/include/apache2 -I/usr/local/include -I/usr/include/apr-1 -I/usr/include/apache2 -g -O2 -I/usr/include/apache2 -I/usr/local/include -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -g -O2 -I/usr/include/apache2 -I/usr/local/include -I/usr/include/apr-1 -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -I/usr/include/apr-1 -Wall -DDFLT_MONO_CONFIG_DIR=\"/private/etc/apache2/mod-mono-applications\" -g -O2 -I/usr/include/apache2 -I/usr/local/include -I/usr/include/apr-1 -I/usr/include/apr-1 -MT mod_mono_la-mono-io-portability.lo -MD -MP -MF .deps/mod_mono_la-mono-io-portability.Tpo -c mono-io-portability.c -o mod_mono_la-mono-io-portability.o >/dev/null 2>&1
mv -f .deps/mod_mono_la-mono-io-portability.Tpo .deps/mod_mono_la-mono-io-portability.Plo
/bin/sh ../libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I../include   -g -O2 -I/usr/include/apache2  -I/usr/local/include  -I/usr/include/apr-1    -I/usr/include/apr-1  -g -O2 -I/usr/include/apache2  -I/usr/local/include  -I/usr/include/apr-1    -I/usr/include/apache2 -g -O2 -I/usr/include/apache2  -I/usr/local/include -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -g -O2 -I/usr/include/apache2  -I/usr/local/include   -I/usr/include/apr-1   -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK  -I/usr/include/apr-1  -Wall -DDFLT_MONO_CONFIG_DIR=\"/private/etc/apache2/mod-mono-applications\" -g -O2 -I/usr/include/apache2  -I/usr/local/include  -I/usr/include/apr-1    -I/usr/include/apr-1  -MT mod_mono_la-glib_compat.lo -MD -MP -MF .deps/mod_mono_la-glib_compat.Tpo -c -o mod_mono_la-glib_compat.lo `test -f 'glib_compat.c' || echo './'`glib_compat.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I../include -g -O2 -I/usr/include/apache2 -I/usr/local/include -I/usr/include/apr-1 -I/usr/include/apr-1 -g -O2 -I/usr/include/apache2 -I/usr/local/include -I/usr/include/apr-1 -I/usr/include/apache2 -g -O2 -I/usr/include/apache2 -I/usr/local/include -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -g -O2 -I/usr/include/apache2 -I/usr/local/include -I/usr/include/apr-1 -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -I/usr/include/apr-1 -Wall -DDFLT_MONO_CONFIG_DIR=\"/private/etc/apache2/mod-mono-applications\" -g -O2 -I/usr/include/apache2 -I/usr/local/include -I/usr/include/apr-1 -I/usr/include/apr-1 -MT mod_mono_la-glib_compat.lo -MD -MP -MF .deps/mod_mono_la-glib_compat.Tpo -c glib_compat.c  -fno-common -DPIC -o .libs/mod_mono_la-glib_compat.o
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I../include -g -O2 -I/usr/include/apache2 -I/usr/local/include -I/usr/include/apr-1 -I/usr/include/apr-1 -g -O2 -I/usr/include/apache2 -I/usr/local/include -I/usr/include/apr-1 -I/usr/include/apache2 -g -O2 -I/usr/include/apache2 -I/usr/local/include -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -g -O2 -I/usr/include/apache2 -I/usr/local/include -I/usr/include/apr-1 -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -I/usr/include/apr-1 -Wall -DDFLT_MONO_CONFIG_DIR=\"/private/etc/apache2/mod-mono-applications\" -g -O2 -I/usr/include/apache2 -I/usr/local/include -I/usr/include/apr-1 -I/usr/include/apr-1 -MT mod_mono_la-glib_compat.lo -MD -MP -MF .deps/mod_mono_la-glib_compat.Tpo -c glib_compat.c -o mod_mono_la-glib_compat.o >/dev/null 2>&1
mv -f .deps/mod_mono_la-glib_compat.Tpo .deps/mod_mono_la-glib_compat.Plo
/bin/sh ../libtool --tag=CC   --mode=link gcc -Wall -DDFLT_MONO_CONFIG_DIR=\"/private/etc/apache2/mod-mono-applications\" -g -O2 -I/usr/include/apache2  -I/usr/local/include  -I/usr/include/apr-1    -I/usr/include/apr-1  -module  -o mod_mono.la -rpath /usr/local/lib mod_mono_la-mod_mono.lo mod_mono_la-mono-io-portability.lo mod_mono_la-glib_compat.lo  
libtool: link: gcc -Wl,-undefined -Wl,dynamic_lookup -o .libs/mod_mono.0.so -bundle  .libs/mod_mono_la-mod_mono.o .libs/mod_mono_la-mono-io-portability.o .libs/mod_mono_la-glib_compat.o     
libtool: link: dsymutil .libs/mod_mono.0.so || :
libtool: link: (cd ".libs" && rm -f "mod_mono.so" && ln -s "mod_mono.0.so" "mod_mono.so")
libtool: link: ar cru .libs/mod_mono.a  mod_mono_la-mod_mono.o mod_mono_la-mono-io-portability.o mod_mono_la-glib_compat.o
libtool: link: ranlib .libs/mod_mono.a
libtool: link: ( cd ".libs" && rm -f "mod_mono.la" && ln -s "../mod_mono.la" "mod_mono.la" )
Making all in man
make[1]: Nothing to be done for `all'.
make[1]: Nothing to be done for `all-am'.
Josh-Mac:mod_mono-2.10 smeatonj$ sudo make install
Making install in src
/bin/sh /Users/smeatonj/Development/src/mod_mono-2.10/install-sh -d "/usr/libexec/apache2"
/usr/sbin/apxs -S LIBEXECDIR="/usr/libexec/apache2" -i -n mono mod_mono.la
/usr/share/httpd/build/instdso.sh SH_LIBTOOL='/usr/share/apr-1/build-1/libtool' mod_mono.la /usr/libexec/apache2
/usr/share/apr-1/build-1/libtool --mode=install cp mod_mono.la /usr/libexec/apache2/
libtool: install: cp .libs/mod_mono.0.so /usr/libexec/apache2/mod_mono.0.so
libtool: install: (cd /usr/libexec/apache2 && { ln -s -f mod_mono.0.so mod_mono.so || { rm -f mod_mono.so && ln -s mod_mono.0.so mod_mono.so; }; })
libtool: install: cp .libs/mod_mono.lai /usr/libexec/apache2/mod_mono.la
libtool: install: cp .libs/mod_mono.a /usr/libexec/apache2/mod_mono.a
libtool: install: chmod 644 /usr/libexec/apache2/mod_mono.a
libtool: install: ranlib /usr/libexec/apache2/mod_mono.a
libtool: install: warning: remember to run `libtool --finish /usr/local/lib'
chmod 755 /usr/libexec/apache2/mod_mono.so
Making install in man
make[2]: Nothing to be done for `install-exec-am'.
test -z "/usr/local/share/man/man8" || .././install-sh -c -d "/usr/local/share/man/man8"
 /usr/bin/install -c -m 644 './mod_mono.8' '/usr/local/share/man/man8/mod_mono.8'
make[2]: Nothing to be done for `install-exec-am'.
test -z "/private/etc/apache2" || ./install-sh -c -d "/private/etc/apache2"
 /usr/bin/install -c -m 644 'mod_mono.conf' '/private/etc/apache2/mod_mono.conf'
Josh-Mac:mod_mono-2.10 smeatonj$ 

Josh-Mac:apache2 smeatonj$ sudo apachectl -t
httpd: Could not reliably determine the server's fully qualified domain name, using Josh-Mac.local for ServerName
Syntax OK
Josh-Mac:apache2 smeatonj$ sudo apachectl restart

/private/var/log/apache2/error_log output:

[Fri Jan 13 14:28:51 2012] [info] removed PID file /private/var/run/httpd.pid (pid=930)

[Fri Jan 13 14:28:51 2012] [notice] caught SIGTERM, shutting down

I also have mod_wsgi installed (the only other non-standard module), but I disabled that entirely, and still get the SIGTERM.

There is an error being generated in Console:

13/01/12 3:22:50.793 PM org.apache.httpd: httpd: Syntax error on line 73 of /private/etc/apache2/httpd.conf: Syntax error on line 8 of /private/etc/apache2/mod_mono.conf: Cannot load /usr/libexec/apache2/mod_mono.so into server: dlopen(/usr/libexec/apache2/mod_mono.so, 10): no suitable image found.  Did find:\n\t/usr/libexec/apache2/mod_mono.so: mach-o, but wrong architecture

回答1:

Here is what I did to set up mono/mod_mono on OSX 10.7, Apache2 - hopefully it saves someone else a few steps.

Note that I used a separate install of apache2. Your mileage may vary, but I have found pieces of installs here and there that are aggregated here as of Jul 2012 ... By configuring mod_mono.conf as I have, I now have an apache2/mono install that works, with an apache2 install that is standard from apache.org. While I am an Apple fan boy, I wish the OSX Apache installations were in a little more standard form.

(1) Set up Apache2 on OSX or use the default implementation as per your preference. If you build the httpd engine yourself, see commentary below. (2) Get mod_mono source, and compile as shown below. (3) Configure Apache's httpd.conf to include mod_mono.conf. (4) Edit the mod_mono.conf to fit your needs. (5) Restart Apache2.

When building apache2 to be placed at /usr/local/apache2: ./configure --prefix=/usr/local/apache2 --with-included-apr --enable-mods-shared=all --enable-module=so --enable-authz-host

When building mod_mono to find apache2 at /usr/local/apache2: ./configure --prefix=/usr/local

When configuring mod_mono on OSX 10.7 assuming that mono is accessible through /usr/bin as with a macports mono install:

# mod_mono.conf

# Achtung! This file may be overwritten
# Use 'include mod_mono.conf' from other configuration file
# to load mod_mono module.

<IfModule !mod_mono.c>
    LoadModule mono_module /usr/local/apache2/modules/mod_mono.so
</IfModule>

<IfModule mod_headers.c>
    Header set X-Powered-By "Mono"
</IfModule>

AddType application/x-asp-net .aspx
AddType application/x-asp-net .asmx
AddType application/x-asp-net .ashx
AddType application/x-asp-net .asax
AddType application/x-asp-net .ascx
AddType application/x-asp-net .soap
AddType application/x-asp-net .rem
AddType application/x-asp-net .axd
AddType application/x-asp-net .cs
AddType application/x-asp-net .vb
AddType application/x-asp-net .master
AddType application/x-asp-net .sitemap
AddType application/x-asp-net .resources
AddType application/x-asp-net .skin
AddType application/x-asp-net .browser
AddType application/x-asp-net .webinfo
AddType application/x-asp-net .resx
AddType application/x-asp-net .licx
AddType application/x-asp-net .csproj
AddType application/x-asp-net .vbproj
AddType application/x-asp-net .config
AddType application/x-asp-net .Config
AddType application/x-asp-net .dll
DirectoryIndex index.aspx
DirectoryIndex Default.aspx
DirectoryIndex default.aspx

Alias /mono "/Users/tommy/Sites/mono"
AddMonoApplications default "/mono:/Users/tommy/Sites/mono"
MonoServerPath **default** "/usr/bin/mod-mono-server4"
MonoExecutablePath "/usr/bin/mono"

<Location /mono>
      MonoSetServerAlias **default**
      SetHandler mono
      DirectoryIndex index.aspx
</Location>

Note that the httpd.conf file includes the mod_mono.conf file shown above.



回答2:

64-bit Mono VM is not required in order to run the 64-bit mod_mono under Apache. See my own "file" command outputs (I'm on Lion 10.7.2 with Apache 2.2.20, Mono 2.10.8 and mod_mono 2.10) :

file /usr/bin/mono
/usr/bin/mono: Mach-O executable i386

file /usr/libexec/apache2/mod_mono.so
/usr/libexec/apache2/mod_mono.so: Mach-O 64-bit bundle x86_64

file /usr/sbin/httpd
/usr/sbin/httpd: Mach-O universal binary with 2 architectures
/usr/sbin/httpd (for architecture x86_64):  Mach-O 64-bit executable x86_64
/usr/sbin/httpd (for architecture i386):    Mach-O executable i386

So, I have exactly the same output as you, and as you can see you must use a 64-bit mod_mono in order to run ASP.NET pages under 64-bit Apache with a 32-bit Mono VM.

I think you should try again from the beginning:

  • download the latest Mono VM (I suggest you to take version 2.10.8, not 2.10.8.1 as this one is not considered stable)
  • uninstall all previous versions of Mono by running in command line the script uninstallMono.sh located in the MonoFramework-MRE-2.10.8_3.macos10.xamarin.x86.pkg bundle, under the directory Contents/Resources
  • install normally the Mono VM
  • download the latest mod_mono Apache module : you must ensure that mod_mono version matches Mono VM version
  • extract the content of the archive where you want and compile it with the following commands (as you can see I don't provide any argument to the commands):

    ./configure
    make
    sudo make install

  • ensure that you have the following line at the end of your /etc/apache2/httpd.conf file : Include /private/etc/apache2/mod_mono.conf

  • restart Apache server with the following command: sudo apachectl restart

This should work! If it's not the case, please post the output of mod_mono compilation to see if any error occurred. And also your httpd.conf file: the problem may be related to another Apache module that conflicts with mod_mono.

I suggest to use my own version of mod_mono.conf file, because it enables the AutoHosting feature (just replace the MonoSetEnv LANG=fr_FR.UTF-8 line with your current culture, like "en-US.UTF-8" or "ja-JP.UTF-8").

Good luck! :o)