Googleは、黒人コミュニティのための人種的衡平の促進に取り組んでいます。 方法をご覧ください。
このページは Cloud Translation API によって翻訳されました。
Switch to English

幸せな使い方

happy-*コマンドで-hフラグを使用して、そのコマンドのヘルプとオプションのリストを表示します。

状態ファイル

ハッピーストアは、そのトポロジー状態を単一レコードのJSONファイルに慎重に保管し、維持します。この状態ファイルを使用して、Happyは適切なコマンドを実行してトポロジを作成または削除できます。

デフォルトの状態ファイルは~/.happy_state.jsonます。 happy-state出力にあるhappy 、デフォルトの状態名はhappyです。

 happy-state

State Name:  happy 

並列状態

Happyは、複数の共存する並列状態をサポートします。現在の状態は、 HAPPY_STATE_ID環境変数によって決定されます。 HAPPY_STATE_IDが環境に存在しない場合は、デフォルトの状態値happyが使用されます。

ハッピーインストール中にHAPPY_STATE_IDは作成されません。すぐに別のHappy状態に切り替えるには、 state以外の値を持つものを作成します。

 export HAPPY_STATE_ID="sunny"

次に、 happy-state結果を別の状態でチェックし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-deletehappy-state-deleteしてhappy-state-delete 。これにより、Linuxホストのネットワーク構成に影響を与えずに、Happyによって作成されたすべてのネットワーク名前空間がシステムから削除されます。

たとえば、 happysunny 2つの状態がありhappy

 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送信します。 2番目のログバックアップは/tmp/${HAPPY_STATE_ID}_debug_log.txt送信され/tmp/${HAPPY_STATE_ID}_debug_log.txt

Happyログを表示するには、別のターミナルウィンドウでhappy-state -l実行します。 Happyコマンドを入力すると、ログにはバックグラウンドでのシェルコマンドHappy問題が表示されます。 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固有のコマンドはスキップされます。

たとえば、織りのないトポロジ:

happy-state-load thread_wifi_ap_internet.json

織りのトポロジー:

weave-state-load three_nodes_on_thread_weave.json

現在のトポロジを後で使用するために個別のJSONファイルとして保存するには(たとえば、 テストケーススクリプト )、 happy-shell -s使用しhappy-shell -s

happy-shell -s my_topology.json

これにより、トポロジ状態ファイルが$HOMEディレクトリに保存されます。

シェルスクリプト

シェルスクリプトトポロジファイルには、対応するJSONファイルにトポロジを作成するためのHappyコマンドとWeaveコマンドのセットが含まれています。これらのスクリプトには、デフォルトでは実行権限がありません。次の2つの方法で実行できます。

bashコマンドを使用して:

bash thread_wifi_ap_internet.sh

実行権限を適用することにより:

chmod +x thread_wifi_ap_internet.sh
./thread_wifi_ap_internet.sh

構成

Happyには3つの構成ファイルがあります。

設定ファイル説明
~/.happy_conf.json 個人用またはプラグイン用の構成変数。これらの値は、 happy-configurationコマンドを使用して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するには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スクリプト

インストール後、次のimportステートメントを使用して、Happy PythonパッケージをPython環境にインポートできます。

import happy

/happyある個々のコマンドモジュールは、次のようにインポートされます。

import happy.HappyNodeAdd

モジュールオプションを取得するには、 option()関数を呼び出しoption() 。たとえば、 HappyNodeAddモジュールオプションを取得するには:

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