Systemd Service zum herstellen einer Internetverbindung über den USB-OTG Port.

Tobias Müller 01e3c96f5c README.md: Hinzufügen der Dateibeschreibungen 6 gadi atpakaļ
Internet_over_USB.service e33a1d99ae Internet_over_USB.service: Service Fertigstellung 6 gadi atpakaļ
README.md 01e3c96f5c README.md: Hinzufügen der Dateibeschreibungen 6 gadi atpakaļ
install.sh 7714676f9c install.sh: Füge eine Neustart-Abfrage hinzu 6 gadi atpakaļ

README.md

BeagleBone Black - Internet over USB Service

📜 Inhaltsverzeichnis

  1. Einleitung
  2. Skripte
  3. Einstellungen am Host-PC
  4. Quellenverzeichnis

Hinweis: Wenn Sie dieses Repository downloaden möchten, können Sie es direkt als ZIP-Datei herunterladen, oder mit Hilfe des Git-Repository-Links auf Ihren Rechner bzw. BBB klonen.

☁ Git-Repository-Link: http://es-lab.de:60085/tmueller/BBB_Internet_over_USB_Service


❓ 1. Einleitung

Bei dem Programm handelt es sich um ein Systemd-Service für das BeagleBone Black, dass bei Systemstart den USB-Host-Anschluss für eine Internetverbindung vorbereitet. Für die Installation des Services steht ein Installationssktipt zur Verfügung.

Des Weiterem wird die Einrichtung der Internetverbindung über USB am Host-PC für Windows und Linux erklärt.

📝 2. Skripte

In den folgenden Abschnitten wird die Funktion der Skripte „Internet_over_USB.service“ und „install.sh“ erklärt.

Internet_over_USB.service

Der "Internet_over_USB"-Service wird automatisch bei jedem Neustart des BeagleBone Black ausgeführt und ermöglicht den Aufbau einer Internetverbindung über den USB-Host-Anschluss des BeagleBone Black. Das Install-Sktipt dient zur Installation des Services. Der Service wird von systemd, einem System und Servicemanager, verwaltet und gestartet. Nach der Installation darf der Speicherort der Service-Datei nicht verändert werden, da sonst der Service nicht mehr korrekt ausgeführt wird. Soll dennoch der Speicherort der Service-Datei geändert werden muss im Anschluss das Insatllationsskript erneut ausgeführt werden.

Die "Internet_over_USB.service"-Datei enthält den folgenden Quellcode:

# Autor: Tobias Müller
# Beschreibung: Dieser Systemd-Service ermöglicht das Herstellen 
#               einer Internetverbindung über den USB-Host-Anschluss.

[Unit]
# Kurze Beschreibung des Services
Description=Internet über USB

# Service wird nach dem "Network Target" gestartet
After=network.target

[Service]
# Setze Service-Typ auf Simple -> Main-Process
Type=simple

# Starte den Service mit Root-Rechten
User=root

# Starte den Service bei einem Fehler nach 1s für max. 10 Versuche
# innerhalb von 15s neu
Restart=on-failure
RestartSec=1
StartLimitBurst=10
StartLimitInterval=15

# Füge als erstes die IP-Adresse der USB-Host-Schnittstelle als 
# Gateway hinzu
ExecStartPre=/bin/sh -c "/sbin/route add default gw 192.168.7.1"

# Füge danach die Google-IP-Adresse als DNS hinzu
ExecStart=/bin/sh -c "echo \"nameserver 8.8.8.8\" >> /etc/resolv.conf"

# Deaktiviere Service, wenn der Prozess beendet wurde
RemainAfterExit=no

[Install]
# Aktiviere und starte den Service für Mehrbenutzersystem, mit
# oder ohne grafische Anmeldung
WantedBy=multi-user.targe

install.sh

