summaryrefslogtreecommitdiff
path: root/debian/mdadm.config
diff options
context:
space:
mode:
Diffstat (limited to 'debian/mdadm.config')
-rw-r--r--debian/mdadm.config174
1 files changed, 174 insertions, 0 deletions
diff --git a/debian/mdadm.config b/debian/mdadm.config
new file mode 100644
index 00000000..97352662
--- /dev/null
+++ b/debian/mdadm.config
@@ -0,0 +1,174 @@
+#!/bin/sh
+# Copyright © 2001-2004 Mario Jou/3en <joussen@debian.org>
+# Copyright © martin f. krafft <madduck@debian.org>
+# Distributable under the terms of the GNU GPL version 2.
+#
+. /usr/share/debconf/confmodule
+# see #369953 for ordering
+set -eu
+
+CONFIG=/etc/mdadm/mdadm.conf
+ALTCONFIG=/etc/mdadm.conf
+[ ! -f $CONFIG ] && [ -f $ALTCONFIG ] && CONFIG=$ALTCONFIG
+
+DEBIANCONFIG=/etc/default/mdadm
+
+db_get mdadm/initrdstart || :
+INITRDSTART="$RET"
+
+if [ -s $DEBIANCONFIG ] ; then
+ AUTOCHECK=true
+ START_DAEMON=true
+ MAILADDR=root
+
+ [ -f $DEBIANCONFIG ] && . $DEBIANCONFIG
+ if [ -f $CONFIG ]; then
+ MAILADDR=$(sed -rne 's/^MAILADDR[[:space:]]*([^[:space:]]+).*/\1/p' $CONFIG)
+ fi
+
+ [ -n "$AUTOCHECK" ] && db_set mdadm/autocheck "$AUTOCHECK"
+ [ -n "$START_DAEMON" ] && db_set mdadm/start_daemon "$START_DAEMON"
+ [ -n "$MAILADDR" ] && db_set mdadm/mail_to "$MAILADDR"
+fi
+
+chrooted() {
+ test "$(stat -c "%d/%i" /)" != "$(stat -Lc "%d/%i" /proc/1/root 2>/dev/null)"
+}
+
+get_root_raiddev() {
+ local rootraiddev;
+ rootraiddev="$(df --portability / | sed -rne 's,^(/dev/[^[:space:]]+).*,\1,p')"
+ if ! mdadm --detail $rootraiddev >/dev/null 2>&1; then
+ return 1
+ fi
+ echo ${rootraiddev%p[0-9]*}
+ return 0
+}
+
+get_initrdstart() {
+ db_fget mdadm/initrdstart seen
+ if chrooted || [ "$RET $INITRDSTART" = "false all" ]; then
+ echo all
+ return 1
+ fi
+
+ get_root_raiddev || echo all
+}
+
+[ -z "$INITRDSTART" ] && INITRDSTART="$(get_initrdstart)" || :
+[ -n "$INITRDSTART" ] && db_set mdadm/initrdstart "$INITRDSTART"
+
+INITRDSTART_PRIORITY=high
+if chrooted; then
+ INITRDSTART_PRIORITY=medium
+fi
+
+db_capb escape
+
+msg=intro; suffix=''; error=0
+while true; do
+ db_metaget mdadm/initrdstart_msg_${msg} extended_description || :
+ db_subst mdadm/initrdstart msg "$(echo -n "${RET}${suffix}" | debconf-escape -e)"
+ ret=0; db_input $INITRDSTART_PRIORITY mdadm/initrdstart || ret=$?
+ db_go
+
+ if [ $error -ne 0 ] && [ $ret -eq 30 ]; then
+ # there was an error in a previous run of this loop, but the above question
+ # was not asked, so we better exit the endless loop...
+ echo "W: mdadm: unable to determine MD arrays needed for boot." >&2
+ echo "W: mdadm: falling back to starting all of them..." >&2
+ INITRDSTART=all
+ break
+ fi
+
+ db_get mdadm/initrdstart
+ INITRDSTART="$(echo $RET | tr , ' ')"
+
+ case "$INITRDSTART" in
+ ''|none) INITRDSTART=none; break;;
+ all) break;;
+
+ *)
+ arrays=''
+ for i in $INITRDSTART; do
+
+ # standardise by prefixing /dev/
+ i="/dev/${i#/dev/}"
+
+ # remove partition from partitionable array
+ i="${i%p[0-9]*}"
+
+ if [ ! -e "$i" ]; then
+ error=1; msg=errexist; suffix=": $i"; break
+ fi
+
+ if [ ! -b "$i" ]; then
+ t="$(readlink -nf "$i")"
+ if [ ! -b "$t" ]; then
+ suffix=": $t"
+ else
+ suffix=": $i"
+ fi
+ error=1; msg=errblock; break
+ fi
+
+ if ! mdadm --detail "$i" >/dev/null 2>&1; then
+ error=1; msg=errmd; suffix=": $i"; break
+ fi
+
+ if [ -f $CONFIG ]; then
+ if ! egrep -q "^(ARRAY)?[[:space:]]+$i([[:space:]]+|$)" $CONFIG; then
+ t="$(readlink -nf "$i")"
+ if [ -L "$i" ] \
+ && egrep -q "^(ARRAY)?[[:space:]]+$t([[:space:]]|$)+" $CONFIG; then
+ i="$t"
+ else
+ db_set mdadm/initrdstart_notinconf false
+ db_fset mdadm/initrdstart_notinconf seen false
+ db_subst mdadm/initrdstart_notinconf array "$i"
+ db_subst mdadm/initrdstart_notinconf config "$CONFIG"
+ db_input high mdadm/initrdstart_notinconf || :
+ db_go
+ db_get mdadm/initrdstart_notinconf
+ if [ "$RET" = true ]; then
+ error=0
+ else
+ db_fset mdadm/initrdstart seen false
+ db_set mdadm/initrdstart all
+ error=1; msg=errconf; suffix=": $i"; break
+ fi
+ fi
+ fi
+ fi
+
+ # uniquely add device name
+ echo $arrays | egrep -q "\b${i}\b" || arrays="${arrays:+$arrays }$i"
+ done
+
+ if [ $error -eq 0 ]; then
+ INITRDSTART="$arrays"
+ # exit the while true loop
+ break
+ fi
+ ;;
+ esac
+done
+
+db_set mdadm/initrdstart "$INITRDSTART"
+
+if [ "$INITRDSTART" != all ]; then
+ db_input high mdadm/autostart || :
+ db_go
+fi
+
+db_input medium mdadm/autocheck || :
+db_go
+
+db_input medium mdadm/start_daemon || :
+db_go
+
+db_get mdadm/start_daemon || :
+if [ "$RET" = true ]; then
+ db_input medium mdadm/mail_to || :
+ db_go
+fi