Verwenden Sie das Flag -h
mit einem beliebigen happy-*
-Befehl, um die Hilfe und eine Liste der Optionen für diesen Befehl aufzurufen.
Statusdateien
Happy speichert und verwaltet seinen Topologiezustand sorgfältig in einer JSON-Datei mit einem einzelnen Datensatz. Mithilfe dieser Statusdatei kann Happy die entsprechenden Befehle zum Erstellen oder Entfernen einer Topologie ausführen.
Die Standardstatusdatei befindet sich unter ~/.happy_state.json
. Der Standardstatusname ist happy
, wie in der happy-state
-Ausgabe zu sehen:
happy-state
State Name: happy
Parallele Status
Happy unterstützt mehrere parallele Zustände. Der aktuelle Status wird durch die Umgebungsvariable HAPPY_STATE_ID
bestimmt. Wenn HAPPY_STATE_ID
in der Umgebung nicht vorhanden ist, wird der Standardstatuswert happy
verwendet.
HAPPY_STATE_ID
wird bei der Happy-Installation nicht erstellt. Erstellen Sie eine mit einem anderen Wert als state
, um sofort zu einem anderen Status des Typs „Glücklich“ zu wechseln.
export HAPPY_STATE_ID="sunny"
Jetzt prüfen wir die happy-state
-Ergebnisse in einem anderen Bundesstaat:
happy-state
State Name: sunny
Jeder Status wird in einer eigenen ~/.${HAPPY_STATE_ID}_state.json
-Datei verwaltet. Führen Sie den Befehl export HAPPY_STATE_ID="<state-name>"
noch einmal aus, um zwischen den Status zu wechseln.
Deinstallation mit parallelen Status
Wenn Sie parallele „Happy“-Status verwenden und „Happy“ deinstallieren möchten, müssen Sie happy-state-delete
mit jedem aktiven Status ausführen. So werden alle von Happy erstellten Netzwerknamenräume aus Ihrem System entfernt, ohne dass die Linux-Hostnetzwerkkonfiguration beeinträchtigt wird.
Beispiel mit den beiden Status happy
und sunny
:
export HAPPY_STATE_ID="sunny"
happy-state-delete
export HAPPY_STATE_ID="happy"
happy-state-delete
Entfernen Sie bei Bedarf jede Parallelstatusdatei manuell:
rm -f ~/.sunny_state.json
rm -f ~/.sunny_state.json.lock
rm -f ~/.happy_state.json
rm -f ~/.happy_state.json.lock
Logs
Happy sendet standardmäßig Protokolle an syslog
. Eine zweite Protokollsicherung wird an /tmp/${HAPPY_STATE_ID}_debug_log.txt
gesendet.
Wenn Sie Happy-Protokolle aufrufen möchten, führen Sie happy-state -l
in einem separaten Terminalfenster aus. Wenn Sie Happy-Befehle eingeben, werden in den Protokollen die Shell-Befehle Happy-Probleme im Hintergrund angezeigt. Dies ist ein gutes Verständnis dafür, wie Happy funktioniert, wenn Sie an Linux-Netzwerk-Namespaces interessiert sind.
Mit happy-node-add node00
wird beispielsweise ein Happy-Knoten erstellt. Die Logausgabe für diesen Befehl sieht so aus:
DEBUG [HappyHost:_namespaceExists():56] Happy: namespace happy000 does not exist DEBUG [Driver:writeState():365] Happy: writing Happy state to file DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns add happy000 DEBUG [HappyHost:_namespaceExists():56] Happy: namespace happy000 exists DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns exec happy000 ifconfig lo up
Alle Driver:CallCmd()
-Zeilen sind die Shell-Befehle, die von Happy aufgerufen werden.
Sehen wir uns die einzelnen Zeilen des Logs an:
# Check to see if the target namespace (happy000) exists DEBUG [HappyHost:_namespaceExists():56] Happy: namespace happy000 does not exist # Write the link between node00 and happy000 in ~/.happy_state.json DEBUG [Driver:writeState():365] Happy: writing Happy state to file # Create the network namespace for the node DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns add happy000 # Check to see if the target namespace (happy000) exists DEBUG [HappyHost:_namespaceExists():56] Happy: namespace happy000 exists # Bring up the loopback interface within the happy000 namespace DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns exec happy000 ifconfig lo up
Beispieltopologien
Beispieltopologien sind sowohl im Happy- als auch im OpenWeave-Repository zum Testen enthalten. Außerdem können Sie die Befehle zum Erstellen komplexer Topologien kennenlernen.
- Zufrieden:
/topologies
- OpenWeave:
/src/test-apps/happy/topologies/standalone
Topologien sind im JSON- und Shell-Script-Format.
JSON
JSON-Topologiedateien werden mit den Befehlen happy-state-load
oder weave-state-load
geladen. Wenn die Topologie Weave enthält, müssen Sie weave-state-load
verwenden, um die Topologie zu laden. Andernfalls werden die Weave-spezifischen Befehle übersprungen.
Eine Topologie ohne Weave:
happy-state-load thread_wifi_ap_internet.json
Eine Topologie mit Weave:
weave-state-load three_nodes_on_thread_weave.json
Wenn Sie Ihre aktuelle Topologie als separate JSON-Datei für spätere Verwendung speichern möchten (z. B. in einem Testfall-Script), verwenden Sie happy-shell -s
:
happy-shell -s my_topology.json
Dadurch wird die Topologiestatusdatei im Verzeichnis $HOME
gespeichert.
Shell-Scripts
Shell-Script-Topologiedateien enthalten die Happy- und Weave-Befehle zum Erstellen der Topologien in den entsprechenden JSON-Dateien. Diese Skripts haben standardmäßig keine ausführbaren Berechtigungen. Sie können auf zwei Arten ausgeführt werden:
Mit dem Befehl bash
:
bash thread_wifi_ap_internet.sh
Durch Anwenden von ausführbaren Berechtigungen:
chmod +x thread_wifi_ap_internet.sh
./thread_wifi_ap_internet.sh
Konfiguration
Happy verfügt über drei Konfigurationsdateien:
Konfigurationsdatei | Beschreibung |
---|---|
~/.happy_conf.json | Konfigurationsvariablen für den privaten Gebrauch oder die Verwendung von Plug-ins. Legen Sie diese Werte mit dem Befehl happy-configuration fest. |
<path-to-happy>/happy/conf/main_config.json | Primäre Happy-Konfigurationsvariablen. |
<path-to-happy>/happy/conf/log_config.json | Logkonfiguration. |
Konfigurationsvariablen hinzufügen
Wir empfehlen, mit dem Befehl happy-configuration
alle persönlichen oder Plug-in-Variablen festzulegen, die über die Standardwerte hinausgehen, die für Ihre spezifische Bereitstellung von Happy benötigt werden.
Wenn Sie Happy beispielsweise mitteilen möchten, wo sich das Weave-Verzeichnis test-apps
für Testscripts befindet, legen Sie die Variable weave_path
fest:
happy-configuration weave_path <path-to-openweave-core>/build/x86_64-unknown-linux-gnu/src/test-apps
Happy speichert Konfigurationsvariablen in ~/.happy_conf.json
.
Prozesse in Knoten
Happy bietet Befehle zum Starten und Beenden von Prozessen in simulierten Knoten.
So starten Sie einen Prozess:
happy-process-start <node-name> <custom-process-name> <command>
So führen Sie beispielsweise kontinuierlich einen Ping in einem Knoten namens ThreadNode aus:
happy-process-start ThreadNode ContinuousPing ping 8.8.8.8
Im obigen Beispiel ist „ContinuousPing“ der benutzerdefinierte Name für den Prozess, den Happy zum Verwalten des Prozesses verwendet. Mit happy-process-wait
können Sie die Prozessausführung pausieren und mit happy-process-stop
den Prozess beenden.
Die Prozessausgabe befindet sich in /tmp
. Prüfen Sie beispielsweise nach dem Starten des ContinuousPing-Prozesses das Verzeichnis /tmp
:
ls /tmp/happy*
/tmp/happy_018691_1524087014.192197_ContinuousPing.out
Diese .out
-Datei enthält die Ausgabe für den ContinuousPing-Prozess.
Nutzung von sudo
Happy ändert die Netzwerkkonfiguration, die vom Linux-Kernel gesteuert wird.
Da nur root
die Kernelkonfiguration ändern kann, werden Sie von Happy während des Betriebs aufgefordert, das sudo
-Passwort einzugeben.
Happy verwendet die Systemumgebungsvariable $SUDO
, um sudo
aufzurufen. Wenn $SUDO
nicht definiert ist, führt Happy einen normalen sudo
-Aufruf aus.
Python-Scripting
Nach der Installation können Happy Python-Pakete mit der folgenden import
-Anweisung in eine Python-Umgebung importiert werden:
import happy
Die einzelnen in /happy
gefundenen Befehlsmodule werden so importiert:
import happy.HappyNodeAdd
Rufen Sie die Funktion option()
auf, um die Moduloptionen abzurufen. So rufen Sie beispielsweise HappyNodeAdd
-Moduloptionen ab:
module options import happy.HappyNodeAdd options = happy.HappyNodeAdd.option()