Running MVC5 Applications on Ubuntu Server (14.04.1 LTS)

We will be following the steps outline in the [Install Mono on Linux][1] guide and the [ASP.NET 5 Getting Started][2] guide.

When I installed Mono, KVM, and KPM as described in the above guides, I ran in to a couple of issues. First, unzip was not installed, causing the kvm upgrade command to fail. Secondly, libtool was not found, yielding the following exception:

System.DllNotFoundException: libdl
  at (wrapper managed-to-native) Microsoft.AspNet.Server.Kestrel.Networking.PlatformApis/LinuxApis:dlopen (string,int)
  at Microsoft.AspNet.Server.Kestrel.Networking.PlatformApis+LinuxApis.LoadLibrary (System.String dllToLoad) [0x00000] in :0
  at Microsoft.AspNet.Server.Kestrel.Networking.Libuv.Load (System.String dllToLoad) [0x00000] in :0
  at Microsoft.AspNet.Server.Kestrel.KestrelEngine..ctor (ILibraryManager libraryManager) [0x00000] in :0
  at Kestrel.ServerFactory.Start (IServerInformation serverInformation, System.Func`2 application) [0x00000] in :0
  at Microsoft.AspNet.Hosting.HostingEngine.Start (Microsoft.AspNet.Hosting.HostingContext context) [0x00000] in :0
  at Microsoft.AspNet.Hosting.Program.Main (System.String[] args) [0x00000] in :0
  at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
  at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in :0</pre>

Installing the `libtool` package fixed the issue.  Lastly, once `libtool` was installed, I was greeted with this exception:

System.NullReferenceException: Object reference not set to an instance of an object
  at Microsoft.AspNet.Server.Kestrel.Networking.Libuv.loop_size () [0x00000] in :0
  at Microsoft.AspNet.Server.Kestrel.Networking.UvLoopHandle.Init (Microsoft.AspNet.Server.Kestrel.Networking.Libuv uv) [0x00000] in :0
  at Microsoft.AspNet.Server.Kestrel.KestrelThread.ThreadStart (System.Object parameter) [0x00000] in :0</pre>

This was remedied by downloading, compiling, and installing `libuv`.  In particular, `libuv` needs to be installed (or symlinked) to `/usr/lib/libuv.so.1` for everything to work correctly.

So without further ado, here is a quick step-by-step guide to Running MVC5 applications on Ubuntu Server (14.04.1 LTS).

### Install Mono ###

First, install Mono.  These steps are pulled straight from the [Install Mono on Linux][1] guide.

    language: sh
    # Add the Xamarin public code-signing key
    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF

    # Add the Mono repository to apt sources
    echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list

    # Install Mono
    sudo apt-get update
    sudo apt-get install -y mono-complete

### Install libtool, libuv, unzip and Their Dependencies ###

Next we install the rest of the dependencies.

    language: sh
    # Install other prerequisites
    sudo apt-get install -y autoconf build-essential git-core libtool unzip

    # Compile libuv
    cd /opt
    sudo git clone https://github.com/libuv/libuv.git
    cd libuv
    sudo ./autogen.sh
    sudo ./configure
    sudo make
    sudo make install
    sudo ln -s /usr/local/lib/libuv.so /usr/lib/libuv.so.1

*`autoconf`, `build-essential`, and `git-core` are necessary to build and install `libuv`.*

### Install the K Version Manager and the K Runtime Environment ###

These steps are pulled from the [ASP.NET 5 Getting Started][2] guide.

    language: sh
    # Get the K Version Manager
    curl -sSL https://raw.githubusercontent.com/aspnet/Home/master/kvminstall.sh | sh && source ~/.kre/kvm/kvm.sh

    # Install the runtime
    kvm upgrage

## All Done? ##

Here we could call it a day, since your Ubuntu system is now set up to run ASP.NET 5 applications. Why don't we follow through with the rest of the guide so we can see it working?

    language: sh
    # Obtain the ASP.NET 5 samples
    git clone https://github.com/aspnet/Home.git ~/AspNetHome
    cd ~/AspNetHome/samples/HelloMvc

    # Get all of the .NET dependencies necessary to run the sample
    kpm restore

    # Run the sample
    k kestrel

Here it is, running on my machine:

![Running Kestrel][3]

![Working Sample][4]

[1]: http://www.mono-project.com/docs/getting-started/install/linux/
[2]: https://github.com/aspnet/Home#getting-started
[3]: http://otac0n.com/blog/images/AspNetUbuntu%20-%201%20-%20Running%20Kestrel.png "Running Kestrel"
[4]: http://otac0n.com/blog/images/AspNetUbuntu%20-%202%20-%20Working%20Sample.png "Working sample"
comments powered by Disqus