140 lines
4.6 KiB
Bash
140 lines
4.6 KiB
Bash
#!/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 "$@"
|
||
|