# How to run Asp.Net Web Forms, MVC2 and MVC3 applications on FreeBSD



## vand777 (Aug 17, 2011)

*1. Install Mono*


```
# cd /usr/ports/lang/mono
# make config-recursive
# make install clean
```

In order to test Mono installation, create a new file /tmp/test.cs:


```
using System;
 
class Program {
    static void Main ()
    {
        Type t = Type.GetType ("Mono.Runtime");
        if (t != null)
             Console.WriteLine ("You are running with the Mono VM");
        else
             Console.WriteLine ("You are running something else");
    }
}
```

Then compile it and run:


```
# cd /tmp
# mcs test.cs
# mono test.exe
You are running with the Mono VM
```

*2. Install Nginx web server*

```
# cd /usr/ports/www/nginx
# make config-recursive
# make install clean
# echo "nginx_enable=YES" >> /etc/rc.conf
```


----------



## vand777 (Aug 17, 2011)

*3. Install Xsp*


```
# cd /usr/ports/www/xsp
# make config-recursive
# make install clean
```

*4. Configure Nginx*

Edit /usr/local/etc/nginx/nginx.conf file:


```
...
user  [color="Red"]asp[/color];
worker_processes  [color="Red"]4;  # should be equal to number of cores on your server[/color]
...
 
        [color="Red"]location / {
            fastcgi_pass   192.168.1.100:9000; # change this IP to the IP and port of your fastcgi-mono-server (see below)
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }[/color]
 
        [color="Red"]#[/color]location / {
        [color="Red"]#[/color]    root   /usr/local/www/nginx;
        [color="Red"]#[/color]    index  index.html index.htm;
        [color="Red"]#[/color]}
...
```

Create a new user *asp* (shell nologin, random password):


```
# adduser
...
# mkdir /home/asp/www
# chown asp:asp /home/asp/www/
# chmod 555 /home/asp/www/
# touch /var/log/mono-server4.log
# chown asp:asp /var/log/mono-server4.log
```


----------



## vand777 (Aug 17, 2011)

*5. Configure startup scripts*

Create a new file /home/asp/fcgi:


```
fastcgi-mono-server4 /socket=tcp:[color="Red"]9000[/color] /address=[color="Red"]192.168.1.100[/color] /applications=/:. /root=/home/asp/www /logfile=/var/log/mono-server4.log &
```

Adjust its permissions:


```
# chmod ug+x /home/asp/fcgi
```

Create a startup script for fastcgi-mono-server4 in the /home/asp/fcgi_startup file:


```
#!/usr/local/bin/bash
 
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:$HOME/bin:; export PATH
PID=`/bin/ps waux | /usr/bin/grep mono | /usr/bin/grep -v grep | /usr/bin/awk '{ print $2 }'`
 
if  ps waux | grep mono | grep -v grep > /dev/null
 then
        echo "fastcgi-mono-server4 seems to run on PID $PID"
        exit
else
    echo "fastcgi-mono-server4 is not running. Starting it"
    /home/asp/fcgi
fi
```

Make it executable:


```
# chmod ug+x /home/asp/fcgi_startup
```

Now add the job to crontab:


```
# crontab -uasp -e
```

And then add the following line to crontab file:


```
* * * * * /home/asp/fcgi_startup > /home/asp/mono_laststate
```

Start Nginx:


```
# /usr/local/etc/rc.d/nginx start
```

Do not forget to adjust firewall rules.


----------



## vand777 (Aug 17, 2011)

*Test it*

Create a new file /home/asp/www/hello.aspx:


```
<html>
<body>
<p>It works! <% =Environment.OSVersion.ToString() %></p>
</body>
</html>
```

And then request it at http://your.ip.address/hello.aspx. It should give you the version of your operating system. It displays on my system:


```
It works! Unix 8.2.2.0
```


----------



## vand777 (Aug 17, 2011)

*Asp.Net Web Forms and MVC2 applications*

