[ewg] [PATCH] ofed_1_3/ofed_scripts: Add vendor script pre/post hooks for OFED install/uninstall

Moni Shoua monis at voltaire.com
Tue Jan 1 02:17:36 PST 2008


Vendors that distribute OFED sometimes need to add vendor specific
actions to the install and/or the uninstall process. This patch adds this 
capability of adding scripts that would be executed before and after OFED 
install and uninstall. Names of the scripts are given in the configuration
file for the install.pl script.

Examlpe (lines in ofed.conf)

vendor_pre_install=vendor_pre_install.sh
vendor_post_install=vendor_post_install.sh
vendor_pre_uninstall=vendor_pre_uninstall.sh
vendor_post_uninstall=vendor_post_uninstall.sh

Signed-off-by: Moni Shoua <monis at voltaire.com>
---

 install.pl               |   75 +++++++++++++++++++++++++++++++++++++++++++++++
 ofed-scripts.spec        |    4 ++
 uninstall.sh             |    4 ++
 vendor_post_uninstall.sh |    3 +
 vendor_pre_uninstall.sh  |    3 +
 5 files changed, 89 insertions(+)


diff --git a/install.pl b/install.pl
index dbf57ce..915530e 100755
--- a/install.pl
+++ b/install.pl
@@ -59,6 +59,11 @@ my $print_available = 0;
 my $clear_string = `clear`;
 my $upgrade_open_iscsi = 0;
 
+my $vendor_pre_install = "";
+my $vendor_post_install = "";
+my $vendor_pre_uninstall = "";
+my $vendor_post_uninstall = "";
+
 my $distro;
 
 my $build32 = 0;
@@ -2044,6 +2049,50 @@ sub select_packages
                     next;
                 }
 