Die „install.sh“-Datei dient zum Installieren der „Internet_over_USB“-Service-Datei. Das Installationsskript muss mit Root-Rechten gestartet werden, da symbolische Verknüpfungen im System angelegt werden. Des Weiteren muss die Service-Datei sich im selben Ordner befinden, wie das Installationsskript.

Die „install.sh“-Datei enthält den folgenden Quellcode:

    #!/bin/bash
    #
    # Autor: Tobias Müller
    # Beschreibung: Dieses Skript installiert den "Internet_over_USB" Service.
    #		Der Service wird automatisch bei jedem Neustart des
    #		BeagleBone Black ausgeführt und ermöglicht den Aufbau einer
    #		Internetverbindung über den USB-Host-Anschluss des BeagleBone
    #		Black. Das Install-Sktipt muss mit Root-Rechten gestartet
    #		werden.
    #
    #		Sollte sich der Speicherort der "Internet_over_USB.service"
    #		Datei ändern, muss dieses Skript erneut gestartet werden.
    #		Dabei muss sich das "install.sh" Skript im selben Ordner
    #		befinden, wie die "Internet_over_USB.service" Datei.

    # Bash-Fenster leeren
    clear

    # Kontrolle ob Skript mit Root-Rechten gestartet wurde, ansonsten wird
    # das Skript mit einem Hinweis beendet
    if [ $(id -u) != 0 ]; then
       echo ""
       echo "Das Skript muss mit Root-Rechten gestartet werden!"
       echo ""
       exit -1

    fi

    # Willkommenstext mit Abfrage, ob die Installation gestartet werden soll
    echo ""
    echo "Willkommen zur Installation des \"Internet_over_USB\"-Services."
    echo "Möchten Sie die Installation starten (ja/nein)?"
    read answer

    while [ "$answer" != "ja" ]; do

       if [ "$answer" == "nein" ]; then
          echo ""
          echo "Beende das Installations-Skript."
          echo ""
          unset answer
          exit 0

       else
          echo ""
          echo "Ich habe Sie nicht verstanden."
          echo "Möchten Sie die Installation starten (ja/nein)?"
          read answer

       fi

    done

    # Servicename
    service_name="Internet_over_USB.service"

    # Aktueller Pfad
    service_path="`pwd`"

    # Kontrolle, ob Service-Datei im selben Verzeichnis wie "install.sh"-Skript
    if [ -e "$service_path/$service_name" ]; then
       echo ""
       echo "Die \"Internet_over_USB.service\"-Datei wurde gefunden."

    else
       echo ""
       echo "Die \"Internet_over_USB.service\"-Datei wurde nicht gefunden."
       echo "Beende das Installations-Skript."
       echo ""
       unset answer
       unset service_path
       unset service_name
       exit -1

    fi

    # systemd Speicherort für Bibliotheken
    systemd_lib="/lib/systemd/system"

    # systemd Speicherort Ausführdateien
    systemd_run="/etc/systemd/system/multi-user.target.wants"

    # Erstelle/Update symbolischen Link von der Systemd-Bibliothek zur Service-Datei
    if [ -e "$systemd_lib/$servie_name" ]; then
       echo ""
       echo "Update der symbolischen Verknüpfung von der Service-Datei:"
       echo "\"$service_path/$service_name\","
       echo "zur Systemd-Bibliothek:"
       echo "\"$systemd_lib/$service_name\"."
       ln -sfn "$service_path/$service_name" "$systemd_lib/$service_name"

    else
       echo ""
       echo "Erstelle eine symbolische Verknüpfung von der Service-Datei:"
       echo "\"$service_path/$service_name\","
       echo "zur Systemd-Bibliothek:"
       echo "\"$systemd_lib/$service_name\"."
       ln -s "$service_path/$service_name" "$systemd_lib/$service_name"

    fi

    # Erstelle/Update symbolischen Link vom Systemd-Speicherort für Konfigurations- und 
    # Informationsdateien zur Service-Datei
    if [ -e "$systemd_lib/$servie_name" ]; then
       echo ""
       echo "Update der symbolischen Verknüpfung von der Service-Datei:"
       echo "\"$service_path/$service_name\","
       echo "zum Systemd-Speicherort für Konfigurations- und Informationsdateien:"
       echo "\"$systemd_run/$service_name\"."
       ln -sfn "$service_path/$service_name" "$systemd_run/$service_name"

    else
       echo ""
       echo "Erstelle eine symbolische Verknüpfung von der Service-Datei:"
       echo "\"$service_path/$service_name\","
       echo "zum Systemd-Speicherort für Konfigurations- und Informationsdateien:"
       echo "\"$systemd_run/$service_name\"."
       ln -s "$service_path/$service_name" "$systemd_run/$service_name"

    fi

    # Systemd-Daemon-Prozess neustarten
    echo ""
    echo "Starte den Systemd-Deamon-Prozess neu."
    systemctl daemon-reload

    # Aktiviere den Autostart für den "Internet_over_USB"-Service
    echo "Aktiviere den Autostart für den \"Internet_over_USB\"-Service."
    systemctl enable Internet_over_USB

    # Starte den "Internet_over_USB"-Service
    echo ""
    echo "Möchten Sie den BeagleBone Black neustarten, um den Service:"
    echo "\"Internet_over_USB\", zu aktivieren (ja/nein)?"
    read answer

    while [ "$answer" != "nein" ]; do

       if [ "$answer" == "ja" ]; then
          # Installationsabschluss
          echo ""
          echo "Die Serviceinstallation ist abgeschlossen."
          echo "Beende das Installations-Skript."
          echo ""
          echo "Starte den BeagleBone Black neu."
          echo ""

          # Variablen löschen
          unset systemd_lib
          unset systemd_run
          unset service_name
          unset service_path
          unset answer

          # Warte 5s
          sleep 5

          # Starte BeagleBone neu
          reboot

       else
          echo ""
          echo "Ich habe Sie nicht verstanden."
          echo "Möchten Sie die Installation starten (ja/nein)?"
          read answer

       fi

    done

    # Installationsabschluss
    echo ""
    echo "Die Serviceinstallation ist abgeschlossen."
    echo "Beende das Installations-Skript."
    echo ""

    # Variablen löschen
    unset systemd_lib
    unset systemd_run
    unset service_name
    unset service_path
    unset answer

    # Beende Installer
    exit 0

