Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기
이 페이지는 Cloud Translation API를 통해 번역되었습니다.
Switch to English

행복한 사용법

happy-* 명령과 함께 -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 가 생성되지 않습니다. 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-state-delete 에서 happy-state-delete 를 실행해야합니다. 이렇게하면 Happy가 만든 모든 네트워크 네임 스페이스가 Linux 호스트 네트워크 구성에 영향을주지 않고 시스템에서 제거됩니다.

예를 들어 happysunny 두 가지 상태가 있습니다.

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 로그를 보려면 별도의 터미널 창에서 happy-state -l 을 실행하십시오. Happy 명령어를 입력하면 로그에 백그라운드에서 Happy issues 셸 명령어가 표시됩니다. Linux 네트워크 네임 스페이스에 관심이있는 경우 Happy가 어떻게 작동하는지 이해하는 좋은 방법입니다.

예를 들어 happy-node-add node00 은 Happy 노드를 만듭니다. 이 명령의 로그 출력은 다음과 같습니다.

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 및 셸 스크립트 형식입니다.

JSON

JSON 토폴로지 파일은 happy-state-load 또는 weave-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 디렉토리에 토폴로지 상태 파일이 저장됩니다.

쉘 스크립트

쉘 스크립트 토폴로지 파일에는 해당 JSON 파일에서 토폴로지를 작성하기위한 Happy 및 Weave 명령 세트가 포함되어 있습니다. 기본적으로 이러한 스크립트에는 실행 권한이 없습니다. 두 가지 방법으로 실행할 수 있습니다.

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 디렉토리를 찾을 수있는 위치를 Happy에게 알리려면 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라는 노드에서 지속적으로 ping을 실행하려면 다음을 수행하십시오.

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는 Linux 커널에 의해 제어되는 네트워크 구성을 변경합니다. root 만 커널 구성을 변경할 수 있으므로 Happy는 작업 중에 sudo 암호를 입력하라는 메시지를 표시합니다.

Happy는 $SUDO 시스템 환경 변수를 사용하여 sudo 를 호출합니다. $SUDO 가 정의되어 있지 않으면 Happy는 정상적인 sudo 호출을합니다.

Python 스크립팅

설치 후 다음 import 문을 사용하여 Happy Python 패키지를 Python 환경으로 가져올 수 있습니다.

import happy

/happy 에있는 개별 명령 모듈은 다음과 같이 가져옵니다.

import happy.HappyNodeAdd

모듈 옵션을 검색하려면 option() 함수를 호출하십시오. 예를 들어 HappyNodeAdd 모듈 옵션을 검색 HappyNodeAdd 다음을 수행하십시오.

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