+                if ($package eq "vendor_pre_install") {
+		    if ( -f $selected ) {
+			$vendor_pre_install = dirname($selected) . '/' . basename($selected);
+		    }
+		    else {
+			print RED "\nVendor script $selected is not found", RESET "\n" if (not $quiet);
+			exit 1
+		    }
+                    next;
+                }
+
+                if ($package eq "vendor_post_install") {
+		    if ( -f $selected ) {
+			$vendor_post_install = dirname($selected) . '/' . basename($selected);
+		    }
+		    else {
+			print RED "\nVendor script $selected is not found", RESET "\n" if (not $quiet);
+			exit 1
+		    }
+                    next;
+                }
+
+                if ($package eq "vendor_pre_uninstall") {
+		    if ( -f $selected ) {
+			$vendor_pre_uninstall = dirname($selected) . '/' . basename($selected);
+		    }
+		    else {
+			print RED "\nVendor script $selected is not found", RESET "\n" if (not $quiet);
+			exit 1
+		    }
+                    next;
+                }
+
+                if ($package eq "vendor_post_uninstall") {
+		    if ( -f $selected ) {
+			$vendor_post_uninstall = dirname($selected) . '/' . basename($selected);
+		    }
+		    else {
+			print RED "\nVendor script $selected is not found", RESET "\n" if (not $quiet);
+			exit 1
+		    }
+                    next;
+                }
+
                 if ($package eq "kernel_configure_options" or $package eq "OFA_KERNEL_PARAMS") {
                     $kernel_configure_options = $selected;
                     next;
@@ -3696,7 +3745,33 @@ sub main
     
     # Uninstall the previous installations
     uninstall();
+    my $vendor_ret;
+    if (length($vendor_pre_install) > 0) {
+	    print BLUE "\nRunning vendor pre install script: $vendor_pre_install", RESET "\n" if (not $quiet);
+	    $vendor_ret = system ( "$vendor_pre_install", "CONFIG=$config",
+		"RPMS=$RPMS", "SRPMS=$SRPMS", "PREFIX=$prefix", "TOPDIR=$TOPDIR", "QUIET=$quiet" );
+	    if ($vendor_ret != 0) {
+		    print RED "\nExecution of vendor pre install script failed.", RESET "\n" if (not $quiet);
+		    exit 1;
+	    }
+    }
     install();
+    if (length($vendor_pre_uninstall) > 0) {
+	    system "cp $vendor_pre_uninstall $prefix/sbin/vendor_pre_uninstall.sh";
+    }
+    if (length($vendor_post_uninstall) > 0) {
+	    system "cp $vendor_post_uninstall $prefix/sbin/vendor_post_uninstall.sh";
+    }
+    if (length($vendor_post_install) > 0) {
+	    print BLUE "\nRunning vendor post install script: $vendor_post_install", RESET "\n" if (not $quiet);
+	    $vendor_ret = system ( "$vendor_post_install", "CONFIG=$config",
+		"RPMS=$RPMS", "SRPMS=$SRPMS", "PREFIX=$prefix", "TOPDIR=$TOPDIR", "QUIET=$quiet");
+	    if ($vendor_ret != 0) {
+		    print RED "\nExecution of vendor post install script failed.", RESET "\n" if (not $quiet);
+		    exit 1;
+	    }
+    }
+
     if ($kernel_modules_info{'ipoib'}{'selected'}) {
         ipoib_config();
     }
diff --git a/ofed-scripts.spec b/ofed-scripts.spec
index 6c952aa..e58bf08 100644
--- a/ofed-scripts.spec
+++ b/ofed-scripts.spec
@@ -49,6 +49,8 @@ OpenFabrics scripts
 install -d $RPM_BUILD_ROOT%{_prefix}/bin
 install -d $RPM_BUILD_ROOT%{_prefix}/sbin
 install -m 0755 uninstall.sh $RPM_BUILD_ROOT%{_prefix}/sbin/ofed_uninstall.sh
+install -m 0755 vendor_pre_uninstall.sh $RPM_BUILD_ROOT%{_prefix}/sbin
+install -m 0755 vendor_post_uninstall.sh $RPM_BUILD_ROOT%{_prefix}/sbin
 install -m 0755 ofed_info $RPM_BUILD_ROOT%{_prefix}/bin
 
 perl -ni -e "s@(STACK_PREFIX=).*@\$1%{_prefix}@; print" $RPM_BUILD_ROOT%{_prefix}/sbin/ofed_uninstall.sh
@@ -115,6 +117,8 @@ esac
 %defattr(-,root,root)
 %{_prefix}/bin/ofed_info
 %{_prefix}/sbin/ofed_uninstall.sh
+%{_prefix}/sbin/vendor_pre_uninstall.sh
+%{_prefix}/sbin/vendor_post_uninstall.sh
 
 %changelog
 * Tue Oct  9 2007 Vladimir Sokolovsky <vlad at mellanox.co.il>
diff --git a/uninstall.sh b/uninstall.sh
index a65f0e5..eb25e16 100755
--- a/uninstall.sh
+++ b/uninstall.sh
@@ -266,7 +266,11 @@ echo
 
 read -p "Do you want to continue?[y/N]:" ans_r
 if [[ "$ans_r" == "y" || "$ans_r" == "Y" || "$ans_r" == "yes" ]]; then
+    [ -x $STACK_PREFIX/sbin/vendor_pre_uninstall.sh ] && ex $STACK_PREFIX/sbin/vendor_pre_uninstall.sh
+    [ -x $STACK_PREFIX/sbin/vendor_post_uninstall.sh ] && \
+	cp $STACK_PREFIX/sbin/vendor_post_uninstall.sh /tmp/$$-ofed_vendor_post_uninstall.sh
     uninstall
+    [ -x /tmp/$$-ofed_vendor_post_uninstall.sh ] && ex /tmp/$$-ofed_vendor_post_uninstall.sh
 else    
     exit 1
 fi
diff --git a/vendor_post_uninstall.sh b/vendor_post_uninstall.sh
new file mode 100755
index 0000000..8c3cbfc
--- /dev/null
+++ b/vendor_post_uninstall.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+exit 0
diff --git a/vendor_pre_uninstall.sh b/vendor_pre_uninstall.sh
new file mode 100644
index 0000000..8c3cbfc
--- /dev/null
+++ b/vendor_pre_uninstall.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+exit 0




More information about the ewg mailing list