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à happy
và sunny
:
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.
- Vui vẻ:
/topologies
- OpenWeave:
/src/test-apps/happy/topologies/standalone
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ình | Mô tả |
---|---|
~/.happy_conf.json | Cá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.json | Các biến cấu hình Happy chính. |
<path-to-happy>/happy/conf/log_config.json | Cấ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()