祝您使用愉快

使用 -h 旗標搭配任何 happy-* 指令,即可查看該指令的說明和選項清單。

狀態檔案

祝您儲存愉快,並能輕鬆將其拓撲狀態保存在具有單一記錄的 JSON 檔案中。Happy 此狀態檔案可以執行適當的指令來建立或移除拓撲。

預設狀態檔案位於 ~/.happy_state.json。預設的狀態名稱是 happy,如 happy-state 輸出內容所示:

happy-state

State Name:  happy

平行狀態

Happy 支援多個平行平行狀態。目前的狀態是由 HAPPY_STATE_ID 環境變數決定。如果環境中沒有 HAPPY_STATE_ID,系統會使用 happy 的預設狀態值。

HAPPY_STATE_ID」不是在安裝過程中建立。只要使用 state 以外的值建立一個值,即可立即切換至其他「Happy」狀態。

export HAPPY_STATE_ID="sunny"

現在,檢查 happy-state 結果是否處於其他狀態:

happy-state

State Name:  sunny

每個狀態都各自保存在專屬的 ~/.${HAPPY_STATE_ID}_state.json 檔案中。如要在不同的狀態之間切換,請再次執行 export HAPPY_STATE_ID="<state-name>" 指令。

以平行狀態解除安裝

如果您使用平行 Happy 狀態,而且想要解除安裝 Happy,請務必在每個狀態中執行 happy-state-delete。這樣可確保由 Happy 建立的所有網路命名空間都會從系統中移除,而不會影響 Linux 主機的網路設定。

例如,有 happysunny 這兩個狀態:

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

視需要手動移除每個平行狀態檔案:

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

記錄檔

根據預設,Happy 會將記錄傳送至 syslog。系統會將第二記錄檔備份傳送至 /tmp/${HAPPY_STATE_ID}_debug_log.txt

如要查看快樂記錄,請在另一個終端機視窗中執行 happy-state -l。輸入 Happy 指令時,記錄會顯示背景中的 shell 指令。 若您對 Linux 網路命名空間感興趣,這是瞭解 Happy 運作方式的好方法。

舉例來說,happy-node-add node00 會建立 Happy 節點。這個指令的記錄檔輸出為:

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

所有 Driver:CallCmd() 行都是 Happy 呼叫的殼層指令。請考慮記錄中的每一行:

# 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

拓撲範例

Happy 和 OpenWeave 存放區皆提供測試的拓撲。並利用這些指令瞭解指令,藉此建立複雜的拓撲。

拓撲為 JSON 和 Shell Script 格式。

JSON

JSON 拓撲檔案是使用 happy-state-loadweave-state-load 指令載入。如果拓撲包含 Weave,您必須使用 weave-state-load 載入拓撲,否則系統會略過 Weave 專屬的指令。

例如,沒有 Weave 的拓撲:

happy-state-load thread_wifi_ap_internet.json

使用 Weave 的拓撲:

weave-state-load three_nodes_on_thread_weave.json

如要將目前的拓撲儲存為個別 JSON 檔案以供日後使用 (例如測試案例指令碼),請使用 happy-shell -s

happy-shell -s my_topology.json

這會將拓撲狀態檔案儲存在 $HOME 目錄中。

Shell 指令碼

Shell 指令碼拓撲檔案包含一組 Happy and Weave 指令,可在對應的 JSON 檔案中建立拓撲。根據預設,這些指令碼沒有執行權限。執行方式有兩種:

使用 bash 指令:

bash thread_wifi_ap_internet.sh

套用執行權限:

chmod +x thread_wifi_ap_internet.sh
./thread_wifi_ap_internet.sh

設定

Happy 擁有三個設定檔:

設定檔說明
~/.happy_conf.json供個人或外掛程式使用的設定變數。請使用 happy-configuration 指令設定這些值。
<path-to-happy>/happy/conf/main_config.json主要 Happy 設定變數。
<path-to-happy>/happy/conf/log_config.json記錄設定。

新增設定變數

建議您使用 happy-configuration 指令來設定任何個人或外掛程式變數,不一定要使用您特別部署的 Happy 需求。

舉例來說,如要讓 Happy 知道在哪裡找出測試指令碼的 Weave test-apps 目錄,請設定 weave_path 變數:

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

祝您在 ~/.happy_conf.json 中儲存設定變數。

節點中的程序

Happy 提供指令,可在模擬節點內啟動及停止處理程序。

若要開始處理流程:

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

舉例來說,如要在名為 ThreadNode 的節點中持續執行連線偵測 (ping):

happy-process-start ThreadNode ContinuousPing ping 8.8.8.8

在上述範例中,連續 Ping 是 Happy 用來管理程序的程序使用者定義的名稱。使用 happy-process-wait 暫停處理程序,並使用 happy-process-stop 終止程序。

程序輸出位於 /tmp。例如,啟動 ContinuePing 程序後,請檢查 /tmp 目錄:

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

這個 .out 檔案含有 連續匯入程序的輸出內容。

sudo」的使用情形

快樂會變更由 Linux 核心控管的網路設定。 由於只有 root 可以變更核心設定,所以 Happy 會在作業期間提示您輸入 sudo 密碼。

Happy 使用 $SUDO 系統環境變數來呼叫 sudo。如果未定義 $SUDO,Happy 會發出一般的 sudo 呼叫。

Python 指令碼

安裝完成後,您可以使用以下 import 陳述式將 Happy Python 套件匯入 Python 環境:

import happy

/happy 中找到的個別指令模組將按以下方式匯入:

import happy.HappyNodeAdd

如要擷取模組選項,請呼叫 option() 函式。例如,若要擷取 HappyNodeAdd 模組選項:

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