OpenWrt – Rev 1

Subversion Repositories:
Rev:
#!/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
}