config mdadm
option email root
+ # list devices /dev/hd*
+ # list devices /dev/sd*
+ # list devices partitions
+config array
+ option uuid 52c5c44a:d2162820:f75d3464:799750f8
+ option device /dev/md0
+ # option name raid:0
+ # option super_minor 0
+ # list devices /dev/sda1
+ # list devices /dev/sdb1
+ # option spares 0
+ # option spare_group spares
+ # option bitmap /bitmap.md
+ # option container 00000000:00000000:00000000:00000000
+ # option member 1
PROG=/sbin/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"
- 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
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() {
local email
+ mkdir -p "${CONF%/*}"
+ printf "# Autogenerated from /etc/config/mdadm, do not edit!\n" > $CONF
+
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_set_param command "$PROG" --monitor ${email:+--mail=$email} --syslog --scan
+ procd_set_param command "$PROG" --monitor --syslog --scan --config="$CONF"
procd_close_instance
}