استفاده مبارک

از پرچم -h با هر دستور happy-* برای مشاهده راهنما و لیست گزینه های آن دستور استفاده کنید.

حالت فایل ها

Happy وضعیت توپولوژی خود را در یک فایل JSON با یک رکورد ذخیره می کند و با دقت حفظ می کند. با استفاده از این فایل حالت، Happy می تواند دستورات مناسب را برای ایجاد یا حذف توپولوژی اجرا کند.

فایل حالت پیش فرض در ~/.happy_state.json قرار دارد. همانطور که در خروجی happy-state دیده می شود، نام حالت پیش فرض happy است:

happy-state

State Name:  happy

ایالت های موازی

Happy از چندین حالت موازی همزیستی پشتیبانی می کند. وضعیت فعلی توسط متغیر محیطی HAPPY_STATE_ID دیکته می شود. اگر HAPPY_STATE_ID در محیط وجود نداشته باشد، از مقدار حالت پیش فرض happy استفاده می شود.

HAPPY_STATE_ID در حین نصب Happy ایجاد نشده است. یکی با مقداری غیر از state کنید تا فوراً به حالت Happy دیگری بروید.

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 را اجرا کنید. این تضمین می‌کند که همه فضاهای نام شبکه ایجاد شده توسط Happy از سیستم شما حذف می‌شوند بدون اینکه بر پیکربندی شبکه میزبان لینوکس تأثیر بگذارد.

به عنوان مثال، با دو حالت 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-state -l را در یک پنجره ترمینال جداگانه اجرا کنید. وقتی دستورات Happy را وارد می‌کنید، گزارش‌ها دستورات پوسته Happy issues را در پس‌زمینه نشان می‌دهند. اگر به فضاهای نام شبکه لینوکس علاقه مند هستید، این یک راه خوب برای درک نحوه عملکرد Happy است.

به عنوان مثال، happy-node-add node00 یک گره Happy ایجاد می کند. خروجی log برای این دستور به صورت زیر است:

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 برای آزمایش گنجانده شده است. همچنین از آنها برای یادگیری دستورات ساخت توپولوژی های پیچیده استفاده کنید.

توپولوژی ها در قالب JSON و Shell Script هستند.

JSON

فایل های توپولوژی JSON با استفاده از دستورات بارگذاری happy-state-load weave-state-load می شوند. اگر توپولوژی شامل Weave باشد، باید از weave-state-load برای بارگذاری توپولوژی استفاده کنید، در غیر این صورت دستورات خاص Weave نادیده گرفته می شوند.

به عنوان مثال، یک توپولوژی بدون بافت:

happy-state-load thread_wifi_ap_internet.json

توپولوژی با بافت:

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 دارای سه فایل پیکربندی است:

فایل پیکربندی شرح
~/.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 نیاز دارد، استفاده کنید.

به عنوان مثال، برای اینکه به 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 برای مدیریت فرآیند استفاده می کند. از happy-process-wait برای تعلیق اجرای فرآیند و happy-process-stop برای از بین بردن فرآیند استفاده کنید.

خروجی فرآیند در /tmp است. به عنوان مثال، پس از شروع فرآیند ContinuousPing، دایرکتوری /tmp را بررسی کنید:

ls /tmp/happy*
/tmp/happy_018691_1524087014.192197_ContinuousPing.out

این فایل .out حاوی خروجی فرآیند ContinuousPing است.

استفاده از sudo

Happy پیکربندی شبکه را که توسط هسته لینوکس کنترل می شود، تغییر می دهد. از آنجایی که فقط root می تواند پیکربندی هسته را تغییر دهد، Happy از شما می خواهد رمز عبور sudo را در حین کار وارد کنید.

Happy از متغیر محیط سیستم $SUDO برای فراخوانی sudo استفاده می کند. اگر $SUDO تعریف نشده باشد، Happy یک تماس عادی sudo برقرار می کند.

اسکریپت نویسی پایتون

پس از نصب، بسته های Happy Python را می توان با استفاده از عبارت import زیر به محیط پایتون وارد کرد:

import happy

ماژول های فرمان فردی موجود در /happy به صورت زیر وارد می شوند:

import happy.HappyNodeAdd

برای بازیابی گزینه های ماژول، تابع option() را فراخوانی کنید. به عنوان مثال، برای بازیابی گزینه های ماژول HappyNodeAdd :

module options
import happy.HappyNodeAdd
options = happy.HappyNodeAdd.option()