Chúc bạn sử dụng vui vẻ

Sử dụng cờ -h với bất kỳ lệnh happy-* nào để xem nội dung trợ giúp và danh sách tuỳ chọn cho lệnh đó.

Tệp trạng thái

Happy lưu trữ và duy trì cẩn thận trạng thái cấu trúc liên kết trong một tệp JSON có một bản ghi duy nhất. Khi sử dụng tệp trạng thái này, Happy có thể chạy các lệnh thích hợp để tạo hoặc xoá một cấu trúc liên kết.

Tệp trạng thái mặc định nằm ở ~/.happy_state.json. Tên trạng thái mặc định là happy, như trong kết quả happy-state:

happy-state

State Name:  happy

Trạng thái song song

Happy hỗ trợ nhiều trạng thái song song cùng tồn tại. Trạng thái hiện tại do biến môi trường HAPPY_STATE_ID quyết định. Nếu HAPPY_STATE_ID không tồn tại trong môi trường, thì giá trị trạng thái mặc định của happy sẽ được sử dụng.

HAPPY_STATE_ID không được tạo trong quá trình cài đặt Happy. Tạo một trạng thái có giá trị khác với state để chuyển ngay sang một trạng thái Happy khác.

export HAPPY_STATE_ID="sunny"

Hiện việc kiểm tra kết quả happy-state đã ở trạng thái khác:

happy-state

State Name:  sunny

Mỗi trạng thái được duy trì trong tệp ~/.${HAPPY_STATE_ID}_state.json riêng. Để chuyển đổi giữa các trạng thái, hãy chạy lại lệnh export HAPPY_STATE_ID="<state-name>".

Gỡ cài đặt với các trạng thái song song

Nếu bạn sử dụng các trạng thái Happy song song và muốn gỡ cài đặt Happy, hãy nhớ chạy happy-state-delete với mỗi trạng thái đang hoạt động. Điều này đảm bảo rằng tất cả không gian tên mạng do Happy tạo đều bị xoá khỏi hệ thống của bạn mà không ảnh hưởng đến cấu hình mạng máy chủ Linux.

Ví dụ: với 2 trạng thái là happysunny:

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

Xoá từng tệp trạng thái song song theo cách thủ công nếu cần:

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

Nhật ký

Theo mặc định, Happy sẽ gửi nhật ký đến syslog. Một bản sao lưu nhật ký thứ hai được gửi đến /tmp/${HAPPY_STATE_ID}_debug_log.txt.

Để xem nhật ký Happy, hãy chạy happy-state -l trong một cửa sổ dòng lệnh riêng. Khi bạn nhập các lệnh Happy, nhật ký sẽ hiển thị các lệnh shell Happy issues (Vấn đề về hạnh phúc) trong nền. Đây là một cách hay để hiểu cách hoạt động của Happy, nếu bạn quan tâm đến không gian tên mạng Linux.

Ví dụ: happy-node-add node00 tạo một nút Happy (Vui). Kết quả nhật ký cho lệnh này là:

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

Tất cả các dòng Driver:CallCmd() đều là các lệnh shell mà Happy gọi. Hãy xem xét từng dòng trong nhật ký:

# 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

Lời xin lỗi mẫu

Các cấu trúc liên kết mẫu được đưa vào cả kho lưu trữ Happy và OpenWeave để kiểm thử. Ngoài ra, hãy sử dụng chúng để học các lệnh để xây dựng các lời xin lỗi phức tạp.

Cấu trúc liên kết ở định dạng JSON và tập lệnh Shell.

JSON

Các tệp cấu trúc liên kết JSON được tải bằng lệnh happy-state-load hoặc weave-state-load. Nếu cấu trúc liên kết bao gồm Weave, bạn phải sử dụng weave-state-load để tải cấu trúc liên kết, nếu không các lệnh dành riêng cho Weave sẽ bị bỏ qua.

