seeseekey.net - Invictus Deus Ex Machina

Auf einem meiner Raspberry Pi-Rechner läuft eine in Mono geschriebene Server-Applikation. Damit die Server-Applikation funktionierte benötigte sie natürlich die Mono Runtime. Diese kann unter Raspbian einfach mittels des Kommandos:

apt-get install mono-runtime

installiert werden. Als ich die Serverapplikation nach der Installation von Mono ausführen wollte erhielt ich allerdings folgende Fehlermeldung:

Missing method .ctor in assembly Melinda.dll, type System.Runtime.CompilerServices.ExtensionAttribute
Can't find custom attr constructor image: Melinda.dll mtoken ...

Dieses Problem ließ sich durch die Installation der Bibliothek libmono-system-core4.0-cil beheben:

apt-get install libmono-system-core4.0-cil

Im Anschluss erhielt ich bei einem erneuten Startversuch eine weitere Fehlermeldung:

Grapevine.Exceptions.Server.UnableToStartHostException occurred
An error occured when trying to start the Grapevine.Server.RestServer

In diesem Fall kam die Fehlermeldung vom REST-API Framework Grapevine. Allerdings war der Fehler nicht wirklich in der Bibliothek zu finden. Stück für Stück kamen weitere Fehlermeldungen wie diese:

System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.

zustande. Nach einiger Recherche war klar: auch in diesem Fall fehlten weitere Abhängigkeiten aus dem Mono-Framework. In diesem Fall half die Holzhammermethode; die Installation des kompletten Mono-Frameworks. Dazu wurde das Paket mono-complete mittels:

apt-get install mono-complete

installiert. Dieses nimmt ein paar mehr Megabyte als das Runtime-Paket in Anspruch, allerdings sind damit alle möglichen Abhängigkeiten installiert. Somit kann man sich auf die eigentliche Entwicklung und Ausführung der eigenen Applikationen konzentrieren, anstatt einer kuriosen Fehlermeldung nach der anderen hinter her zu jagen.

Seit November 2016 wird die Standarddistribution für den Raspberry Pi namens Raspbian, eine auf Debian basierende Distribution, mit deaktiviertem SSH-Server ausgeliefert. Was aus Sicherheitsgründen lobenswert ist hat natürlich für die schnelle Inbetriebnahme eines Raspberry Pi einige Nachteile.

Ein Raspberry Pi 3

Allerdings existieren zwei relativ einfache Wege den SSH-Dienst wieder zu aktivieren. Die erste Möglichkeit ist, nachdem das Image auf die für den Raspberry Pi verwendete SD- bzw. microSD-Karte gebracht wurde, auf der boot-Partion der Karte eine Datei mit dem Namen ssh anzulegen. Ist diese Datei vorhanden, so wird der SSH-Serverdienst beim Start des Raspberry Pi aktiviert.

Die entsprechende Option in raspi-config

Läuft der Raspberry Pi bereits und man hat Zugriff auf diesen kann der SSH-Dienst mittels des Konfigurationstools raspi-config aktiviert werden. Nachdem dieses gestartet wurde, wird dort der Punkt Interfacing Options ausgewählt. Dort findet sich der Unterpunkt P2 SSH. Wählt man diesen Unterpunkt an, wird nach der Bestätigung der Sicherheitsabfrage der SSH-Dienst aktiviert.

Nach der Sicherheitsabfrage wird der SSH-Dienst aktiviert

Nun kann sich (wenn das Raspbian noch in der Standardkonfiguration läuft) mittels:

ssh pi@raspberry.local

und dem Passwort raspberry eingeloggt werden. Da man dieses Passwort nach der Ersteinrichtung ändern sollte, erhält man beim Login über ssh folgenden Hinweis:

SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.

Dieses Hinweis sollte befolgt werden und das Passwort mit dem Kommando:

passwd

geändert werden. Anschließend kann der Raspberry Pi ohne Probleme mit dem SSH-Dienst genutzt werden. In der offiziellen Raspberry Pi Dokumentation wird weiterführend auf das Thema eingegangen. Dort wird neben der eigentlichen Einrichtung des SSH-Dienstes auch die Nutzung verschiedener Clients in den unterschiedlichen Betriebssystemen besprochen.

Wer einen Drucker ohne Netzwerkanschluss besitzt, kann ihn mit Hilfe eines Raspberry Pi zu einem Netzwerkdrücker umrüsten. Dazu werden im ersten Schritt die notwendigen Pakete installiert:

sudo apt-get install avahi-daemon cups cups-pdf

Nach der Installation geht es an die Konfiguration. Dazu wird die “cupsd.conf” bearbeitet:

sudo nano /etc/cups/cupsd.conf

Den Sektionen “<Location />”, “<Location /admin>” und “<Location /admin/conf>” wird dabei die Zeile:

Allow @Local

hinzugefügt. Daneben sollte noch die Zeile:

Listen <IP Adresse>:631

hinzugefügt werden. Das sorgt dafür das auf dem passenden Interface gehorcht wird. Danach geben wir in der Konsole folgendes ein:

sudo adduser pi lpadmin
sudo service cups restart

Damit wird der Nutzer “pi” der Gruppe der Nutzer hinzugefügt welche Einstellungen vornehmen dürfen. Außerdem wird der CUPS Service neugestartet, so das die Änderungen in der Konfigurationsdatei wirksam werden. Nun kann sich über die URL:

https://<IP Adresse>:631

mit dem Webinterface von CUPS verbunden werden.

Das CUPS Webinterface

Das CUPS Webinterface

Im Webinterface wird nun unter dem Tab “Verwaltung” der Punkt “Freigeben von Druckern welche mit diesem System verbunden sind” aktiviert. Bestätigt wird das ganze mit den Zugangsdaten des Nutzers “pi”. Abschließend klickt man auf den Button “Verfügbare Drucker auflisten” und fügt die angeschlossenen Drucker hinzu und gibt ihn frei. Dazu muss das passende Modell ausgesucht und bestätigt werden.

Anschließend kann man den Drucker in seinem Betriebssystem hinzufügen und über den Raspberry Pi drucken. Sollte wieder erwarten kein Druck stattfinden, so liegt das meist am falsch gewählten Druckertyp. Mit der beschriebenen Konfiguration lässt sich auch von iOS Geräten mittels AirPrint druchen.