pf-sdn/launcher.sh

167 lines
5.5 KiB
Bash
Raw Permalink 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/sh
# Пути по умолчанию
DEFAULT_CFGPATH="/etc/pfsdn.json"
DEFAULT_LIBRARY="/var/lib/pfsdn"
DEFAULT_REPO_URL="https://repo.kirillius.ru/apps/pf/"
# Функция для извлечения значений из аргументов
get_arg_value() {
local arg_name="$1"
local default_value="$2"
local value="$default_value"
# Ищем аргумент в формате -arg=value или --arg=value
for arg in "${@:3}"; do
case "$arg" in
-$arg_name=*|--$arg_name=*)
value="${arg#*=}"
break
;;
esac
done
echo "$value"
}
# Получаем пути из аргументов или используем значения по умолчанию
CFGPATH=$(get_arg_value "c" "$DEFAULT_CFGPATH" "$@")
LIBRARY=$(get_arg_value "l" "$DEFAULT_LIBRARY" "$@")
REPO_URL=$(get_arg_value "r" "$DEFAULT_REPO_URL" "$@")
# Выводим рабочие каталоги
echo "Config path: $CFGPATH"
echo "Library path: $LIBRARY"
echo "Repository URL: $REPO_URL"
# Проверяем наличие Java в системе и версию
if ! command -v java >/dev/null 2>&1; then
echo "Java not found. Please install java, openjdk or JRE" >&2
exit 1
fi
# Проверяем версию Java (должна быть >= 21)
check_java_version() {
local java_version
java_version=$(java -version 2>&1 | head -n 1 | sed 's/.*"\([0-9]*\)\.[0-9]*\.[0-9]*".*/\1/')
if [ -z "$java_version" ] || [ "$java_version" -lt 21 ]; then
echo "Java version 21 or higher is required. Found version: $java_version" >&2
return 1
fi
echo "Java version check passed: $java_version"
return 0
}
if ! check_java_version; then
exit 1
fi
# Проверяем и создаем директорию LIBRARY если не существует
if [ ! -d "$LIBRARY" ]; then
echo "Library directory not found: $LIBRARY"
echo "Creating directory: $LIBRARY"
if ! mkdir -p "$LIBRARY"; then
echo "Failed to create library directory: $LIBRARY" >&2
exit 1
fi
echo "Directory created successfully"
fi
# Функция для поиска последней версии в директории
find_local_version() {
find "$LIBRARY" -maxdepth 1 -name "*.pfapp" -type f | grep -E '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\.pfapp' | sort -V | tail -n 1
}
# Функция для скачивания версии с веб-страницы
download_latest_version() {
local repo_url="$REPO_URL"
echo "Searching for latest version on $repo_url..."
# Получаем HTML страницу и извлекаем ссылки на .pfapp файлы
local latest_file=$(curl -s "$repo_url" | grep -oE 'href="[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\.pfapp"' | sed 's/href="//g' | sed 's/"//g' | sort -V | tail -n 1)
if [ -z "$latest_file" ]; then
echo "No .pfapp files found on the repository" >&2
return 1
fi
local download_url="${repo_url}${latest_file}"
local local_path="$LIBRARY/$latest_file"
echo "Downloading version: $latest_file"
echo "From: $download_url"
echo "To: $local_path"
# Скачиваем файл
if curl -s -o "$local_path" "$download_url"; then
echo "Successfully downloaded $latest_file"
# Возвращаем ТОЛЬКО путь к файлу, без дополнительных сообщений
echo "$local_path"
else
echo "Failed to download $latest_file" >&2
return 1
fi
}
cleanup() {
echo "Received signal, stopping child process..."
kill $CPID 2>/dev/null
wait $CPID 2>/dev/null
exit 0
}
trap cleanup TERM INT
while true; do
# Находим последнюю версию файла
VER_FILE=$(find_local_version)
# Если не нашли файлы локально, скачиваем с веб-страницы
if [ -z "$VER_FILE" ]; then
echo "No local .pfapp files found, downloading from repository..."
# Сохраняем вывод функции в временную переменную, чтобы показать сообщения
DOWNLOAD_OUTPUT=$(download_latest_version)
if [ $? -ne 0 ]; then
echo "Failed to download application file" >&2
exit 1
fi
# Извлекаем последнюю строку (путь к файлу) из вывода
VER_FILE=$(echo "$DOWNLOAD_OUTPUT" | tail -n 1)
# Выводим все сообщения кроме последней строки
echo "$DOWNLOAD_OUTPUT" | head -n -1
else
# Выводим информацию о найденной локальной версии
VER=$(basename "$VER_FILE")
VER="${VER%.pfapp}"
echo "Using local version: $VER"
fi
# Извлекаем только имя файла (без пути)
VER=$(basename "$VER_FILE")
# Убираем расширение .pfapp чтобы получить чистую версию
VER="${VER%.pfapp}"
# Выводим финальную информацию о версии
echo "Starting application version: $VER"
# Функция для запуска Java
run_java() {
java -Xmx256m -jar "$LIBRARY/$VER.pfapp" -c="$CFGPATH" -l="$LIBRARY" -r="$REPO_URL" &
CPID=$!
wait $CPID
}
# Запускаем Java с возможностью перезапуска при коде возврата 42
run_java
EXIT_CODE=$?
if [ $EXIT_CODE -eq 42 ]; then
echo "Restarting application (exit code 42)..."
continue
else
exit $EXIT_CODE
fi
done