يمكنك استخدام العلامة -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-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
السجلّات
إرسال الإعدادات التلقائية إلى السجلّات إلى syslog
تلقائيًا يتم إرسال نسخة احتياطية أخرى من السجلّ إلى
/tmp/${HAPPY_STATE_ID}_debug_log.txt
.
ولعرض سجلات Happy، شغِّل happy-state -l
في نافذة طرفية منفصلة. عند إدخال أوامر 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()
في سطرَي الأوامر هي أوامر أوامر واجهة المستخدم.
ضع في اعتبارك كل سطر في السجل:
# 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.
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 على مجموعة أوامر Happy وWave لإنشاء طوابع في ملفات 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_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
يسرّ Google تغيير إعدادات الشبكة التي تتحكّم بها نواة Linux.
نظرًا لأن root
هو الوحيد الذي يمكنه تغيير إعداد النواة، سيطلب منك Happy إدخال كلمة مرور sudo
أثناء العملية.
يستخدم Happy متغير بيئة النظام $SUDO
لاستدعاء sudo
. إذا لم يتم تحديد $SUDO
، سيُجري Happy مكالمة sudo
عادية.
Python
بعد التثبيت، يمكن استيراد حزم Python في بيئة Python باستخدام عبارة import
التالية:
import happy
يتم استيراد وحدات الأوامر الفردية الموجودة في /happy
على النحو التالي:
import happy.HappyNodeAdd
لاسترداد خيارات الوحدة، عليك استدعاء الدالة option()
. على سبيل المثال، لاسترداد
خيارات وحدة HappyNodeAdd
:
module options import happy.HappyNodeAdd options = happy.HappyNodeAdd.option()