[Ovirt-devel] [PATCH node] Adds an uninstall option to the standalone node menu.

Darryl L. Pierce dpierce at redhat.com
Thu Feb 19 15:31:45 UTC 2009


If the user selects this option from the firstboot menu, then the HostVG
volume group is removed. First all logical volumes are removed, swap
file disabled.

Signed-off-by: Darryl L. Pierce <dpierce at redhat.com>
---
 Makefile.am                    |    1 +
 ovirt-node.spec.in             |    5 +++-
 scripts/ovirt-config-storage   |   15 +------------
 scripts/ovirt-config-uninstall |   45 ++++++++++++++++++++++++++++++++++++++++
 scripts/ovirt-functions        |   22 +++++++++++++++++++
 5 files changed, 73 insertions(+), 15 deletions(-)
 create mode 100755 scripts/ovirt-config-uninstall

diff --git a/Makefile.am b/Makefile.am
index 733fef1..af23ae4 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -38,6 +38,7 @@ EXTRA_DIST =			\
   scripts/ovirt-config-password \
   scripts/ovirt-config-setup    \
   scripts/ovirt-config-storage  \
+  scripts/ovirt-config-uninstall \
   scripts/ovirt-early		\
   scripts/ovirt-firstboot       \
   scripts/ovirt-functions	\
diff --git a/ovirt-node.spec.in b/ovirt-node.spec.in
index 5845d2b..84f10a3 100644
--- a/ovirt-node.spec.in
+++ b/ovirt-node.spec.in
@@ -140,6 +140,7 @@ cd -
 %{__install} -p -m0755 scripts/ovirt-config-password %{buildroot}%{_sbindir}
 %{__install} -p -m0755 scripts/ovirt-config-setup %{buildroot}%{_sbindir}
 %{__install} -p -m0755 scripts/ovirt-config-storage %{buildroot}%{_sbindir}
+%{__install} -p -m0755 scripts/ovirt-config-uninstall %{buildroot}%{_sbindir}
 %{__install} -p -m0755 scripts/ovirt-process-config %{buildroot}%{_sbindir}
 %{__install} -D -m0755 scripts/ovirt-install-node-stateful %{buildroot}%{_sbindir}
 %{__install} -D -m0755 scripts/ovirt-install-node-stateless %{buildroot}%{_sbindir}
@@ -201,7 +202,8 @@ install -p -m 644 images/syslinux-vesa-splash.jpg %{buildroot}/usr/lib/anaconda-
 %{__ln_s} ../..%{_sbindir}/ovirt-config-networking %{buildroot}%{_sysconfdir}/ovirt-config-setup.d/"15_Networking Setup"
 %{__ln_s} ../..%{_sbindir}/ovirt-config-logging %{buildroot}%{_sysconfdir}/ovirt-config-setup.d/"30_Logging Setup"
 %{__ln_s} ../..%{_sbindir}/ovirt-config-collectd %{buildroot}%{_sysconfdir}/ovirt-config-setup.d/"35_Collectd Setup"
-%{__ln_s} ../..%{_sbindir}/ovirt-config-boot-wrapper %{buildroot}%{_sysconfdir}/ovirt-config-setup.d/"99_Local install and reboot"
+%{__ln_s} ../..%{_sbindir}/ovirt-config-boot-wrapper %{buildroot}%{_sysconfdir}/ovirt-config-setup.d/"98_Local install and reboot"
+%{__ln_s} ../..%{_sbindir}/ovirt-config-uninstall %{buildroot}%{_sysconfdir}/ovirt-config-setup.d/"99_Uninstall_node"
 
 
 %clean
@@ -275,6 +277,7 @@ fi
 %{_sbindir}/ovirt-config-password
 %{_sbindir}/ovirt-config-setup
 %{_sbindir}/ovirt-config-storage
