xenserver: Clean up /usr/sbin/brctl dangling symlink.
authorAndrew Evans <aevans@nicira.com>
Mon, 14 Feb 2011 21:02:43 +0000 (13:02 -0800)
committerAndrew Evans <aevans@nicira.com>
Tue, 15 Feb 2011 01:39:58 +0000 (17:39 -0800)
Commit 54f16a10 removed Open vSwitch's /usr/sbin/brctl replacement for
XenServer, but because the RPM doesn't restore the original files on upgrade,
an upgrade leaves /usr/sbin/brctl a broken symlink to the removed
/usr/share/openvswitch/scripts/brctl.

This commit adds a one-time cleanup to restore the original XenServer-supplied
/usr/sbin/brctl. It also changes the RPM to restore all the replaced files with
their XenServer originals at post-uninstall time during an upgrade transaction,
just as uninstall has done up to now. This should prevent the same problem in
the future.

Bug #4667.

xenserver/openvswitch-xen.spec

index de9b443..1b97a53 100644 (file)
@@ -199,6 +199,13 @@ do
     fi
 done
 
+# Bug #4667: one-time cleanup of brctl removal in commit 54f16a10
+# (xenserver: Remove brctl wrapper script).
+if [ -h /usr/sbin/brctl ] &&
+    [ "$(readlink /usr/sbin/brctl)" = /usr/share/openvswitch/scripts/brctl ]; then
+    mv -f /usr/lib/openvswitch/xs-original/brctl /usr/sbin/
+fi
+
 # Ensure all required services are set to run
 for s in openvswitch openvswitch-xapi-update; do
     if chkconfig --list $s >/dev/null 2>&1; then
@@ -231,37 +238,38 @@ fi
 
 
 %postun
-if [ "$1" = "0" ]; then     # $1 = 1 for upgrade
-    rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyc \
-        /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyo
-
-    rm -f /usr/share/openvswitch/scripts/InterfaceReconfigure.pyc \
-        /usr/share/openvswitch/scripts/InterfaceReconfigure.pyo \
-        /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.pyc \
-        /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.pyo \
-        /usr/share/openvswitch/scripts/InterfaceReconfigureVSwitch.pyc \
-        /usr/share/openvswitch/scripts/InterfaceReconfigureVSwitch.pyo 
-
-    # Restore original XenServer scripts
-    for f in \
-        /opt/xensource/libexec/interface-reconfigure \
-        /opt/xensource/libexec/InterfaceReconfigure.py \
-        /opt/xensource/libexec/InterfaceReconfigureBridge.py \
-        /opt/xensource/libexec/InterfaceReconfigureVswitch.py \
-        /etc/xensource/scripts/vif \
-        /usr/sbin/xen-bugtool
-    do
-        s=$(basename "$f")
-        if [ ! -f "/usr/lib/openvswitch/xs-original/$s" ]; then
-            printf "Original XenServer $s script not present in /usr/lib/openvswitch/xs-original\n"
-            printf "Could not restore original XenServer script.\n"
-        else
-            (rm -f "$f" \
-                && mv "/usr/lib/openvswitch/xs-original/$s" "$f") \
-                || printf "Could not restore original XenServer $s script.\n"
-        fi
-    done
+rm -f /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyc \
+    /usr/lib/xsconsole/plugins-base/XSFeatureVSwitch.pyo
+
+rm -f /usr/share/openvswitch/scripts/InterfaceReconfigure.pyc \
+    /usr/share/openvswitch/scripts/InterfaceReconfigure.pyo \
+    /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.pyc \
+    /usr/share/openvswitch/scripts/InterfaceReconfigureBridge.pyo \
+    /usr/share/openvswitch/scripts/InterfaceReconfigureVSwitch.pyc \
+    /usr/share/openvswitch/scripts/InterfaceReconfigureVSwitch.pyo 
+
+# Restore original XenServer scripts. It's important to do this even on upgrade
+# since the version to be installed may be missing some of these scripts.
+for f in \
+    /opt/xensource/libexec/interface-reconfigure \
+    /opt/xensource/libexec/InterfaceReconfigure.py \
+    /opt/xensource/libexec/InterfaceReconfigureBridge.py \
+    /opt/xensource/libexec/InterfaceReconfigureVswitch.py \
+    /etc/xensource/scripts/vif \
+    /usr/sbin/xen-bugtool
+do
+    s=$(basename "$f")
+    if [ ! -f "/usr/lib/openvswitch/xs-original/$s" ]; then
+        printf "Original XenServer $s script not present in /usr/lib/openvswitch/xs-original\n"
+        printf "Could not restore original XenServer script.\n"
+    else
+        (rm -f "$f" \
+            && mv "/usr/lib/openvswitch/xs-original/$s" "$f") \
+            || printf "Could not restore original XenServer $s script.\n"
+    fi
+done
 
+if [ "$1" = "0" ]; then     # $1 = 1 for upgrade
     # Remove all configuration files
     rm -f /etc/openvswitch/conf.db
     rm -f /etc/sysconfig/openvswitch
@@ -277,7 +285,6 @@ if [ "$1" = "0" ]; then     # $1 = 1 for upgrade
     printf "could leave the server in a state requiring manual recovery.\n\n"
 fi
 
-
 %files
 %defattr(-,root,root)
 /etc/init.d/openvswitch