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-stateState 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-stateState 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-deleteexport HAPPY_STATE_ID="happy"happy-state-delete
Entfernen Sie bei Bedarf jede Parallelstatusdatei manuell:
rm -f ~/.sunny_state.jsonrm -f ~/.sunny_state.json.lockrm -f ~/.happy_state.jsonrm -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()