Le mercredi 30 juillet 2008 01:48, Jérémy Bobbio a écrit : > > Some minor refactoring was needed when writing the code, so why not doing > > it while it's still hot ? However I can submit two separate patches if > > it's clearer. > > I'm already asking quite some work, but if you have the energy, it would > be lovely.
Here is the patch concerning the refactoring part. I moved the definition of dev_to_partman outside of partman-auto-raid and replaced it by the appropriate include, but couldn't see the function used anywhere. As I have no time / resources to test this I chose to do it this way, but if someone knows for sure the function is not needed I can remove the inclusion. I also added the definition of some function used in the second part of the patch. The envelope creation is now a separate function as it is called twice. I think the functional changes patch will be ready this week end (2008-08-03) for review, after all required tests on my side. Cheers, Grégory
Index: partman-auto-raid/display.d/initial_auto_raid =================================================================== --- partman-auto-raid/display.d/initial_auto_raid (révision 54731) +++ partman-auto-raid/display.d/initial_auto_raid (copie de travail) @@ -5,25 +5,8 @@ . /lib/partman/lib/base.sh . /lib/partman/lib/commit.sh +. /lib/partman/lib/auto-shared.sh -dev_to_partman () { - local dev_name="$1" - - local mapped_dev_name="$(mapdevfs $dev_name)" - if [ -n "$mapped_dev_name" ]; then - dev_name="$mapped_dev_name" - fi - - for dev in $DEVICES/*; do - # mapdevfs both to allow for different ways to refer to the - # same device using devfs, and to allow user input in - # non-devfs form - if [ "$(mapdevfs $(cat $dev/device))" = "$dev_name" ]; then - echo $dev - fi - done -} - # See if we are supposed to run and only run once db_get partman-auto/method if [ "$RET" != raid ] || \ Index: partman-auto-lvm/lib/auto-lvm.sh =================================================================== --- partman-auto-lvm/lib/auto-lvm.sh (révision 54731) +++ partman-auto-lvm/lib/auto-lvm.sh (copie de travail) @@ -10,6 +10,55 @@ exit 1 } +# Creates, if needed, the envelope to hold LVM VGs. +# +# We need to create the envelope only if one is not defined. This is the case +# when : +# - the default device is not part of a PV declaration in the scheme (a PV +# is declared when there's a method{ lvm } or method{ crypto } attribute) ; +# *AND* +# - the recipe contains a PV declaration *without* device. +# +# For this case the physical device used will be the default one. +# +# First arg : the scheme to add the envelope to +# Second arg : the physical device (ie /dev/hda) +# Third arg : the method to use (lvm or crypto) +# Returns : the scheme with the envelope if needed +# +auto_lvm_create_envelope { + local scheme physdev method + scheme="$1" + physdev=$2 + method=$3 + + if ! echo "$scheme" | grep -E "method\{ (lvm|crypto) \}" | grep -q "device{ $physdev[[:digit:]]* }" && \ + ! echo "$scheme" | grep -E "method\{ (lvm|crypto) \}" | grep -q -v "device{"; then + scheme="$scheme${NL}100 1000 1000000000 ext3 \$primary{ } method{ $method }" + fi + + echo "$scheme" +} + +# This function depends on the existence of $scheme and $devfspv_devices in scope +# +# It will create the partitions needed by a recipe / scheme to hold all PVs +# +# First arg : the path to the partman directory for the device +# +auto_lvm_create_partitions() { + local dev free_size + dev=$1 + + get_disk_infos $dev; + free_size=$(expr 0000000"$free_size" : '0*\(..*\)......$') # convert to megabytes + + expand_scheme + + create_primary_partitions + create_partitions +} + auto_lvm_prepare() { local dev method size free_size normalscheme target dev=$1 Index: partman-auto/display.d/initial_auto =================================================================== --- partman-auto/display.d/initial_auto (révision 54731) +++ partman-auto/display.d/initial_auto (copie de travail) @@ -9,26 +9,6 @@ . /lib/partman/lib/auto-shared.sh -dev_to_partman () { - local dev_name="$1" - - local mapped_dev_name="$(mapdevfs $dev_name)" - if [ -n "$mapped_dev_name" ]; then - dev_name="$mapped_dev_name" - fi - - for dev in $DEVICES/*; do - [ -d "$dev" ] || continue - - # mapdevfs both to allow for different ways to refer to the - # same device using devfs, and to allow user input in - # non-devfs form - if [ "$(mapdevfs $(cat $dev/device))" = "$dev_name" ]; then - echo $dev - fi - done -} - # Skip if no disks detected and don't run on S/390 if [ -z "$(get_auto_disks)" ] || \ [ "$(udpkg --print-architecture)" = s390 ]; then Index: partman-auto/lib/auto-shared.sh =================================================================== --- partman-auto/lib/auto-shared.sh (révision 54731) +++ partman-auto/lib/auto-shared.sh (copie de travail) @@ -8,6 +8,13 @@ . /lib/partman/lib/disk-label.sh create_new_label "$dev" no || return 1 + get_disk_infos $dev +} + +get_disk_infos() { + local dev + dev=$1 + cd $dev free_space='' @@ -213,3 +220,25 @@ # TODO: Add a select_auto_disks() function # Note: This needs a debconf_multiselect equiv. + +# Maps a devfs name to a partman directory +dev_to_partman () { + local dev_name="$1" + + local mapped_dev_name="$(mapdevfs $dev_name)" + if [ -n "$mapped_dev_name" ]; then + dev_name="$mapped_dev_name" + fi + + for dev in $DEVICES/*; do + [ -d "$dev" ] || continue + + # mapdevfs both to allow for different ways to refer to the + # same device using devfs, and to allow user input in + # non-devfs form + if [ "$(mapdevfs $(cat $dev/device))" = "$dev_name" ]; then + echo $dev + fi + done +} +