Google is committed to advancing racial equity for Black communities. See how.
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

การใช้งานที่มีความสุข

ใช้แฟ happy-* -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 ระหว่างการติดตั้ง Happy สร้างหนึ่งที่มีค่าอื่นที่ไม่ใช่ state เพื่อเปลี่ยนเป็นสถานะแห่งความสุขอื่นทันที

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 ให้เรียกใช้ happy-state -l ในหน้าต่างเทอร์มินัลแยกต่างหาก เมื่อคุณป้อนคำสั่ง Happy บันทึกจะแสดงคำสั่งเชลล์ปัญหา Happy ในเบื้องหลัง นี่เป็นวิธีที่ดีในการทำความเข้าใจว่า Happy ทำงานอย่างไรหากคุณสนใจเนมสเปซเครือข่าย Linux

ตัวอย่างเช่น happy-node-add node00 สร้าง Happy node เอาต์พุตบันทึกสำหรับคำสั่งนี้คือ:

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() ทั้งหมด 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 และเชลล์สคริปต์

JSON

ไฟล์โทโพโลยี JSON ถูกโหลดโดยใช้คำสั่ง happy-state-load หรือ weave-state-load หากโทโพโลยีรวมถึงสานคุณต้องใช้โครงสร้างแบบ weave-state-load เพื่อโหลดโทโพโลยีมิฉะนั้นคำสั่งเฉพาะสานจะถูกข้ามไป

ตัวอย่างเช่นโทโพโลยีที่ไม่มีสาน:

happy-state-load thread_wifi_ap_internet.json

โทโพโลยีกับสาน:

weave-state-load three_nodes_on_thread_weave.json

หากต้องการบันทึกโทโพโลยีปัจจุบันของคุณเป็นไฟล์ JSON แยกต่างหากเพื่อใช้ในภายหลัง (ตัวอย่างเช่น สคริปต์กรณีทดสอบ ) ให้ใช้ happy-shell -s :

happy-shell -s my_topology.json

ซึ่งจะบันทึกไฟล์สถานะทอพอโลยีในไดเรกทอรี $HOME

เชลล์สคริปต์

ไฟล์ทอพอโลยีเชลล์สคริปต์มีชุดคำสั่ง Happy และ 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 store ตัวแปรการกำหนดค่าใน ~/.happy_conf.json

กระบวนการในโหนด

Happy จัดเตรียมคำสั่งเพื่อเริ่มและหยุดกระบวนการภายในโหนดจำลอง

ในการเริ่มกระบวนการ:

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

ตัวอย่างเช่นในการรัน ping อย่างต่อเนื่องในโหนดชื่อ ThreadNode:

happy-process-start ThreadNode ContinuousPing ping 8.8.8.8

ในตัวอย่างข้างต้น ContinuousPing คือชื่อที่ผู้ใช้กำหนดเองสำหรับกระบวนการที่ Happy ใช้ในการจัดการกระบวนการ ใช้ happy-process-wait เพื่อระงับการทำงานของกระบวนการและ happy-process-stop เพื่อฆ่ากระบวนการ

เอาต์พุตกระบวนการอยู่ใน /tmp ตัวอย่างเช่นหลังจากเริ่มกระบวนการ ContinuousPing ให้ตรวจสอบไดเร็กทอรี /tmp :

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

ไฟล์ .out นี้มีเอาต์พุตสำหรับกระบวนการ ContinuousPing

การใช้ sudo

Happy เปลี่ยนการกำหนดค่าเครือข่ายที่ควบคุมโดยเคอร์เนล Linux เนื่องจากเฉพาะ root เท่านั้นที่สามารถเปลี่ยนการกำหนดค่าเคอร์เนลได้ Happy จึงแจ้งให้คุณป้อนรหัสผ่าน sudo ระหว่างการดำเนินการ

Happy ใช้ตัวแปรสภาพแวดล้อมระบบ $SUDO เพื่อเรียก sudo หากไม่ได้กำหนด $SUDO Happy จะทำการโทร sudo ตามปกติ

การเขียนสคริปต์ Python

หลังจากการติดตั้งแพคเกจ Happy Python สามารถนำเข้าสู่สภาพแวดล้อม Python โดยใช้คำสั่ง import ต่อไปนี้:

import happy

โมดูลคำสั่งแต่ละคำสั่งที่พบใน /happy ถูกอิมพอร์ตดังนี้:

import happy.HappyNodeAdd

ในการดึงข้อมูลตัวเลือกโมดูลให้เรียกใช้ฟังก์ชัน option() ตัวอย่างเช่นในการดึงตัวเลือกโมดูล HappyNodeAdd :

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