💻 3. Einstellungen am Host-PC

In den folgenden Abschnitten wird die weiterführende Einrichtung für das Erstellen einer Internetverbindung über USB am Host-PC (Windows oder Linux) erläutert.

Windows

Linux

🌐 4. Quellenverzeichnis

    [1]  FreeDesktop
           systemd System and Service Manager
           https://www.freedesktop.org/wiki/Software/systemd/
           Abfragedatum: 31.10.2017

    [2]  Ubuntu User Wiki
           systemd
           https://wiki.ubuntuusers.de/wiki/tags/systemd/
           Abfragedatum: 31.10.2017

    [3]  Debian Wiki
           systemd - system and service manager
           https://wiki.debian.org/systemd
           Abfragedatum: 31.10.2017

    [4]  Elementz Tech Blog
           Sharing internet using Network-Over-USB in BeagleBone Black
           https://elementztechblog.wordpress.com/2014/12/22/sharing-internet-using-network-over-usb-in-beaglebone-black/
           Abfragedatum: 31.10.2017

    [5]  Carl Lance
           Windows 7 Internet Sharing for BeagleBone Black
           http://lanceme.blogspot.de/2013/06/windows-7-internet-sharing-for.html
           Abfragedatum: 31.10.2017


Hochschule Anhalt | Anhalt University of Applied Sciences | Fachbereich 6 EMW
BeagleBone Black - Internet over USB Service

Tobias Müller, B. Eng.
📧 Tobias.Mueller@Student.HS-Anhalt.de

© es-lab.de, 31.10.2017