इनमें से किसी भी happy-*
कमांड के साथ -h
फ़्लैग का इस्तेमाल करके, इनके बारे में मदद और सूची देखें
उस कमांड के लिए विकल्प.
स्टेट फ़ाइलें
खुशनुमा स्टोर के साथ एक JSON फ़ाइल में, अपनी टोपोलॉजी स्थिति को ध्यान से बनाए रखता है एक रिकॉर्ड कर सकता है. इस स्थिति वाली फ़ाइल का इस्तेमाल करके, हैप्पी इन कार्रवाइयों के लिए सही निर्देश दे सकता है: कोई टोपोलॉजी बनाएं या हटाएं.
डिफ़ॉल्ट स्टेटस वाली फ़ाइल ~/.happy_state.json
पर मौजूद है. डिफ़ॉल्ट स्थिति
नाम happy
है, जैसा कि happy-state
आउटपुट में दिखता है:
happy-state
State Name: happy
पैरलल स्टेट
Happy, एक साथ मौजूद कई पैरलल स्टेटस के साथ काम करता है. मौजूदा स्थिति, HAPPY_STATE_ID
एनवायरमेंट वैरिएबल से तय होती है. अगर HAPPY_STATE_ID
करता है
एनवायरमेंट में मौजूद नहीं है, तो happy
की डिफ़ॉल्ट स्टेट वैल्यू का इस्तेमाल किया जाता है.
हैप्पी इंस्टॉलेशन के दौरान HAPPY_STATE_ID
नहीं बनाया गया है. इसकी मदद से एक शॉर्ट वीडियो बनाएं
खुशी की दूसरी स्थिति पर तुरंत जाने के लिए, 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-state-delete
चलाएं. इससे सभी नेटवर्क को पक्का किया जा सकता है
हैप्पी के बनाए गए नेमस्पेस को, आपकी साइट पर मौजूद
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 से जुड़ी समस्याओं के बारे में शेल कमांड दिखते हैं. अगर आपको Linux नेटवर्क नेमस्पेस में दिलचस्पी है, तो यह हैप्पी के काम करने के तरीके को समझने का एक अच्छा तरीका है.
उदाहरण के लिए, happy-node-add node00
एक हैप्पी नोड बनाता है. इसके लिए लॉग आउटपुट
यह निर्देश:
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 और शेल स्क्रिप्ट फ़ॉर्मैट में होती हैं.
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
डायरेक्ट्री में सेव हो जाती है.
शेल स्क्रिप्ट
शेल स्क्रिप्ट टोपोलॉजी फ़ाइलों में, संबंधित JSON फ़ाइलों में टोपोलॉजी बनाने के लिए, Happy और Weave कमांड का सेट होता है. डिफ़ॉल्ट रूप से ये स्क्रिप्ट उसके पास एक्ज़ीक्यूटेबल अनुमतियां नहीं हैं. इन्हें दो तरीकों से चलाया जा सकता है:
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 के डिफ़ॉल्ट तौर पर लागू होने वाले वैरिएबल से अलग होने चाहिए.
उदाहरण के लिए, हैप्पी को यह बताने के लिए कि टेस्ट स्क्रिप्ट के लिए 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 नाम के नोड में लगातार पिंग चलाने के लिए:
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
का इस्तेमाल
उस नेटवर्क कॉन्फ़िगरेशन को बदल देता है, जिसे Linux कर्नेल के ज़रिए कंट्रोल किया जाता है.
सिर्फ़ root
ही कर्नेल कॉन्फ़िगरेशन में बदलाव कर सकता है. इसलिए, Happy आपको ऑपरेशन के दौरान sudo
पासवर्ड डालने के लिए कहता है.
Happy, sudo
को कॉल करने के लिए $SUDO
सिस्टम एनवायरमेंट वैरिएबल का इस्तेमाल करता है. अगर $SUDO
है
साफ़ तौर पर नहीं बताया गया है, हैप्पी सामान्य sudo
कॉल करता है.
Python स्क्रिप्टिंग
इंस्टॉल करने के बाद, Happy Python पैकेज को Python के किसी इकोसिस्टम में इंपोर्ट किया जा सकता है. इसके लिए, नीचे दिए गए import
स्टेटमेंट का इस्तेमाल करें:
import happy
/happy
में मिले अलग-अलग कमांड मॉड्यूल, इस तरह इंपोर्ट किए जाते हैं:
import happy.HappyNodeAdd
मॉड्यूल के विकल्पों को वापस पाने के लिए, option()
फ़ंक्शन को कॉल करें. उदाहरण के लिए, HappyNodeAdd
मॉड्यूल के विकल्पों को वापस पाने के लिए:
module options import happy.HappyNodeAdd options = happy.HappyNodeAdd.option()