summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2014-10-13 11:50:40 +0200
committerSimon Rettberg2014-10-13 11:50:40 +0200
commite203d6800e90f51947ce49f855cfa4b7f7709975 (patch)
tree7f6b0390dc15bfe9ad278de9f4d124b6522955db
parentUse SSL for AD-LDAP-connections (diff)
downloadtmlite-bwlp-e203d6800e90f51947ce49f855cfa4b7f7709975.tar.gz
tmlite-bwlp-e203d6800e90f51947ce49f855cfa4b7f7709975.tar.xz
tmlite-bwlp-e203d6800e90f51947ce49f855cfa4b7f7709975.zip
Added Dozmod and Syncdaemon launcher
Also added forgotten Exec class, tweaked mount-store script too
-rwxr-xr-xscripts/mount-store9
-rw-r--r--src/main/java/org/openslx/satserver/util/Exec.java22
-rw-r--r--src/main/java/org/openslx/taskmanager/tasks/DozmodLauncher.java84
-rw-r--r--src/main/java/org/openslx/taskmanager/tasks/DummyTask.java34
-rw-r--r--src/main/java/org/openslx/taskmanager/tasks/SyncdaemonLauncher.java120
5 files changed, 240 insertions, 29 deletions
diff --git a/scripts/mount-store b/scripts/mount-store
index 4251926..5842d23 100755
--- a/scripts/mount-store
+++ b/scripts/mount-store
@@ -80,6 +80,15 @@ if [ "$RET" == "0" ]; then
for DIR in $(find "$DEST" -type d); do
chmod ug+x "$DIR" 2>/dev/null
done
+ TEST="$DEST/.test-$RAND-$RAND"
+ sudo -n -u bwlehrpool touch "$TEST"
+ RET=$?
+ if [ -e "$TEST" ]; then
+ sudo -n -u bwlehrpool rm -f "$TEST"
+ else
+ echo "Error: Mounted share is not writable, aborting." >&2
+ umount -v "$DEST"
+ fi
fi
exit $RET
diff --git a/src/main/java/org/openslx/satserver/util/Exec.java b/src/main/java/org/openslx/satserver/util/Exec.java
new file mode 100644
index 0000000..e7b27da
--- /dev/null
+++ b/src/main/java/org/openslx/satserver/util/Exec.java
@@ -0,0 +1,22 @@
+package org.openslx.satserver.util;
+
+import java.io.File;
+import java.io.IOException;
+
+public class Exec
+{
+
+ public static int sync( String... command )
+ {
+ ProcessBuilder pb = new ProcessBuilder( command );
+ pb.directory( new File( "/" ) );
+ Process p;
+ try {
+ p = pb.start();
+ return p.waitFor();
+ } catch ( IOException | InterruptedException e ) {
+ return -1;
+ }
+ }
+
+}
diff --git a/src/main/java/org/openslx/taskmanager/tasks/DozmodLauncher.java b/src/main/java/org/openslx/taskmanager/tasks/DozmodLauncher.java
new file mode 100644
index 0000000..b2f2826
--- /dev/null
+++ b/src/main/java/org/openslx/taskmanager/tasks/DozmodLauncher.java
@@ -0,0 +1,84 @@
+package org.openslx.taskmanager.tasks;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.openslx.taskmanager.api.SystemCommandTask;
+
+import com.google.gson.annotations.Expose;
+
+public class DozmodLauncher extends SystemCommandTask
+{
+ /**
+ * What to do: start, stop...
+ */
+ @Expose
+ private String operation;
+
+ private StatusObject status = null;
+
+ @Override
+ protected String[] initCommandLine()
+ {
+ List<String> params = new ArrayList<>();
+ params.addAll(
+ Arrays.asList(
+ "/usr/bin/sudo",
+ "-n",
+ "-u", "dmsd",
+ "/opt/dmsd/control.sh" ) );
+ switch ( operation ) {
+ case "start":
+ case "stop":
+ params.add( operation );
+ break;
+ default:
+ status.addMsg( "Unknown operation: " + operation );
+ return null;
+ }
+ return params.toArray( new String[ 0 ] );
+ }
+
+ private boolean errorIfNull( String check, String message )
+ {
+ if ( check == null )
+ status.addMsg( message );
+ return check == null;
+ }
+
+ @Override
+ protected boolean processEnded( int exitCode )
+ {
+ return exitCode == 0;
+ }
+
+ @Override
+ protected void processStdOut( String line )
+ {
+ status.addMsg( line );
+ }
+
+ @Override
+ protected void processStdErr( String line )
+ {
+ status.addMsg( line );
+ }
+
+ @Override
+ protected boolean initTask()
+ {
+ return !errorIfNull( operation, "No operation given" );
+ }
+
+ class StatusObject
+ {
+ private String messages = "";
+
+ public void addMsg( String str )
+ {
+ messages = messages + "\n" + str;
+ }
+ }
+
+}
diff --git a/src/main/java/org/openslx/taskmanager/tasks/DummyTask.java b/src/main/java/org/openslx/taskmanager/tasks/DummyTask.java
index 9524f2f..083e4b0 100644
--- a/src/main/java/org/openslx/taskmanager/tasks/DummyTask.java
+++ b/src/main/java/org/openslx/taskmanager/tasks/DummyTask.java
@@ -1,24 +1,18 @@
package org.openslx.taskmanager.tasks;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStreamReader;
-
-import org.apache.log4j.Logger;
import org.openslx.taskmanager.api.AbstractTask;
+/**
+ * DummyTask - main purpose is to check if the task manager is still working
+ */
public class DummyTask extends AbstractTask
{
- private static final Logger log = Logger.getLogger( DummyTask.class );
-
private DummyTaskStatus status = new DummyTaskStatus();
@Override
protected boolean initTask()
{
- log.debug( "Initialized DummyTask with ID " + this.getId() );
return true;
}
@@ -26,26 +20,8 @@ public class DummyTask extends AbstractTask
protected boolean execute()
{
setStatusObject( status );
- Process process = null;
- try {
- // Create process
- process = Runtime.getRuntime().exec( "dummy", null, new File("/") );
-
- // Read its output
- BufferedReader reader = new BufferedReader( new InputStreamReader( process.getInputStream() ) );
- String line;
- while ( ( line = reader.readLine() ) != null ) {
- line = reader.readLine();
- if ( line.matches( "^\\d+%$" ) )
- this.status.progress = Integer.parseInt( line.substring( 0, line.length() - 1 ) );
- }
- } catch ( IOException e ) {
- log.warn( "Process of task " + this.getId() + " died." );
- } finally {
- if ( process != null )
- process.destroy();
- }
- return this.status.progress == 100;
+ this.status.progress = 100;
+ return true;
}
class DummyTaskStatus
diff --git a/src/main/java/org/openslx/taskmanager/tasks/SyncdaemonLauncher.java b/src/main/java/org/openslx/taskmanager/tasks/SyncdaemonLauncher.java
new file mode 100644
index 0000000..f04b2dc
--- /dev/null
+++ b/src/main/java/org/openslx/taskmanager/tasks/SyncdaemonLauncher.java
@@ -0,0 +1,120 @@
+package org.openslx.taskmanager.tasks;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.openslx.taskmanager.api.SystemCommandTask;
+
+import com.google.gson.annotations.Expose;
+
+public class SyncdaemonLauncher extends SystemCommandTask
+{
+ /**
+ * What to do: start, stop, checkconfig, import, ...
+ */
+ @Expose
+ private String operation;
+ /**
+ * When importing, these are the fields for our identity
+ */
+ @Expose
+ private String importModulus, importPrivateExponent, importPublicExponent, importOrganization;
+ /**
+ * (IP) Address of this satellite server, used when calling submitkey or updateaddress
+ */
+ @Expose
+ private String address;
+
+ private StatusObject status = null;
+
+ @Override
+ protected String[] initCommandLine()
+ {
+ List<String> params = new ArrayList<>();
+ params.addAll(
+ Arrays.asList(
+ "/usr/bin/sudo",
+ "-n",
+ "-u", "syncdaemon",
+ "/opt/syncdaemon/control.sh" ) );
+ switch ( operation ) {
+ case "start":
+ case "stop":
+ case "checkconfig":
+ params.add( operation );
+ break;
+ case "genid":
+ if ( errorIfNull( importOrganization, "genid: no organization given" ) )
+ return null;
+ params.add( operation );
+ params.add( importOrganization );
+ break;
+ case "updateaddress":
+ case "submitkey":
+ if ( errorIfNull( address, "updateaddress/submitkey: no address given" ) )
+ return null;
+ params.add( operation );
+ params.add( address );
+ break;
+ case "import":
+ if ( errorIfNull( importOrganization, "import: no organization given" )
+ || errorIfNull( importModulus, "import: no modulus given" )
+ || errorIfNull( importPrivateExponent, "import: no private exponent given" )
+ || errorIfNull( importPublicExponent, "import: no public exponent given" ) )
+ return null;
+ params.add( operation );
+ params.add( importOrganization );
+ params.add( importModulus );
+ params.add( importPrivateExponent );
+ params.add( importPublicExponent );
+ break;
+ default:
+ status.addMsg( "Unknown operation: " + operation );
+ return null;
+ }
+ return params.toArray( new String[ 0 ] );
+ }
+
+ private boolean errorIfNull( String check, String message )
+ {
+ if ( check == null )
+ status.addMsg( message );
+ return check == null;
+ }
+
+ @Override
+ protected boolean processEnded( int exitCode )
+ {
+ return exitCode == 0;
+ }
+
+ @Override
+ protected void processStdOut( String line )
+ {
+ status.addMsg( line );
+ }
+
+ @Override
+ protected void processStdErr( String line )
+ {
+ status.addMsg( line );
+ }
+
+ @Override
+ protected boolean initTask()
+ {
+ return !errorIfNull( operation, "No operation given" );
+ }
+
+ class StatusObject
+ {
+ private String messages = "";
+
+ public void addMsg( String str )
+ {
+ messages = messages + "\n" + str;
+ }
+ }
+
+}