sidecar-start.sh
Обзор
Данный shell-скрипт предназначен для подготовки и запуска приложения relay_sidecar. Он выполняет следующие ключевые задачи:
Устанавливает необходимый инструмент
jqдля обработки JSON.Ожидает появления файла конфигурации
/deploy-data/relay_contracts.json.Извлекает адрес драйвера из этого JSON-файла.
Генерирует конфигурационный файл
sidecar.yamlс параметрами запуска.Запускает приложение
relay_sidecarс подготовленными параметрами.
Скрипт используется в контейнеризированных средах, где требуется динамическая настройка сервиса на основе внешних данных.
Подробное описание содержимого файла
Установка зависимости
apk add --no-cache jq
Устанавливает пакет
jqбез кеширования, что позволяет работать с JSON в shell-скрипте.
Ожидание файла relay_contracts.json
echo "Waiting for relay_contracts.json file..."
until [ -f /deploy-data/relay_contracts.json ]; do sleep 2; done
Скрипт выводит сообщение о начале ожидания.
Цикл
untilпроверяет наличие файла/deploy-data/relay_contracts.jsonкаждые 2 секунды.Не продолжает работу, пока файл отсутствует.
Извлечение адреса драйвера из JSON
DRIVER_ADDRESS=$(jq -r '.driver.addr' /deploy-data/relay_contracts.json)
echo "Driver address from relay_contracts.json: $DRIVER_ADDRESS"
Используется
jqдля парсинга JSON и извлечения значения по пути.driver.addr.Значение записывается в переменную окружения
DRIVER_ADDRESS.Выводится в консоль для логирования.
Генерация конфигурационного файла sidecar.yaml
cat > /tmp/sidecar.yaml << EOFCONFIG
driver:
chain-id: 31337
address: "$DRIVER_ADDRESS"
log-level: "debug"
log-mode: "pretty"
signer: true
chains:
- "http://anvil:8545"
- "http://anvil-settlement:8546"
bootnodes:
- /dns4/relay-sidecar-1/tcp/8880/p2p/16Uiu2HAmFUiPYAJ7bE88Q8d7Kznrw5ifrje2e5QFyt7uFPk2G3iR
http-listen: ":8080"
p2p-listen: "/ip4/0.0.0.0/tcp/8880"
enable-mdns: true
EOFCONFIG
Создается YAML-файл с параметрами запуска приложения.
В поле
driver.addressподставляется динамически полученный адрес.Конфигурация включает параметры логирования, список цепочек, bootnodes, сетевые настройки для HTTP и P2P.
Файл сохраняется во временной директории
/tmp/sidecar.yaml.
Запуск приложения relay_sidecar
exec /app/relay_sidecar --config /tmp/sidecar.yaml --secret-keys "$1" --storage-dir "$2" $3
Используется
execдля замены текущего процесса на процессrelay_sidecar.Передаются следующие параметры:
--config— путь к сгенерированному конфигурационному файлу.--secret-keys— первый аргумент скрипта, предполагается путь к файлу с ключами.--storage-dir— второй аргумент, директория для хранения данных.$3— третий необязательный аргумент, передается как есть.
Важные детали реализации
Скрипт ориентирован на запуск в Alpine Linux (использование
apk).Ожидание файла
relay_contracts.jsonгарантирует, что сервис не стартует без необходимых данных.Конфигурация в YAML формируется динамически, что позволяет адаптироваться к разным средам и адресам.
Использование
execосвобождает ресурсы оболочки, позволяя контейнеру корректно обрабатывать сигналы.
Взаимодействие с другими частями системы
Файл
/deploy-data/relay_contracts.jsonгенерируется или предоставляется другим компонентом системы, вероятно, частью процесса деплоя или сборки контрактов.Сервис
relay_sidecar— основной компонент, который запускается данным скриптом.Параметры
--secret-keysи--storage-dirпередаются из внешних источников (например, через Docker entrypoint).Сеть настраивается через параметры
chainsиbootnodes, что указывает на взаимодействие с Ethereum-подобными узлами (anvil).
Пример использования
./sidecar-start.sh /path/to/keys.json /var/lib/sidecar/data --verbose
Здесь
/path/to/keys.json— файл с секретными ключами./var/lib/sidecar/data— каталог для хранения состояния.--verbose— дополнительный флаг запуска.
Mermaid диаграмма
flowchart TD
A[Start] --> B[Install jq]
B --> C[Wait for /deploy-data/relay_contracts.json]
C --> D[Parse DRIVER_ADDRESS from JSON]
D --> E[Generate /tmp/sidecar.yaml]
E --> F[Execute relay_sidecar with args]
Диаграмма отражает последовательность действий в скрипте от запуска до старта приложения.
Итог
Файл sidecar-start.sh — это утилитарный скрипт для подготовки и запуска сервиса relay_sidecar. Он обеспечивает динамическую настройку на основе внешних данных, что важно для гибких и масштабируемых систем, работающих с блокчейн-средами и P2P-сетями.