diff --git a/app/pom.xml b/app/pom.xml index e7b356c..de518f1 100644 --- a/app/pom.xml +++ b/app/pom.xml @@ -36,7 +36,7 @@ com.hierynomus sshj - 0.39.0 + 0.40.0 @@ -49,6 +49,45 @@ + + org.apache.maven.plugins + maven-shade-plugin + 1.4 + + + package + + shade + + + + + + + *:* + + module-info.class + JDOMAbout*class + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + ru.kirillius.pf.sdn.App + + + + true + + shaded + + + org.codehaus.mojo exec-maven-plugin @@ -69,6 +108,10 @@ + + + + diff --git a/launcher.sh b/launcher.sh new file mode 100644 index 0000000..d374111 --- /dev/null +++ b/launcher.sh @@ -0,0 +1,155 @@ +#!/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 +} + +# Находим последнюю версию файла +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 -jar "$LIBRARY/$VER.pfapp" -c="$CFGPATH" -l="$LIBRARY" -r="$REPO_URL" +} + +# Запускаем Java с возможностью перезапуска при коде возврата 303 +while true; do + run_java + EXIT_CODE=$? + + if [ $EXIT_CODE -eq 303 ]; then + echo "Restarting application (exit code 303)..." + continue + else + exit $EXIT_CODE + fi +done \ No newline at end of file diff --git a/ovpn-connector/pom.xml b/ovpn-connector/pom.xml index 3a04069..0b3cc11 100644 --- a/ovpn-connector/pom.xml +++ b/ovpn-connector/pom.xml @@ -52,11 +52,34 @@ - true + true + shaded + + org.apache.maven.plugins + maven-antrun-plugin + 3.1.0 + + + package + + run + + + + + + + + + + + + + diff --git a/pom.xml b/pom.xml index 0d4b7b0..fdbf0b9 100644 --- a/pom.xml +++ b/pom.xml @@ -22,6 +22,62 @@ UTF-8 + + + + assembly + + + project.packaging + pom + + + + + + org.apache.maven.plugins + maven-antrun-plugin + 3.1.0 + + + post-build-assembly + verify + + run + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -41,6 +97,8 @@ + + @@ -96,4 +154,5 @@ + \ No newline at end of file diff --git a/unix-wrapper.sh b/unix-wrapper.sh new file mode 100644 index 0000000..d3eef3a --- /dev/null +++ b/unix-wrapper.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +# Проверяем наличие Java в системе +if ! which java >/dev/null 2>&1; then + echo "Java not found. Please install java, openjdk or JRE" >&2 + exit 1 +fi + +# Получаем полный путь к текущему скрипту +SCRIPT_PATH="$0" + +# Запускаем Java с текущим скриптом как параметром и всеми переданными аргументами +java -jar "$SCRIPT_PATH" $@ + +exit + +