|
@@ -7,24 +7,84 @@ USE_PROCD=1
|
|
PROG=/sbin/mdadm
|
|
PROG=/sbin/mdadm
|
|
NAME=mdadm
|
|
NAME=mdadm
|
|
|
|
|
|
-mdadm_email() {
|
|
|
|
|
|
+CONF="/var/etc/mdadm.conf"
|
|
|
|
+
|
|
|
|
+append_list_item() {
|
|
|
|
+ append "$2" "$1" "$3"
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+append_option() {
|
|
|
|
+ local var="$1"
|
|
|
|
+ local cfg="$2"
|
|
|
|
+ local opt="$3"
|
|
|
|
+ local name="$4"
|
|
|
|
+ local sep="$5"
|
|
|
|
+ local str
|
|
|
|
+
|
|
|
|
+ if [ -n "$sep" ]; then
|
|
|
|
+ config_list_foreach "$cfg" "$opt" append_list_item str "$sep"
|
|
|
|
+ else
|
|
|
|
+ config_get str "$cfg" "$opt"
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ [ -n "$str" ] && append "$var" $(printf "%s=%s" "${name:-${opt//_/-}}" "$str")
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+mdadm_common() {
|
|
|
|
+ local cfg="$1"
|
|
|
|
+ local email devices
|
|
|
|
+
|
|
|
|
+ if [ -x /sbin/sendmail ]; then
|
|
|
|
+ append_option email "$cfg" email "MAILADDR"
|
|
|
|
+
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ append_option devices "$cfg" devices DEVICE " "
|
|
|
|
+
|
|
|
|
+ printf "%s\n%s\n" "$email" "$devices" >> $CONF
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+mdadm_array() {
|
|
local cfg="$1"
|
|
local cfg="$1"
|
|
- if [ ! -x /sbin/sendmail ]; then
|
|
|
|
|
|
+ local uuid device devices name array
|
|
|
|
+
|
|
|
|
+ config_get uuid "$cfg" uuid
|
|
|
|
+ config_get name "$cfg" name
|
|
|
|
+ config_get device "$cfg" device
|
|
|
|
+
|
|
|
|
+ if [ -z "$device" ] || [ -z "$uuid$name" ]; then
|
|
|
|
+ echo "Skipping array without device, uuid or name" >&2
|
|
return
|
|
return
|
|
fi
|
|
fi
|
|
- config_get email "$cfg" email
|
|
|
|
|
|
+
|
|
|
|
+ [ -n "$uuid" ] && append array "uuid=$uuid"
|
|
|
|
+ [ -n "$name" ] && append array "name=$name"
|
|
|
|
+
|
|
|
|
+ append_option array "$cfg" super_minor
|
|
|
|
+ append_option array "$cfg" spares
|
|
|
|
+ append_option array "$cfg" spare_group
|
|
|
|
+ append_option array "$cfg" bitmap
|
|
|
|
+ append_option array "$cfg" container
|
|
|
|
+ append_option array "$cfg" member
|
|
|
|
+ append_option array "$cfg" devices devices ","
|
|
|
|
+
|
|
|
|
+ printf "ARRAY %s %s\n" "$device" "$array" >> $CONF
|
|
}
|
|
}
|
|
|
|
|
|
start_service() {
|
|
start_service() {
|
|
local email
|
|
local email
|
|
|
|
|
|
|
|
+ mkdir -p "${CONF%/*}"
|
|
|
|
+ printf "# Autogenerated from /etc/config/mdadm, do not edit!\n" > $CONF
|
|
|
|
+
|
|
config_load mdadm
|
|
config_load mdadm
|
|
- config_foreach mdadm_email mdadm
|
|
|
|
|
|
+ config_foreach mdadm_common mdadm
|
|
|
|
+ config_foreach mdadm_array array
|
|
|
|
|
|
- $PROG --assemble --scan
|
|
|
|
|
|
+ $PROG --assemble --scan --config="$CONF"
|
|
|
|
|
|
procd_open_instance
|
|
procd_open_instance
|
|
- procd_set_param command "$PROG" --monitor ${email:+--mail=$email} --syslog --scan
|
|
|
|
|
|
+ procd_set_param command "$PROG" --monitor --syslog --scan --config="$CONF"
|
|
procd_close_instance
|
|
procd_close_instance
|
|
}
|
|
}
|
|
|
|
|