استخدِم العلامة -h
مع أي أمر happy-*
لعرض المساعدة وقائمة options لهذا الأمر.
ملفات الحالة
تخزِّن 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
السجلّات
يُرسِل "سعيد" السجلّات إلى syslog
تلقائيًا. يتم إرسال نسخة احتياطية ثانية من السجلّ إلى
/tmp/${HAPPY_STATE_ID}_debug_log.txt
.
لعرض سجلات Happy، يمكنك تشغيل happy-state -l
في نافذة وحدة طرفية منفصلة. عند
إدخال أوامر Happy، تعرض السجلات مشاكل Happy لأوامر shell في
الخلفية. هذه طريقة جيدة لفهم آلية عمل 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()
هي أوامر shell التي يطلبها 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 وShell Script.
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
.
النصوص البرمجية لنظام التشغيل Shell
تحتوي ملفات المخططات في نصوص Shell البرمجية على مجموعة من أوامر 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.
على سبيل المثال، لإعلام "هابي" بمكان العثور على دليل Weave test-apps
لملفّات برمجية اختبارية، اضبط المتغيّر weave_path
:
happy-configuration weave_path <path-to-openweave-core>/build/x86_64-unknown-linux-gnu/src/test-apps
تُخزِّن Happy متغيّرات الضبط في ~/.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-process-wait
لتعليق
تنفيذ العملية وhappy-process-stop
لإنهاء العملية.
يمكن العثور على ناتج العملية في /tmp
. على سبيل المثال، بعد بدء عملية ContinuousPing
، تحقَّق من الدليل /tmp
:
ls /tmp/happy*
/tmp/happy_018691_1524087014.192197_ContinuousPing.out
يحتوي ملف .out
هذا على ناتج عملية ContinuousPing.
استخدام sudo
يغيّر "سعيد" إعدادات الشبكة التي يتم التحكّم فيها من خلال نواة Linux.
بما أنّ root
وحده يمكنه تغيير إعدادات kernel، يطلب منك Happy إدخال
كلمة مرور sudo
أثناء العملية.
يستخدم Happy متغيّر بيئة النظام $SUDO
للاتصال بـ sudo
. إذا لم يتم تحديد $SUDO
، تجري Happy مكالمة sudo
عادية.
البرمجة النصية في بايثون
بعد التثبيت، يمكن استيراد حزم Happy Python إلى بيئة Python باستخدام عبارة import
التالية:
import happy
يتم استيراد وحدات الأوامر الفردية المتوفّرة في /happy
على النحو التالي:
import happy.HappyNodeAdd
لاسترداد خيارات الوحدة، استخدِم الدالة option()
. على سبيل المثال، لاسترداد
خيارات وحدة HappyNodeAdd
:
module options import happy.HappyNodeAdd options = happy.HappyNodeAdd.option()