[![](https://gogs.es-lab.de/attachments/f973e848-f964-4271-b42e-d1bbfdbf5e3f)](https://www.hs-anhalt.de)
# BeagleBone Black - Internet over USB Service

[![](https://img.shields.io/badge/Version-1.0-B40404.svg?style=flat)](https://gogs.es-lab.de/mueller_to/BBB_Internet_over_USB_Service) [![]( https://img.shields.io/badge/License-GNU%20GPL%20v3-blue.svg?style=flat )](https://gogs.es-lab.de/mueller_to/BBB_Internet_over_USB_Service/src/master/LICENSE) [![](https://img.shields.io/badge/Skript-Bash-688A08.svg?style=flat)](https://wiki.ubuntuusers.de/Shell/Bash-Skripting-Guide_f%C3%BCr_Anf%C3%A4nger/) [![](https://img.shields.io/badge/Skript-systemd-blue.svg?style=flat)](https://www.freedesktop.org/wiki/Software/systemd/) [![](https://img.shields.io/badge/Adobe-PDF-red.svg?style=flat)](https://get.adobe.com/de/reader/) [![](https://img.shields.io/badge/Download-zip-yellow.svg?style=flat)](https://gogs.es-lab.de/mueller_to/BBB_Internet_over_USB_Service/archive/master.zip)

## :scroll: Inhaltsverzeichnis
1. **[Einleitung](#Einleitung)**
2. **[Skripte](#Skripte)**
    * [Internet_over_USB.service](#IoUSB.s)
    * [install.sh](#install)
3. **[Einstellungen am Host-PC](#Einstellungen)**
    * [Windows](#Windows)
    * [Linux](#Linux)
4. **[Quellenverzeichnis](#Quellenverzeichnis)**

>**Hinweis:** Wenn Sie dieses Repository downloaden möchten, können Sie es direkt als [ZIP](https://gogs.es-lab.de/mueller_to/BBB_Internet_over_USB_Service/archive/master.zip)-Datei herunterladen, oder mit Hilfe des Git-Repository-Links auf Ihren Rechner bzw. BBB klonen.
>
>** :cloud: Git-Repository-Link: [https://gogs.es-lab.de/mueller_to/BBB_Internet_over_USB_Service](https://gogs.es-lab.de/mueller_to/BBB_Internet_over_USB_Service)

---

<div id='Einleitung'/>

## :page_facing_up: 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.

<div id='Skripte'/>

## <p>&#x1F4DD; 2. Skripte</p>
In den folgenden Abschnitten wird die Funktion der Skripte „Internet_over_USB.service“ und „install.sh“ erklärt. 

<div id='IoUSB.s'/>

### 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:

```bash
# 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
```

<div id='install'/>

### 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:

```bash
    #!/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

```

<div id='Einstellungen'/>

## :computer: 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.

<div id='Windows'/>

### Windows

Öffnen Sie den Netzwerk und Freigabecenter unter: 

```
Systemsteuerung\Alle Systemsteuerungselemente\Netzwerk- und Freigabecenter
```

Wie im Bild zu sehen, ist das öffentliche Netzwerk "es-lab" bzw. die Schnittstelle "Ethernet" der Internet-Zugangspunt des Host-PCs. Die Schnittstelle "Ethernet 4" ist die Ethernetverbindung zum BeagleBone Black.

![](https://gogs.es-lab.de/attachments/a3246f6d-7ba2-4a38-9824-e5e48bc874a2)

Nun muss die Internetverbindung mit dem BeagleBone Black geteilt werden. Klicken Sie dazu auf die Ethernet-Schnittstelle von der Sie das Internet beziehen (1). Im Statusfenster klicken Sie nun auf "Eigenschaften" (2). Im Eigenschaftenfenster aktivieren Sie unter "Freigabe" (3) den Punkt: "Anderen Benutzern im Netzwerk gestatten, diese Verbindung des Computers als Internetverbingung zu verwenden" (4). Anschließend wählen Sie die Netzwerkverbindung des BeagleBone Black aus (5) und bestätigen Sie Ihre Einstellung (6). Schießen Sie nun das Statusfenster (7).

![](https://gogs.es-lab.de/attachments/1f5b8315-376b-4d3c-8ddc-ae32b72fb4a8)

Die IP-Adresse der Netzwerk-Schnittstelle des BeagleBone Black muss nun auf "automatisch beziehen" gesetellt werden. Klicken Sie dazu auf die Ethernet-Schnittstelle des BeagleBone Black (1). Anschließend klicken Sie auf "Eigenschaften" (2) und unter "Freigabe" (3) wählen Sie das Feld "Internetprotokoll, Version 4 (TCP/IPv4)" (4) aus. Konfigurieren (5) Sie nun dieses Protokoll. Aktivieren Sie das Feld "IP-Adresse automatisch beziehen" (6) und das Feld "DNS-Serveradresse automatisch beziehen" (7). Zum Abschluss bestätigen Sie Ihre Einstellungen (8-9) und schließen auch alle übrigen Fenster. 

![](https://gogs.es-lab.de/attachments/2cb675fc-8983-4caf-806d-40d4a94a51b7)

Die Internetverbindung über USB für Ihr Beaglebone Black ist nun eingerichtet und kann verwendet werden.

<div id='Linux'/>

### Linux

Die Weiterleitung des Internets zum BeagleBone Black ist auf einem Linux PC wesentlich schneller eingerichtet. Welche Ethernet-Schnittstelle der BeagleBone Black hat und welche die Internetverbindung, können Sie zum Beispiel mit:

```
ifconfig -all
```

herausfinden. In dem folgenden Beispiel ist die Ethernet-Schnittstelle für das Internet "eth0" und die Ethernet-Schnittstelle des BeagleBone Black "eth1". Die folgenden Befehle müssen mit Root-Rechten eingegeben werden.

```bash
ifconfig eth1 192.168.7.1
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface eth1 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
```
Die Internetverbindung über USB für Ihr Beaglebone Black ist nun eingerichtet und kann verwendet werden.

<div id='Quellenverzeichnis'/>

## :globe_with_meridians: 4. Quellenverzeichnis

&nbsp;&nbsp;&nbsp;&nbsp; **[1]**&nbsp; FreeDesktop  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *systemd System and Service Manager*  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [https://www.freedesktop.org/wiki/Software/systemd/](https://www.freedesktop.org/wiki/Software/systemd/)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Abfragedatum: 31.10.2017

&nbsp;&nbsp;&nbsp;&nbsp; **[2]**&nbsp; Ubuntu User Wiki  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *systemd*  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [https://wiki.ubuntuusers.de/wiki/tags/systemd/](https://wiki.ubuntuusers.de/wiki/tags/systemd/)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Abfragedatum: 31.10.2017

&nbsp;&nbsp;&nbsp;&nbsp; **[3]**&nbsp; Debian Wiki  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *systemd - system and service manager*  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [https://wiki.debian.org/systemd](https://wiki.debian.org/systemd)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Abfragedatum: 31.10.2017

&nbsp;&nbsp;&nbsp;&nbsp; **[4]**&nbsp; Elementz Tech Blog  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *Sharing internet using Network-Over-USB in BeagleBone Black*  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [https://elementztechblog.wordpress.com/2014/12/22/sharing-internet-using-network-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;over-usb-in-beaglebone-black/](https://elementztechblog.wordpress.com/2014/12/22/sharing-internet-using-network-over-usb-in-beaglebone-black/)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Abfragedatum: 31.10.2017

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

---

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

Tobias Müller, M. Eng.  
:e-mail: [Tobias.Mueller@HS-Anhalt.de](mailto:Tobias.Mueller@HS-Anhalt.de)

:copyright: es-lab.de, 24.10.2018