+%{_sbindir}/ovirt-config-uninstall
 %{_sbindir}/ovirt-process-config
 %{_sbindir}/ovirt-install-node-stateless
 %{_sbindir}/gptsync
diff --git a/scripts/ovirt-config-storage b/scripts/ovirt-config-storage
index faaf006..954a814 100755
--- a/scripts/ovirt-config-storage
+++ b/scripts/ovirt-config-storage
@@ -251,20 +251,7 @@ wipe_lvm_on_disk()
 {
     unmount_logging
     for vg in $(pvdisplay -c $DRIVE* 2>/dev/null|awk -F: '{print $2}'|sort -u); do
-        for d in $(grep $vg /proc/mounts|awk '{print $2}'); do
-            log "Unmounting $d"
-            umount $d
-        done
-        for d in $(grep $vg /proc/swaps|awk '{print $1}'); do
-            log "Turning off $d"
-            swapoff $d
-        done
-        for lv in $(lvdisplay -c $vg|awk -F: '{print $1}'); do
-            log "Removing $lv"
-            lvremove -f $lv
-        done
-        log "Removing $vg"
-        vgremove -f $vg
+	wipe_volume_group $vg
     done
 }
 
diff --git a/scripts/ovirt-config-uninstall b/scripts/ovirt-config-uninstall
new file mode 100755
index 0000000..70dcb47
--- /dev/null
+++ b/scripts/ovirt-config-uninstall
@@ -0,0 +1,45 @@
+#!/bin/bash
+#
+# ovirt-config-uninstall - destroys an installed copy of the oVirt node
+
+# SYNOPSIS
+# Destroys the HostVG volume group and logical volumes.
+#
+
+. /etc/init.d/ovirt-functions
+
+ME=$(basename "$0")
+warn() { printf '%s: %s\n' "$ME" "$*" >&2; }
+die() { warn "$*"; exit 1; }
+
+trap '__st=$?; stop_log; exit $__st' 0
+trap 'exit $?' 1 2 13 15
+
+cat <<EOF
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!!                                                                           !!
+!! WARNING !! WARNING !! WARNING !! WARNING !! WARNING !! WARNING !! WARNING !!
+!!                                                                           !!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+   If you proceed, you will DESTROY any existing data relating to the oVirt
+   installation on this machine.
+
+EOF
+
+read -ep "Do you wish to continue and uninstall this node (Y/N)? "
+
+if [ "$REPLY" == "Y" -o "$REPLY" == "y" ]; then
+    if [ -d /dev/HostVG ]; then
+	printf "\nUNINSTALLING NODE...\n\n"
+	unmount_logging
+	wipe_volume_group "HostVG"
+	printf "\nDONE!\n"
+    else
+	printf "\nThere is no installed node instance to remove.\n"
+	printf "\nAborting...\n"
+	return 1
+    fi
+else
+    printf "\nABORTED!\n"
+fi
diff --git a/scripts/ovirt-functions b/scripts/ovirt-functions
index 4be1310..8ff908b 100755
--- a/scripts/ovirt-functions
+++ b/scripts/ovirt-functions
@@ -112,6 +112,28 @@ EOF
     fi
 }
 
+# Destroys a particular volume group and its logical volumes.
+#
+wipe_volume_group()
+{
+    vg=$1
+
+    for d in $(grep $vg /proc/mounts|awk '{print $2}'); do
+        log "Unmounting $d"
+        umount $d
+    done
+    for d in $(grep $vg /proc/swaps|awk '{print $1}'); do
+        log "Turning off $d"
+        swapoff $d
+    done
+    for lv in $(lvdisplay -c $vg|awk -F: '{print $1}'); do
+        log "Removing $lv"
+        lvremove -f $lv
+    done
+    log "Removing $vg"
+    vgremove -f $vg
+}
+
 # find_srv SERVICE PROTO
 #
 # reads DNS SRV record
-- 
1.6.0.6




More information about the ovirt-devel mailing list