किसी happy-*
निर्देश के लिए सहायता और विकल्पों की सूची देखने के लिए, -h
फ़्लैग का इस्तेमाल करें.
स्टेट फ़ाइलें
Happy, एक रिकॉर्ड वाली JSON फ़ाइल में अपनी टोपोलॉजी की स्थिति को ध्यान से सेव और मैनेज करता है. इस स्टेटस फ़ाइल का इस्तेमाल करके, हैप्पी कोई टोपोलॉजी बनाने या हटाने के लिए सही निर्देश चला सकता है.
डिफ़ॉल्ट स्टेटस वाली फ़ाइल ~/.happy_state.json
पर मौजूद है. डिफ़ॉल्ट तौर पर, राज्य का नाम happy
होता है, जैसा कि happy-state
आउटपुट में दिखता है:
happy-state
State Name: 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
को रन करना न भूलें. इससे यह पक्का होता है कि हैप्पी के बनाए गए सभी नेटवर्क नेमस्पेस को आपके सिस्टम से हटा दिया जाएगा. इससे, 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 के लिए खास तौर पर बने निर्देशों को छोड़ दिया जाएगा.
उदाहरण के लिए, वेव के बिना टोपोलॉजी:
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
डायरेक्ट्री में सेव किया जाता है.
शेल स्क्रिप्ट
शेल स्क्रिप्ट टोपोलॉजी फ़ाइलों में, Happy और Weave कमांड का सेट होता है. इनका इस्तेमाल, संबंधित JSON फ़ाइलों में टोपोलॉजी बनाने के लिए किया जाता है. डिफ़ॉल्ट रूप से, इन स्क्रिप्ट के पास एक्ज़ीक्यूटेबल अनुमतियां नहीं होती हैं. इन्हें दो तरीकों से चलाया जा सकता है:
bash
कमांड का इस्तेमाल करके:
bash thread_wifi_ap_internet.sh
एक्ज़ीक्यूटेबल अनुमतियां लागू करके:
chmod +x thread_wifi_ap_internet.sh
./thread_wifi_ap_internet.sh
कॉन्फ़िगरेशन
हैप्पी के पास तीन कॉन्फ़िगरेशन फ़ाइलें हैं:
कॉन्फ़िगरेशन फ़ाइल | ब्यौरा |
---|---|
~/.happy_conf.json | निजी या प्लग-इन के इस्तेमाल के लिए कॉन्फ़िगरेशन वैरिएबल. happy-configuration कमांड का इस्तेमाल करके, ये वैल्यू सेट करें. |
<path-to-happy>/happy/conf/main_config.json | हैप्पी मुख्य कॉन्फ़िगरेशन वैरिएबल. |
<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-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
पासवर्ड डालने के लिए कहता है.
हैप्पी, sudo
को कॉल करने के लिए $SUDO
सिस्टम एनवायरमेंट वैरिएबल का इस्तेमाल करता है. अगर $SUDO
को तय नहीं किया गया है, तो हैप्पी सामान्य sudo
कॉल करता है.
Python स्क्रिप्टिंग
इंस्टॉल करने के बाद, हैप्पी Python पैकेज को Python एनवायरमेंट में इंपोर्ट करने के लिए, इस import
स्टेटमेंट का इस्तेमाल करें:
import happy
/happy
में मिले अलग-अलग कमांड मॉड्यूल, इस तरह इंपोर्ट किए जाते हैं:
import happy.HappyNodeAdd
मॉड्यूल के विकल्प वापस पाने के लिए, option()
फ़ंक्शन को कॉल करें. उदाहरण के लिए, HappyNodeAdd
मॉड्यूल के विकल्पों को वापस पाने के लिए:
module options import happy.HappyNodeAdd options = happy.HappyNodeAdd.option()