diff --git a/Dockerfile b/Dockerfile
index 0f1cdb7..d9db047 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,13 +1,12 @@
FROM alpine:latest
-RUN apk add --no-cache openjdk25 git curl
+RUN apk add --no-cache openjdk25 git
RUN mkdir -p /data /data/local
-COPY launcher.sh /launcher.sh
COPY docker/config.json /data/config.json
COPY docker/entrypoint.sh /entrypoint.sh
-RUN chmod +x /launcher.sh /entrypoint.sh
+RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
diff --git a/app/pom.xml b/app/pom.xml
index 4a4c14f..55bbf5f 100644
--- a/app/pom.xml
+++ b/app/pom.xml
@@ -6,7 +6,7 @@
ru.kirillius
pf-sdn
- 1.0.2.5
+ 1.1.0.0
pf-sdn.app
diff --git a/app/src/main/java/ru/kirillius/pf/sdn/App.java b/app/src/main/java/ru/kirillius/pf/sdn/App.java
index f13273c..fe8fb4f 100644
--- a/app/src/main/java/ru/kirillius/pf/sdn/App.java
+++ b/app/src/main/java/ru/kirillius/pf/sdn/App.java
@@ -24,6 +24,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.Objects;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Level;
import java.util.regex.Pattern;
@@ -114,7 +115,9 @@ public class App implements Context, Closeable {
serviceManager.getService(ComponentHandlerService.class).syncComponentsWithConfig();
serviceManager.getService(ResourceUpdateService.class).start();
- removeObsoleteVersions();
+ if(!isExternalManagement()) {
+ removeObsoleteVersions();
+ }
}
private void removeObsoleteVersions() {
@@ -175,7 +178,14 @@ public class App implements Context, Closeable {
*/
public void requestExit(boolean restart) {
running.set(false);
- shouldRestart.set(restart);
+ if(!isExternalManagement()) {
+ shouldRestart.set(restart);
+ }
+ }
+
+ @Override
+ public boolean isExternalManagement() {
+ return Objects.equals(System.getProperty("app.external.management", Boolean.FALSE.toString()), Boolean.TRUE.toString());
}
/**
diff --git a/app/src/main/java/ru/kirillius/pf/sdn/web/RPC/System.java b/app/src/main/java/ru/kirillius/pf/sdn/web/RPC/System.java
index 2641bef..d3789e6 100644
--- a/app/src/main/java/ru/kirillius/pf/sdn/web/RPC/System.java
+++ b/app/src/main/java/ru/kirillius/pf/sdn/web/RPC/System.java
@@ -122,10 +122,19 @@ public class System implements RPC {
@ProtectedMethod
@JRPCMethod
public void doUpdate() {
+ if(context.isExternalManagement()){
+ return;
+ }
var updateService = context.getServiceManager().getService(AppUpdateService.class);
updateService.updateApp();
}
+ @ProtectedMethod
+ @JRPCMethod
+ public boolean isExternalManaged() {
+ return context.isExternalManagement();
+ }
+
@ProtectedMethod
@JRPCMethod
public JSONArray getRepositoryTypes() {
diff --git a/core/pom.xml b/core/pom.xml
index a2aa809..7d2354d 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -6,7 +6,7 @@
ru.kirillius
pf-sdn
- 1.0.2.5
+ 1.1.0.0
diff --git a/core/src/main/java/ru/kirillius/pf/sdn/core/Context.java b/core/src/main/java/ru/kirillius/pf/sdn/core/Context.java
index 572d926..0989202 100644
--- a/core/src/main/java/ru/kirillius/pf/sdn/core/Context.java
+++ b/core/src/main/java/ru/kirillius/pf/sdn/core/Context.java
@@ -26,4 +26,7 @@ public interface Context {
* @param shouldRestart {@code true} to exit with restart intent, {@code false} to shut down.
*/
void requestExit(boolean shouldRestart);
+
+
+ boolean isExternalManagement();
}
diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh
index 6093539..865923e 100755
--- a/docker/entrypoint.sh
+++ b/docker/entrypoint.sh
@@ -1,2 +1,2 @@
#!/bin/sh
-exec /launcher.sh --c=/data/config.json
+exec java -Xmx256m -jar default.pfapp --c=/data/config.json -Dapp.external.management=true -l=. -r="https://repo.kirillius.ru/apps/pf/"
\ No newline at end of file
diff --git a/launcher/pom.xml b/launcher/pom.xml
index 43dd1ee..9cdb48f 100644
--- a/launcher/pom.xml
+++ b/launcher/pom.xml
@@ -6,7 +6,7 @@
ru.kirillius
pf-sdn
- 1.0.2.5
+ 1.1.0.0
launcher
diff --git a/ovpn-connector/pom.xml b/ovpn-connector/pom.xml
index fd81c79..3ecdc1c 100644
--- a/ovpn-connector/pom.xml
+++ b/ovpn-connector/pom.xml
@@ -6,7 +6,7 @@
ru.kirillius
pf-sdn
- 1.0.2.5
+ 1.1.0.0
pf-sdn.ovpn-connector
diff --git a/pom.xml b/pom.xml
index b02fb17..4e79cb5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
ru.kirillius
pf-sdn
- 1.0.2.5
+ 1.1.0.0
pom
diff --git a/webui/src/pages/Statistics.js b/webui/src/pages/Statistics.js
index 188da40..ce4ee02 100644
--- a/webui/src/pages/Statistics.js
+++ b/webui/src/pages/Statistics.js
@@ -87,10 +87,14 @@ async function renderSystemAndManagerStatus() {
const currentVersion = (versionInfo && versionInfo.current) || '';
const downloadedVersion = (versionInfo && versionInfo.downloaded) || '';
configChanged = await JSONRPC.System.isConfigChanged();
+ const isExternalManaged = await JSONRPC.System.isExternalManaged();
const hasAvailableUpdate = availableVersion && availableVersion !== currentVersion;
const isDownloaded = hasAvailableUpdate && downloadedVersion === availableVersion;
- const updateButtonDisabled = !hasAvailableUpdate || isDownloaded;
+ const updateButtonDisabled = !hasAvailableUpdate || isDownloaded || isExternalManaged;
const systemStatus = (() => {
+ if (isExternalManaged) {
+ return 'Управляется извне';
+ }
if (!hasAvailableUpdate) {
return 'Нет обновлений';
}
@@ -104,6 +108,7 @@ async function renderSystemAndManagerStatus() {
Текущая версия: ${currentVersion || '-'}
Последняя версия: ${availableVersion || '-'}
+ ${isExternalManaged ? '
Обновление ПО управляется внешней системой, установка из веб-интерфейса недоступна.
' : ''}
Конфигурация: ${configChanged ? 'изменена' : 'актуальна'}
@@ -225,8 +230,15 @@ function attachEventHandlers() {
$btn.prop('disabled', true).text('Обновление...');
try {
- await JSONRPC.System.doUpdate();
+ const updatePromise = JSONRPC.System.doUpdate();
alert('Обновление ПО запущено!');
+ await updatePromise;
+ if (confirm('Обновление завершено. Перезагрузить?')) {
+ await JSONRPC.System.restart();
+ setTimeout(() => {
+ window.location.reload();
+ }, 10000);
+ }
await renderSystemAndManagerStatus();
} catch (e) {
alert('Ошибка при запуске обновления ПО!');