| #!/bin/sh /etc/rc.common |
| |
| START=13 |
| STOP=98 |
| |
| USE_PROCD=1 |
| PROG=/sbin/mdadm |
| NAME=mdadm |
| |
| 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 /usr/sbin/sendmail ]; then |
| config_get email "$cfg" email |
| [ -n "$email" ] && printf "MAILADDR %s\n" "$email" >> $CONF |
| fi |
| |
| config_list_foreach "$cfg" devices append_list_item devices " " |
| [ -n "$devices" ] && printf "DEVICE %s\n" "$devices" >> $CONF |
| } |
| |
| mdadm_array() { |
| local cfg="$1" |
| 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 |
| |
| [ -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_common mdadm |
| config_foreach mdadm_array array |
| |
| $PROG --assemble --scan --config="$CONF" |
| |
| procd_open_instance |
| procd_set_param command "$PROG" --monitor --syslog --scan --config="$CONF" |
| procd_close_instance |
| } |
| |
| stop_service() { |
| $PROG --stop --scan |
| } |
| |