از پرچم -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 گنجانده شده است. همچنین از آنها برای یادگیری دستورات ساخت توپولوژی های پیچیده استفاده کنید.
- مبارک:
/topologies
- OpenWeave:
/src/test-apps/happy/topologies/standalone
توپولوژی ها در قالب 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()