ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/package/utils/mdadm/files/mdadm.init b/package/utils/mdadm/files/mdadm.init
new file mode 100644
index 0000000..64a50b3
--- /dev/null
+++ b/package/utils/mdadm/files/mdadm.init
@@ -0,0 +1,93 @@
+#!/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
+}
+