Asp.Net Web Forms and MVC2 applications should work automatically under this setup (Mono 2.10.2). Just copy files into the /home/asp/www/ folder.

*Asp.Net MVC3 applications
*

In order to make Asp.Net MVC3 applications working under Mono 2.10.2, you have to copy additional files from your Windows development workstation into your project's bin directory (these files will finally end up in /home/asp/www/bin folder):

c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies\System.Web.Mvc.dll
c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies\System.Web.Mvc.xml
c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\NuGet.Core.dll
c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.Helpers.dll
c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.Helpers.xml
c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.Razor.dll
c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.Razor.xml
c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.WebPages.dll
c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.WebPages.xml
c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.WebPages.Administration.dll
c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.WebPages.Deployment.dll
c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.WebPages.Deployment.xml
c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.WebPages.Razor.dll
c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.WebPages.Razor.xml
c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\WebMatrix.Data.dll
c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\WebMatrix.Data.xml
c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\WebMatrix.WebData.dll
c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\WebMatrix.WebData.xml

Also you have to delete EntityFramework.xml and EntityFramework.dll from /home/asp/www/bin folder after you have copied your project there.

Please read the section "ASP.NET MVC3 Support" on Mono 2.10 Release Notes for the details.


----------



## vand777 (Aug 17, 2011)

Should you have any problems when building or running mono, please do not forget to read /usr/ports/lang/mono/pkg-message message. Maybe you will find the solution to your problem.

For example, this part might be important:

```
* If you are in a jailed environment, ensure System V IPC are enabled.
  You can rely on the security.jail.sysvipc_allowed  sysctl to check
  this status.  The following enables this feature on the host system:
    # echo "jail_sysvipc_allow=\"YES\"" >> /etc/rc.conf
```

The above tutorial was tested in jail on FreeBSD 8.2p2, Mono 2.10.2.


----------



## vand777 (Aug 17, 2011)

Reserved


----------



## vand777 (Aug 17, 2011)

Reserved2


----------



## Claud (Nov 29, 2011)

Hello,
Excelent tutorial thanks,
First, i don`t have bash as a default shell script fomr my user and it seems that the startup script needs some adjustemts or it will return bash pid olso , so the script that worked for me was:

```
#!/usr/local/bin/bash
 
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:$HOME/bin:; export PATH
PID=`/bin/ps waux | /usr/bin/grep mono | /usr/bin/grep -v grep | /usr/bin/grep -v /bin/bash | /usr/bin/awk '{ print $2 }'`
 
if  ps waux | grep mono | grep -v grep | grep -v /bin/bash > /dev/null
 then
        echo "fastcgi-mono-server4 seems to run on PID $PID"
        exit
else
    echo "fastcgi-mono-server4 is not running. Starting it"
    /home/asp/fcgi
fi
```
Hope someone finds it useful.


----------



## vand777 (Dec 3, 2011)

Thank you, *Claud*!


----------



## wblock@ (Dec 3, 2011)

Claud said:
			
		

> ```
> ...
> PID=`/bin/ps waux | /usr/bin/grep mono | /usr/bin/grep -v grep | /usr/bin/grep -v /bin/bash | /usr/bin/awk '{ print $2 }'`
> ...
> ```



should be replaceable with


```
PID=`/usr/bin/pgrep mono`
```


----------



## evgen66ru (May 17, 2015)

Please, help...
I have site on the aspx and need to move it on the another server. I created the web server  on your man. Test file shows and the site no.
`# uname -a`

```
FreeBSD trackavto 10.1-RELEASE FreeBSD 10.1-RELEASE #0 r274401: Tue Nov 11 21:02:49 UTC 2014  root@releng1.nyi.freebsd.org:/usr/obj/usr/src/sys/GENERIC  amd64
```

Rules on /home/asp/www is 644

index.aspx = screenshot


----------



## bsd777 (May 21, 2015)

Could you turn off custom errors (if your web server is not publicly available) for short time to see more information on your error?


----------

