Files
Phantom/release/docker/entrypoint.sh

140 lines
4.6 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Скрипт запуска для контейнера Phantom Protocol
set -e
# Функция логирования
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}
# Функция для генерации конфигурации
generate_config() {
local node_name="${PHANTOM_NODE_NAME:-phantom-$(hostname)}"
local config_file="/home/phantom/config/${node_name}.conf"
log "Генерация конфигурации для узла: $node_name"
# Вызов скрипта генерации конфигурации
/usr/local/bin/generate-config.sh "$node_name" "$config_file"
echo "$config_file"
}
# Функция для настройки сети
setup_network() {
log "Настройка сетевых интерфейсов..."
# Проверка наличия TUN интерфейса
if [ ! -c /dev/net/tun ]; then
log "ПРЕДУПРЕЖДЕНИЕ: /dev/net/tun недоступен. Туннелирование может не работать."
log "Запустите контейнер с --device /dev/net/tun или --privileged"
fi
# Настройка iptables если есть права
if [ "$PHANTOM_SETUP_IPTABLES" = "true" ]; then
log "Настройка правил iptables..."
# Здесь можно добавить правила iptables для анонимизации
fi
}
# Функция для проверки зависимостей
check_dependencies() {
log "Проверка зависимостей..."
# Проверка наличия phantomd
if ! command -v phantomd >/dev/null 2>&1; then
log "ОШИБКА: phantomd не найден"
exit 1
fi
# Проверка OpenSSL
if ! command -v openssl >/dev/null 2>&1; then
log "ОШИБКА: OpenSSL не найден"
exit 1
fi
log "Все зависимости найдены"
}
# Функция для ожидания других узлов
wait_for_peers() {
if [ -n "$PHANTOM_WAIT_FOR_PEERS" ]; then
log "Ожидание доступности узлов: $PHANTOM_WAIT_FOR_PEERS"
IFS=',' read -ra PEERS <<< "$PHANTOM_WAIT_FOR_PEERS"
for peer in "${PEERS[@]}"; do
log "Ожидание узла: $peer"
while ! nc -z "$peer" 8080 2>/dev/null; do
sleep 2
done
log "Узел $peer доступен"
done
fi
}
# Функция для запуска phantomd
start_phantomd() {
local config_file="$1"
log "Запуск Phantom Protocol с конфигурацией: $config_file"
# Установка переменных окружения
export PHANTOM_CONFIG="$config_file"
export PHANTOM_LOG_LEVEL="${PHANTOM_LOG_LEVEL:-INFO}"
export PHANTOM_DATA_DIR="/home/phantom/data"
# Запуск phantomd
exec phantomd -h "$(basename "$config_file" .conf)"
}
# Основная функция
main() {
log "=== Запуск контейнера Phantom Protocol ==="
# Вывод информации о контейнере
log "Имя хоста: $(hostname)"
log "IP адрес: $(hostname -i 2>/dev/null || echo 'неизвестен')"
log "Пользователь: $(whoami)"
# Проверка зависимостей
check_dependencies
# Настройка сети
setup_network
# Генерация конфигурации если нужно
local config_file
if [ -n "$PHANTOM_CONFIG_FILE" ] && [ -f "$PHANTOM_CONFIG_FILE" ]; then
config_file="$PHANTOM_CONFIG_FILE"
log "Использование существующей конфигурации: $config_file"
else
config_file=$(generate_config)
fi
# Ожидание других узлов
wait_for_peers
# Запуск приложения
case "$1" in
phantomd)
start_phantomd "$config_file"
;;
bash|sh)
log "Запуск интерактивной оболочки"
exec "$@"
;;
*)
log "Запуск пользовательской команды: $*"
exec "$@"
;;
esac
}
# Обработка сигналов для корректного завершения
trap 'log "Получен сигнал завершения, останавливаем сервисы..."; exit 0' SIGTERM SIGINT
# Запуск основной функции
main "$@"