Systemd Service zum herstellen einer Internetverbindung über den USB-OTG Port.
Tobias Müller 3607e8cc00 update README | 5 år sedan | |
---|---|---|
Internet_over_USB.service | 7 år sedan | |
LICENSE | 6 år sedan | |
README.md | 5 år sedan | |
README.pdf | 5 år sedan | |
install.sh | 7 år sedan |
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.
** :cloud: Git-Repository-Link: https://gogs.es-lab.de/mueller_to/BBB_Internet_over_USB_Service
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.
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
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
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.
Ö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.
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).
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.
Die Internetverbindung über USB für Ihr Beaglebone Black ist nun eingerichtet und kann verwendet werden.
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.
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.
[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, M. Eng.
:e-mail: Tobias.Mueller@HS-Anhalt.de
:copyright: es-lab.de, 24.10.2018