Attached a set of patches split into 3 sets that add very basic support
for dmraid to D-I. Although the support as a whole is very experimental,
the changes to existing udebs are fairly small and relatively clean.
Although there are still some issues, I think the current code is ready to
be committed and used as an experimental feature. I feel it is a good
basis to improve support later. Current code has been tested fairly
extensively (also on non-dmraid installs).
Some characteristics:
- dmraid support is only enabled if 'disk-detect/dmraid/enable=true' or
the alias 'dmraid=true' are passed at the boot prompt
- dialogs and error handling still need some work
- partman will:
- not show the physical disks that make up the fake RAID device
- show the device-mapper device corresponding to the fake RAID device
with below that its partitions; this can be partitioned, but can not
be used to set "usage" information (file system, mount point)
- show separate device-mapper devices for each partition with below
that the usage information for that partition
- changes in partitioning for the fake RAID device need to be committed
"manually" using a separate menu item
- os-prober will skip physical disks that are part of a fake RAID device;
as the fake RAID itself is not supported, that effectively means no
os-probing support
- grub is supported as bootloader, but as grub-install can not be used,
grub-installer effectively installs grub manually to the MBR of the
fake RAID
The patches are as follows:
- other udebs:
- hw-detect: add dmraid support in disk-detect is enabled at boot prompt
- preseed: add alias for disk-detect enable option
- base-installer: create device-mapper devices and load dmraid in target
- os-prober: skip disks that are part of fake RAID
- grub-installer: add semi-manual support to install grub on fake RAID
- partman-dmraid:
- new component with dmraid-specific support bits
- during init.d a flag is set for the "whole disk" fake RAID device,
which is used in other places
- in choose-partitions.d the menu item is added to commit partitioning
changes to the fake RAID device
- other partman:
- partman-base: basic recognition and display of fake RAID devices; skip
the physical disks that make up the fake RAID
- others: avoid "using" anything on the fake RAID device itself
Issues
------
Main issue is that partman should handle the dmraid devices better and
present them as a single unit instead of the current hackish way of
dealing with them.
Current solution also results in a wrong display of the first dmraid
partition (the one that has grub installed on it as "free space".
For the grub installation I currently assume that the installation is to
the fake RAID device and that the grub root is the first partition. I
plan to work on this a bit more before committing.
ToDo
----
- the dialogs still need some work
- some error checking could probably be added in current code
- modify grub-installer to support installation to other partitions
than the first
- modify grub-installer to support having the grub root on a different
device than the fake RAID
- add real support in partman and grub
Comments welcome.
Cheers,
FJP
Index: hw-detect/debian/changelog
===================================================================
--- hw-detect/debian/changelog (revision 47287)
+++ hw-detect/debian/changelog (working copy)
@@ -1,5 +1,6 @@
hw-detect (1.54) UNRELEASED; urgency=low
+ [ Joey Hess ]
* Remove cruft left over from the days of pcmcia-cs.
- pcmciautils doesn't create a cardmgr.pid, so stop looking for it to
determine if pcmcia is started. Look for the pcmcia_core module being
@@ -11,8 +12,12 @@
- Only modify config.opts in /target if pcmcia_resources is preseeded.
* Remove workaround for long fixed cdebconf bug.
- -- Joey Hess <joeyh@debian.org> Sun, 27 May 2007 01:53:09 -0400
+ [ Frans Pop ]
+ * disk-detect: detect fake (ata) RAID devices using dmraid if requested
+ by setting disk-detect/dmraid/enable at the boot prompt.
+ -- Frans Pop <fjp@debian.org> Thu, 14 Jun 2007 19:55:28 +0200
+
hw-detect (1.53) unstable; urgency=low
[ Joey Hess ]
Index: hw-detect/debian/disk-detect.templates
===================================================================
--- hw-detect/debian/disk-detect.templates (revision 47287)
+++ hw-detect/debian/disk-detect.templates (working copy)
@@ -24,3 +24,9 @@
No partitionable media were found.
.
Please check that a hard disk is attached to this machine.
+
+Template: disk-detect/dmraid/enable
+Type: boolean
+Default: false
+Description: for internal use; can be preseeded
+ Check for the presence of fake (ata) RAID (dmraid) devices?
Index: hw-detect/disk-detect.sh
===================================================================
--- hw-detect/disk-detect.sh (revision 47287)
+++ hw-detect/disk-detect.sh (working copy)
@@ -114,7 +114,7 @@
db_get disk-detect/module_select
if [ "$RET" = "continue with no disk drive" ]; then
- break
+ exit 0
elif [ "$RET" != "none of the above" ]; then
module="$RET"
if [ -n "$module" ] && is_not_loaded "$module" ; then
@@ -147,3 +147,21 @@
fi
db_capb
done
+
+# Activate fake (ata) raid devices
+db_get disk-detect/dmraid/enable
+if [ $RET = true ]; then
+ if anna-install dmraid-udeb; then
+ # Device mapper support is required to run dmraid
+ if is_not_loaded dm-mod; then
+ module_probe dm-mod
+ fi
+
+ if [ "$(dmraid -c -s)" != "No RAID disks" ]; then
+ anna-install partman-dmraid
+
+ # Activate devices
+ log-output -t disk-detect dmraid -ay
+ fi
+ fi
+fi
Index: preseed/debian/changelog
===================================================================
--- preseed/debian/changelog (revision 47287)
+++ preseed/debian/changelog (working copy)
@@ -1,3 +1,9 @@
+preseed (1.30) UNRELEASED; urgency=low
+
+ * Add alias 'dmraid' to enable fake RAID support.
+
+ -- Frans Pop <fjp@debian.org> Mon, 18 Jun 2007 10:02:03 +0200
+
preseed (1.29) unstable; urgency=low
[ Colin Watson ]
Index: preseed/preseed_aliases
===================================================================
--- preseed/preseed_aliases (revision 47287)
+++ preseed/preseed_aliases (working copy)
@@ -13,3 +13,4 @@
suite mirror/suite
modules anna/choose_modules
tasks tasksel:tasksel/first
+dmraid disk-detect/dmraid/enable
Index: base-installer/debian/postinst
===================================================================
--- base-installer/debian/postinst (revision 47287)
+++ base-installer/debian/postinst (working copy)
@@ -340,6 +340,18 @@
minor="$(dmsetup -c --noheadings info $rootnode | cut -d':' -f3)"
mknod /target/dev/mapper/$rootnode b $major $minor
fi
+
+ # Create device nodes for fake (ata) RAID devices
+ if type dmraid >/dev/null 2>&1; then
+ for frdisk in $(dmraid -s -c | grep -v "No RAID disks"); do
+ for frdev in $(ls /dev/mapper/$frdisk* 2>/dev/null); do
+ frnode=$(basename $frdev)
+ major="$(dmsetup -c --noheadings info $frnode | cut -d':' -f2)"
+ minor="$(dmsetup -c --noheadings info $frnode | cut -d':' -f3)"
+ mknod /target/dev/mapper/$frnode b $major $minor
+ done
+ done
+ fi
fi
# We can't check the root node directly as is done above because
@@ -349,6 +361,12 @@
apt-install cryptsetup
fi
+ if type dmraid >/dev/null 2>&1; then
+ if [ "$(dmraid -s -c | grep -v "No RAID disks")" ]; then
+ apt-install dmraid
+ fi
+ fi
+
if pvdisplay | grep -iq "physical volume ---"; then
apt-install lvm2
in-target vgscan --mknodes || true
Index: base-installer/debian/changelog
===================================================================
--- base-installer/debian/changelog (revision 47287)
+++ base-installer/debian/changelog (working copy)
@@ -1,10 +1,15 @@
base-installer (1.81) UNRELEASED; urgency=low
+ [ Otavio Salvador ]
* Provides installed-base. This is need to be able to use alternative
ways of installing Debian.
- -- Otavio Salvador <otavio@ossystems.com.br> Sun, 17 Jun 2007 10:02:39 -0300
+ [ Frans Pop ]
+ * Load dmraid if needed; create device nodes in /target for fake (ata)
+ RAID devices.
+ -- Frans Pop <fjp@debian.org> Fri, 15 Jun 2007 15:07:17 +0200
+
base-installer (1.80) unstable; urgency=low
[ Frans Pop ]
Index: os-prober/debian/changelog
===================================================================
--- os-prober/debian/changelog (revision 47287)
+++ os-prober/debian/changelog (working copy)
@@ -1,13 +1,18 @@
os-prober (1.19) UNRELEASED; urgency=low
+ [ Joey Hess ]
* Make the microsoft OS test completely case-insensative in the file and
directory named it looks for. This is reportedly needed at least for
Vista (Boot/BCD vs boot/bcd), and was already done on an ad-hoc basis
for 2000/XP/NT4.0.
* Patch from VMiklos to add support for recognising Frugalware.
- -- Joey Hess <joeyh@debian.org> Sun, 03 Jun 2007 11:54:59 -0400
+ [ Frans Pop ]
+ * Skip partitions that are on a disk that is part of a fake (ata) RAID
+ device.
+ -- Frans Pop <fjp@debian.org> Sat, 16 Jun 2007 10:05:46 +0200
+
os-prober (1.18) unstable; urgency=low
* Add detection for Dell Utility partition (can be chainloaded).
Index: os-prober/os-prober
===================================================================
--- os-prober/os-prober (revision 47287)
+++ os-prober/os-prober (working copy)
@@ -3,10 +3,22 @@
. /usr/share/os-prober/common.sh
+on_fakeraid () {
+ type dmraid >/dev/null 2>&1 || return 1
+ local parent=${1%/*}
+ local device=/dev/${parent##*/}
+ if dmraid -r -c | grep -q $device; then
+ return 0
+ fi
+ return 1
+}
+
partitions () {
+ # Exclude partitions that are on devices that are part of a fake
+ # (ata) RAID device. TODO: add support for the fake RAID itself.
if [ -d /sys/block ]; then
for part in /sys/block/*/*[0-9]; do
- if [ -f "$part/start" ]; then
+ if [ -f "$part/start" ] && ! on_fakeraid $part; then
name="$(echo "${part##*/}" | sed 's,[!.],/,g')"
if [ -e "/dev/$name" ]; then
echo "/dev/$name"
Index: arch/i386/grub-installer/debian/isinstallable
===================================================================
--- arch/i386/grub-installer/debian/isinstallable (revision 47287)
+++ arch/i386/grub-installer/debian/isinstallable (working copy)
@@ -13,6 +13,17 @@
mount | grep "on /target${1%/} " | cut -d' ' -f5
}
+is_fakeraid () {
+ if type dmraid >/dev/null 2>&1; then
+ for frdisk in $(dmraid -s -c | grep -v "No RAID disks"); do
+ if echo "$1" | grep "/$frdisk[0-9]\+"; then
+ return 0
+ fi
+ done
+ fi
+ return 1
+}
+
ARCH="$(archdetect)"
case $ARCH in
@@ -36,8 +47,10 @@
# Check for the control file to work around lvdisplay refusal to work with
# certian lvm device names.
if lvdisplay "$bootfs" | grep -q 'LV Name' 2>/dev/null || [ -e "$(dirname $bootfs)/control" ]; then
- log "/boot is a lvm volume ($bootfs), cannot install grub"
- exit 1
+ if ! is_fakeraid $bootfs; then
+ log "/boot is a lvm volume ($bootfs), cannot install grub"
+ exit 1
+ fi
fi
bootfstype=$(findfstype /boot)
Index: arch/i386/grub-installer/debian/changelog
===================================================================
--- arch/i386/grub-installer/debian/changelog (revision 47287)
+++ arch/i386/grub-installer/debian/changelog (working copy)
@@ -9,8 +9,11 @@
* When installing with GRUB 2, adjust otheros entry writing to the
interface provided by new update-grub. (Closes: #423393)
- -- Robert Millan <rmh@aybabtu.com> Sun, 17 Jun 2007 20:48:50 +0200
+ [ Frans Pop ]
+ * Fix incorrect detection of fake RAID devices (dmraid) as LVM volumes.
+ -- Frans Pop <fjp@debian.org> Mon, 18 Jun 2007 10:06:45 +0200
+
grub-installer (1.24) unstable; urgency=low
* Fix syntax error in grub-installer script.
Index: arch/i386/grub-installer/debian/grub-installer.templates
===================================================================
--- arch/i386/grub-installer/debian/grub-installer.templates (revision 47287)
+++ arch/i386/grub-installer/debian/grub-installer.templates (working copy)
@@ -23,6 +23,22 @@
that operating system temporarily unbootable, though GRUB can be manually
configured later to boot it.
+Template: grub-installer/fakeraid
+Type: boolean
+Default: true
+Description: Install the GRUB boot loader to the fake RAID disk?
+ Installation of GRUB on a fake (ata) RAID disk is not really
+ supported, but it is possible. The installation is currently experimental
+ and will always be done on the MBR of the fake RAID disk.
+ .
+ Choose <Go Back> to cancel this operation.
+
+Template: grub-installer/fakeraid
+Type: error
+Description: Configuration not supported
+ The installer has detected the presence of multiple fake RAID disks, which
+ is currently not supported.
+
Template: grub-installer/install_to_xfs
Type: boolean
Default: false
Index: arch/i386/grub-installer/grub-installer
===================================================================
--- arch/i386/grub-installer/grub-installer (revision 47287)
+++ arch/i386/grub-installer/grub-installer (working copy)
@@ -237,6 +237,9 @@
/dev/md)
disc_offered_devfs="$bootfs"
;;
+ /dev/mapper)
+ disc_offered_devfs="$bootfs"
+ ;;
/dev/[hs]d[a-z]|/dev/cciss/c[0-9]d[0-9]|/dev/ida/c[0-9]d[0-9])
disc_offered_devfs="$prefix"
;;
@@ -383,6 +386,16 @@
state=1
fi
+nr_frdisks="$(dmraid -s -c | grep -v "No RAID disks" | wc -l)"
+if [ $nr_frdisks -eq 1 ]; then
+ q=grub-installer/fakeraid
+ frdisk=$(dmraid -s -c)
+elif [ $nr_frdisks -gt 1 ]; then
+ db_input critical grub-installer/fakeraid-unsupported || [ $? -eq 30 ]
+ db_go || true
+ exit 1
+fi
+
db_progress STEP 1
db_progress INFO grub-installer/progress/step_bootdev
@@ -433,31 +446,65 @@
update_mtab
-# Install grub on each space separated disk in the list
-bootdevs="$bootdev"
-for bootdev in $bootdevs; do
- if ! is_floppy "$bootdev"; then
- if $chroot $ROOT grub-install -h 2>&1 | grep -q no-floppy; then
- info "grub-install supports --no-floppy"
- floppyparam="--no-floppy"
+if [ -z "$frdisk" ]; then
+
+ # Install grub on each space separated disk in the list
+ bootdevs="$bootdev"
+ for bootdev in $bootdevs; do
+ if ! is_floppy "$bootdev"; then
+ if $chroot $ROOT grub-install -h 2>&1 | grep -q no-floppy; then
+ info "grub-install supports --no-floppy"
+ floppyparam="--no-floppy"
+ else
+ info "grub-install does not support --no-floppy"
+ fi
+ fi
+
+ info "Running $chroot $ROOT grub-install --recheck $floppyparam \"$bootdev\""
+ if log-output -t grub-installer $chroot $ROOT grub-install --recheck $floppyparam "$bootdev"; then
+ info "grub-install ran successfully"
else
- info "grub-install does not support --no-floppy"
+ error "Running 'grub-install --recheck $floppyparam \"$bootdev\"' failed."
+ db_subst grub-installer/grub-install-failed BOOTDEV "$bootdev"
+ db_input critical grub-installer/grub-install-failed || [ $? -eq 30 ]
+ db_go || true
+ db_progress STOP
+ exit 1
fi
- fi
+ done
- info "Running $chroot $ROOT grub-install --recheck $floppyparam \"$bootdev\""
- if log-output -t grub-installer $chroot $ROOT grub-install --recheck $floppyparam "$bootdev"; then
- info "grub-install ran successfully"
- else
- error "Running 'grub-install --recheck $floppyparam \"$bootdev\"' failed."
- db_subst grub-installer/grub-install-failed BOOTDEV "$bootdev"
- db_input critical grub-installer/grub-install-failed || [ $? -eq 30 ]
- db_go || true
- db_progress STOP
+else
+
+ # Semi-manual grub setup for a fake (ata) RAID disk
+ case $(archdetect) in
+ i386/*)
+ stagedir=i386-pc ;;
+ amd64/*)
+ stagedir=x86_64-pc ;;
+ *)
+ error "Unsupported architecture for fake RAID installation"
exit 1
+ ;;
+ esac
+ if [ ! -d $ROOT/usr/lib/grub/$stagedir/ ]; then
+ error "Grub stage files not available"
+ exit 1
fi
-done
+ mkdir -p /target/boot/grub
+ cp $ROOT/usr/lib/grub/$stagedir/* $ROOT/boot/grub
+ # TODO: Check for errors during this process!
+ TERM=linux $chroot $ROOT \
+ grub --device-map=/dev/null >/var/log/grub-dmraid.log 2>&1 </dev/null <<EOF
+device (hd0,0) /dev/mapper/${frdisk}1
+device (hd0) /dev/mapper/$frdisk
+root (hd0,0)
+setup (hd0,0)
+quit
+EOF
+
+fi
+
db_progress STEP 1
db_progress INFO grub-installer/progress/step_config_loader
Index: partman/partman-dmraid/debian/control
===================================================================
--- partman/partman-dmraid/debian/control (revision 0)
+++ partman/partman-dmraid/debian/control (revision 0)
@@ -0,0 +1,13 @@
+Source: partman-dmraid
+Section: debian-installer
+Priority: standard
+Maintainer: Debian Install System Team <debian-boot@lists.debian.org>
+Uploaders: Frans Pop <fjp@debian.org>
+Build-Depends: debhelper (>= 4.2.0), po-debconf (>= 0.5.0)
+XS-Vcs-Svn: svn://svn.debian.org/d-i/trunk/packages/partman/partman-dmraid
+
+Package: partman-dmraid
+XC-Package-Type: udeb
+Architecture: all
+Depends: ${misc:Depends}, partman-base, di-utils (>= 1.14), dmraid-udeb, dmsetup-udeb
+Description: Adds support for fake (ata) RAID (dmraid) to partman
Index: partman/partman-dmraid/debian/compat
===================================================================
--- partman/partman-dmraid/debian/compat (revision 0)
+++ partman/partman-dmraid/debian/compat (revision 0)
@@ -0,0 +1 @@
+4
Index: partman/partman-dmraid/debian/changelog
===================================================================
--- partman/partman-dmraid/debian/changelog (revision 0)
+++ partman/partman-dmraid/debian/changelog (revision 0)
@@ -0,0 +1,9 @@
+partman-dmraid (1) UNRELEASED; urgency=low
+
+ * Initial version.
+
+ -- Frans Pop <fjp@debian.org> Fri, 15 Jun 2007 13:00:24 +0200
+
+Local Variables:
+coding: utf-8
+End:
Index: partman/partman-dmraid/debian/copyright
===================================================================
--- partman/partman-dmraid/debian/copyright (revision 0)
+++ partman/partman-dmraid/debian/copyright (revision 0)
@@ -0,0 +1,6 @@
+Authors: Frans Pop
+
+Copyright 2007 Frans Pop <elendil@planet.nl>
+
+This package is under the GNU General Public License, version 2, which can
+usually be found in /usr/share/common-licenses/GPL-2 on Debian systems.
Index: partman/partman-dmraid/debian/install-rc
===================================================================
--- partman/partman-dmraid/debian/install-rc (revision 0)
+++ partman/partman-dmraid/debian/install-rc (revision 0)
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+set -e
+
+# PACKAGE is exported from debian/rules
+partman=debian/${PACKAGE}/lib/partman
+
+install -d $partman/$1
+
+cp -r $1/* $partman/$1/
+
+# Remove any SVN dirs that were copied along
+rm -rf `find $partman/$1/ -name .svn`
+
+if [ -f $partman/$1/_numbers ]; then
+ numbers=$(cat $partman/$1/_numbers)
+ rm $partman/$1/_numbers
+ echo "$numbers" |
+ while read number name; do
+ set -e
+ mv $partman/$1/$name $partman/$1/${number}${name}
+ done
+fi
+
Property changes on: partman/partman-dmraid/debian/install-rc
___________________________________________________________________
Name: svn:executable
+ *
Index: partman/partman-dmraid/debian/rules
===================================================================
--- partman/partman-dmraid/debian/rules (revision 0)
+++ partman/partman-dmraid/debian/rules (revision 0)
@@ -0,0 +1,38 @@
+#!/usr/bin/make -f
+# Sample debian/rules that uses debhelper.
+# GNU copyright 1997 to 1999 by Joey Hess.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+export PACKAGE = partman-dmraid
+
+build:
+# Ye olde no-op.
+
+clean:
+ dh_testdir
+ dh_testroot
+ rm -f `find . -name '*~'`
+ dh_clean
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+ debian/install-rc choose_partition
+ debian/install-rc init.d
+
+binary-indep: build install
+ dh_testdir
+ dh_testroot
+ dh_installdebconf
+ dh_fixperms
+ dh_installdeb
+ dh_gencontrol
+ dh_builddeb
+
+binary-arch: build install
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install
Property changes on: partman/partman-dmraid/debian/rules
___________________________________________________________________
Name: svn:executable
+ *
Index: partman/partman-dmraid/debian/source.lintian-overrides
===================================================================
--- partman/partman-dmraid/debian/source.lintian-overrides (revision 0)
+++ partman/partman-dmraid/debian/source.lintian-overrides (revision 0)
@@ -0,0 +1 @@
+no-standards-version-field
Index: partman/partman-dmraid/debian/partman-dmraid.templates
===================================================================
--- partman/partman-dmraid/debian/partman-dmraid.templates (revision 0)
+++ partman/partman-dmraid/debian/partman-dmraid.templates (revision 0)
@@ -0,0 +1,47 @@
+Template: partman-dmraid/menu/finish
+Type: text
+# Menu entry
+# Use infinitive form
+_Description: Finish
+
+Template: partman-dmraid/confirm
+Type: boolean
+Default: false
+#flag:translate!:4
+_Description: Write changes in fake raid partitioning to disk?
+ Any changes you have made in the partitioning of your fake (ata) RAID
+ devices need to be written to disk before the partitions can be used.
+ Any other pending changes will be written to disk as well. These changes
+ cannot be undone.
+ .
+ ${ITEMS}
+
+Template: partman-dmraid/confirm_nochanges
+Type: note
+_Description: No pending changes
+ There are no changes to commit.
+
+Template: partman-dmraid/commit_failed
+Type: error
+_Description:
+ An error occurred while writing the changes to the disks.
+
+Template: partman-dmraid/progress/createfs/title
+Type: text
+_Description: Creating initial filesystem
+
+Template: partman-dmraid/progress/createfs/info
+Type: text
+_Description: Creating initial ext2 filesystem on ${DEVICE}...
+
+Template: partman-dmraid/text/commit_dmraid
+Type: text
+# Main menu item
+# Use infinitive form
+_Description: Write changes in fake RAID partitioning to disk
+
+Template: debian-installer/partman-dmraid/title
+Type: text
+# Main menu item
+# Use infinitive form
+_Description: Write changes in fake RAID partitioning to disk
Index: partman/partman-dmraid/debian/po/templates.pot
===================================================================
--- partman/partman-dmraid/debian/po/templates.pot (revision 0)
+++ partman/partman-dmraid/debian/po/templates.pot (revision 0)
@@ -0,0 +1,89 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: debian-boot@lists.debian.org\n"
+"POT-Creation-Date: 2007-06-18 20:27+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: text
+#. Description
+#. Menu entry
+#. Use infinitive form
+#: ../partman-dmraid.templates:1001
+msgid "Finish"
+msgstr ""
+
+#. Type: boolean
+#. Description
+#: ../partman-dmraid.templates:2001
+msgid "Write changes in fake raid partitioning to disk?"
+msgstr ""
+
+#. Type: boolean
+#. Description
+#: ../partman-dmraid.templates:2001
+msgid ""
+"Any changes you have made in the partitioning of your fake (ata) RAID "
+"devices need to be written to disk before the partitions can be used. Any "
+"other pending changes will be written to disk as well. These changes cannot "
+"be undone."
+msgstr ""
+
+#. Type: boolean
+#. Description
+#: ../partman-dmraid.templates:2001
+msgid "${ITEMS}"
+msgstr ""
+
+#. Type: note
+#. Description
+#: ../partman-dmraid.templates:3001
+msgid "No pending changes"
+msgstr ""
+
+#. Type: note
+#. Description
+#: ../partman-dmraid.templates:3001
+msgid "There are no changes to commit."
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../partman-dmraid.templates:4001
+msgid "An error occurred while writing the changes to the disks."
+msgstr ""
+
+#. Type: text
+#. Description
+#: ../partman-dmraid.templates:5001
+msgid "Creating initial filesystem"
+msgstr ""
+
+#. Type: text
+#. Description
+#: ../partman-dmraid.templates:6001
+msgid "Creating initial ext2 filesystem on ${DEVICE}..."
+msgstr ""
+
+#. Type: text
+#. Description
+#. Main menu item
+#. Use infinitive form
+#. Type: text
+#. Description
+#. Main menu item
+#. Use infinitive form
+#: ../partman-dmraid.templates:7001 ../partman-dmraid.templates:8001
+msgid "Write changes in fake RAID partitioning to disk"
+msgstr ""
Index: partman/partman-dmraid/debian/po/output
===================================================================
--- partman/partman-dmraid/debian/po/output (revision 0)
+++ partman/partman-dmraid/debian/po/output (revision 0)
@@ -0,0 +1 @@
+2 utf8
Index: partman/partman-dmraid/debian/po/POTFILES.in
===================================================================
--- partman/partman-dmraid/debian/po/POTFILES.in (revision 0)
+++ partman/partman-dmraid/debian/po/POTFILES.in (revision 0)
@@ -0,0 +1 @@
+[type: gettext/rfc822deb] partman-dmraid.templates
Index: partman/partman-dmraid/init.d/fakeraid_flag
===================================================================
--- partman/partman-dmraid/init.d/fakeraid_flag (revision 0)
+++ partman/partman-dmraid/init.d/fakeraid_flag (revision 0)
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+# This script sets the fakeraid flag for devices that are recognized by dmraid
+
+for dev in /var/lib/partman/devices/*; do
+ [ -d "$dev" ] || continue
+ cd $dev
+
+ [ -f device ] || continue
+ for frdisk in $(dmraid -s -c | grep -v "No RAID disks"); do
+ case $(cat device) in
+ /dev/mapper/$frdisk)
+ >fakeraid
+ break
+ ;;
+ esac
+ done
+done
Property changes on: partman/partman-dmraid/init.d/fakeraid_flag
___________________________________________________________________
Name: svn:executable
+ *
Index: partman/partman-dmraid/init.d/_numbers
===================================================================
--- partman/partman-dmraid/init.d/_numbers (revision 0)
+++ partman/partman-dmraid/init.d/_numbers (revision 0)
@@ -0,0 +1 @@
+50 fakeraid_flag
Index: partman/partman-dmraid/choose_partition/dmraid/do_option
===================================================================
--- partman/partman-dmraid/choose_partition/dmraid/do_option (revision 0)
+++ partman/partman-dmraid/choose_partition/dmraid/do_option (revision 0)
@@ -0,0 +1,88 @@
+#!/bin/sh
+
+. /lib/partman/definitions.sh
+
+# TODO: Add error checking and error messages !!!!!!!!!!!!
+
+create_ext2 () {
+ frpart=${1##*/}
+ db_subst partman-dmraid/progress/createfs/info DEVICE $frpart
+ db_progress INFO partman-dmraid/progress/createfs/info
+ # TODO: check that ext2 is actually available
+ log-output -t partman-dmraid mkfs.ext2 -q $1
+}
+
+# Save status (including size) of current dmraid partitions
+DM_STATUS="$(dmsetup status --target linear)"
+
+# If a fake raid partition is in use as swap, it cannot be removed
+disable_swap
+
+# Remove existing fake raid partition devices
+# TODO: should probably umount partitions if device is in use
+for frdisk in $(dmraid -s -c | grep -v "No RAID disks"); do
+ for frpart in $(ls /dev/mapper/$frdisk* 2>/dev/null); do
+ [ $frpart != /dev/mapper/$frdisk ] || continue
+
+ # Remove pending actions on the partitions
+ devdir=$DEVICES/$(echo $frpart | sed 's:/:=:g')
+ if [ -d $devdir ]; then
+ rm -f $devdir/*/method
+ rm -f $devdir/*/format
+ fi
+
+ # Remove the device mapper node
+ dmsetup remove $frpart || exit 1
+ done
+done
+
+# Commit the changes
+confirm_changes "partman-dmraid" || exit 0
+for s in /lib/partman/commit.d/*; do
+ if [ -x $s ]; then
+ $s || {
+ db_input critical partman-dmraid/commit_failed || true
+ db_go || true
+ for s in /lib/partman/init.d/*; do
+ if [ -x $s ]; then
+ $s || exit 255
+ fi
+ done
+ exit 0
+ }
+ fi
+done
+
+# Refresh dmraid partition info
+log-output -t partman-dmraid dmraid -ay
+
+# Use number of linear devices as approximation of steps
+PB_MAX=$(dmsetup status --target linear | wc -l)
+db_progress START 0 $PB_MAX partman-dmraid/progress/createfs/title
+
+# Create an initial filesystem so new partitions are detected properly
+# HACKALERT: we assume that the size of the device is a sufficient indicator
+# that a partition was changed
+for frdisk in $(dmraid -s -c | grep -v "No RAID disks"); do
+ for frpart in $(ls /dev/mapper/$frdisk* 2>/dev/null); do
+ [ $frpart != /dev/mapper/$frdisk ] || continue
+ if oldstatus=$(echo $DM_STATUS | grep "^$frpart:"); then
+ oldsize=$(echo $oldstatus | cut -d" " -f 3)
+ newsize=$(dmsetup status $frpart | cut -d" " -f 3)
+ if [ $newsize -ne $oldsize ]; then
+ create_ext2 $frpart
+ fi
+ else
+ create_ext2 $frpart
+ fi
+ db_progress STEP 1
+ done
+done
+db_progress SET $PB_MAX
+db_progress STOP
+
+stop_parted_server
+
+restart_partman
+
+exit 0
Property changes on: partman/partman-dmraid/choose_partition/dmraid/do_option
___________________________________________________________________
Name: svn:executable
+ *
Index: partman/partman-dmraid/choose_partition/dmraid/choices
===================================================================
--- partman/partman-dmraid/choose_partition/dmraid/choices (revision 0)
+++ partman/partman-dmraid/choose_partition/dmraid/choices (revision 0)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+. /lib/partman/definitions.sh
+
+dev=$1
+id=$2
+
+cd $dev
+
+type dmraid >/dev/null 2>&1 || exit 0
+[ "$(dmraid -s -c | grep -v "No RAID disks")" ] || exit 0
+
+db_metaget partman-dmraid/text/commit_dmraid description
+
+printf "dmraid\t${RET}\n"
Property changes on: partman/partman-dmraid/choose_partition/dmraid/choices
___________________________________________________________________
Name: svn:executable
+ *
Index: partman/partman-dmraid/choose_partition/_numbers
===================================================================
--- partman/partman-dmraid/choose_partition/_numbers (revision 0)
+++ partman/partman-dmraid/choose_partition/_numbers (revision 0)
@@ -0,0 +1 @@
+10 dmraid
Index: partman/partman-base/debian/changelog
===================================================================
--- partman/partman-base/debian/changelog (revision 47287)
+++ partman/partman-base/debian/changelog (working copy)
@@ -1,14 +1,17 @@
partman-base (109) UNRELEASED; urgency=low
[ Otavio Salvador ]
- * Remove partmap on clean
- * Fix a compilation warning on partmap.c
+ * Remove partmap on clean.
+ * Fix a compilation warning on partmap.c.
[ Colin Watson ]
* Use MS-DOS label by default on PS3 systems.
- -- Otavio Salvador <otavio@ossystems.com.br> Tue, 22 May 2007 13:45:01 -0300
+ [ Frans Pop ]
+ * Add support for fake (ata) RAID.
+ -- Frans Pop <fjp@debian.org> Thu, 14 Jun 2007 23:16:59 +0200
+
partman-base (108) unstable; urgency=low
[ Martin Michlmayr ]
Index: partman/partman-base/debian/partman-base.templates
===================================================================
--- partman/partman-base/debian/partman-base.templates (revision 47287)
+++ partman/partman-base/debian/partman-base.templates (working copy)
@@ -285,6 +285,14 @@
Type: text
_Description: Encrypted volume (%s)
+Template: partman/text/dmraid_volume
+Type: text
+Description: Fake (ata) RAID %s (%s)
+
+Template: partman/text/dmraid_part
+Type: text
+Description: Fake (ata) RAID %s (partition #%s)
+
Template: partman/text/lvm_lv
Type: text
_Description: LVM VG %s, LV %s
Index: partman/partman-base/definitions.sh
===================================================================
--- partman/partman-base/definitions.sh (revision 47287)
+++ partman/partman-base/definitions.sh (working copy)
@@ -709,13 +709,37 @@
printf "$RET" ${type} ${device}
;;
/dev/mapper/*)
- # First of all, check if this is a dm-crypt device
type=""
if [ -x /sbin/dmsetup ]; then
type=$(/sbin/dmsetup table "$1" | head -n 1 | cut -d " " -f3)
fi
- if [ "$type" = crypt ]; then
+ # First check for fake (ata) RAID devices
+ if type dmraid >/dev/null 2>&1; then
+ for frdisk in $(dmraid -s -c | grep -v "No RAID disks"); do
+ device=${1#/dev/mapper/}
+ case "$1" in
+ /dev/mapper/$frdisk)
+ type=fakeraid
+ superset=${device%_*}
+ desc=$(dmraid -s -c -c "$superset")
+ rtype=$(echo "$desc" | cut -d: -f4)
+ db_metaget partman/text/dmraid_volume description
+ printf "$RET" $device $rtype
+ ;;
+ /dev/mapper/$frdisk*)
+ type=fakeraid
+ part=${device#$frdisk}
+ db_metaget partman/text/dmraid_part description
+ printf "$RET" $device $part
+ ;;
+ esac
+ done
+ fi
+
+ if [ "$type" = fakeraid ]; then
+ :
+ elif [ "$type" = crypt ]; then
mapping=${1#/dev/mapper/}
db_metaget partman/text/dmcrypt_volume description
printf "$RET" $mapping
@@ -1130,6 +1154,10 @@
if [ "$formatted_previously" = no ]; then
db_input critical $template/confirm_nochanges
db_go || true
+ if [ $template = partman-dmraid ]; then
+ # for dmraid, only a note is displayed
+ return 1
+ fi
db_get $template/confirm_nochanges
if [ "$RET" = false ]; then
db_reset $template/confirm_nochanges
Index: partman/partman-base/init.d/parted
===================================================================
--- partman/partman-base/init.d/parted (revision 47287)
+++ partman/partman-base/init.d/parted (working copy)
@@ -4,6 +4,18 @@
. /lib/partman/definitions.sh
+ORIG_IFS="$IFS"
+
+part_of_fakeraid () {
+ local raiddev
+ for raiddev in $(dmraid -r -c); do
+ if [ "$(readlink -f $raiddev)" = $1 ]; then
+ return 0
+ fi
+ done
+ return 1
+}
+
if [ ! -f /var/run/parted_server.pid ]; then
[ -d /var/run ] || mkdir /var/run
parted_server
@@ -27,8 +39,18 @@
sed 's,^/dev/\(ide\|scsi\|[hs]d\),!/dev/\1,' |
sort |
sed 's,^!,,' ); do
+
IFS="$TAB"
set -- $partdev
+ IFS="$ORIG_IFS"
+
+ # Skip devices that are part of a dmraid device
+ if type dmraid >/dev/null 2>&1; then
+ if part_of_fakeraid $partdev; then
+ continue
+ fi
+ fi
+
dirname=$(echo $1 | sed 's:/:=:g')
dev=$DEVICES/$dirname
if [ -d /var/lib/partman/old_devices/$dirname ]; then
Index: partman/partman-basicfilesystems/debian/changelog
===================================================================
--- partman/partman-basicfilesystems/debian/changelog (revision 47287)
+++ partman/partman-basicfilesystems/debian/changelog (working copy)
@@ -2,6 +2,7 @@
* Move deletion of SVN directories to install-rc script.
* Improve the way install-rc is called.
+ * Don't autouse swap a partition if the parent device is fake (ata) RAID.
-- Frans Pop <fjp@debian.org> Sun, 13 May 2007 04:05:49 +0200
Index: partman/partman-basicfilesystems/init.d/autouse_swap
===================================================================
--- partman/partman-basicfilesystems/init.d/autouse_swap (revision 47287)
+++ partman/partman-basicfilesystems/init.d/autouse_swap (working copy)
@@ -8,6 +8,9 @@
for dev in /var/lib/partman/devices/*; do
[ -d "$dev" ] || continue
+ # Skip dmraid partitions
+ [ ! -e "$dev/fakeraid" ] || continue
+
# Only run the first time each device is encountered.
devbase="$(basename "$dev")"
[ ! -f "/var/lib/partman/autoused_swap/$devbase" ] || continue
Index: partman/partman-partitioning/debian/changelog
===================================================================
--- partman/partman-partitioning/debian/changelog (revision 47287)
+++ partman/partman-partitioning/debian/changelog (working copy)
@@ -1,3 +1,9 @@
+partman-partitioning (51) UNRELEASED; urgency=low
+
+ * When creating a partition on a fake (ata) RAID device, do not use it.
+
+ -- Frans Pop <fjp@debian.org> Fri, 15 Jun 2007 18:24:16 +0200
+
partman-partitioning (50) unstable; urgency=low
[ Colin Watson ]
Index: partman/partman-partitioning/free_space/new/do_option
===================================================================
--- partman/partman-partitioning/free_space/new/do_option (revision 47287)
+++ partman/partman-partitioning/free_space/new/do_option (working copy)
@@ -143,7 +143,10 @@
db_progress START 0 $numparts partman/text/please_wait
db_progress INFO partman-partitioning/new_state
- if [ -n "$id" -a -f ../../ext3 ]; then
+ # Fake raid partitions cannot be used directly under the parent device
+ if [ -f fakeraid ]; then
+ :
+ elif [ -n "$id" -a -f ../../ext3 ]; then
# make better defaults for the new partition
[ -d $id ] || mkdir $id
echo format >$id/method
Index: partman/partman-target/debian/changelog
===================================================================
--- partman/partman-target/debian/changelog (revision 47287)
+++ partman/partman-target/debian/changelog (working copy)
@@ -2,6 +2,7 @@
* Move deletion of SVN directories to install-rc script.
* Improve the way install-rc is called.
+ * Do not offer to set method for a fake (ata) RAID device.
-- Frans Pop <fjp@debian.org> Sun, 13 May 2007 04:04:58 +0200
Index: partman/partman-target/active_partition/method/choices
===================================================================
--- partman/partman-target/active_partition/method/choices (revision 47287)
+++ partman/partman-target/active_partition/method/choices (working copy)
@@ -6,6 +6,8 @@
id=$2
cd $dev
+[ ! -f fakeraid ] || exit 0
+
if [ -f $id/method ]; then
method=$(cat $id/method)
else
Attachment:
pgp9RCTLnvPKm.pgp
Description: PGP signature