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