#!/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 }