blob: 973526621f7a1ce480c9739f341250552aed9e96 (
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
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
|