[ewg] [PATCH] Set the dependencies of openibd and iscsi services

Doron Shoham dorons at voltaire.com
Sun Feb 10 01:40:00 PST 2008


 iscsi service should start after openibd service.
 iscsi service should stop before openibd service.

Signed-off-by: Doron Shoham <dorons at voltaire.com>
---
 install.pl |   93 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 93 insertions(+), 0 deletions(-)

diff --git a/install.pl b/install.pl
index 354e896..422c9ca 100755
--- a/install.pl
+++ b/install.pl
@@ -76,6 +76,8 @@ chomp $kernel_sources;
 
 my $PACKAGE     = 'OFED';
 
+my $iscsi_selected = 0;
+
 # Set Linux Distribution
 if ( -f "/etc/SuSE-release" ) {
     $distro = "SuSE";
@@ -2478,6 +2480,7 @@ sub print_selected
 sub check_open_iscsi
 {
     my $oiscsi_name = $packages_info{'open-iscsi-generic'}{'name'};
+    $iscsi_selected=1;
     if (is_installed($oiscsi_name)) {
         my $vendor = `rpm --queryformat "[%{VENDOR}]" -q $oiscsi_name`;
         print "open-iscsi name $oiscsi_name vendor: $vendor\n" if ($verbose3);
@@ -2491,6 +2494,7 @@ sub check_open_iscsi
                 }
                 else {
                     print RED "Please uninstall $oiscsi_name before installing $PACKAGE with iSER support.", RESET "\n";
+                    $iscsi_selected=0;
                     exit 1;
                 }
             }
@@ -2498,6 +2502,7 @@ sub check_open_iscsi
                 if (not $upgrade_open_iscsi) {
                     print RED "Please uninstall $oiscsi_name before installing $PACKAGE with iSER support.", RESET "\n";
                     print RED "  Or put \"upgrade_open_iscsi=yes\" in the $config:", RESET "\n";
+                    $iscsi_selected=0;
                     exit 1;
                 }
             }
@@ -3673,6 +3678,87 @@ sub install
     }
 }
 
+sub set_iscsi_dep
+{
+    # set the dependencies of openibd and iscsi
+    # iscsi should start after openibd and stop before it
+
+    my $out='';
+    my $openibd_file='/etc/init.d/openibd';
+
+    if ($distro =~ /redhat/i) {
+        my @line;
+        my $openibd_start;
+        my $openibd_stop;
+        my $openiscsi_file='/etc/init.d/iscsi';
+        my $iscsi_start;
+        my $iscsi_stop;
+        open(IN,"<$openibd_file") || die "cannot open $openibd_file for reading: $!";
+	    while (<IN>) { 
+            if (/chkconfig:/) {
+                @line=split(/ /);
+                # get the start and stop indexes of openibd
+                $openibd_start=@line[3];
+                $openibd_stop=@line[4];
+            }
+        }
+        close(IN) || die "can't close $openibd_file: $!";
+
+        open(IN,"+<$openiscsi_file") || die "cannot open $openiscsi_file for reading: $!";
+        while (<IN>) {
+            if (/chkconfig:/) {
+                @line=split(/ /);
+                $iscsi_start=@line[3];
+                # set iscsi to start after openibd
+                if ( $iscsi_start<=$openibd_start ) {
+                    $openibd_start++;
+                    s/$iscsi_start/$openibd_start/;
+                }
+	    	    $iscsi_stop=@line[4];
+                # set iscsi to stop before openibd
+    		    if ( $iscsi_stop>=$openibd_stop ) {
+                    $openibd_stop--;
+                    s/$iscsi_stop/$openibd_stop\n/;
+                }
+            }
+            $out .= $_;
+        }
+        seek (IN, 0, 0);
+        print IN $out;
+        truncate (IN,tell(IN));
+        close(IN) || die "can't close $openiscsi_file: $!";
+    }
+    elsif ($distro=~/suse/i) {
+        my $openiscsi_file='/etc/init.d/open-iscsi';
+        open(IN,"+<$openibd_file") || die "cannot open $openibd_file for reading: $!";
+        while (<IN>) {
+            # set iscsi to stop before openibd
+            if (/Required-Stop:/) {
+                s/$/ open-iscsi/;
+            }
+            $out .= $_;
+        }
+        seek (IN, 0, 0);
+        print IN $out;
+        truncate (IN,tell(IN));
+        close(IN) || die "can't close $openibd_file: $!";
+
+        $out='';
+        open(IN,"+<$openiscsi_file") || die "cannot open $openiscsi_file for reading: $!";
+        while (<IN>) { 
+            # set iscsi to start after openibd
+            if (/Required-Start:/) {
+                s/$/ openibd/;
+            }
+            $out .= $_;
+        }
+        seek (IN, 0, 0);
+        print IN $out;
+        truncate (IN,tell(IN));
+        close(IN) || die "can't close $openiscsi_file: $!";
+    }
+}
+
 ### MAIN AREA ###
 sub main
 {
@@ -3837,6 +3923,13 @@ sub main
     if ($kernel_modules_info{'ipoib'}{'selected'}) {
         ipoib_config();
     }
+
+    # If open-iscsi was installed, set it to start after openibd
+    # and to stop before openibd
+    if ($iscsi_selected == 1) {
+        set_iscsi_dep();	
+    }
+
     print GREEN "\nInstallation finished successfully.", RESET;
     if ($interactive) {
         print GREEN "\nPress any key to continue...", RESET;
-- 
1.5.3.8





More information about the ewg mailing list