Mono-Probleme auf dem Raspberry Pi

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.

SSH-Deamon auf dem Raspberry Pi aktivieren

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 

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.

nslookup unter Windows mit anderem DNS-Server durchführen

Möchte man zu einer Domain die IP-Adresse und weitere DNS-Informationen ermitteln kann man unter Windows das Tool nslookup nutzen. Ein einfacher Aufruf sieht dabei so aus:

nslookup example.com

Hierbei wird der DNS-Server genutzt welcher an dem genutzten Rechner eingestellt ist. Allerdings kann auch ein abweichender Server definiert werden. Dazu muss nach der abzufragenden Domain der gewünschte DNS-Server angegeben werden:

nslookup example.com 8.8.8.8

In diesem Fall wird der Google eigene DNS-Server mit der IP 8.8.8.8 genutzt. Die Antwort auf diese Anfrage sieht exemplarisch so aus:

Nicht autorisierende Antwort:
Server:  google-public-dns-a.google.com
Address:  8.8.8.8

Name:    example.com
Addresses:  2606:2800:220:1:248:1893:25c8:1946
          93.184.216.34

Raspberry Pi Firmware aktualisieren

Vor einiger Zeit schrieb ich einen Artikel in welchem ich beschrieb wie die Firmware des Raspberry Pi aktualisiert werden kann. Mittlerweile lässt sich das ganze noch einen Schritt einfacher bewerkstelligen. Im ersten Schritt muss rpi-update installiert werden:

sudo apt-get install rpi-update

Anschließend kann der Updater mittels:

sudo rpi-update

aufgerufen werden. Neben diesem Aufruf existieren eine Reihe weiterer Optionen mit denen sich der Aktualisierungsprozess noch besser steuern lässt. Im Normalfall werden diese allerdings nicht benötigt. Nach dem Backup der alten Firmware und vor dem eigentlichen Update erscheint in der aktuellen Version eine Sicherheitsabfrage:

#############################################################
WARNING: This update bumps to rpi-4.9.y linux tree
Be aware there could be compatibility issues with some drivers
Discussion here:
https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=167934
##############################################################
Would you like to proceed? (y/N)

Wenn man keine spezielle Hardware (der Beitrag im Forum behandelt eventuelle Probleme) betreibt, kann man das ganze mit einem Druck auf die y-Taste bestätigen. Anschließend wird das Firmware-Update durchgeführt. Dabei werden die Firmware, Kernel Module, das SDK, einige Bibliotheken wie z.B. die VideoCore und HardFP-Bibliotheken und weitere Komponenten aktualisiert. Wenn die Aktualisierung fehlerfrei durchlief, sollte der Raspberry Pi mittels:

sudo reboot

neugestartet werden. Das Projekt des Updaters kann auf GitHub gefunden werden. Der Updater ist unter der MIT Lizenz lizenziert und freie Software. Technisch handelt es sich bei dem rpi-update-Tool um ein Bash-Skript. Es befindet sich seit April 2012 in aktiver Entwicklung, so das man auch in Zukunft auf dieses Tool bauen kann.

Dominantes Auge ermitteln

Menschen verfügen über zwei Augen und navigieren mit ihnen durch die Welt. Eines dieser Augen ist in den meisten Fällen dominant. Das bedeutet das die Sehinformationen dieses Auges die des anderen überlagern. Doch aus welchem Grund ist es wichtig zu wissen welches Auge dominant ist?

Beim Bogensport ist das dominante Auge relevant

Im Normalfall ist es relativ egal welches unserer beiden Augen dominant ist. Aber Ausnahmen bestätigen wie so oft die Regel; eine dieser Ausnahmen ist der Bogensport. Hier bestimmte das dominante Auge was für einen Bogen man benötigt. Ist das linke Auge dominant, benötigt man ein Linksmodell des entsprechenden Bogen (welcher wiederum in die rechte Hand genommen wird; die sehnenführende Hand gibt beim Bogen die Händigkeit an). Bei einem dominanten rechten Auge ist dies natürlich genau umgekehrt. Der Hintergrund hierfür ist, dass man mit der Wahl des richtigen Bogens, mit offenen Augen zielen kann da das dominante Auge das Bild bestimmt. Zielt man hingegen mit dem nicht dominanten Auge, so muss das dominante Auge abgedeckt oder zugekniffen werden.

Der Punkt verschwindet wenn das dominante Auge geschlossen wird

Um das dominate Auge zu ermitteln gibt es einen einfachen Weg. Man zeichnetet einen Punkt auf ein Blatt Papier und hängt dieses Papier zirka zwei Meter entfernt auf. Nun bildet man mit den beiden Händen ein Dreieck durch welches man in Richtung des Punktes schaut. Das Dreieck in der Hand sollte nun so klein gemacht werden dass man mit beiden Augen nur noch den Punkt sieht. Nun schließt man abwechselnd das linke und anschließend das rechte Auge. Springt der Punkt beim Schließen des linken Auges weg, ist das linke Auge dominant. Springt er hingegen beim Schließen des rechten Auges zur Seite ist eben dieses Auge dominant.

Nun kann es passieren das der Punkt abwechselnd bei beiden Augen wegspringt. Hier sprich man von Kreuzdominanz; das bedeutet das sich das dominante Auge abwechselt. In diesem Fall muss man sich entscheiden welches Auge man langfristig zum Zielen nutzt.