해당 명령어의 도움말과 옵션 목록을 보려면 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 설치 중에 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에 의해 생성된 모든 네트워크 네임스페이스가
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
로그
Happy는 기본적으로 syslog
로 로그를 전송합니다. 두 번째 로그 백업이 /tmp/${HAPPY_STATE_ID}_debug_log.txt
로 전송됩니다.
Happy 로그를 보려면 별도의 터미널 창에서 happy-state -l
를 실행합니다. Happy 명령어를 입력하면 로그에 셸 명령어 Happy issues in the background가 로그에 표시됩니다. 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 저장소에 모두 포함되어 있습니다. 또한 복잡한 토폴로지를 구성하는 명령어를 학습하는 데도 사용합니다.
- 만족:
/topologies
- OpenWeave:
/src/test-apps/happy/topologies/standalone
토폴로지는 JSON 및 셸 스크립트 형식입니다.
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
디렉터리에 토폴로지 상태 파일이 저장됩니다.
셸 스크립트
셸 스크립트 토폴로지 파일에는 해당 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의 특정 배포에 필요한 기본값 외의 개인 또는 플러그인 변수를 설정하는 것이 좋습니다.
예를 들어 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
사용
Linux 커널이 제어하는 네트워크 구성을 변경해 드립니다.
root
만 커널 구성을 변경할 수 있으므로 작업 중에 Happy에서 sudo
비밀번호를 입력하라는 메시지를 표시합니다.
Happy는 $SUDO
시스템 환경 변수를 사용하여 sudo
를 호출합니다. $SUDO
이 정의되지 않으면 Happy는 일반 sudo
호출을 실행합니다.
Python 스크립팅
설치 후 Happy Python 패키지는 다음 import
문을 사용하여 Python 환경으로 가져올 수 있습니다.
import happy
/happy
에 있는 개별 명령어 모듈은 다음과 같이 가져옵니다.
import happy.HappyNodeAdd
모듈 옵션을 검색하려면 option()
함수를 호출합니다. 예를 들어 HappyNodeAdd
모듈 옵션을 검색하려면 다음을 실행합니다.
module options import happy.HappyNodeAdd options = happy.HappyNodeAdd.option()