Google is committed to advancing racial equity for Black communities. See how.

שימוש שמח

השתמש -h דגל עם כל happy-* הפקודה כדי להציג לסייע רשימת האפשרויות עבור הפקודה.

תיקי מדינה

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 לא נוצר במהלך ההתקנה שמחה. צור אחד עם ערך אחר מאשר 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-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 עובד, אם אתה מעוניין במרחבי שמות ברשת לינוקס.

לדוגמה, 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 Script.

ג'סון

קבצים הטופולוגיה JSON נטענים באמצעות happy-state-load או weave-state-load הפקודות. אם הטופולוגיה כולל Weave, עליך להשתמש weave-state-load לטעון את הטופולוגיה, אחר פקוד 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 בספרייה.

סקריפטים של מעטפת

קבצי טופולוגיית סקריפט מעטפת מכילים את קבוצה של פקודות 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_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

שמח משנה את תצורת הרשת הנשלטת על ידי ליבת לינוקס. מאז רק root יכול לשנות את תצורת הקרנל, שמח יבקש ממך להיכנס sudo הסיסמה במהלך המבצע.

Happy משתמשת $SUDO משתנה הסביבה במערכת כדי שיחה sudo . אם $SUDO אינו מוגדר, שמח עשה נורמלי sudo שיחה.

תסריט פייתון

לאחר ההתקנה, חבילות Python Happy ניתן לייבא לתוך סביבת Python באמצעות הבא import בהצהרה:

import happy

מודולים הפקודה הפרט נמצא /happy מיובאים כדלקמן:

import happy.HappyNodeAdd

כדי לאחזר אפשרויות מודול, להתקשר option() הפונקציה. לדוגמה, כדי לאחזר HappyNodeAdd אפשרויות מודול:

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