From e203d6800e90f51947ce49f855cfa4b7f7709975 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 13 Oct 2014 11:50:40 +0200 Subject: Added Dozmod and Syncdaemon launcher Also added forgotten Exec class, tweaked mount-store script too --- scripts/mount-store | 9 ++ src/main/java/org/openslx/satserver/util/Exec.java | 22 ++++ .../openslx/taskmanager/tasks/DozmodLauncher.java | 84 +++++++++++++++ .../org/openslx/taskmanager/tasks/DummyTask.java | 34 +----- .../taskmanager/tasks/SyncdaemonLauncher.java | 120 +++++++++++++++++++++ 5 files changed, 240 insertions(+), 29 deletions(-) create mode 100644 src/main/java/org/openslx/satserver/util/Exec.java create mode 100644 src/main/java/org/openslx/taskmanager/tasks/DozmodLauncher.java create mode 100644 src/main/java/org/openslx/taskmanager/tasks/SyncdaemonLauncher.java 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 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 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; + } + } + +} -- cgit v1.2.3-55-g7522