summaryrefslogtreecommitdiff
path: root/debian/mdadm.config
blob: a7e33dab18a39c06be8c03de36e2a3979a52cbf9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#!/bin/sh -eu
# Copyright © 2001-2004 Mario Jou/3en <joussen@debian.org>
# Copyright © 2006 martin f. krafft <madduck@debian.org>
# Distributable under the terms of the GNU GPL version 2.

set +u # workaround for #369953
. /usr/share/debconf/confmodule
set -u

CONFIG=/etc/mdadm/mdadm.conf
ALTCONFIG=/etc/mdadm.conf
[ ! -f $CONFIG ] && [ -f $ALTCONFIG ] && CONFIG=$ALTCONFIG 

DEBIANCONFIG=/etc/default/mdadm
DEBIANCONFIG_OLD=/etc/mdadm/debian.conf

if [ ! -e "$DEBIANCONFIG" ]; then
  if [ -e "$DEBIANCONFIG_OLD" ]; then
    DEBIANCONFIG="$DEBIANCONFIG_OLD"
  fi
fi

INITRDSTART=''

if [ -s $DEBIANCONFIG ] ; then
  AUTOSTART=true
  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

  # if $MAIL_TO from $DEBIANCONFIG is set, give it priority. This is because
  # it was used in the command line invocation of the mdadm monitor, and thus
  # overruled any existing setting in /etc/mdadm/mdadm.conf.
  # There's a slight chance of loss of a configuration setting (MAILADDR in
  # /etc/mdadm/mdadm.conf), but it's only an email address, and it is likely
  # unused anyway, thus we run the risk.
  [ -n "${MAIL_TO:-}" ] && MAILADDR="$MAIL_TO"

  [ -n "$AUTOSTART" ] && db_set mdadm/autostart "$AUTOSTART"
  [ -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

db_input high mdadm/warning || true
db_go

if [ -z "$INITRDSTART" ]; then
  ROOTRAIDDEV="$(df / | sed -rne 's,^(/dev/[^[:space:]]+).*,\1,p')"
  if ! mdadm --detail $ROOTRAIDDEV >/dev/null 2>&1; then
    # you are using some funky setup. Let's be save...
    INITRDSTART=all
  else
    INITRDSTART="$ROOTRAIDDEV"
  fi
fi

[ -n "$INITRDSTART" ] && db_set mdadm/initrdstart "$INITRDSTART"

while true; do
  db_input low mdadm/initrdstart || true
  db_go

  db_get mdadm/initrdstart
  INITRDSTART=$RET

  case "$INITRDSTART" in
    ''|none) INITRDSTART=none; break;;
    all) break;;

    /dev/md*|md*)
      ARRAYS=''
      ERROR=0
      for i in $INITRDSTART; do

        # just in case people use commas between devices
        i="${i%,}"

        # standardise by prefixing /dev/
        case "$i" in md*) i="/dev/$i";; *) :;; esac

        # remove partition from name of partitionable devices
        i="${i%p[0-9]*}"

        case "$i" in
          /dev/md[0-9]*|/dev/md_d[0-9]*|/dev/md/[0-9]*|/dev/md/d[0-9]*)
            [ -b "$i" ] && ARRAYS="${ARRAYS:+$ARRAYS }$i" && continue
            echo "E: device does not exist: $i" >&2
            ERROR=1; break
            ;;
          *)
            echo "E: unrecognised device string: $i" >&2
            ERROR=1; break
            ;;
        esac
      done
      [ $ERROR -eq 0 ] && INITRDSTART="$ARRAYS" && break
      ;;

    *) :;;
  esac
done

db_set mdadm/initrdstart "$INITRDSTART"

if [ "$INITRDSTART" != all ]; then
  db_input high mdadm/autostart || true
  db_go
fi

db_input medium mdadm/autocheck || true
db_go

db_input medium mdadm/start_daemon || true
db_go

db_get mdadm/start_daemon
if [ "$RET" = true ]; then
  db_input medium mdadm/mail_to || true
  db_go
fi