On Wed, Jun 04, 2008 at 01:48:16AM +0200, Jérémy Bobbio wrote: > Attached is a patch adding support for preseeding LVM-over-RAID setups.
Here it is. Cheers, -- Jérémy Bobbio .''`. [EMAIL PROTECTED] : :Ⓐ : # apt-get install anarchism `. `'` `-
commit a0bac278b265a7755323c70c2db234935357406b Author: Jérémy Bobbio <[EMAIL PROTECTED]> Date: Tue Jun 3 14:35:00 2008 +0000 Move dev_to_partman() to lib/auto-shared.sh dev_to_partman() was defined and used in both partman-auto and partman-auto-raid. It is now defined in lib/auto-shared.sh. diff --git a/packages/partman/partman-auto-raid/debian/changelog b/packages/partman/partman-auto-raid/debian/changelog index 95bc242..d57a5b4 100644 --- a/packages/partman/partman-auto-raid/debian/changelog +++ b/packages/partman/partman-auto-raid/debian/changelog @@ -1,3 +1,11 @@ +partman-auto-raid (12) UNRELEASED; urgency=low + + [ Jérémy Bobbio ] + * Use dev_to_partman() from lib/auto-shared.sh. + Requires partman-auto (>= 79) + + -- Jérémy Bobbio <[EMAIL PROTECTED]> Tue, 03 Jun 2008 11:31:01 +0000 + partman-auto-raid (11) unstable; urgency=low [ Updated translations ] diff --git a/packages/partman/partman-auto-raid/debian/control b/packages/partman/partman-auto-raid/debian/control index 90d5f46..355c605 100644 --- a/packages/partman/partman-auto-raid/debian/control +++ b/packages/partman/partman-auto-raid/debian/control @@ -9,5 +9,5 @@ Vcs-Svn: svn://svn.debian.org/d-i/trunk/packages/partman/partman-auto-raid Package: partman-auto-raid XC-Package-Type: udeb Architecture: all -Depends: ${misc:Depends}, partman-base (>= 114), partman-basicfilesystems, partman-ext3, partman-auto (>= 58), partman-md +Depends: ${misc:Depends}, partman-base (>= 114), partman-basicfilesystems, partman-ext3, partman-auto (>= 79), partman-md Description: Allow preseeded RAID installs diff --git a/packages/partman/partman-auto-raid/display.d/initial_auto_raid b/packages/partman/partman-auto-raid/display.d/initial_auto_raid index d545c6b..64fbbb1 100755 --- a/packages/partman/partman-auto-raid/display.d/initial_auto_raid +++ b/packages/partman/partman-auto-raid/display.d/initial_auto_raid @@ -5,24 +5,7 @@ . /lib/partman/lib/base.sh . /lib/partman/lib/commit.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 -} +. /lib/partman/lib/auto-shared.sh # See if we are supposed to run and only run once db_get partman-auto/method diff --git a/packages/partman/partman-auto/debian/changelog b/packages/partman/partman-auto/debian/changelog index d6d23a4..6809d3a 100644 --- a/packages/partman/partman-auto/debian/changelog +++ b/packages/partman/partman-auto/debian/changelog @@ -1,3 +1,10 @@ +partman-auto (79) UNRELEASED; urgency=low + + [ Jérémy Bobbio ] + * Move dev_to_partman() to lib/auto-shared.sh. + + -- Jérémy Bobbio <[EMAIL PROTECTED]> Tue, 03 Jun 2008 14:30:14 +0000 + partman-auto (78) unstable; urgency=low [ Updated translations ] diff --git a/packages/partman/partman-auto/display.d/initial_auto b/packages/partman/partman-auto/display.d/initial_auto index ff486db..c89dc20 100755 --- a/packages/partman/partman-auto/display.d/initial_auto +++ b/packages/partman/partman-auto/display.d/initial_auto @@ -9,26 +9,6 @@ fi . /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 diff --git a/packages/partman/partman-auto/lib/auto-shared.sh b/packages/partman/partman-auto/lib/auto-shared.sh index 1429183..ec42e52 100644 --- a/packages/partman/partman-auto/lib/auto-shared.sh +++ b/packages/partman/partman-auto/lib/auto-shared.sh @@ -213,3 +213,21 @@ select_auto_disk() { # TODO: Add a select_auto_disks() function # Note: This needs a debconf_multiselect equiv. + +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 +} commit 4a888c570e79e94f0fa9856c2f0bce8137f05ef8 Author: Jérémy Bobbio <[EMAIL PROTECTED]> Date: Tue Jun 3 12:04:33 2008 +0000 Add the ability to preseed LVM over RAID It is now possible to preseed LVM over RAID by preseeding: - partman-auto/method=raid - partman-auto-disk (as suitable for partman-auto-raid) - partman-auto-raid/recipe (as suitable for partman-auto-raid) - partman-auto/expert_recipe with *both* partitions used by the software RAID devices and the logical volumes, respectively tagged with "$lvmignore{ }" and "$defaultignore{ } $lvmok{ }". This last part is a bit hackish, but does the trick. diff --git a/packages/partman/partman-auto-raid/README b/packages/partman/partman-auto-raid/README index 8b7df9e..cb94317 100644 --- a/packages/partman/partman-auto-raid/README +++ b/packages/partman/partman-auto-raid/README @@ -23,3 +23,64 @@ ignored). -- Simon Huggins <[EMAIL PROTECTED]> sponsored by Black Cat Networks http://www.blackcatnetworks.co.uk/ + +It is also possible to preseed LVM over RAID. The following example will +create a RAID 1 setup on two hard drives with: + + /dev/md0 as /boot (ext3) + /dev/md1 as a LVM physical volume + /dev/mapper/<hostname>-root as / (ext3) + /dev/mapper/<hostname>-swap_1 as swap + /dev/mapper/<hostname>-home as /home (ext3) + +--- 8< --- +d-i partman-auto/method string raid + +d-i partman-auto/disk string /dev/sda /dev/sdb + +d-i partman-auto-raid/recipe string \ + 1 2 0 ext3 /boot \ + /dev/sda1#/dev/sdb1 \ + . \ + 1 2 0 lvm - \ + /dev/sda5#/dev/sdb5 \ + . + +# Please note that RAID partitions are tagged as "lvmignore" +# and LVM logical volumes as "defaultignore" and "lvmok". +d-i partman-auto/expert_recipe string \ + multiraid :: \ + 100 512 256 raid \ + $lvmignore{ } \ + $primary{ } \ + method{ raid } \ + . \ + 900 5000 4000 raid \ + $lvmignore{ } \ + method{ raid } \ + . \ + 700 5000 4000 ext3 \ + $defaultignore{ } \ + $lvmok{ } \ + method{ format } \ + format{ } \ + use_filesystem{ } \ + filesystem{ ext3 } \ + mountpoint{ / } \ + . \ + 64 512 300% linux-swap \ + $defaultignore{ } \ + $lvmok{ } \ + method{ swap } \ + format{ } \ + . \ + 100 1000 1000000000 ext3 \ + $defaultignore{ } \ + $lvmok{ } \ + method{ format } \ + format{ } \ + use_filesystem{ } \ + filesystem{ ext3 } \ + mountpoint{ /home } \ + . +--- >8 --- diff --git a/packages/partman/partman-auto-raid/debian/changelog b/packages/partman/partman-auto-raid/debian/changelog index d57a5b4..4a5fbf5 100644 --- a/packages/partman/partman-auto-raid/debian/changelog +++ b/packages/partman/partman-auto-raid/debian/changelog @@ -3,6 +3,7 @@ partman-auto-raid (12) UNRELEASED; urgency=low [ Jérémy Bobbio ] * Use dev_to_partman() from lib/auto-shared.sh. Requires partman-auto (>= 79) + * Add the ability to preseed LVM over RAID. See README for details. -- Jérémy Bobbio <[EMAIL PROTECTED]> Tue, 03 Jun 2008 11:31:01 +0000 diff --git a/packages/partman/partman-auto-raid/display.d/_numbers b/packages/partman/partman-auto-raid/display.d/_numbers index 90a149b..fc7dae8 100644 --- a/packages/partman/partman-auto-raid/display.d/_numbers +++ b/packages/partman/partman-auto-raid/display.d/_numbers @@ -1,2 +1,3 @@ 50 initial_auto_raid 55 initial_auto_raid_fs +56 initial_auto_raid_lvm diff --git a/packages/partman/partman-auto-raid/display.d/initial_auto_raid_fs b/packages/partman/partman-auto-raid/display.d/initial_auto_raid_fs index 630078d..339b6af 100755 --- a/packages/partman/partman-auto-raid/display.d/initial_auto_raid_fs +++ b/packages/partman/partman-auto-raid/display.d/initial_auto_raid_fs @@ -29,16 +29,24 @@ fix_raid_fs() { fi cd $id - if [ "$fstype" = swap ]; then + case "$fstype" in + swap) rm -f filesystem mountpoint use_filesystem options echo swap >method - else + ;; + lvm) + # Register this RAID as a PV for initial_auto_raid_lvm + echo lvm >method + echo "/dev/md$raidnum" >>/var/lib/partman/initial_auto_raid_pvs + ;; + *) echo "$fstype" >filesystem echo "$mountpoint" >mountpoint echo format >method touch use_filesystem mkdir options - fi + ;; + esac touch format touch formatable @@ -50,6 +58,7 @@ if [ ! -f /var/lib/partman/do_initial_auto_raid_fs ]; then exit 0 fi rm /var/lib/partman/do_initial_auto_raid_fs +rm -f /var/lib/partman/initial_auto_raid_pvs # Check we have the stashed value of the first RAID dev we created db_get partman-auto-raid/raidnum diff --git a/packages/partman/partman-auto-raid/display.d/initial_auto_raid_lvm b/packages/partman/partman-auto-raid/display.d/initial_auto_raid_lvm new file mode 100755 index 0000000..159bc6d --- /dev/null +++ b/packages/partman/partman-auto-raid/display.d/initial_auto_raid_lvm @@ -0,0 +1,56 @@ +#!/bin/sh + +set -x + +# Apply LVM partitioning on top of a RAID preseed + +if ! [ -f /var/lib/partman/initial_auto_raid_pvs ] || + ! [ -e /lib/partman/lib/auto-lvm.sh ]; then + exit 0 +fi + +. /lib/partman/lib/auto-lvm.sh + +# pv_devices is used by auto_lvm_perform() +pv_devices="$(cat /var/lib/partman/initial_auto_raid_pvs)" +rm -f /var/lib/partman/initial_auto_raid_pvs + +db_get partman-auto/expert_recipe_file +recipe="$RET" + +nr_devices=0 +size=0 +for pv_device in $pv_devices; do + dev="$(dev_to_partman $pv_device)" + [ -f $dev/size ] || exit 1 + size=$(($size + $(cat $dev/size))) + nr_devices=$(($nr_devices + 1)) +done + +if [ $nr_devices -eq 1 ]; then + dev="$(dev_to_partman $pv_devices)" + target="$(humandev $(cat $dev/device)) - $(cat $dev/model)" +else + for pv_device in $pv_devices; do + dev="$(dev_to_partman $pv_device)" + target="${target:+$target }$(cat $dev/device)" + done + target="Multiple disks ($target)" +fi +target="$target: $(longint2human $size)" +free_size=$(expr 0000000"$size" : '0*\(..*\)......$') # convert to megabytes + +choose_recipe lvm "$target" "$free_size" || return $? + +# Do nothing if there is no "lvmok" partitions. +if ! echo "$scheme" | grep -q lvmok; then + exit 0 +fi + +expand_scheme + +# Be sure the modules are loaded +modprobe dm-mod >/dev/null 2>&1 || true +modprobe lvm-mod >/dev/null 2>&1 || true + +auto_lvm_perform
signature.asc
Description: Digital signature