From f5b3310103ea177182c0eb1d29065b44dd228de0 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Mon, 19 Apr 2021 15:04:36 +0000
Subject: [PATCH] Support of $BorgButlerHome/environment.sh for setting java options.

---
 borgbutler-docker/buildDocker.sh                                                       |    7 +--
 borgbutler-docker/app/entrypoint.sh                                                    |   14 +++++++
 README.adoc                                                                            |   21 +++++++---
 borgbutler-core/src/main/kotlin/de/micromata/borgbutler/config/ConfigurationHandler.kt |   50 +++++++++++++++---------
 borgbutler-docker/app/Dockerfile                                                       |    2 -
 5 files changed, 62 insertions(+), 32 deletions(-)

diff --git a/README.adoc b/README.adoc
index 821b40e..9b5ea7b 100644
--- a/README.adoc
+++ b/README.adoc
@@ -67,7 +67,7 @@
 
 Enjoy BorgButler by opening your browser: http://localhost:9042
 
-You may refer the log file through the web browser or in `$HOME/BorgButler/borgbutler.log`.
+You may refer the log file through the web browser or in `${BorgButlerHome}/borgbutler.log`.
 
 For new versions of BorgButler or for changing the running options of your BorgButler container, simply delete the BorgButler docker container by `docker rm borgbutler` and call `docker run` again.
 
@@ -78,6 +78,8 @@
 2. Unzip `borgbutler-server/build/distributions/borgbutler-server-<version>.zip`
 3. Run `bin/borgbutler-server` or `bin/borgbutler-server.bat`.
 
+As BorgButler default home directory, `${HOME}/.borgbutler` is used.
+
 === Starting from sources
 You'll need OpenJDK 9+ as well as gradle.
 
@@ -95,7 +97,7 @@
 
 [source,yaml]
 ----
-borgCommand: "/Users/kai/.borgbutler/bin/borg-macosx64-1.1.9"
+borgCommand: "${BorgButlerHome}/bin/borg-macosx64-1.1.9"
 maxArchiveContentCacheCapacityMb: 200
 repoConfigs:
 - displayName: "ACME - Backup server 1"
@@ -121,10 +123,10 @@
 Here: link:doc/ExampleBorgConfig{outfilesuffix}[Installation]
 
 
-==== Backups of configuration files
+=== Backups of configuration files
 
 You may configure and initialize your repositories by the BorgButler app. The config file is generated by BorgButler. Before
-saving a new configuration BorgButler stores a copy of the current configuration in the backup dir: `~/.borgbutler/backup/`.
+saving a new configuration BorgButler stores a copy of the current configuration in the backup dir: `${BorgButlerHome}/backup/`.
 
 
 == More immpressions
@@ -145,8 +147,15 @@
 == Trouble shooting
 === Docker
 ==== Increase memory (OutOfMemory)
-1. `docker rm borgbutler`
-2. `docker run -e JAVA_OPTS="-Xmx2G" -v ...`
+Edit `${BorgButlerHome}/environment.sh` and restart your docker container (since version 0.7).
+
+[source,bash]
+----
+#!/bin/bash
+
+export JAVA_OPTS=-DXmx4g
+----
+
 If your docker container crashes on heavy usage of large borg archives, check the memory settings of your docker installation.
 
 === How to download/restore?
diff --git a/borgbutler-core/src/main/kotlin/de/micromata/borgbutler/config/ConfigurationHandler.kt b/borgbutler-core/src/main/kotlin/de/micromata/borgbutler/config/ConfigurationHandler.kt
index 2fdc9f1..a9a4fdc 100644
--- a/borgbutler-core/src/main/kotlin/de/micromata/borgbutler/config/ConfigurationHandler.kt
+++ b/borgbutler-core/src/main/kotlin/de/micromata/borgbutler/config/ConfigurationHandler.kt
@@ -76,6 +76,30 @@
         FileUtils.copyFile(file, backupFile)
     }
 
+    init {
+        workingDir = if (butlerHomeDir != null) {
+            File(butlerHomeDir)
+        } else {
+            File(System.getProperty("user.home"), BUTLER_HOME_DIR)
+        }
+        log.info("Using directory '" + workingDir.getAbsolutePath() + "' as BorgButler's home directory.")
+        if (!workingDir.exists()) {
+            log.info("Creating borg-butlers working directory: " + workingDir.getAbsolutePath())
+            workingDir.mkdirs()
+        }
+        configFile = File(workingDir, CONFIG_FILENAME)
+        configBackupDir = File(workingDir, CONFIG_BACKUP_DIR)
+        if (!configBackupDir.exists()) {
+            log.info("Creating borg-butlers backup directory: " + configBackupDir.absolutePath)
+            configBackupDir.mkdirs()
+        }
+        val environmentFile = File(workingDir, ENVIRONMENT_FILE)
+        if (!environmentFile.exists()) {
+            environmentFile.writeText(ENVIRONMENT_FILE_INITIAL_CONTENT)
+        }
+        read()
+    }
+
     companion object {
         private var instance: ConfigurationHandler? = null
         private const val BUTLER_HOME_DIR = ".borgbutler"
@@ -122,25 +146,13 @@
             val yaml = FileUtils.readFileToString(configFile, Definitions.STD_CHARSET)
             return YamlUtils.fromYaml(configClazz, yaml)
         }
