Google is committed to advancing racial equity for Black communities. See how.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Удачного использования

Используйте флаг -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 чтобы немедленно переключиться в другое состояние Happy.

export HAPPY_STATE_ID="sunny"

Теперь проверка результатов happy-state в другом состоянии:

happy-state

State Name:  sunny

Каждое состояние поддерживается в собственном ~/.${HAPPY_STATE_ID}_state.json . Чтобы переключиться между состояниями, export HAPPY_STATE_ID=" <state-name> " запустите команду 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 в фоновом режиме. Это хороший способ понять, как работает Happy, если вас интересуют сетевые пространства имен Linux.

Например, 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() - это команды оболочки, которые вызывает 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 и Shell Script.

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 .

Скрипты оболочки

Файлы топологии сценария оболочки содержат набор команд 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, где найти каталог тестовых test-apps Weave для тестовых сценариев, установите переменную 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 изменяет конфигурацию сети, управляемую ядром Linux. Поскольку только root может изменить конфигурацию ядра, Happy предложит вам ввести пароль sudo во время работы.

Happy использует $SUDO переменную окружения $SUDO для вызова sudo . Если $SUDO не определено, Happy выполняет обычный вызов sudo .

Сценарии Python

После установки пакеты Happy Python можно импортировать в среду Python с помощью следующего оператора import :

import happy

Отдельные командные модули, найденные в /happy , импортируются следующим образом:

import happy.HappyNodeAdd

Чтобы получить параметры модуля, вызовите option() . Например, чтобы получить HappyNodeAdd модуля HappyNodeAdd :

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