Removed /usr/local from CDPATH
[clearscm.git] / clearadm / setup.pl
index 7724992..094f8ad 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/perl
+#!/usr/bin/env perl
 
 =pod
 
@@ -73,12 +73,12 @@ use Utils;
 my $VERSION  = '$Revision: 1.1 $';
   ($VERSION) = ($VERSION =~ /\$Revision: (.*) /);
   
-sub SetupAgent () {
+sub SetupAgent() {
   verbose 'Setting up Agent...';
   
   my ($status, @output, $cmd);
   
-  if ($ARCH eq 'cygwin') {
+  if ($ARCHITECTURE eq 'cygwin') {
      verbose '[Cygwin] Creating up Clearagent Service';
      
      $cmd  = 'cygrunsrv -I clearagent -p C:/Cygwin/bin/perl ';
@@ -86,7 +86,7 @@ sub SetupAgent () {
      
     ($status, @output) = Execute "$cmd 2>&1";
   
-    error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
+    error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
       if $status;
       
     verbose '[Cygwin] Starting Clearagent Service';
@@ -94,65 +94,88 @@ sub SetupAgent () {
     $cmd .= 'net start clearagent';
     ($status, @output) = Execute "$cmd 2>&1";
   
-    error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
+    error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
       if $status;
   } else {
-    my $Arch = ucfirst $ARCH;
+    my $Arch = ucfirst $ARCHITECTURE;
   
     verbose 'Creating clearagent user';
     
     $cmd = 'useradd -Mr clearagent';
+    $cmd = 'useradd clearagent' if $ARCHITECTURE eq 'solaris';
     
     ($status, @output) = Execute "$cmd 2>&1";
   
     if ($status == 9) {
        warning "The user clearagent already exists";
+    } elsif ($status == 2304) {
+      # Stupid Solaris...
     } elsif ($status != 0) {
-      error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1;
+      error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status;
     } # if
 
     verbose 'Setting permissions on log and var directories';
-    
-    $cmd  = "chmod 777 $Clearadm::CLEAROPTS{CLEARADM_BASE}/var;";
-    $cmd .= "chmod 777 $Clearadm::CLEAROPTS{CLEARADM_BASE}/var/run;";
-    $cmd .= "chmod 777 $Clearadm::CLEAROPTS{CLEARADM_BASE}/log";
-  
-    ($status, @output) = Execute "$cmd 2>&1";
-  
-    error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
-      if $status;
 
+    for (qw(var var/run log)) {
+      $cmd = "mkdir -p $Clearadm::CLEAROPTS{CLEARADM_BASE}/$_";
+
+      ($status, @output) = Execute "$cmd 2>&1";
+
+      error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status if $status;
+
+      $cmd = "chmod 777 $Clearadm::CLEAROPTS{CLEARADM_BASE}/$_";
+
+      ($status, @output) = Execute "$cmd 2>&1";
+
+      error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
+        if $status;
+    } # for
+  
     verbose "[$Arch] Setting up clearagent daemon";
        
     # Symlink $CLEARADM/etc/conf.d/clearadm -> /etc/init.d
     my $confdir = '/etc/init.d';
 
-    error "Cannot find conf.d directory ($confdir)", 1
-      unless -d $confdir;
+    error "Cannot find conf.d directory ($confdir)", 1 unless -d $confdir;
 
-    unless (-e "$confdir/clearadm") {
-      $cmd = "ln -s $FindBin::Bin/etc/init.d/clearadm $confdir";
+    unless (-e "$confdir/clearagent") {
+      $cmd = "ln -s $FindBin::Bin/etc/init.d/clearagent $confdir";
   
       ($status, @output) = Execute "$cmd 2>&1";
   
-      error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
+      error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
         if $status;
     } # unless
 
     # Setup runlevel links
-    $cmd = 'update-rc.d clearagent defaults';
+    if ($ARCHITECTURE eq 'solaris') {
+      $cmd = "ln -s /etc/init.d/clearagent /etc/rc2.d/S90clearagent";
+
+      ($status, @output) = Execute "$cmd 2>&1";
+
+      error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status if $status;
+
+      verbose 'Starting clearagent';
     
-    ($status, @output) = Execute "$cmd 2>&1";
+      $cmd = '/etc/init.d/clearagent';
+
+      ($status, @output) = Execute "$cmd 2>&1";
   
-    error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
-      if $status;
-      
-    verbose 'Starting clearagent';
+      error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status if $status;
+    } else {
+      $cmd = 'update-rc.d clearagent defaults';
     
-    $cmd = 'service clearagent start';
+      ($status, @output) = Execute "$cmd 2>&1";
   
-    error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
-      if $status;
+      error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status if $status;
+
+      verbose 'Starting clearagent';
+    
+      $cmd = 'service clearagent start';
+  
+      error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
+        if $status;
+    } # if
   } # if
 
   verbose "Done";
@@ -160,7 +183,7 @@ sub SetupAgent () {
   return;
 } # SetupAgent
 
-sub SetupTasks () {
+sub SetupTasks() {
   my ($status, @output, $cmd);
    
   verbose 'Setting up Tasks...';
@@ -168,16 +191,14 @@ sub SetupTasks () {
   # Symlink $CLEARADM/etc/conf.d/cleartasks -> /etc/init.d
   my $confdir = '/etc/init.d';
 
-  error "Cannot find conf.d directory ($confdir)", 1
-    unless -d $confdir;
+  error "Cannot find conf.d directory ($confdir)", 1 unless -d $confdir;
 
   unless (-e "$confdir/clearadm") {
     $cmd = "ln -s $FindBin::Bin/etc/init.d/cleartasks $confdir";
   
     ($status, @output) = Execute "$cmd 2>&1";
  
-    error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
-      if $status;
+    error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status if $status;
   } # unless
 
   # Setup runlevel links
@@ -185,8 +206,7 @@ sub SetupTasks () {
     
   ($status, @output) = Execute "$cmd 2>&1";
   
-  error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
-    if $status;
+  error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status if $status;
  
   verbose 'Starting cleartasks';
     
@@ -194,15 +214,14 @@ sub SetupTasks () {
   
   ($status, @output) = Execute "$cmd 2>&1";
   
-  error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
-    if $status;
+  error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status if $status;
 
   verbose 'Done';
         
   return;
 } # SetupTasks
  
-sub SetupWeb () {
+sub SetupWeb() {
   verbose 'Setting up Web...';
   
   my ($status, @output, $cmd);
@@ -210,19 +229,18 @@ sub SetupWeb () {
   # Symlink $CLEARADM/etc/conf.d/clearadm -> /etc/apache2/conf.d
   my $confdir = '/etc/apache2/conf.d';
 
-  error "Cannot find Apache 2 conf.d directory ($confdir)", 1
-    unless -d $confdir;
+  error "Cannot find Apache 2 conf.d directory ($confdir)", 1 unless -d $confdir;
 
   unless (-e "$confdir/clearadm") {
     $cmd = "ln -s $FindBin::Bin/etc/conf.d/clearadm $confdir";
   
     ($status, @output) = Execute "$cmd 2>&1";
   
-    error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
+    error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
       if $status;
   } # unless
     
-  if ($ARCH eq 'cygwin') {
+  if ($ARCHITECTURE eq 'cygwin') {
     $cmd = 'net stop apache2; net start apache2';
   } else {
     $cmd = '/etc/init.d/apache2 restart';
@@ -230,7 +248,7 @@ sub SetupWeb () {
   
   ($status, @output) = Execute "$cmd 2>&1";
   
-  error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
+  error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
     if $status;
 
   verbose 'Done';
@@ -238,7 +256,7 @@ sub SetupWeb () {
   return;
 } # SetupWeb
 
-sub SetupDatabase () {
+sub SetupDatabase() {
   verbose 'Setting up Database';
   
   my ($status, @output, $cmd);
@@ -249,8 +267,7 @@ sub SetupDatabase () {
   
   ($status, @output) = Execute "$cmd 2>&1";
   
-  error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
-    if $status;
+  error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status if $status;
 
   verbose 'Setting up database users';
         
@@ -258,8 +275,7 @@ sub SetupDatabase () {
   
   ($status, @output) = Execute "$cmd 2>&1";
   
-  error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
-    if $status;
+  error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status if $status;
 
   verbose 'Setting up predefined tasks';
         
@@ -267,8 +283,7 @@ sub SetupDatabase () {
   
   ($status, @output) = Execute "$cmd 2>&1";
   
-  error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
-    if $status;
+  error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status if $status;
 
   verbose 'Done';
   
@@ -277,22 +292,21 @@ sub SetupDatabase () {
 
 # Main
 error "Cannot setup Clearadm when using Windows - hint try using Cgywin", 1 
-  if $ARCH eq 'windows';
+  if $ARCHITECTURE eq 'windows';
 
 Usage 'You must be root'
-  unless $> == 0 or $ARCH eq 'cygwin'; 
+  unless $> == 0 or $ARCHITECTURE eq 'cygwin'; 
   
 my $package = 'all';
 
-GetOptions (
+GetOptions(
   usage       => sub { Usage },
   verbose     => sub { set_verbose },
   debug       => sub { set_debug },
   'package=s' => \$package,
 ) or Usage "Invalid parameter";
 
-Usage 'Extraneous options: ' . join ' ', @ARGV
-  if @ARGV;
+Usage 'Extraneous options: ' . join ' ', @ARGV if @ARGV;
 
 # Announce ourselves
 verbose "$FindBin::Script V$VERSION";
@@ -326,4 +340,4 @@ if ($lcpackage eq 'all') {
   SetupWeb;
 } # if
  
-=pod
\ No newline at end of file
+=pod