Google si impegna a promuovere l'equità razziale per le comunità nere. Vedi come.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Buon uso

Utilizzare il flag -h con qualsiasi comando happy-* per visualizzare la guida e l'elenco delle opzioni per quel comando.

File di stato

Happy archivia e mantiene attentamente lo stato della topologia in un file JSON con un singolo record. Utilizzando questo file di stato, Happy può eseguire i comandi appropriati per creare o rimuovere una topologia.

Il file di stato predefinito si trova in ~/.happy_state.json . Il nome dello stato predefinito è happy , come mostrato nell'output happy-state :

 happy-state

State Name:  happy 

Stati paralleli

Happy supporta più stati paralleli coesistenti. Lo stato corrente è dettato dalla variabile d'ambiente HAPPY_STATE_ID . Se HAPPY_STATE_ID non esiste nell'ambiente, viene utilizzato il valore di stato predefinito di happy .

HAPPY_STATE_ID non viene creato durante l'installazione Happy. Creane uno con un valore diverso da state per passare immediatamente a un altro stato Felice.

 export HAPPY_STATE_ID="sunny"

Ora controllando i risultati di happy-state in uno stato diverso:

 happy-state

State Name:  sunny 

Ogni stato è mantenuto nel proprio file ~/.${HAPPY_STATE_ID}_state.json . Per passare da uno stato all'altro, eseguire nuovamente il comando export HAPPY_STATE_ID=" <state-name> " .

Disinstallare con stati paralleli

Se usi Happy stati paralleli e desideri disinstallare Happy, assicurati di eseguire happy-state-delete con ogni stato attivo. Ciò garantisce che tutti gli spazi dei nomi di rete creati da Happy vengano rimossi dal sistema senza influire sulla configurazione della rete host Linux.

Ad esempio, con due stati di happy e sunny :

 export HAPPY_STATE_ID="sunny"
happy-state-delete
export HAPPY_STATE_ID="happy"
happy-state-delete 

Rimuovere manualmente ogni file di stato parallelo secondo necessità:

 rm -f ~/.sunny_state.json
rm -f ~/.sunny_state.json.lock
rm -f ~/.happy_state.json
rm -f ~/.happy_state.json.lock 

logs

Happy invia i registri a syslog per impostazione predefinita. Un secondo backup del registro viene inviato a /tmp/${HAPPY_STATE_ID}_debug_log.txt .

Per visualizzare i registri Happy, eseguire happy-state -l in una finestra terminale separata. Quando si immettono i comandi Happy, i registri mostrano i comandi della shell Problemi di Happy in background. Questo è un buon modo per capire come funziona Happy, se sei interessato agli spazi dei nomi di rete Linux.

Ad esempio, happy-node-add node00 crea un nodo Happy. L'output del registro per questo comando è:

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

Tutti i Driver:CallCmd() linee Driver:CallCmd() sono i comandi della shell che Happy chiama. Considera ogni riga nel registro:

# 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

Topologie di esempio

Le topologie di esempio sono incluse nei repository Happy e OpenWeave per i test. Usali anche per apprendere i comandi per costruire topologie complesse.

Le topologie sono in formato JSON e Shell Script.

JSON

I file della topologia JSON vengono caricati utilizzando i comandi happy-state-load o weave-state-load . Se la topologia include Weave, è necessario utilizzare weave-state-load per caricare la topologia, altrimenti i comandi specifici di Weave vengono ignorati.

Ad esempio, una topologia senza trama:

happy-state-load thread_wifi_ap_internet.json

Una topologia con Weave:

weave-state-load three_nodes_on_thread_weave.json

Per salvare la topologia corrente come file JSON separato per uso futuro (ad esempio, uno script di test case ), utilizzare happy-shell -s :

happy-shell -s my_topology.json

Ciò salva il file di stato della topologia nella directory $HOME .

Script di shell

I file della topologia di script Shell contengono il set di comandi Happy e Weave per creare le topologie nei file JSON corrispondenti. Questi script per impostazione predefinita non dispongono di autorizzazioni eseguibili. Possono essere eseguiti in due modi:

Usando il comando bash :

bash thread_wifi_ap_internet.sh

Applicando le autorizzazioni eseguibili:

chmod +x thread_wifi_ap_internet.sh
./thread_wifi_ap_internet.sh

Configurazione

Happy ha tre file di configurazione:

File di configurazione Descrizione
~/.happy_conf.json Variabili di configurazione per uso personale o plug-in. Impostare questi valori usando il comando happy-configuration .
<path-to-happy> /happy/conf/main_config.json Variabili di configurazione Happy principali.
<path-to-happy> /happy/conf/log_config.json Configurazione del registro.

Aggiungi variabili di configurazione

Si consiglia di utilizzare il comando happy-configuration per impostare eventuali variabili personali o plug-in oltre le impostazioni predefinite richieste dalla specifica distribuzione di Happy.

Ad esempio, per far sapere a Happy dove trovare la directory test-apps Weave per gli script di test, imposta la variabile weave_path :

happy-configuration weave_path <path-to-openweave-core> /build/x86_64-unknown-linux-gnu/src/test-apps

Happy memorizza le variabili di configurazione in ~/.happy_conf.json .

Processi in nodi

Happy fornisce comandi per avviare e arrestare i processi all'interno di nodi simulati.

Per avviare un processo:

happy-process-start <node-name> <custom-process-name> <command>

Ad esempio, per eseguire continuamente un ping in un nodo denominato ThreadNode:

happy-process-start ThreadNode ContinuousPing ping 8.8.8.8

Nell'esempio sopra, ContinuousPing è il nome definito dall'utente per il processo che Happy utilizza per gestire il processo. Utilizzare happy-process-wait per sospendere l'esecuzione del processo e happy-process-stop per happy-process-stop il processo.

L'output del processo è in /tmp . Ad esempio, dopo aver avviato il processo ContinuousPing, controllare la /tmp :

ls /tmp/happy*
/tmp/happy_018691_1524087014.192197_ContinuousPing.out

Questo file .out contiene l'output per il processo ContinuousPing.

Uso di sudo

Happy cambia la configurazione di rete controllata dal kernel Linux. Poiché solo root può cambiare la configurazione del kernel, Happy richiede di inserire la password sudo durante il funzionamento.

Happy usa la variabile di ambiente di sistema $SUDO per chiamare sudo . Se $SUDO non è definito, Happy effettua una normale chiamata sudo .

Scripting Python

Dopo l'installazione, i pacchetti Happy Python possono essere importati in un ambiente Python usando la seguente dichiarazione di import :

import happy

I singoli moduli di comando trovati in /happy vengono importati come segue:

import happy.HappyNodeAdd

Per recuperare le opzioni del modulo, chiamare la funzione option() . Ad esempio, per recuperare le opzioni del modulo HappyNodeAdd :

module options
import happy.HappyNodeAdd
options = happy.HappyNodeAdd.option()