I'd appreciate a careful review of this patch as it is late in the game
and not all parts of the code are easy to test. I'd hate to see
regressions because of some stupid mistake.
Although the existing code is not necessarily wrong, it does do a few
things in a way that, AFAIK, are not really in line with the intentions
of the debconf protocol, like setting the default for (multi)select
questions to non-existing values and depending on them to stay that way
to detect a <GoBack>.
I've tried to be as consistent as possible in making my changes.
See http://bugs.debian.org/407039 for the background on this patch.
David: are you aware of any other scripts that could have similar issues?
Cheers,
FJP
---------- Forwarded Message ----------
Subject: r44255 - in trunk/packages/partman/partman-lvm: choose_partition/lvm debian
Date: Tuesday 16 January 2007 20:55
From: Frans Pop <fjp@alioth.debian.org>
To: debian-installer_cvs@packages.qa.debian.org
Author: fjp
Date: Tue Jan 16 20:55:16 2007
New Revision: 44255
Modified:
trunk/packages/partman/partman-lvm/choose_partition/lvm/do_option
trunk/packages/partman/partman-lvm/debian/changelog
Log:
* Properly check for <Go Back> during selection of LV or VG for deletion.
Thanks to Joel Johnson for spotting this issue. Closes: #407039.
* General review of debconf handling in main LVM script:
- Don't set notes or error templates to "false"; it's meaningless.
- Don't set (multi)select templates to non-existent "false" value as
that won't work as was probably expected.
- More consistent handling of db_go.
Modified:
trunk/packages/partman/partman-lvm/choose_partition/lvm/do_option
==============================================================================
--- trunk/packages/partman/partman-lvm/choose_partition/lvm/do_option (original)
+++ trunk/packages/partman/partman-lvm/choose_partition/lvm/do_option Tue Jan 16 20:55:16 2007
@@ -16,7 +16,6 @@
# make sure that lvm is available
if ! grep -q "[0-9] device-mapper$" /proc/misc ; then
- db_set partman-lvm/nolvm "false"
db_input critical partman-lvm/nolvm
db_go
exit 0
@@ -47,9 +46,8 @@
for pv in $(pv_list); do
if ! pv_create "$pv"; then
db_subst partman-lvm/pvcreate_error PV "$pv"
- db_set partman-lvm/nolvm "false"
- db_input critical partman-lvm/nolvm
- db_go
+ db_input critical partman-lvm/pvcreate_error
+ db_go || true
exit 0
fi
done
@@ -61,7 +59,7 @@
db_subst partman-lvm/activevg COUNT $count
db_set partman-lvm/activevg "false"
db_input critical partman-lvm/activevg
- db_go
+ db_go || true
db_get partman-lvm/activevg
[ "$RET" = "true" ] && log-output -t partman-lvm vgchange -a y
# TODO: We need to update the devices that LVM just claimed
@@ -74,10 +72,9 @@
do_display() {
lvm_get_config
db_subst partman-lvm/displayall CURRENT_CONFIG "$RET"
- db_set partman-lvm/displayall "false"
db_input critical partman-lvm/displayall
db_capb
- db_go
+ db_go || true
db_capb backup
db_get partman-lvm/displayall
}
@@ -97,63 +94,54 @@
fi
done
if [ -z "$pvs" ]; then
- db_set partman-lvm/nopartitions "false"
db_input critical partman-lvm/nopartitions
- db_go
+ db_go || true
return
fi
# Prompt for VG name
db_set partman-lvm/vgcreate_name ""
db_input critical partman-lvm/vgcreate_name
- db_go
- [ $? -eq 30 ] && return
+ db_go || return
db_get partman-lvm/vgcreate_name
vg="$RET"
# Check VG name
if [ -z "$vg" ]; then
- db_set partman-lvm/vgcreate_nonamegiven "false"
db_input critical partman-lvm/vgcreate_nonamegiven
- db_go
+ db_go || true
return
fi
if ! vg_name_ok "$vg"; then
- db_set partman-lvm/badnamegiven "false"
db_input critical partman-lvm/badnamegiven
- db_go
+ db_go || true
return
fi
# Check whether the VG name is already in use
if vgs "$vg" > /dev/null 2>&1; then
- db_set partman-lvm/vgcreate_nameused "false"
db_input critical partman-lvm/vgcreate_nameused
- db_go
+ db_go || true
return
fi
# Check whether the VG name overlaps with an existing device
if [ -e "/dev/$vg" ]; then
- db_set partman-lvm/vgcreate_devnameused "false"
db_input critical partman-lvm/vgcreate_devnameused
- db_go
+ db_go || true
return
fi
# Choose the PVs to use
db_subst partman-lvm/vgcreate_parts PARTITIONS "$pvs"
- db_set partman-lvm/vgcreate_parts "false"
+ db_reset partman-lvm/vgcreate_parts
db_input critical partman-lvm/vgcreate_parts
- db_go
+ db_go || return
db_get partman-lvm/vgcreate_parts
- if [ "$RET" = "false" ]; then
- return
- elif [ -z "$RET" ]; then
- db_set partman-lvm/vgcreate_nosel "false"
+ if [ -z "$RET" ]; then
db_input critical partman-lvm/vgcreate_nosel
- db_go
+ db_go || true
return
fi
pvs=$(echo "$RET" | sed -e 's/ *([^)]*) *//g')
@@ -161,9 +149,8 @@
if ! vg_create "$vg" $pvs; then
db_subst partman-lvm/vgcreate_error VG "$vg"
- db_set partman-lvm/vgcreate_error "false"
db_input critical partman-lvm/vgcreate_error
- db_go
+ db_go || true
else
db_subst partman-lvm/text/in_use VG "$vg"
db_metaget partman-lvm/text/in_use description
@@ -189,34 +176,31 @@
fi
done
if [ -z "$vgs" ]; then
- db_set partman-lvm/vgdelete_novg "false"
db_input critical partman-lvm/vgdelete_novg
- db_go
+ db_go || true
return
fi
# Prompt for VG to delete
db_subst partman-lvm/vgdelete_names GROUPS "$vgs"
- db_set partman-lvm/vgdelete_names "false"
+ db_reset partman-lvm/vgdelete_names
db_input critical partman-lvm/vgdelete_names
- db_go
+ db_go || return
db_get partman-lvm/vgdelete_names
- [ "$RET" = "false" ] && return
vg=$(echo "$RET" | sed -e 's/[[:space:]]*(.*//')
# Confirm
db_subst partman-lvm/vgdelete_confirm VG $vg
db_set partman-lvm/vgdelete_confirm "false"
db_input critical partman-lvm/vgdelete_confirm
- db_go
+ db_go || true
db_get partman-lvm/vgdelete_confirm
[ "$RET" = "true" ] || return
pvs=$(vg_list_pvs "$vg")
if ! vg_delete "$vg"; then
- db_set partman-lvm/vgdelete_error "false"
db_input critical partman-lvm/vgdelete_error
- db_go
+ db_go || true
else
for pv in $pvs; do
partman_unlock_unit "$pv"
@@ -240,9 +224,8 @@
fi
done
if [ -z "$pvs" ]; then
- db_set partman-lvm/nopartitions "false"
db_input critical partman-lvm/nopartitions
- db_go
+ db_go || true
return
fi
@@ -258,33 +241,28 @@
fi
done
if [ -z "$vgs" ]; then
- db_set partman-lvm/vgextend_novg "false"
db_input critical partman-lvm/vgextend_novg
- db_go
+ db_go || true
return
fi
# Prompt for VG to extend
db_subst partman-lvm/vgextend_names GROUPS "$vgs"
- db_set partman-lvm/vgextend_names "false"
+ db_reset partman-lvm/vgextend_names
db_input critical partman-lvm/vgextend_names
- db_go
+ db_go || return
db_get partman-lvm/vgextend_names
- [ "$RET" = "false" ] && return
vg=$(echo "$RET" | sed -e 's/[[:space:]]*(.*//')
# Prompt for PVs to use
db_subst partman-lvm/vgextend_parts PARTITIONS "$pvs"
- db_set partman-lvm/vgextend_parts "false"
+ db_reset partman-lvm/vgextend_parts
db_input critical partman-lvm/vgextend_parts
- db_go
+ db_go || return
db_get partman-lvm/vgextend_parts
if [ -z "$RET" ]; then
- db_set partman-lvm/vgextend_nosel "false"
db_input critical partman-lvm/vgextend_nosel
- db_go
- return
- elif [ "$RET" = "false" ]; then
+ db_go || true
return
fi
pvs=$(echo "$RET" | sed -e 's/ *([^)]*) *//g')
@@ -294,9 +272,8 @@
if ! vg_extend "$vg" "$pv"; then
db_subst partman-lvm/vgextend_error PARTITION $pv
db_subst partman-lvm/vgextend_error VG $vg
- db_set partman-lvm/vgextend_error "false"
db_input critical partman-lvm/vgextend_error
- db_go
+ db_go || true
return
else
db_subst partman-lvm/text/in_use VG "$vg"
@@ -323,19 +300,17 @@
fi
done
if [ -z "$vgs" ]; then
- db_set partman-lvm/vgreduce_novg "false"
db_input critical partman-lvm/vgreduce_novg
- db_go
+ db_go || true
return
fi
# Prompt for VG to reduce
db_subst partman-lvm/vgreduce_names GROUPS "$vgs"
- db_set partman-lvm/vgreduce_names "false"
+ db_reset partman-lvm/vgreduce_names
db_input critical partman-lvm/vgreduce_names
- db_go
+ db_go || return
db_get partman-lvm/vgreduce_names
- [ "$RET" = "false" ] && return
vg=$(echo "$RET" | sed -e 's/[[:space:]]*(.*//')
# Prompt for PV to remove
@@ -352,16 +327,13 @@
# Prompt for PVs to use
db_subst partman-lvm/vgreduce_parts PARTITIONS "$pvs"
- db_set partman-lvm/vgreduce_parts "false"
+ db_reset partman-lvm/vgreduce_parts
db_input critical partman-lvm/vgreduce_parts
- db_go
+ db_go || return
db_get partman-lvm/vgreduce_parts
if [ -z "$RET" ]; then
- db_set partman-lvm/vgreduce_nosel "false"
db_input critical partman-lvm/vgreduce_nosel
- db_go
- return
- elif [ "$RET" = "false" ]; then
+ db_go || true
return
fi
pvs=$(echo "$RET" | sed -e 's/ *([^)]*) *//g')
@@ -372,9 +344,8 @@
vg_get_info "$vg"
if [ "$count" -eq "$PVS" ]; then
if ! vg_delete "$vg"; then
- db_set partman-lvm/vgdelete_error "false"
db_input critical partman-lvm/vgdelete_error
- db_go
+ db_go || true
fi
return
fi
@@ -384,9 +355,8 @@
if ! vg_reduce "$vg" "$pv"; then
db_subst partman-lvm/vgreduce_error VG "$vg"
db_subst partman-lvm/vgreduce_error PARTITION "$pv"
- db_set partman-lvm/vgreduce_error "false"
db_input critical partman-lvm/vgreduce_error
- db_go
+ db_go || true
return
else
partman_unlock_unit "$pv"
@@ -410,51 +380,45 @@
done
if [ -z "$vgs" ]; then
- db_set partman-lvm/lvcreate_nofreevg "false"
db_input critical partman-lvm/lvcreate_nofreevg
- db_go
+ db_go || true
return
fi
# Prompt for VG to use
db_subst partman-lvm/lvcreate_vgnames GROUPS "$vgs"
- db_set partman-lvm/lvcreate_vgnames "false"
+ db_reset partman-lvm/lvcreate_vgnames
db_input critical partman-lvm/lvcreate_vgnames
- db_go
+ db_go || return
db_get partman-lvm/lvcreate_vgnames
- [ "$RET" = "false" ] && return
vg=$(echo "$RET" | sed -e 's/[[:space:]]*(.*//')
# Prompt for name to give the new lv
db_set partman-lvm/lvcreate_name ""
db_input critical partman-lvm/lvcreate_name
- db_go
- [ $? -eq 30 ] && return
+ db_go || return
db_get partman-lvm/lvcreate_name
lv="$RET"
# Check LV name
if [ -z "$lv" ]; then
- db_set partman-lvm/lvcreate_nonamegiven "false"
db_input critical partman-lvm/lvcreate_nonamegiven
- db_go
+ db_go || true
return
fi
if ! lv_name_ok "$lv"; then
- db_set partman-lvm/badnamegiven "false"
db_input critical partman-lvm/badnamegiven
- db_go
+ db_go || true
return
fi
# Make sure the name isn't already in use
if lvs "/dev/$vg/$lv" > /dev/null 2>&1; then
- db_subst partman-lvm/lvcreate_exists LV "$lv"
+ db_subst partman-lvm/lvcreate_exists LV $lv
db_subst partman-lvm/lvcreate_exists VG $vg
- db_set partman-lvm/lvcreate_exists "false"
db_input critical partman-lvm/lvcreate_exists
- db_go
+ db_go || true
return
fi
@@ -464,10 +428,9 @@
db_set partman-lvm/lvcreate_size "${max_size}B"
db_fset partman-lvm/lvcreate_size seen false
db_input critical partman-lvm/lvcreate_size
- db_go
- [ $? -eq 30 ] && return
+ db_go || return
db_get partman-lvm/lvcreate_size
- [ -z "$RET" ] && return
+ [ -n "$RET" ] || return
size=$(lvm_size_from_human "$RET")
# If the maximum free space should be used for the new LV, use the
@@ -482,9 +445,8 @@
db_subst partman-lvm/lvcreate_error VG $vg
db_subst partman-lvm/lvcreate_error LV $lv
db_subst partman-lvm/lvcreate_error SIZE $RET
- db_set partman-lvm/lvcreate_error "false"
db_input critical partman-lvm/lvcreate_error
- db_go
+ db_go || true
return
fi
}
@@ -508,18 +470,16 @@
done
if [ -z "$lvs" ]; then
- db_set partman-lvm/lvdelete_nolv "false"
db_input critical partman-lvm/lvdelete_nolv
- db_go
+ db_go || true
return
fi
db_subst partman-lvm/lvdelete_lvnames LVS "$lvs"
- db_set partman-lvm/lvdelete_lvnames "false"
+ db_reset partman-lvm/lvdelete_lvnames
db_input critical partman-lvm/lvdelete_lvnames
- db_go
+ db_go || return
db_get partman-lvm/lvdelete_lvnames
- [ "$RET" = "false" ] && return
lv=$(echo "$RET" | cut -d' ' -f1)
vg=$(echo "$RET" | sed -e 's/.*(\(.*\))/\1/')
vg=${vg##* }
@@ -527,9 +487,8 @@
if ! lv_delete "$vg" "$lv"; then
db_subst partman-lvm/lvdelete_error VG $vg
db_subst partman-lvm/lvdelete_error LV $lv
- db_set partman-lvm/lvdelete_error "false"
db_input critical partman-lvm/lvdelete_error
- db_go
+ db_go || true
return
fi
}
@@ -624,12 +583,9 @@
db_subst partman-lvm/mainmenu USED_PVS "$used_pvs"
db_subst partman-lvm/mainmenu VGS "$vgs"
db_subst partman-lvm/mainmenu LVS "$lvs"
- db_set partman-lvm/mainmenu "false"
+ db_reset partman-lvm/mainmenu
db_input critical partman-lvm/mainmenu
- db_go
- if [ $? -eq 30 ]; then
- break
- fi
+ db_go || break
db_get partman-lvm/mainmenu
option="$RET"
Modified: trunk/packages/partman/partman-lvm/debian/changelog
==============================================================================
--- trunk/packages/partman/partman-lvm/debian/changelog (original)
+++ trunk/packages/partman/partman-lvm/debian/changelog Tue Jan 16 20:55:16 2007
@@ -1,3 +1,11 @@
+partman-lvm (49) UNRELEASED; urgency=low
+
+ * Properly check for <Go Back> during selection of LV or VG for deletion.
+ Thanks to Joel Johnson for spotting this issue. Closes: #407039.
+ * General review of debconf handling in main LVM script.
+
+ -- Frans Pop <fjp@debian.org> Tue, 16 Jan 2007 20:48:35 +0100
+
partman-lvm (48) unstable; urgency=low
[ David Härdeman ]
-------------------------------------------------------
Attachment:
pgpkWsrOUEb8V.pgp
Description: PGP signature