.net Core unter Linux (Raspberry Pi)

Es hat sich einiges getan in den letzten Monaten. ASP.net vNext heisst jetzt ASP.net Core bzw .net Core und es gibt auch schon einen Release Kandidaten. Wer das alte Tutorial noch kennt und vielleicht auch mal ausprobiert hat kann sich noch an eine Stundenlange Session errinnern. Jetzt ist das ganze deutlich einfacher und vor allem Schneller.

Hier eine Schritt für Schritt Anleitung wie ihr .net Core und die Tools (die derzeit noch Mono benötigen) auf den Raspberry Pi zum laufen bringt.

Vorraussetzungen

Nützlich aber nicht zwingend notwendig:

Installation

Für die Installation muss man zuerst eine MicroSD Karte vorbereiten und Linux installieren. Wer schon eine fertige SD Karte hat kann diesen Punkt überspringen.

Formatierung der SD Karte

Für die Installation unter Windows verwendet man am Besten das Tool SD Formatter 4.0. Sicherheitshalber in den Optionen FORMAT SIZE ADJUSTMENT auf  ON stellen das man den kompletten Platz verfügbar hat. Das ist besonders wichtig wenn man auf der Karte schonmal eine Linux installation hatte.

SDFormater

Vorbereiten des Installers

Das Betriebssystem für den Raspberry Pi heisst Raspbian und kann man unter http://www.raspberrypi.org/downloads/ heruntergeladen werden. Es gibt einen praktischen Bootloader namens NOOBS zum Installieren. Eine Variante die alle Images beinhaltet (NOOBS) und einen für die Installation über das Internet (NOOBS Light).

Wenn ihr den Pi über WLAN oder eine langsame Internetverbindung betreiben wollt ist die Volle Variante empfehlenswert. Ebenso wenn ihr plant mehrere Geräte zu installieren. Ansonsten genügt die NOOBS Light Version die wesentlich kleiner ist.

Den Inhalt des Zip Archivs kopiert man dann einfach auf die formatierte SD Karte und steckt diese in den Kartenleser des Raspberry Pi. Netzwerkkabel einstecken, Monitor über HDMI anstecken und danach den Stromstecker. Der Pi bootet von alleine

WP_20160128_00_22_09_Pro_LI (2)

Nach dem Boot Vorgang erscheint dann eine Auswahlmaske für die Image Auswahl. Ich habe mich für das Klassische Raspbian Image entschieden die vNext installation funktioniert aber genauso gut mit anderen Debian basierten Versionen wie z.b. OpenELEC.

Die Installation dauert einige Minuten. Am Ende kann man noch einige Einstellungen konfigurieren. Zum Beispiel kann man den Pi übertakten, Sprache ändern, WLAN konfigurieren usw…. Hier möchte ich nicht so ins Detail gehen es gibt genug Anleitungen im Internet.

Meine Empfehlung ist nur das man das Standard Passwort für den user pi von raspberry auf etwas sicheres ändert.

(optional) Statische IP Adresse einrichten

Wenn man hauptsächlich remote auf den Pi zugreift oder später mal eine Webseite darauf hosten will sollte man eine statische IP Adresse festlegen.

Standardmäßig ist DHCP aktiviert. Die aktuelle IP Adresse kann man mit dem Befehl „ifconfig“ ermitteln.

ifconfig

Ändern kann man diese Einstellung in der Datei /etc/network/interfaces

Dieser Befehl Öffnet einen Editor (nano) mit root rechten (sudo) für die entsprechende Datei

sudo nano /etc/network/interfaces

Für Ethernet ändert man diese Zeile:

iface eth0 inet dhcp

