使用 -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 主機的網路設定。
例如,有 happy
和 sunny
這兩個狀態:
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 存放區皆提供測試的拓撲。並利用這些指令瞭解指令,藉此建立複雜的拓撲。
- 祝您使用愉快:
/topologies
- OpenWeave:
/src/test-apps/happy/topologies/standalone
拓撲為 JSON 和 Shell Script 格式。
JSON
JSON 拓撲檔案是使用 happy-state-load
或 weave-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()