Ví dụ: một cấu trúc liên kết không có Weave:

happy-state-load thread_wifi_ap_internet.json

Cấu trúc liên kết có Weave:

weave-state-load three_nodes_on_thread_weave.json

Để lưu cấu hình hiện tại dưới dạng tệp JSON riêng để sử dụng sau này (ví dụ: tập lệnh trường hợp kiểm thử), hãy sử dụng happy-shell -s:

happy-shell -s my_topology.json

Thao tác này sẽ lưu tệp trạng thái cấu trúc liên kết trong thư mục $HOME.

Tập lệnh shell

Tệp cấu hình tập lệnh shell chứa tập hợp các lệnh Happy và Weave để tạo cấu hình trong các tệp JSON tương ứng. Theo mặc định, các tập lệnh này không có quyền thực thi. Bạn có thể chạy các tệp này theo hai cách:

Bằng cách sử dụng lệnh bash:

bash thread_wifi_ap_internet.sh

Bằng cách áp dụng các quyền thực thi:

chmod +x thread_wifi_ap_internet.sh
./thread_wifi_ap_internet.sh

Cấu hình

Happy có ba tệp cấu hình:

Tệp cấu hìnhMô tả
~/.happy_conf.jsonCác biến cấu hình dùng cho mục đích cá nhân hoặc trình bổ trợ. Đặt các giá trị này bằng lệnh happy-configuration.
<path-to-happy>/happy/conf/main_config.jsonCác biến cấu hình Happy chính.
<path-to-happy>/happy/conf/log_config.jsonCấu hình nhật ký.

Thêm biến cấu hình

Bạn nên sử dụng lệnh happy-configuration để đặt bất kỳ biến cá nhân hoặc biến trình bổ trợ nào ngoài các biến mặc định mà việc triển khai Happy cụ thể của bạn cần.

Ví dụ: để cho Happy biết nơi tìm thư mục test-apps của Weave cho các tập lệnh kiểm thử, hãy đặt biến weave_path:

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

Happy Store biến cấu hình trong ~/.happy_conf.json.

Quy trình trong nút

Happy cung cấp các lệnh để bắt đầu và dừng quá trình trong các nút mô phỏng.

Cách bắt đầu một quy trình:

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

Ví dụ: để liên tục chạy ping trong một nút có tên ThreadNode:

happy-process-start ThreadNode ContinuousPing ping 8.8.8.8

Trong ví dụ trên, ContinuousPing là tên do người dùng xác định cho quy trình mà Happy sử dụng để quản lý quy trình. Sử dụng happy-process-wait để tạm ngưng thực thi quy trình và happy-process-stop để chấm dứt quy trình.

Dữ liệu đầu ra của quy trình là /tmp. Ví dụ: sau khi bắt đầu quy trình ContinuousPing, hãy kiểm tra thư mục /tmp:

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

Tệp .out này chứa kết quả cho quy trình ContinuousPing.

Cách sử dụng sudo

Happy thay đổi cấu hình mạng do nhân Linux kiểm soát. Vì chỉ root mới có thể thay đổi cấu hình hạt nhân, nên Happy sẽ nhắc bạn nhập mật khẩu sudo trong quá trình hoạt động.

Happy sử dụng biến môi trường hệ thống $SUDO để gọi sudo. Nếu $SUDO không được xác định, Happy sẽ thực hiện một lệnh gọi sudo thông thường.

Viết tập lệnh Python

Sau khi cài đặt, bạn có thể nhập các gói Happy Python vào môi trường Python bằng cách sử dụng câu lệnh import sau:

import happy

Các mô-đun lệnh riêng lẻ có trong /happy được nhập như sau:

import happy.HappyNodeAdd

Để truy xuất các tuỳ chọn mô-đun, hãy gọi hàm option(). Ví dụ: để truy xuất các tuỳ chọn mô-đun HappyNodeAdd:

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