-    }
 
-    init {
-        workingDir = if (butlerHomeDir != null) {
-            File(butlerHomeDir)
-        } else {
-            File(System.getProperty("user.home"), BUTLER_HOME_DIR)
-        }
-        log.info("Using directory '" + workingDir.getAbsolutePath() + "' as BorgButler's home directory.")
-        if (!workingDir.exists()) {
-            log.info("Creating borg-butlers working directory: " + workingDir.getAbsolutePath())
-            workingDir.mkdirs()
-        }
-        configFile = File(workingDir, CONFIG_FILENAME)
-        configBackupDir = File(workingDir, CONFIG_BACKUP_DIR)
-        if (!configBackupDir.exists()) {
-            log.info("Creating borg-butlers backup directory: " + configBackupDir.absolutePath)
-            configBackupDir.mkdirs()
-        }
-        read()
+        private const val ENVIRONMENT_FILE = "environment.sh"
+        private const val ENVIRONMENT_FILE_INITIAL_CONTENT = "#!/bin/bash\n\n" +
+                "# Set the java options here:\n" +
+                "#export JAVA_OPTS=-DXmx4g\n" +
+                "export JAVA_OPTS=\n\n" +
+                "# Set your options here (will be used for starting\n" +
+                "export JAVA_ARGS=\n"
     }
 }
diff --git a/borgbutler-docker/app/Dockerfile b/borgbutler-docker/app/Dockerfile
index 532513f..03a32ff 100644
--- a/borgbutler-docker/app/Dockerfile
+++ b/borgbutler-docker/app/Dockerfile
@@ -23,8 +23,6 @@
 
 COPY --chown=borgbutler:borgbutler entrypoint.sh /app
 RUN chmod 755 /app/entrypoint.sh
-#COPY shutdown.sh /app
-#COPY startup.sh /app
 
 # Variable expansion doesn't work for ENTRYPOINT definition as array, but array is required, because graceful shutdown of
 # container isn't given if java is started via 'sh -c' as it will be done by ENTRYPOINT java .....
diff --git a/borgbutler-docker/app/entrypoint.sh b/borgbutler-docker/app/entrypoint.sh
index 9afb503..6644126 100644
--- a/borgbutler-docker/app/entrypoint.sh
+++ b/borgbutler-docker/app/entrypoint.sh
@@ -44,6 +44,20 @@
 
 echo "Starting ${APP_NAME}..."
 
+ENVIRONMENT_FILE=/BorgButler/environment.sh
+if [ -f "$ENVIRONMENT_FILE" ]; then
+  echo "Sourcing $ENVIRONMENT_FILE..."
+  . $ENVIRONMENT_FILE
+fi
+
+if [ -n "$JAVA_OPTS" ]; then
+  echo "JAVA_OPTS=${JAVA_OPTS}"
+fi
+
+if [ -n "$JAVA_ARGS" ]; then
+  echo "JAVA_ARGS=${JAVA_ARGS}"
+fi
+
 #Trap SIGTERM
 trap cleanup INT SIGTERM
 
diff --git a/borgbutler-docker/buildDocker.sh b/borgbutler-docker/buildDocker.sh
index d451746..0a1972e 100755
--- a/borgbutler-docker/buildDocker.sh
+++ b/borgbutler-docker/buildDocker.sh
@@ -16,8 +16,5 @@
 echo "docker push kreinhard/borgbutler:latest"
 echo
 echo
-
-echo "Run without ssh: 'docker run -v $HOME/BorgButler:/BorgButler -p 127.0.0.1:9042:9042 --name borgbutler kreinhard/borgbutler'"
-echo "Run with ssh: 'docker run -v $HOME/BorgButler:/BorgButler -v $HOME/.ssh:/home/borgbutler/.ssh:ro -p 127.0.0.1:9042:9042 --name borgbutler kreinhard/borgbutler'"
-echo
-echo 'Increase Java memory: docker run -e JAVA_OPTS="-Xmx2g" -v ...'
+echo "Run 'docker run -v $HOME/BorgButler:/BorgButler -p 127.0.0.1:9042:9042 --name borgbutler kreinhard/borgbutler'"
+echo "For remote ssh repos, use option  '-v $HOME/.ssh:/home/borgbutler/.ssh:ro'"

--
Gitblit v1.10.0