in diese (in meinem Fall ist die IP 192.168.1.107:

iface eth0 inet static
    address 192.168.1.107 
    netmask 255.255.255.0
    gateway 192.168.1.1

Strg+X beendet den Editor. Speicher nicht vergessen!

Jetzt noch den Pi neu starten

sudo reboot

Start der Installation

Statt mit der tastatur kann man jetzt bequem remote über SSH weiter arbeiten. Ich verwende dafür den kostenlosen SSH Client Putty

IP Adresse eintragen der Rest sollte Standard sein

putty

Nach dem Login sieht man entweder am Monitor oder im SSH Client die Linux Konsole

Console

Eigentlich muss man jetzt nur noch ein paar Befehle in der Richtigen Reihenfolge abtippen

Wenn nachgefragt wird ob man Daten herunterladen will etc.. mit Enter bestätigen:

Zuerst bringen wir die bereits installierten Pakete auf den letzten Stand

sudo apt-get update

Ein paar Libraries nachinstallieren (auf manchen fertigen SD Karten sind die schon drauf aber man kann den Befehl trotzdem ausführen)

sudo apt-get install libunwind8 libssl-dev unzip

Aktuell (Stand Jänner 2016) muss man für die DNX Tools noch Mono installieren später ist das nicht mehr Notwendig da die Tools selber als .net Core Application laufen

Jetzt installieren wir die aktuellste Mono Version. Im alten Tutorial war das noch recht Zeitaufwendig da man es neu kompilieren musste jetzt gibt es einen wesentlich einfacheren Weg:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list
sudo apt-get install mono-complete

nach ein paar Minuten haben wir dann eine aktuelle Mono version. Das kann man mit diesem Befehl auch gleich mal überprüfen:

mono --version

monoVersion

Die aktuelle Version von .net Core habe ich aber nur mit der aktuellsten Mono Version 4.2.1 getestet. Diese oder eine neuere Version sollte bei euch jetzt installiert sein.

Zertifikate

.net Core lädt Pakete über Nuget. Damit das funktioniert muss man einigen root zertifikaten vertrauen das lässt sich mit disem Befehl aber schnell erledigen:

mozroots --import --sync

.net Core DNX SDK installieren

Wer sich jetzt fragt was ist ein DNX?

DNX oder auch .NET Execution Environment ist ein SDK (Software Development Kit) und eine Runtime die alles beinhaltet  was man für das kompilieren und starten von .NET Core Applikationen braucht. Vergleichbar mit dem .net SDK unter Windows nur das es das .net Core DNX auch für Linux und Mac gibt. Später werden wir noch ein bisschen mehr über die Tools und Funktionen erfahren.

Als erstes müssen wir die “Mono DNX” installieren da die DNU Commands derzeit auf Mono basieren.

dnvm upgrade -u

Das sieht dann ca so aus:

pi@raspberrypi:~ $ dnvm upgrade -u
Determining latest version
Latest version is 1.0.0-rc2-16357
Downloading dnx-mono.1.0.0-rc2-16357 from https://www.myget.org/F/aspnetvnext/api/v2
Download: https://www.myget.org/F/aspnetvnext/api/v2/package/dnx-mono/1.0.0-rc2-16357
######################################################################## 100,0%
Installing to /home/pi/.dnx/runtimes/dnx-mono.1.0.0-rc2-16357
Adding /home/pi/.dnx/runtimes/dnx-mono.1.0.0-rc2-16357/bin to process PATH
Updating alias 'default' to 'dnx-mono.1.0.0-rc2-16357'

Als nächstes installieren wir das aktuellste .net Core DNX SDK

dnvm install latest -r coreclr -u

Mit

dnvm list

zeigt die aktuell installieren Versionen

dnvm list

In meinem Fall habe ich für Mono die Version  1.0.0-rc1-update1 bzw  1.0.0-rc2-16357  installiert und als echte .net Core CLR 1.0.0-rc2-16357 in einer 64bit Version

die Core CLR ist als aktiv markiert also können wir gleich mal loslegen.

Der Klassiker “Hello World”

Bevor wir jetzt mit SFTP Visual Studio usw.. arbeiten testen wir unsere Installation mal mit einem “Hello Word” Klassiker mit dem nano editor. Dafür erstelle ich ein Verzeichnis “demo” und lege 2 Files an: Program.cs (das eigentliche Program) und project.json (konfiguration)

Also los gehts:

mkdir demo
cd demo
nano Program.cs

Diesen Code tippen oder kopieren:

using System;

public class Program
{
    public static void Main (string[] args)
    {
        Console.WriteLine("Hello Linux");
        Console.WriteLine("Hello CoreCLR!");

        Console.WriteLine($"Ich laufe auf {Environment.OSVersion.ToString()}");
    }
}

STRG+X –> J –> Enter zum Speichern und schließen

nano project.json
{
    "version": "1.0.0-*",
    "dependencies": {
    },
    "frameworks" : {
        "dnx451" : { },
        "dnxcore50" : {
            "dependencies": {
                "System.Console": "4.0.0-*"
            }
        }
    }
}

Da die Tools derzeit nur unter Mono laufen ist es aktuell besser mono statt .net Core zu verwenden. Das kann sich aber innerhalb von Tagen ändern also schreibe ich gleich mal beide Varianten auf:

Wechseln der aktuellen CLR

Das Wechseln der CLR ist recht einfach

In unserem Fall (Versionsnummer eventuell anpassen!)

.net Core CLR
 dnvm use 1.0.0-rc2-16357 -r coreclr
Mono CLR
 dnvm use 1.0.0-rc2-16357 -r mono

Nuget Update

Vor dem 1. Start müssen die benötigten Pakete heruntergeladen werden.

Aktuell (Version RC2) Funktioniert das nur mit der Mono CLR

dnu restore

Starten des Programs

dnx run

Done

So das wars mal fürs Erste.

Im nächsten Teil (der sicher kürzer ausfällt) werde ich kurz die Tools vorstellen

Und dann hoffentlich bald ein paar Beispiel Programme und MVC Webseiten

Fortsetzung folgt…