[source] mdadm: extend uci config support

LEDE Commits lede-commits at lists.infradead.org
Thu Dec 14 09:42:52 PST 2017


jow pushed a commit to source.git, branch lede-17.01:
https://git.lede-project.org/8bf67f63b92082716cffd76093fca3b6bdac8cc5

commit 8bf67f63b92082716cffd76093fca3b6bdac8cc5
Author: Jo-Philipp Wich <jo at mein.io>
AuthorDate: Thu Feb 9 13:22:47 2017 +0100

    mdadm: extend uci config support
    
    Extend the mdadm package to allow to explicitely configure arrays as
    well as device list entries.
    
    Signed-off-by: Jo-Philipp Wich <jo at mein.io>
    (cherry picked from commit 813efe57e434037fb58bd3e16ebd3a1cfd6ceb82)
---
 package/utils/mdadm/Makefile           |  2 +-
 package/utils/mdadm/files/mdadm.config | 15 +++++++
 package/utils/mdadm/files/mdadm.init   | 72 +++++++++++++++++++++++++++++++---
 3 files changed, 82 insertions(+), 7 deletions(-)

diff --git a/package/utils/mdadm/Makefile b/package/utils/mdadm/Makefile
index 8f0fcf0..32544cc 100644
--- a/package/utils/mdadm/Makefile
+++ b/package/utils/mdadm/Makefile
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=mdadm
 PKG_VERSION:=3.2.5
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE_URL:=@KERNEL/linux/utils/raid/mdadm
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
diff --git a/package/utils/mdadm/files/mdadm.config b/package/utils/mdadm/files/mdadm.config
index 536228f..50afbc2 100644
--- a/package/utils/mdadm/files/mdadm.config
+++ b/package/utils/mdadm/files/mdadm.config
@@ -1,3 +1,18 @@
 config mdadm
 	option email root
+	# list devices /dev/hd*
+	# list devices /dev/sd*
+	# list devices partitions
 
+config array
+	option uuid 52c5c44a:d2162820:f75d3464:799750f8
+	option device /dev/md0
+	# option name raid:0
+	# option super_minor 0
+	# list devices /dev/sda1
+	# list devices /dev/sdb1
+	# option spares 0
+	# option spare_group spares
+	# option bitmap /bitmap.md
+	# option container 00000000:00000000:00000000:00000000
+	# option member 1
diff --git a/package/utils/mdadm/files/mdadm.init b/package/utils/mdadm/files/mdadm.init
index 9da4684..e6624a7 100644
--- a/package/utils/mdadm/files/mdadm.init
+++ b/package/utils/mdadm/files/mdadm.init
@@ -7,24 +7,84 @@ USE_PROCD=1
 PROG=/sbin/mdadm
 NAME=mdadm
 
-mdadm_email() {
+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 /sbin/sendmail ]; then
+		append_option email "$cfg" email "MAILADDR"
+
+	fi
+
+	append_option devices "$cfg" devices DEVICE " "
+
+	printf "%s\n%s\n" "$email" "$devices" >> $CONF
+}
+
+mdadm_array() {
 	local cfg="$1"
-	if [ ! -x /sbin/sendmail ]; then
+	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
-	config_get email "$cfg" email
+
+	[ -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_email mdadm
+	config_foreach mdadm_common mdadm
+	config_foreach mdadm_array array
 
-	$PROG --assemble --scan
+	$PROG --assemble --scan --config="$CONF"
 
 	procd_open_instance
-	procd_set_param command "$PROG" --monitor ${email:+--mail=$email} --syslog --scan
+	procd_set_param command "$PROG" --monitor --syslog --scan --config="$CONF"
 	procd_close_instance
 }
 



More information about the lede-commits mailing list