From ef4bb7ee0933d6f850f94b542d0617b181c22fdb Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 17 Jun 2015 15:54:51 +0200 Subject: Add new tasks, add timeouts to system process tasks --- scripts/system-restore | 3 + src/main/java/org/openslx/satserver/util/Exec.java | 3 +- .../openslx/taskmanager/tasks/BackupRestore.java | 1 + .../org/openslx/taskmanager/tasks/CompileIPxe.java | 2 +- .../openslx/taskmanager/tasks/CreateAdConfig.java | 13 +++-- .../org/openslx/taskmanager/tasks/DiskStat.java | 1 + .../openslx/taskmanager/tasks/DozmodLauncher.java | 1 + .../openslx/taskmanager/tasks/LdadpLauncher.java | 1 + .../org/openslx/taskmanager/tasks/LdapSearch.java | 3 +- .../openslx/taskmanager/tasks/LighttpdHttps.java | 10 ++-- .../openslx/taskmanager/tasks/MountVmStore.java | 1 + .../org/openslx/taskmanager/tasks/Netstat.java | 64 ++++++++++++++++++++++ .../java/org/openslx/taskmanager/tasks/PsList.java | 61 +++++++++++++++++++++ .../java/org/openslx/taskmanager/tasks/Reboot.java | 1 + .../taskmanager/tasks/SyncdaemonLauncher.java | 1 + 15 files changed, 154 insertions(+), 12 deletions(-) create mode 100644 src/main/java/org/openslx/taskmanager/tasks/Netstat.java create mode 100644 src/main/java/org/openslx/taskmanager/tasks/PsList.java diff --git a/scripts/system-restore b/scripts/system-restore index 5d77dda..dfc5c3a 100755 --- a/scripts/system-restore +++ b/scripts/system-restore @@ -57,6 +57,9 @@ RET=$? if [ $RET -ne 0 ]; then echo "WARNING: Restoring filesystem contents failed with exit code $RET - backup might be incomplete!" fi +# Make sure the directory tree is owned by taskmanager, as tar will create intermediate +# directories as owned by root if they do not exist. +chown -R taskmanager /srv/openslx/www/boot /opt/openslx/configs rm -rf -- "$DIR" rm -f -- "$BACKUP" diff --git a/src/main/java/org/openslx/satserver/util/Exec.java b/src/main/java/org/openslx/satserver/util/Exec.java index b7de984..e273409 100644 --- a/src/main/java/org/openslx/satserver/util/Exec.java +++ b/src/main/java/org/openslx/satserver/util/Exec.java @@ -47,10 +47,11 @@ public class Exec // Wait... } } + // Timeout return -1; } } catch ( IOException | InterruptedException e ) { - return -1; + return -2; } finally { try { if ( p != null ) { diff --git a/src/main/java/org/openslx/taskmanager/tasks/BackupRestore.java b/src/main/java/org/openslx/taskmanager/tasks/BackupRestore.java index c2f20c6..bbb68f5 100644 --- a/src/main/java/org/openslx/taskmanager/tasks/BackupRestore.java +++ b/src/main/java/org/openslx/taskmanager/tasks/BackupRestore.java @@ -30,6 +30,7 @@ public class BackupRestore extends SystemCommandTask status.addMessage( "No backup file given to restore!" ); return false; } + this.timeoutSeconds = 15; return true; } diff --git a/src/main/java/org/openslx/taskmanager/tasks/CompileIPxe.java b/src/main/java/org/openslx/taskmanager/tasks/CompileIPxe.java index 33fae6e..7795d21 100644 --- a/src/main/java/org/openslx/taskmanager/tasks/CompileIPxe.java +++ b/src/main/java/org/openslx/taskmanager/tasks/CompileIPxe.java @@ -123,7 +123,7 @@ public class CompileIPxe extends AbstractTask return false; } // Compile - if ( 0 != Exec.syncAt( 15, "/opt/openslx/ipxe/src", "make", "EMBED=../ipxelinux.ipxe,../pxelinux.0", "bin/undionly.kkkpxe" ) ) { + if ( 0 != Exec.syncAt( 120, "/opt/openslx/ipxe/src", "make", "EMBED=../ipxelinux.ipxe,../pxelinux.0", "bin/undionly.kkkpxe" ) ) { status.error = "Compiling ipxelinux.0 failed"; return false; } diff --git a/src/main/java/org/openslx/taskmanager/tasks/CreateAdConfig.java b/src/main/java/org/openslx/taskmanager/tasks/CreateAdConfig.java index ec34716..69ed2b6 100644 --- a/src/main/java/org/openslx/taskmanager/tasks/CreateAdConfig.java +++ b/src/main/java/org/openslx/taskmanager/tasks/CreateAdConfig.java @@ -71,13 +71,18 @@ public class CreateAdConfig extends AbstractTask try { // Generate keys { - int ret = Exec.sync( 3, "openssl", "req", + int ret = Exec.sync( 10, "openssl", "req", "-x509", "-new", "-newkey", "rsa:4096", "-keyout", keyFile, "-out", certFile, "-days", "5000", "-nodes", "-subj", "/C=DE/ST=Nowhere/L=Springfield/O=Dis/CN=" + this.proxyip ); - if ( ret != 0 ) { + if ( ret == -1 ) { + status.error = "openssl process didn't finish in time."; + } else if ( ret == -2 ) { + status.error = "Internal error generating certificate."; + } else if ( ret != 0 ) { status.error = "openssl exited with code " + ret; - return false; } + if ( ret != 0 ) + return false; } // ldadp config String ldadpConf = String.format( @@ -120,7 +125,7 @@ public class CreateAdConfig extends AbstractTask } try { FileUtils.writeStringToFile( new File( fileName ), ldadpConf, StandardCharsets.UTF_8 ); - if ( 0 != Exec.sync( 3, + if ( 0 != Exec.sync( 10, "/usr/bin/sudo", "-n", "-u", "root", diff --git a/src/main/java/org/openslx/taskmanager/tasks/DiskStat.java b/src/main/java/org/openslx/taskmanager/tasks/DiskStat.java index 4d2caa5..9d0c665 100644 --- a/src/main/java/org/openslx/taskmanager/tasks/DiskStat.java +++ b/src/main/java/org/openslx/taskmanager/tasks/DiskStat.java @@ -18,6 +18,7 @@ public class DiskStat extends SystemCommandTask @Override protected String[] initCommandLine() { + this.timeoutSeconds = 2; return new String[] { "/bin/df", "-P", "-B", "1024" diff --git a/src/main/java/org/openslx/taskmanager/tasks/DozmodLauncher.java b/src/main/java/org/openslx/taskmanager/tasks/DozmodLauncher.java index 8c8720d..0061a4f 100644 --- a/src/main/java/org/openslx/taskmanager/tasks/DozmodLauncher.java +++ b/src/main/java/org/openslx/taskmanager/tasks/DozmodLauncher.java @@ -37,6 +37,7 @@ public class DozmodLauncher extends SystemCommandTask status.addMsg( "Unknown operation: " + operation ); return null; } + this.timeoutSeconds = 5; return params.toArray( new String[ 0 ] ); } diff --git a/src/main/java/org/openslx/taskmanager/tasks/LdadpLauncher.java b/src/main/java/org/openslx/taskmanager/tasks/LdadpLauncher.java index bfd9570..73c792b 100644 --- a/src/main/java/org/openslx/taskmanager/tasks/LdadpLauncher.java +++ b/src/main/java/org/openslx/taskmanager/tasks/LdadpLauncher.java @@ -41,6 +41,7 @@ public class LdadpLauncher extends SystemCommandTask for ( int i = 0; i < ids.length; ++i ) { args.add( Integer.toString( this.ids[i] ) ); } + this.timeoutSeconds = 5; return args.toArray( new String[ args.size() ] ); } diff --git a/src/main/java/org/openslx/taskmanager/tasks/LdapSearch.java b/src/main/java/org/openslx/taskmanager/tasks/LdapSearch.java index ef0998c..37443d5 100644 --- a/src/main/java/org/openslx/taskmanager/tasks/LdapSearch.java +++ b/src/main/java/org/openslx/taskmanager/tasks/LdapSearch.java @@ -40,6 +40,7 @@ public class LdapSearch extends SystemCommandTask status.messages = "Missing parameter"; return false; } + this.timeoutSeconds = 5; return true; } @@ -98,7 +99,7 @@ public class LdapSearch extends SystemCommandTask status.addMessage( "Exit code is " + exitCode ); if ( exitCode == 0 && this.userCount < 4 && !this.getDn ) status.addMessage( "Found less than 4 users. Are you sure you got the right credentials." ); - return this.userCount >= 4 || (this.getDn && status.dn != null); + return this.userCount >= 4 || ( this.getDn && status.dn != null ); } @Override diff --git a/src/main/java/org/openslx/taskmanager/tasks/LighttpdHttps.java b/src/main/java/org/openslx/taskmanager/tasks/LighttpdHttps.java index 2250d84..362191b 100644 --- a/src/main/java/org/openslx/taskmanager/tasks/LighttpdHttps.java +++ b/src/main/java/org/openslx/taskmanager/tasks/LighttpdHttps.java @@ -46,7 +46,7 @@ public class LighttpdHttps extends AbstractTask private boolean createRandom() { - int ret = Exec.sync( 5, "sudo", "-n", "-u", "root", "/opt/taskmanager/scripts/install-https", "--random", this.proxyip ); + int ret = Exec.sync( 10, "sudo", "-n", "-u", "root", "/opt/taskmanager/scripts/install-https", "--random", this.proxyip ); if ( ret != 0 ) { status.error = "generator exited with code " + ret; return false; @@ -75,16 +75,16 @@ public class LighttpdHttps extends AbstractTask return false; } int ret; - ret = Exec.sync( 5, "/opt/taskmanager/scripts/install-https", "--test", tmpKey.getAbsolutePath(), tmpCert.getAbsolutePath() ); + ret = Exec.sync( 10, "/opt/taskmanager/scripts/install-https", "--test", tmpKey.getAbsolutePath(), tmpCert.getAbsolutePath() ); if ( ret != 0 ) { status.error = "Given key and certificate do not match, or have invalid format (exit code: " + ret + ")"; return false; } if ( tmpChain != null ) { - ret = Exec.sync( 5, "sudo", "-n", "-u", "root", "/opt/taskmanager/scripts/install-https", "--import", tmpKey.getAbsolutePath(), tmpCert.getAbsolutePath(), + ret = Exec.sync( 10, "sudo", "-n", "-u", "root", "/opt/taskmanager/scripts/install-https", "--import", tmpKey.getAbsolutePath(), tmpCert.getAbsolutePath(), tmpChain.getAbsolutePath() ); } else { - ret = Exec.sync( 5, "sudo", "-n", "-u", "root", "/opt/taskmanager/scripts/install-https", "--import", tmpKey.getAbsolutePath(), tmpCert.getAbsolutePath() ); + ret = Exec.sync( 10, "sudo", "-n", "-u", "root", "/opt/taskmanager/scripts/install-https", "--import", tmpKey.getAbsolutePath(), tmpCert.getAbsolutePath() ); } if ( ret != 0 ) { status.error = "import exited with code " + ret; @@ -101,7 +101,7 @@ public class LighttpdHttps extends AbstractTask private boolean disableHttps() { - int ret = Exec.sync( 5, "sudo", "-n", "-u", "root", "/opt/taskmanager/scripts/install-https", "--disable" ); + int ret = Exec.sync( 10, "sudo", "-n", "-u", "root", "/opt/taskmanager/scripts/install-https", "--disable" ); if ( ret != 0 ) { status.error = "disable exited with code " + ret; return false; diff --git a/src/main/java/org/openslx/taskmanager/tasks/MountVmStore.java b/src/main/java/org/openslx/taskmanager/tasks/MountVmStore.java index 893209e..ded2a1f 100644 --- a/src/main/java/org/openslx/taskmanager/tasks/MountVmStore.java +++ b/src/main/java/org/openslx/taskmanager/tasks/MountVmStore.java @@ -30,6 +30,7 @@ public class MountVmStore extends SystemCommandTask this.username = ""; if ( this.password == null ) this.password = ""; + this.timeoutSeconds = 10; return true; } diff --git a/src/main/java/org/openslx/taskmanager/tasks/Netstat.java b/src/main/java/org/openslx/taskmanager/tasks/Netstat.java new file mode 100644 index 0000000..7cf6d87 --- /dev/null +++ b/src/main/java/org/openslx/taskmanager/tasks/Netstat.java @@ -0,0 +1,64 @@ +package org.openslx.taskmanager.tasks; + +import org.openslx.taskmanager.api.SystemCommandTask; + +public class Netstat extends SystemCommandTask +{ + private final Output status = new Output(); + + @Override + protected String[] initCommandLine() + { + this.timeoutSeconds = 4; + return new String[] { + "/usr/bin/sudo", + "-n", + "-u", "root", + "/bin/netstat", + "-tulpn" + }; + } + + @Override + protected boolean processEnded( int exitCode ) + { + return exitCode == 0; + } + + @Override + protected void processStdOut( String line ) + { + status.addMessage( line ); + } + + @Override + protected void processStdErr( String line ) + { + status.addMessage( line ); + } + + @Override + protected boolean initTask() + { + this.setStatusObject( status ); + return true; + } + + /** + * Output - contains additional status data of this task + */ + class Output + { + private String messages = null; + + private void addMessage( String str ) + { + if ( messages == null ) { + messages = str; + } else { + messages += "\n" + str; + } + } + } + +} diff --git a/src/main/java/org/openslx/taskmanager/tasks/PsList.java b/src/main/java/org/openslx/taskmanager/tasks/PsList.java new file mode 100644 index 0000000..e77e4fc --- /dev/null +++ b/src/main/java/org/openslx/taskmanager/tasks/PsList.java @@ -0,0 +1,61 @@ +package org.openslx.taskmanager.tasks; + +import org.openslx.taskmanager.api.SystemCommandTask; + +public class PsList extends SystemCommandTask +{ + private final Output status = new Output(); + + @Override + protected String[] initCommandLine() + { + this.timeoutSeconds = 3; + return new String[] { + "/bin/ps", + "auxf" + }; + } + + @Override + protected boolean processEnded( int exitCode ) + { + return exitCode == 0; + } + + @Override + protected void processStdOut( String line ) + { + status.addMessage( line ); + } + + @Override + protected void processStdErr( String line ) + { + status.addMessage( line ); + } + + @Override + protected boolean initTask() + { + this.setStatusObject( status ); + return true; + } + + /** + * Output - contains additional status data of this task + */ + class Output + { + private String messages = null; + + private void addMessage( String str ) + { + if ( messages == null ) { + messages = str; + } else { + messages += "\n" + str; + } + } + } + +} diff --git a/src/main/java/org/openslx/taskmanager/tasks/Reboot.java b/src/main/java/org/openslx/taskmanager/tasks/Reboot.java index c90289e..c7b8d26 100644 --- a/src/main/java/org/openslx/taskmanager/tasks/Reboot.java +++ b/src/main/java/org/openslx/taskmanager/tasks/Reboot.java @@ -9,6 +9,7 @@ public class Reboot extends SystemCommandTask @Override protected String[] initCommandLine() { + this.timeoutSeconds = 5; return new String[] { "/usr/bin/sudo", "-n", diff --git a/src/main/java/org/openslx/taskmanager/tasks/SyncdaemonLauncher.java b/src/main/java/org/openslx/taskmanager/tasks/SyncdaemonLauncher.java index 22c092d..98d512a 100644 --- a/src/main/java/org/openslx/taskmanager/tasks/SyncdaemonLauncher.java +++ b/src/main/java/org/openslx/taskmanager/tasks/SyncdaemonLauncher.java @@ -73,6 +73,7 @@ public class SyncdaemonLauncher extends SystemCommandTask status.addMsg( "Unknown operation: " + operation ); return null; } + this.timeoutSeconds = 5; return params.toArray( new String[ 0 ] ); } -- cgit v1.2.3-55-g7522