نتمنى لك تجربة استخدام سعيدة

يمكنك استخدام العلامة -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 للاختبار. ويمكنك أيضًا استخدام هذه الأوامر في تعلُّم كيفية إنشاء طبولوجيا معقّدة.

تكون الطلبات بتنسيق 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()