# Onboarding Backend (PaAn) ## Speicherung der Daten Die eingegebenen Daten auf der Onboarding-screen Webseite werden in einer Konfigurationsdatei **onboarding-config.json** gespeichert. Diese Datei wurde von einem OnboardingConfig Objekt erzeut, also eine Instanz von einer Klasse **OnboardingConfig**(siehe [Abbildung zur Onboarding Klasse](#onboarding_class_jpg)). Am Anfang beim ersten Hochfahren des Gerätes ist die Datei **onboarding-config.json** leer und die Startseite wird aufgerufen. Beim Aufruf von dieser Seite, wird überprüft, ob die Datei leer ist oder nicht. Falls die Datei leer ist, wird auf der Onboarding-screen Seite weitergeleitet. Wenn diese Onboarding-screen Seite aufgerufen wurde, dann wird eine neue Instanz der Klasse **OnboardingConfig** ausgeführt. Dieses instanziierte Objekt wird als globale Variable deklariert sein. ```{figure} ../img/backend/onboarding_class.jpg :alt: onboarding_class :name: onboarding_class_jpg OnboardingConfig Klasse ``` ## Umsetzung der festen IP Adresse Für die automatische Ausfüllung des Formulars auf der Onboarding-screen Webseite in der Kategorie Netzwerk Einstellung, sollte zuerst der Name der aktuellen aktiven Ethernet Netzwerk Schnittstelle auf der Debian Betriebssystem gelesen werden mit dem Linux ip Kommando in dem folgenden Code Beispiel. In diesem Beispiel heißt die Netzwerk Schnittstelle enp0s3: ```bash ip route | grep "^default" | awk '{print $5}' > enp0s3 ``` Wenn die Netzwerk Schnittstelle bekannt ist, wird die IP Adresse auf dieser Schnittstelle gelesen. Die vorgeschlagenen Gateway- und DNS-Adressen kann man auch mit dem Linux IP Kommando bekommen: ```bash ip route | grep "^default" | awk '{print $3}' > 10.0.2.2 ``` Die oben genannten Netzwerkdaten werden bei der Instanziierung der Klasse LocalIpConfig (siehe [Abbildung zur LocalIpConfig Klasse](#localip)) initialisiert. Diese Klasse benutzt ein eigenes geschriebenes Modul ip. ```{figure} ../img/backend/localip.jpg :alt: localip :name: localip LocalIpConfig Klasse ``` Diese Daten können über eine öffentliche api erreichbar sein | URL | HTTP Methode | Beschreibung | Methode | |:----|:------------:|:------------:|:-------:| |/api/network/local | GET | Die lokale Netzwerk Einstellung auf dem Gerät wird gelesen und als localIpConfig json Datenformat zurückgegeben | getLocalIpConfig() | Für das Setzen von dem statischen bzw. festen IP Adresse, wird das schon vorinstallierte debian Paket **NetworkManager** verwendet. Mit dem NetworkManager ist die Konfiguration des Netzwerkes sehr einfach. Er kann über eine Kommandozeile aufgerufen werden. Das Kommandozeilenwerkzeug (tool) dazu, für die Steuerung vom NetworkManager, heißt **nmcli**. Man braucht vier Schritte, um die feste IP Adresse erfolgreich zu setzen. Schritt 1: ```bash sudo nmcli dev status | grep enp0s3 | awk '{s=""; for(i=4;i<=NF;i++){s=s " "$i} print s}' > Wired connection 1 ``` Der Codeblock zeigt, wie der Netzwerkverbindungsname erkannt wird, falls zum Beispiel die aktuelle aktive Netzwerkschnittstelle enp0s3 heißt. In diesem Beispiel heißt der Netzwerkverbindungsname **Wired connection 1**. Schritt 2: Änderung der Netzwerkeinstellung für den erkannten Netzwerkverbindungsname auf eine statische IP Adresse mit den eingegebenen Daten aus der Onboarding-screen-Formular-Webseite: ```bash sudo nmcli con mod "Wired connection 1" \ ipv4.addresses "{ip_address}" \ ipv4.gateway "{gateway}" \ ipv4.dns "{dns}" \ ipv4.method "manual" ``` Schritt 3: Trennen und Wiederverbinden der Netzwerkschnittstelle: ```bash sudo nmcli dev disconnect enp0s3 sudo nmcli dev connect enp0s3 ``` Schritt 4: Neustart des NetworkManagers: ```bash sudo systemctl restart NetworkManager ``` ## Gerät Name Beim Aufruf der Onboarding-screen Webseite wird auch der aktuelle Name des Gerätes gelesen, der dem hostname des Livesystems entspricht. Dieser Name kann sehr einfach mit der folgenden Linux Kommandozeile erkannt werden. ```bash cat /etc/hostname > debian64 ``` Wenn der Lehrer der vorgeschlagene Gerät Name ändern wollte, dann wird die weitere folgende Kommandozeile ausgeführt. ```bash sudo hostnamectl set-hostname {new_hostname} ``` ## Laufzeitsicht Diese Sicht visualisiert , wie die verschiedene Teile zusammenspielen. ```{figure} ../img/backend/Onboarding-Sequenzendiagramm.jpg :alt: Onboarding-Sequenzendiagramm :name: Onboarding-Sequenzendiagramm_jpg Onboarding backend sequenzendiagramm ```