This time with the patch

On Sun, 2010-02-07 at 00:58 -0500, Daniel Dickinson wrote:
> Hi all,
> 
> Here is the automount patch I've been promising with the modularization
> and logging suggested by ede.
> 
> You can turn automount completely off.
> You can set it to do only mounts from fstab
> You can set it to do only 'anonymous' mounts (mounted under /mnt/device)
> Ditto swap (if swap-utils is installed)
> You can mix and match
> You can control whether anonymous mounts get their filesystem checked
> You can control fstab filesystem checks on a per mount point basis
> (fsck depends on the appropriate package being installed)
> You can mount via uuid or label if blkid is installed
> 
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel


-- 
And that's my crabbing done for the day.  Got it out of the way early, 
now I have the rest of the afternoon to sniff fragrant tea-roses or 
strangle cute bunnies or something.   -- Michael Devore
GnuPG Key Fingerprint 86 F5 81 A5 D4 2E 1F 1C      http://gnupg.org
The C Shore (Daniel Dickinson's Website) http://cshore.is-a-geek.com
Index: utils/btrfs-progs/files/btrfsck.uci-defaults
===================================================================
--- utils/btrfs-progs/files/btrfsck.uci-defaults	(revision 0)
+++ utils/btrfs-progs/files/btrfsck.uci-defaults	(revision 0)
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+cfgsect="$(uci add fstab fsck_plugin)"
+uci set fstab."$cfgsect".plugin_path="/lib/functions/block/btrfsck.sh"
+uci commit
+
Index: utils/btrfs-progs/files/btrfsck.sh
===================================================================
--- utils/btrfs-progs/files/btrfsck.sh	(revision 0)
+++ utils/btrfs-progs/files/btrfsck.sh	(revision 0)
@@ -0,0 +1,23 @@
+#!/bin/sh
+# Copyright (C) 2010 Vertical Communications
+
+fsck_btrfsck() {
+	btrfsck -p "$device" 2>&1 | logger -t "fstab: btrfsck ($device)"
+	local status="$?"
+	case "$status" in
+		0|1) ;; #success
+		2) reboot;;
+		4) echo "btrfsck ($device): Warning! Uncorrected errors."| logger -t 'fstab'
+			return 1
+			;;
+		*) echo "btrfsck ($device): Error $status. Check not complete." | logger -t 'fstab';;
+	esac
+	return 0
+}
+
+fsck_btrfs() {
+	fsck_btrfsck "$@"
+}
+
+append libmount_known_fsck "btrfs"
+
Index: utils/btrfs-progs/Makefile
===================================================================
--- utils/btrfs-progs/Makefile	(revision 19533)
+++ utils/btrfs-progs/Makefile	(working copy)
@@ -48,6 +48,10 @@
 define Package/btrfs-progs/install
 	$(INSTALL_DIR) $(1)/usr/bin
 	$(INSTALL_BIN) $(addprefix $(PKG_INSTALL_DIR)/usr/bin/, $(progs)) $(1)/usr/bin/
+	$(INSTALL_DIR) $(1)/etc/uci-defaults
+	$(INSTALL_BIN) ./files/btrfsck.uci-defaults $(1)/etc/uci-defaults/btrsfck
+	$(INSTALL_DIR) $(1)/lib/functions/block
+	$(INSTALL_BIN) ./files/btrfsck.sh $(1)/lib/functions/block/
 endef
 
 $(eval $(call BuildPackage,btrfs-progs))
Index: utils/reiserfsprogs/files/reiserfsck.uci-defaults
===================================================================
--- utils/reiserfsprogs/files/reiserfsck.uci-defaults	(revision 0)
+++ utils/reiserfsprogs/files/reiserfsck.uci-defaults	(revision 0)
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+cfgsect="$(uci add fstab fsck_plugin)"
+uci set fstab."$cfgsect".plugin_path="/lib/functions/block/reiserfsck.sh"
+uci commit
+
Index: utils/reiserfsprogs/files/reiserfsck.sh
===================================================================
--- utils/reiserfsprogs/files/reiserfsck.sh	(revision 0)
+++ utils/reiserfsprogs/files/reiserfsck.sh	(revision 0)
@@ -0,0 +1,23 @@
+#!/bin/sh
+# Copyright (C) 2010 Vertical Communications
+
+fsck_reiserfsck() {
+	reiserfsck -p "$device" 2>&1 | logger -t "fstab: reiserfsck ($device)"
+	local status="$?"
+	case "$status" in
+		0|1) ;; #success
+		2) reboot;;
+		4|6) echo "reiserfsck ($device): Warning! Uncorrected errors."| logger -t fstab
+			return 1
+			;;
+		*) echo "reiserfsck ($device): Error $status. Check not complete." | logger -t fstab;;
+	esac
+	return 0
+}
+
+fsck_reiserfs() {
+	fsck_reiserfsck "$@"
+}
+
+append libmount_known_fsck "reiserfs"
+
Index: utils/reiserfsprogs/Makefile
===================================================================
--- utils/reiserfsprogs/Makefile	(revision 19533)
+++ utils/reiserfsprogs/Makefile	(working copy)
@@ -43,6 +43,10 @@
 	$(INSTALL_BIN) $(foreach bin,debugreiserfs mkreiserfs reiserfsck reiserfstune resize_reiserfs,$(PKG_INSTALL_DIR)/usr/sbin/$(bin)) $(1)/usr/sbin/
 	ln -sf mkreiserfs $(1)/usr/sbin/mkfs.reiserfs
 	ln -sf reiserfsck $(1)/usr/sbin/fsck.reiserfs
+	$(INSTALL_DIR) $(1)/etc/uci-defaults
+	$(INSTALL_BIN) ./files/reiserfsck.uci-defaults $(1)/etc/uci-defaults/reiserfsck
+	$(INSTALL_DIR) $(1)/lib/functions/block
+	$(INSTALL_BIN) ./files/reiserfsck.sh $(1)/lib/functions/block/
 endef
 
 $(eval $(call BuildPackage,reiserfsprogs))
Index: utils/dosfstools/files/dosfsck.uci-defaults
===================================================================
--- utils/dosfstools/files/dosfsck.uci-defaults	(revision 0)
+++ utils/dosfstools/files/dosfsck.uci-defaults	(revision 0)
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+cfgsect="$(uci add fstab fsck_plugin)"
+uci set fstab."$cfgsect".plugin_path="/lib/functions/block/dosfsck.sh"
+uci commit
+
Index: utils/dosfstools/files/dosfsck.sh
===================================================================
--- utils/dosfstools/files/dosfsck.sh	(revision 0)
+++ utils/dosfstools/files/dosfsck.sh	(revision 0)
@@ -0,0 +1,28 @@
+#!/bin/sh
+# Copyright (C) 2010 Vertical Communications
+
+fsck_dosfsck() {
+	reiserfsck -p "$device" 2>&1 | logger -t "fstab: dosfsck ($device)"
+	local status="$?"
+	case "$status" in
+		0) ;; #success
+		1) echo "dosfsck ($device): Warning! Errors detected."| logger -t fstab
+			return 1
+			;;				
+		*) echo "dosfsck ($device): Usage error.  Device not checked".| logger -t fstab;;
+	esac
+	return 0
+}
+
+fsck_vfat() {
+	fsck_dosfsck "$@"
+}
+
+fsck_msdos() {
+	fsck_dosfsck "$@"
+}
+
+
+append libmount_known_fsck "vfat"
+append libmount_known_fsck "msdos"
+
Index: utils/dosfstools/Makefile
===================================================================
--- utils/dosfstools/Makefile	(revision 19533)
+++ utils/dosfstools/Makefile	(working copy)
@@ -76,6 +76,10 @@
 	$(INSTALL_DIR) $(1)/usr/sbin
 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/dosfsck $(1)/usr/sbin/
 	(cd $(1)/usr/sbin; ln -sf dosfsck fsck.msdos; ln -sf dosfsck fsck.vfat)
+	$(INSTALL_DIR) $(1)/etc/uci-defaults
+	$(INSTALL_BIN) ./files/dosfsck.uci-defaults $(1)/etc/uci-defaults/dosfsck
+	$(INSTALL_DIR) $(1)/lib/functions/block
+	$(INSTALL_BIN) ./files/dosfsck.sh $(1)/lib/functions/block/
 endef
 
 define Package/dosfslabel/install
Index: package/base-files/files/lib/functions/fsck.sh
===================================================================
--- package/base-files/files/lib/functions/fsck.sh	(revision 0)
+++ package/base-files/files/lib/functions/fsck.sh	(revision 0)
@@ -0,0 +1,35 @@
+#!/bin/sh
+# Copyright 2010 Vertical Communications
+
+libmount_fsck() {
+	local device="$1"
+	local fstype="$2"
+	local fsck_enabled="$3"
+	local known_type
+	local found_fsck=0
+	
+	[ -e "$device" ] && [ "$fsck_enabled" -eq 1 ] && {
+		grep -q "$device" /proc/mounts && return 0	
+		for known_type in $libmount_known_fsck; do
+			if [ "$known_type" = "$fstype" ]; then
+				fsck_${known_type} "$device"
+				found_fsck=1
+			fi
+		done
+		if [ "$found_fsck" -ne 1 ]; then
+			logger -t 'fstab' "Unable to check/repair $device; no known fsck for filesystem type $fstype"
+		fi
+	}
+}
+
+libmount_fsck_fs_type() {
+	local device="$1"
+	local fstype="$2"
+	
+	echo "$fstype"
+	return 0
+}
+
+libmount_known_fsck=""
+
+config_load_block_plugins fsck_plugin
Index: package/base-files/files/lib/functions/block.sh
===================================================================
--- package/base-files/files/lib/functions/block.sh	(revision 0)
+++ package/base-files/files/lib/functions/block.sh	(revision 0)
@@ -0,0 +1,233 @@
+#!/bin/sh
+# Copyright 2010 Vertical Communications
+
+. /etc/functions.sh
+
+reset_block_cb() {
+	mount_cb() { 
+		dmc_mount_cfg="$1"
+		shift # skip optional param
+		dmc_target="$2"
+		dmc_mount_device="$3"
+		dmc_fstype="$4"
+		dmc_options="$5"
+		dmc_enabled="$6"
+		dmc_enabled_fsck="$7"
+		dmc_uuid="$8"
+		dmc_label="$9"
+		return 0
+	}
+	swap_cb() { 
+		dsc_swap_cfg="$1"
+		shift # skip optional param
+		dsc_swap_device="$2"
+		dsc_enabled="$3"
+		dsc_uuid="$4"
+		dsc_label="$5"
+		return 0
+	}
+}
+reset_block_cb
+
+reset_dev_section_cb() {
+	mount_dev_section_cb() {
+		dmds_mount_cfg="$1"
+		dmds_mount_target="$2"
+		dmds_mount_device="$3"
+		dmds_mount_fstype="$4"
+		dmds_mount_options="$5"
+		dmds_mount_enabled="$6"
+		dmds_mount_enabled_fsck="$7"
+		dmds_mount_uuid="$8"
+		dmds_mount_label="$9"
+		return 0
+	}
+	swap_dev_section_cb() { 
+		dsds_swap_cfg="$1"
+		dsds_swap_device="$2"
+		dsds_swap_enabled="$3"
+		dsds_swap_uuid="$4"
+		dsds_swap_label="$5"
+		return 0
+	}
+}
+reset_dev_section_cb
+
+config_get_mount() {
+	local gm_cfg="$1"
+	local gm_param="$2"
+	local gm_target
+	local gm_device
+	local gm_fstype
+	local gm_options
+	local gm_enabled
+	local gm_enabled_fsck
+	local gm_uuid
+	local gm_label
+	config_get gm_target "$1" target
+	config_get gm_device "$1" device
+	config_get gm_fstype "$1" fstype 'auto'
+	config_get gm_options "$1" options 'rw'
+	config_get_bool gm_enabled "$1" enabled 1
+	config_get_bool gm_enabled_fsck "$1" enabled_fsck 0
+	config_get gm_uuid "$1" uuid
+	config_get gm_label "$1" label
+	
+	mount_cb "$gm_cfg" "$gm_param" "$gm_target" "$gm_device" "$gm_fstype" "$gm_options" "$gm_enabled" "$gm_enabled_fsck" "$gm_uuid" "$gm_label"
+}
+
+config_get_swap() {
+	local gs_cfg="$1"
+	local gs_param="$2"
+	local gs_device
+	local gs_enabled
+	local gs_uuid
+	local gs_label
+	config_get gs_device "$1" device
+	config_get_bool gs_enabled "$1" enabled 1
+	config_get gs_uuid "$1" uuid
+	config_get gs_label "$1" label
+
+	swap_cb "$gs_cfg" "$gs_param" "$gs_device" "$gs_enabled" "$gs_uuid" "$gs_label"
+}
+
+config_get_automount() {
+	config_load fstab
+	config_get_bool from_fstab "automount" from_fstab 1
+	config_get_bool anon_mount "automount" anon_mount 1
+	config_get_bool anon_fsck "automount" anon_fsck 0
+}
+
+config_get_autoswap() {
+	config_load fstab
+	config_get_bool from_fstab "autoswap" from_fstab 1
+	config_get_bool anon_swap "autoswap" anon_swap 0
+}
+
+config_create_swap_fstab_entry() {
+	local device="$1"
+	local enabled="$2"
+
+	[ -n "$device" ] || return 0
+
+	local fstabnew="$(mktemp -t '.fstab.XXXXXXXX')"
+	
+	# We write to /etc/fstab, but it *should* be a symlink to /tmp/fstab
+	mkdir -p /var/lock
+	lock /var/lock/fstab.lck
+	cat /etc/fstab | grep -E -v "^$device[[:blank:]]" >>"$fstabnew"
+	[ "$enabled" -eq 1 ] && echo "$device	none	swap	sw	0	0" >> "$fstabnew"
+	cat "$fstabnew" >/etc/fstab
+	lock -u /var/lock/fstab.lck
+	rm -f $fstabnew
+}
+
+config_create_mount_fstab_entry() {
+	local device="$1"
+	local target="$2"
+	local fstype="$3"
+	local options="$4"
+	local enabled="$5"
+	options="${options:-rw}"
+	[ "$enabled" -eq 0 ] && options="noauto,$options"
+	[ -n "$target" ] || return 0
+	[ -n "$device" ] || return 0
+
+	local fstabnew="$(mktemp -t '.fstab.XXXXXXXX')"
+	
+	# We write to /etc/fstab, but it *should* be a symlink to /tmp/fstab
+	mkdir -p /var/lock
+	lock /var/lock/fstab.lck
+	cat /etc/fstab | grep -E -v "^$device[[:blank:]]" | grep -v "$target" >>"$fstabnew"
+	echo "$device	$target	$fstype	$options	0	0" >>"$fstabnew"
+	cat "$fstabnew" >/etc/fstab		
+	lock -u /var/lock/fstab.lck
+	rm -f $fstabnew
+}
+
+config_get_mount_section_by_device() {
+	local msbd_device="$1"
+	local msbd_mount_cfg=
+	local msbd_target=
+	local msbd_mount_device=
+	local msbd_fstype=
+	local msbd_options=
+	local msbd_enabled=
+	local msbd_enabled_fsck=
+	local msbd_uuid=
+	local msbd_label=
+	mount_cb() {
+		local mc_cfg="$1"
+		local mc_device="$2"
+		shift
+		local mc_mount_device="$3"
+		if [ -n "$mc_mount_device" ] && [ "$mc_mount_device" = "$mc_device" ]; then
+			msbd_mount_cfg="$mc_cfg"
+			msbd_target="$2"
+			msbd_mount_device="$3"
+			msbd_fstype="$4"
+			msbd_options="$5"
+			msbd_enabled="$6"
+			msbd_enabled_fsck="$7"
+			msbd_uuid="$8"
+			msbd_label="$9"
+		fi
+		return 0	
+	}
+	config_foreach config_get_mount mount "$msbd_device"
+	[ -n "$msbd_uuid" ] && logger -t 'fstab' "uuid specified for target $msbd_target but required package blkid not installed"
+	[ -n "$msbd_label" ] && logger -t 'fstab' "label specified for target $msbd_target but required package blkid not installed"
+	[ -n "$msbd_mount_device" ] && config_create_mount_fstab_entry "$msbd_mount_device" "$msbd_target" "$msbd_stype" "$msbd_options" "$msbd_enabled" 
+	mount_dev_section_cb "$msbd_mount_cfg" "$msbd_target" "$msbd_mount_device" "$msbd_fstype" "$msbd_options" "$msbd_enabled" "$msbd_enabled_fsck" "$msbd_uuid" "$msbd_label"		
+	reset_block_cb
+}
+
+config_get_swap_section_by_device() {
+	local ssbd_device="$1"
+	local ssbd_swap_cfg=
+	local ssbd_swap_device=
+	local ssbd_enabled=
+	local ssbd_uuid=
+	local ssbd_label=
+	swap_cb() {
+		local sc_cfg="$1"
+		local sc_device="$2"
+		local sc_swap_device="$3"
+		if [ -n "$sc_swap_device" ] && [ "$sc_swap_device" = "$sc_device" ]; then
+			ssbd_swap_cfg="$sc_cfg"
+			ssbd_swap_device="$3"
+			ssbd_enabled="$4"
+			ssbd_uuid="$5"
+			ssbd_label="$6"
+		fi
+		return 0	
+	}
+	config_foreach config_get_swap swap "$ssbd_device"
+	[ -n "$ssbd_uuid" ] && logger -t 'fstab' "uuid specified for swap device but required package blkid not installed"
+	[ -n "$ssbd_label" ] && logger -t 'fstab' "label specified for swap device but required package blkid not installed"
+	[ -n "$ssbd_swap_device" ] && config_create_swap_fstab_entry "$ssbd_swap_device" "$ssbd_enabled"
+	swap_dev_section_cb "$ssbd_swap_cfg" "$ssbd_swap_device" "$ssbd_enabled" "$ssbd_uuid" "$ssbd_label"
+	reset_block_cb
+}
+
+config_load_block_plugins() {
+	local plugin_type="$1"
+	plugins="$(plugin_type=$plugin_type sh -c '
+		. /etc/functions.sh
+		echo_plugin() {
+			local cfg="$1"
+			local plugin_path
+			config_get plugin_path "$cfg" plugin_path
+			echo "$plugin_path"
+		}
+		config_load fstab
+		[ -z "$plugin_type" ] && plugin_type="plugin"
+		config_foreach echo_plugin $plugin_type
+	')"
+	for plugin in $plugins; do
+		[ -r "$plugin" ] && . "$plugin" || logger -t 'fstab' "Error loading plugin '$plugin'"
+	done
+}
+
+config_load_block_plugins plugin
+
Index: package/base-files/files/lib/functions/mount.sh
===================================================================
--- package/base-files/files/lib/functions/mount.sh	(revision 0)
+++ package/base-files/files/lib/functions/mount.sh	(revision 0)
@@ -0,0 +1,47 @@
+#!/bin/sh
+# Copyright 2010 Vertical Communications
+
+. /lib/functions/block.sh
+. /lib/functions/fsck.sh
+
+config_mount_by_section() {
+	local cfg="$1"
+
+	mount_cb() {
+		local cfg="$1"
+		shift
+		local target="$2"
+		local device="$3"
+		local fstype="$4"
+		local options="$5"
+		local enabled="$6"
+		local enabled_fsck="$7"
+		local uuid="$8"
+		local label="$9"
+		local fsck_type=""
+		
+		[ -n "$uuid" ] && logger -t 'fstab' "uuid specified for target $target but required package blkid not installed"
+		[ -n "$label" ] && logger -t 'fstab' "label specified for target $target but required package blkid not installed"
+
+		if [ -n "$device" ] && [ -e "$device" ]; then
+			[ "$enabled_fsck" -eq 1 ] && fsck_type="`libmount_fsck_fs_type "$device" "$fstype"`"
+			[ -n "$fsck_type" ] && {
+				grep -q /proc/swaps "$device" || grep -q /proc/mounts "$device" || {
+					libmount_fsck "$device" "$fsck_type" "$enabled_fsck"
+				}
+			}				
+			config_create_mount_fstab_entry "$device" "$target" "$fstype" "$options" "$enabled" 
+			grep -q /proc/swaps "$device" || grep -q /proc/mounts "$device" || {
+				[ "$enabled" -eq 1 ] && mkdir -p "$target" && mount "$target" 2>&1 | tee /proc/self/fd/2 | logger -t 'fstab'
+			}
+		fi
+		return 0	
+	}
+	config_get_mount "$cfg"
+	reset_block_cb
+}
+
+
+config_load_block_plugins mount_plugin
+
+
Index: package/base-files/files/etc/init.d/fstab
===================================================================
--- package/base-files/files/etc/init.d/fstab	(revision 19533)
+++ package/base-files/files/etc/init.d/fstab	(working copy)
@@ -1,30 +1,19 @@
 #!/bin/sh /etc/rc.common
 # Copyright (C) 2007 OpenWrt.org
+# Copyright (C) 2010 Vertical Communications
 
 START=20
 
+. /lib/functions/mount.sh
+
 do_mount() {
 	local cfg="$1"
-
-	config_get device "$cfg" device
-	config_get target "$cfg" target
-	[ -n "$device" -a -n "$target" ] || return 0
-
-	mkdir -p $target
-	config_get fstype "$cfg" fstype 'auto'
-	config_get options "$cfg" options '-rw'
-	config_get_bool enabled "$cfg" "enabled" '1'
-	[ "$enabled" -eq 0 ] && options="noauto,$options"
-	echo "$device	$target	$fstype	$options	0	0" >> /tmp/fstab
+	config_mount_by_section "$cfg"
 }
 
 do_swapon() {
 	local cfg="$1"
-
-	config_get device "$cfg" device
-	config_get_bool enabled "$cfg" "enabled" '1'
-	[ -n "$device" -a "$enabled" -gt 0 ] || return 0
-	echo "$device	none	swap	sw	0	0" >> /tmp/fstab
+	[ "$(which swapon)" ] && config_swapon_by_section "$cfg"
 }
 
 do_unmount() {
@@ -47,17 +36,18 @@
 
 start() {
 	config_load fstab
-	echo '# WARNING: this is an auto generated file, please use uci to set static filesystems' > /tmp/fstab
+	mkdir -p /var/lock
+	lock /var/lock/fstab.lck
+	echo '# WARNING: this is an auto generated file, please use uci to set defined filesystems' > /etc/fstab
+	lock -u /var/lock/fstab.lck
 	config_foreach do_mount mount
 	config_foreach do_swapon swap
-	mount -a
-	[ -x /sbin/swapon ] && swapon -a
 }
 
 stop() {
 	config_load fstab
 	config_foreach do_unmount mount
 	config_foreach do_swapoff swap
-	[ -x /sbin/swapoff ] && swapoff -a
+	[ -x "$(which swapoff)" ] && swapoff -a
 }
 
Index: package/base-files/files/etc/hotplug.d/block/10-mount
===================================================================
--- package/base-files/files/etc/hotplug.d/block/10-mount	(revision 19533)
+++ package/base-files/files/etc/hotplug.d/block/10-mount	(working copy)
@@ -1,20 +0,0 @@
-#!/bin/sh
-# Copyright (C) 2009-2010 OpenWrt.org
-
-blkdev=`dirname $DEVPATH`
-if [ `basename $blkdev` != "block" ]; then
-
-    device=`basename $DEVPATH`
-    case "$ACTION" in
-	add)
-		swapon /dev/$device >/dev/null 2>/dev/null || (
-			mkdir -p /mnt/$device
-			mount /dev/$device /mnt/$device
-		)
-		;;
-	remove)
-		umount /dev/$device
-		;;
-    esac	
-
-fi
Index: package/base-files/files/etc/hotplug.d/block/40-mount
===================================================================
--- package/base-files/files/etc/hotplug.d/block/40-mount	(revision 0)
+++ package/base-files/files/etc/hotplug.d/block/40-mount	(revision 0)
@@ -0,0 +1,81 @@
+#!/bin/sh
+# Copyright (C) 2009-2010 OpenWrt.org
+# Copyright (C) 2010 Vertical Communications
+
+. /lib/functions/block.sh
+
+blkdev=`dirname $DEVPATH`
+if [ `basename $blkdev` != "block" ]; then
+
+    device=`basename $DEVPATH`
+
+    case "$ACTION" in
+	add)
+
+		local from_fstab
+		local anon_mount
+		local anon_swap
+		local anon_fsck
+		local mds_mount_target
+		local mds_mount_device
+		local mds_mount_fstype
+		local sds_swap_device
+		local use_device
+		local do_fsck=0
+		local fsck_type
+		
+		local autoswap_from_fstab
+		local automount_from_fstab
+
+	    mount_dev_section_cb() {
+    		mds_mount_target="$2"
+			mds_mount_device="$3"
+			mds_mount_fstype="$4"
+			mds_mount_enabled="$6"
+	    }
+
+	    swap_dev_section_cb() { 
+			sds_swap_device="$2"
+			return 0
+	    }
+
+		config_get_automount
+		automount_from_fstab="$from_fstab"
+		[ "$automount_from_fstab" -eq 1 ] && {
+			config_get_mount_section_by_device "/dev/$device"
+			use_device="$mds_mount_device"
+			[ "$mds_mount_enabled" -eq 1 ] && {
+				if [ -n "$mds_mount_target" ]; then
+					grep -q "/dev/$device" /proc/swaps || grep -q "/dev/$device" /proc/mounts || {
+						( mkdir -p "$mds_mount_target" && mount "$mds_mount_target" ) 2>&1 | tee /proc/self/fd/2 | logger -t 'fstab'
+					}
+				else
+					logger -t 'fstab' "Mount enabled for $mds_mount_device but it doesn't have a defined mountpoint (target)"
+				fi
+			}
+		}
+
+		[ -z "$use_device" ] && {
+			config_get_autoswap
+			autoswap_from_fstab="$from_fstab"
+		
+			[ "$autoswap_from_fstab" -eq 1 ] && {
+				config_get_swap_section_by_device "/dev/$device"
+				use_device="$sds_swap_device"
+			}
+		}
+		
+		grep -q "/dev/$device" /proc/swaps || grep -q "/dev/$device" /proc/mounts || {
+			[ "$anon_mount" -eq 1 ] && [ -z "$use_device" ] && {
+				( mkdir -p /mnt/$device && mount /dev/$device /mnt/$device ) 2>&1 | tee /proc/self/fd/2 | logger -t 'fstab'
+			}
+		}
+		reset_dev_section_cb
+		;;
+	remove)
+		umount /dev/$device
+		;;
+    esac	
+
+fi
+
Index: package/base-files/files/etc/hotplug.d/block/20-fsck
===================================================================
--- package/base-files/files/etc/hotplug.d/block/20-fsck	(revision 0)
+++ package/base-files/files/etc/hotplug.d/block/20-fsck	(revision 0)
@@ -0,0 +1,82 @@
+#!/bin/sh
+# Copyright (C) 2009-2010 OpenWrt.org
+# Copyright (C) 2010 Vertical Communications
+
+. /lib/functions/block.sh
+. /lib/functions/fsck.sh
+
+blkdev=`dirname $DEVPATH`
+
+if [ `basename $blkdev` != "block" ]; then
+
+    device=`basename $DEVPATH`
+
+    case "$ACTION" in
+	add)
+		local from_fstab
+		local anon_mount
+		local anon_swap
+		local anon_fsck
+		local mds_mount_target
+		local mds_mount_device
+		local mds_mount_fstype
+		local mds_mount_enabled_fsck
+		local sds_swap_device
+		local use_device
+		local do_fsck=0
+		local fsck_type
+		
+		local autoswap_from_fstab
+		local automount_from_fstab
+
+	    mount_dev_section_cb() {
+			mds_mount_device="$3"
+			mds_mount_fstype="$4"
+			mds_mount_enabled_fsck="$7"
+	    }
+
+	    swap_dev_section_cb() { 
+			sds_swap_device="$2"
+			return 0
+	    }
+
+		config_get_automount
+		automount_from_fstab="$from_fstab"
+		
+		[ "$automount_from_fstab" -eq 1 ] && {
+			config_get_mount_section_by_device "/dev/$device"
+			use_device="$mds_mount_device"
+			[ "$mds_mount_enabled_fsck" -eq 1 ] && do_fsck=1
+		}
+		
+		[ -z "$use_device" ] && {
+			config_get_autoswap
+			autoswap_from_fstab="$from_fstab"
+		
+			[ "$autoswap_from_fstab" -eq 1 ] && {
+				config_get_swap_section_by_device "/dev/$device"
+				use_device="$sds_swap_device" && do_fsck=0
+			}
+		}
+		
+		grep -q "/dev/$device" /proc/swaps || grep -q "/dev/$device" /proc/mounts || {
+			[ "$anon_fsck" -eq 1 ] && [ -z "$use_device" ] && {
+					use_device="/dev/$device" && do_fsck=1 && mds_mount_fstype=""			
+			}
+		}
+		
+		[ "$do_fsck" -eq 1 ] && {		
+			fsck_type="`libmount_fsck_fs_type "$use_device" "$mds_mount_fstype"`"
+	
+			[ -n "$fsck_type" ] && [ "$fsck_type" != "swap" ] && {
+				grep -q "/dev/$device" /proc/swaps || grep -q "/dev/$device" /proc/mounts || {
+					libmount_fsck "$use_device" "$fsck_type" "$do_fsck"
+				}
+			}
+		}
+		
+		reset_dev_section_cb
+		;;
+    esac	
+fi
+
Index: package/base-files/files/etc/hotplug.d/block/10-swap
===================================================================
--- package/base-files/files/etc/hotplug.d/block/10-swap	(revision 0)
+++ package/base-files/files/etc/hotplug.d/block/10-swap	(revision 0)
@@ -0,0 +1,81 @@
+#!/bin/sh
+# Copyright (C) 2009-2010 OpenWrt.org
+# Copyright (C) 2010 Vertical Communications
+
+. /lib/functions/block.sh
+
+blkdev=`dirname $DEVPATH`
+
+if [ `basename $blkdev` != "block" ]; then
+
+    device=`basename $DEVPATH`
+
+
+    case "$ACTION" in
+	add)
+		local autoswap_from_fstab
+		local automount_from_fstab
+		local from_fstab
+		local anon_mount
+		local anon_swap
+		local anon_fsck
+		local mds_mount_device
+		local sds_swap_device
+		local sds_swap_enabled
+		local use_device
+		local do_swap=0
+
+	    mount_dev_section_cb() {
+			mds_mount_device="$3"
+	    }
+
+	    swap_dev_section_cb() { 
+			sds_swap_device="$2"
+			sds_swap_enabled="$3"
+			return 0
+	    }
+
+		config_get_automount
+		automount_from_fstab="$from_fstab"
+		
+		[ "$automount_from_fstab" -eq 1 ] && {
+			config_get_mount_section_by_device "/dev/$device"
+		}
+		
+		# skip trying swap if this device is defined as a mount point
+		[ -z "$mds_mount_device" ] && {		
+			config_get_autoswap
+			autoswap_from_fstab="$from_fstab"
+		
+			[ "$autoswap_from_fstab" -eq 1 ] && {
+				config_get_swap_section_by_device "/dev/$device"
+				use_device="$sds_swap_device" 
+				do_swap="$sds_swap_enabled"
+			}
+
+			[ -z "$use_device" ] && [ "$anon_swap" -eq 1 ] && {
+				use_device="/dev/$device" && do_swap=1
+			}
+		}
+
+		[ -n "$use_device" ] && [ "$do_swap" -eq 1 ] && {
+			if [ -n "$(which swapon)" ]; then
+				libmount_is_swap_device $use_device && {
+					grep -q "$use_device" /proc/swaps || grep -q "$use_device" /proc/mounts || {
+						swapon "$use_device"
+					}
+				}
+			else 
+				logger -t 'fstab' "Couldn't find swapon while attempting to enable swap on $use_device"
+			fi
+		}
+		reset_dev_section_cb
+		;;
+	remove)
+		grep -q "/dev/$device" /proc/swaps && {
+			[ -n "$(which swapoff)" ] && swapoff "/dev/$device"
+		}
+		;;
+    esac	
+fi
+
Index: package/base-files/files/etc/config/fstab
===================================================================
--- package/base-files/files/etc/config/fstab	(revision 19533)
+++ package/base-files/files/etc/config/fstab	(working copy)
@@ -1,3 +1,13 @@
+config global automount
+	option from_fstab 1
+	option anon_mount 1
+	option anon_fsck 0
+	
+config global autoswap
+	option from_fstab 1
+	option anon_swap 0
+	
+
 config mount
 	option target	/home
 	option device	/dev/sda1
@@ -4,7 +14,9 @@
 	option fstype	ext3
 	option options	rw,sync
 	option enabled	0
+	option enabled_fsck 0
 
 config swap
 	option device	/dev/sda2
 	option enabled	0
+
Index: package/e2fsprogs/files/e2fsck.init
===================================================================
--- package/e2fsprogs/files/e2fsck.init	(revision 19533)
+++ package/e2fsprogs/files/e2fsck.init	(working copy)
@@ -1,35 +0,0 @@
-#!/bin/sh /etc/rc.common
-# Copyright (C) 2008 OpenWrt.org
-# Vasilis Tsiligiannis <acinon...@yahoo.gr>
-
-START=15
-
-e2fsck() {
-	local args
-	local cfg="$1"
-
-	config_get device "$cfg" device
-	[ -b "$device" ] || return 0
-
-	config_get fstype "$cfg" fstype
-	case "$fstype" in
-		ext2|ext3|ext4)
-			/usr/sbin/e2fsck -p "$device"
-			local status="$?"
-			case "$status" in
-				0|1) continue;;
-				2) reboot;;
-				4) echo "e2fsck ($device): Warning! Uncorrected errors.";;
-				*) echo "e2fsck ($device): Error $status. Check not complete.";;
-			esac
-			;;
-		*)
-			;;
-	esac
-}
-
-start() {
-	config_load fstab
-	config_foreach e2fsck mount
-}
-
Index: package/e2fsprogs/files/e2fsck.uci-defaults
===================================================================
--- package/e2fsprogs/files/e2fsck.uci-defaults	(revision 0)
+++ package/e2fsprogs/files/e2fsck.uci-defaults	(revision 0)
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+cfgsect="$(uci add fstab fsck_plugin)"
+uci set fstab."$cfgsect".plugin_path="/lib/functions/block/e2fsck.sh"
+uci commit
+
Index: package/e2fsprogs/files/blkuci.sh
===================================================================
--- package/e2fsprogs/files/blkuci.sh	(revision 0)
+++ package/e2fsprogs/files/blkuci.sh	(revision 0)
@@ -0,0 +1,100 @@
+#!/bin/sh
+# Copyright 2010 Vertical Communications
+
+libmount_find_token() {
+	local token="$1"
+	local value="$2"
+	local device="$(blkid -l -t "$token=\"$value\"" | cut -f1 -d:)"
+	echo "$device"
+}
+
+libmount_find_device_by_id() {
+	local uuid="$1"
+	local label="$2"
+	local device="$3"
+	local cfg_device="$4"
+	local found_device
+	
+	if [ -n "$uuid" ]; then
+		found_device="$(libmount_find_token "UUID" "$uuid")"
+	elif [ -n "$label" ]; then
+		found_device="$(libmount_find_token "LABEL" "$label")"
+	elif [ "$device" = "$cfg_device" ]; then
+		found_device="$device"
+	elif [ -z "$device" ] && [ -e "$cfg_device" ]; then
+		found_device="$cfg_device"
+	fi
+	echo "$found_device"
+}
+
+config_get_mount_section_by_device() {
+	local msbd_device="$1"
+	local msbd_mount_cfg=
+	local msbd_target=
+	local msbd_mount_device=
+	local msbd_fstype=
+	local msbd_options=
+	local msbd_enabled=
+	local msbd_enabled_fsck=
+	local msbd_uuid=
+	local msbd_label=
+	mount_cb() {
+		local mc_cfg="$1"
+		local mc_device="$2"
+		shift
+		local mc_cfgdevice="$3"
+		local mc_uuid="$8"
+		local mc_label="$9"
+		local mc_found_device=""
+		
+		mc_found_device="$(libmount_find_device_by_id "$mc_uuid" "$mc_label" "$mc_device" "$mc_cfgdevice")"
+		if [ -n "$mc_found_device" ]; then
+			msbd_mount_cfg="$mc_cfg"
+			msbd_target="$2"
+			msbd_mount_device="$mc_found_device"
+			msbd_fstype="$4"
+			msbd_options="$5"
+			msbd_enabled="$6"
+			msbd_enabled_fsck="$7"
+			msbd_uuid="$8"
+			msbd_label="$9"
+		fi
+		return 0	
+	}
+	config_foreach config_get_mount mount "$msbd_device"
+	[ -n "$msbd_mount_device" ] && config_create_mount_fstab_entry "$msbd_mount_device" "$msbd_target" "$msbd_fstype" "$msbd_options" "$msbd_enabled" 
+	mount_dev_section_cb "$msbd_mount_cfg" "$msbd_target" "$msbd_mount_device" "$msbd_fstype" "$msbd_options" "$msbd_enabled" "$msbd_enabled_fsck" "$msbd_uuid" "$msbd_label"		
+	reset_block_cb
+}
+
+config_get_swap_section_by_device() {
+	local ssbd_device="$1"
+	local ssbd_swap_cfg=
+	local ssbd_swap_device=
+	local ssbd_enabled=
+	local ssbd_uuid=
+	local ssbd_label=
+	swap_cb() {
+		local sc_cfg="$1"
+		local sc_device="$2"
+		local sc_uuid="$5"
+		local sc_label="$6"
+		local sc_cfgdevice="$3"
+		local sc_found_device
+
+		sc_found_device="$(libmount_find_device_by_id "$sc_uuid" "$sc_label" "$sc_device" "$sc_cfgdevice")"
+		if [ -n "$sc_found_device" ]; then
+			ssbd_swap_cfg="$sc_cfg"
+			ssbd_swap_device="$sc_found_device"
+			ssbd_enabled="$4"
+			ssbd_uuid="$5"
+			ssbd_label="$6"
+		fi
+		return 0	
+	}
+	config_foreach config_get_swap swap "$ssbd_device"
+	[ -n "$ssbd_swap_device" ] && config_create_swap_fstab_entry "$ssbd_swap_device" "$ssbd_enabled"
+	swap_dev_section_cb "$ssbd_swap_cfg" "$ssbd_swap_device" "$ssbd_enabled" "$ssbd_uuid" "$ssbd_label"
+	reset_block_cb
+}
+
Index: package/e2fsprogs/files/blkmount.sh
===================================================================
--- package/e2fsprogs/files/blkmount.sh	(revision 0)
+++ package/e2fsprogs/files/blkmount.sh	(revision 0)
@@ -0,0 +1,43 @@
+#!/bin/sh
+# Copyright (C) 2010 Vertical Communications
+
+config_mount_by_section() {
+	local cfg="$1"
+
+	mount_cb() {
+		local cfg="$1"
+		local device="$2"
+		shift
+		local target="$2"
+		local cfgdevice="$3"
+		local fstype="$4"
+		local options="$5"
+		local enabled="$6"
+		local enabled_fsck="$7"
+		local uuid="$8"
+		local label="$9"
+		local found_device=""
+		local fsck_type=""
+		
+		found_device="$(libmount_find_device_by_id "$uuid" "$label" "$device" "$cfgdevice")"
+		if [ -n "$found_device" ]; then
+			[ "$enabled_fsck" -eq 1 ] && fsck_type="`libmount_fsck_fs_type "$found_device" "$fstype"`"
+			[ -n "$fsck_type" ] && {
+				grep -q "$found_device" /proc/swaps || grep -q "$found_device" /proc/mounts || {
+					libmount_fsck "$found_device" "$fsck_type" "$enabled_fsck"
+				}
+			}				
+	
+			config_create_mount_fstab_entry "$found_device" "$target" "$fstype" "$options" "$enabled" 
+			grep -q "$found_device" /proc/swaps || grep -q "$found_device" /proc/mounts || {
+				[ "$enabled" -eq 1 ] && mkdir -p "$target" && mount "$target" 2>&1 | tee /proc/self/fd/2 | logger -t 'fstab'
+			}
+		fi
+		return 0	
+	}
+	config_get_mount "$cfg"
+	reset_block_cb
+}
+
+
+
Index: package/e2fsprogs/files/e2fsck.sh
===================================================================
--- package/e2fsprogs/files/e2fsck.sh	(revision 0)
+++ package/e2fsprogs/files/e2fsck.sh	(revision 0)
@@ -0,0 +1,32 @@
+#!/bin/sh
+# Copyright (C) 2010 Vertical Communications
+
+fsck_e2fsck() {
+	e2fsck -p "$device" 2>&1 | logger -t "fstab: e2fsck ($device)"
+	local status="$?"
+	case "$status" in
+		0|1) ;; #success
+		2) reboot;;
+		4) echo "e2fsck ($device): Warning! Uncorrected errors."| logger -t fstab
+			return 1
+			;;
+		*) echo "e2fsck ($device): Error $status. Check not complete."| logger -t fstab;;
+	esac
+	return 0
+}
+
+fsck_ext2() {
+	fsck_e2fsck "$@"
+}
+
+fsck_ext3() {
+	fsck_e2fsck "$@"
+}
+
+fsck_ext4() {
+	fsck_e2fsck "$@"
+}
+
+append libmount_known_fsck "ext2"
+append libmount_known_fsck "ext3"
+append libmount_known_fsck "ext4"
Index: package/e2fsprogs/files/blkfsck.sh
===================================================================
--- package/e2fsprogs/files/blkfsck.sh	(revision 0)
+++ package/e2fsprogs/files/blkfsck.sh	(revision 0)
@@ -0,0 +1,29 @@
+#!/bin/sh
+# Copyright 2010 Vertical Communications
+
+libmount_fsck_fs_type() {
+	local device="$1"
+	local fstype="$2"
+	local TYPE
+	local echo_type=""
+	
+	eval "$(blkid -s TYPE $device | cut -f2 -d:)"
+
+	if [ "$fstype" = "" ] || [ "$fstype" = "$TYPE" ]; then
+		echo_type="$TYPE"
+	elif [ -n "$fstype" ]; then
+		# extX detection may detect a lower level than is actually on the device
+		# additionally we may be forcing a higher level to be mounted as a lower level
+		if [ "$fstype" = "ext4" ] || [ "$fstype" = "ext3" ] || [ "$fstype" = "ext2" ]; then
+			if [ "$TYPE" = "ext2" ] || [ "$TYPE" = "ext3" ] || [ "$TYPE" = "ext4" ]; then
+				echo_type="$fstype"
+			fi
+		fi
+	else 
+		logger -t 'fstab' "fsck: Specified filesystem type $fstype does not match detected filesystem type $TYPE"
+	fi
+	echo "$echo_type"
+	return 0
+}
+
+
Index: package/e2fsprogs/files/blkid.uci-defaults
===================================================================
--- package/e2fsprogs/files/blkid.uci-defaults	(revision 0)
+++ package/e2fsprogs/files/blkid.uci-defaults	(revision 0)
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+cfgsect="$(uci add fstab plugin)"
+uci set fstab."$cfgsect".plugin_path="/lib/functions/block/blkuci.sh"
+cfgsect="$(uci add fstab swap_plugin)"
+uci set fstab."$cfgsect".plugin_path="/lib/functions/block/blkswap.sh"
+cfgsect="$(uci add fstab mount_plugin)"
+uci set fstab."$cfgsect".plugin_path="/lib/functions/block/blkmount.sh"
+cfgsect="$(uci add fstab fsck_plugin)"
+uci set fstab."$cfgsect".plugin_path="/lib/functions/block/blkfsck.sh"
+uci commit
+
Index: package/e2fsprogs/files/blkswap.sh
===================================================================
--- package/e2fsprogs/files/blkswap.sh	(revision 0)
+++ package/e2fsprogs/files/blkswap.sh	(revision 0)
@@ -0,0 +1,40 @@
+#!/bin/sh
+# Copyright 2010 Vertical Communications
+
+libmount_is_swap_device() {
+	local device="$1"
+	local TYPE
+	eval "$(blkid -s TYPE $device | cut -f2 -d:)"
+	[ "$TYPE" = "swap" ] && return 0
+	return 1
+}
+
+config_swapon_by_section() {
+	local cfg="$1"
+
+	swap_cb() {
+		local cfg="$1"
+		local device="$2"
+		local cfgdevice="$3"
+		local enabled="$4"
+		local uuid="$5"
+		local label="$6"
+		
+		local found_device=""
+		local fsck_type=""
+		
+		found_device="$(libmount_find_device_by_id "$uuid" "$label" "$device" "$cfgdevice")"
+
+		if [ -n "$found_device" ]; then
+			config_create_swap_fstab_entry "$found_device" "$enabled"
+			grep -q "$found_device" /proc/swaps || grep -q "$found_device" /proc/mounts || {
+				[ "$enabled" -eq 1 ] && swapon "$found_device" | tee /proc/self/fd/2 | logger -t	 'fstab'
+			}
+		fi
+		return 0	
+	}
+	config_get_swap "$cfg"
+	reset_block_cb
+}
+
+
Index: package/e2fsprogs/Makefile
===================================================================
--- package/e2fsprogs/Makefile	(revision 19533)
+++ package/e2fsprogs/Makefile	(working copy)
@@ -155,8 +155,10 @@
 	ln -sf mke2fs $(1)/usr/sbin/mkfs.ext4
 	$(INSTALL_DIR) $(1)/usr/lib
 	$(CP) $(foreach lib,com_err e2p,$(PKG_INSTALL_DIR)/usr/lib/lib$(lib).so.*) $(1)/usr/lib/
-	$(INSTALL_DIR) $(1)/etc/init.d
-	$(INSTALL_BIN) ./files/e2fsck.init $(1)/etc/init.d/e2fsck
+	$(INSTALL_DIR) $(1)/etc/uci-defaults
+	$(INSTALL_BIN) ./files/e2fsck.uci-defaults $(1)/etc/uci-defaults/e2fsck
+	$(INSTALL_DIR) $(1)/lib/functions/block
+	$(INSTALL_BIN) ./files/e2fsck.sh $(1)/lib/functions/block/
 
 endef
 
@@ -173,6 +175,8 @@
 define Package/libblkid/install
 	$(INSTALL_DIR) $(1)/usr/lib
 	$(CP) $(PKG_INSTALL_DIR)/usr/lib/libblkid.so.* $(1)/usr/lib/
+	$(INSTALL_DIR) $(1)/etc/uci-defaults
+	$(INSTALL_BIN) ./files/blkid.uci-defaults $(1)/etc/uci-defaults/blkid
 endef
 
 define Package/libext2fs/install
@@ -198,6 +202,11 @@
 define Package/blkid/install
 	$(INSTALL_DIR) $(1)/usr/sbin
 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/blkid $(1)/usr/sbin/
+	$(INSTALL_DIR) $(1)/lib/functions/block
+	$(INSTALL_BIN) ./files/blkuci.sh $(1)/lib/functions/block/
+	$(INSTALL_BIN) ./files/blkmount.sh $(1)/lib/functions/block/
+	$(INSTALL_BIN) ./files/blkfsck.sh $(1)/lib/functions/block/
+	$(INSTALL_BIN) ./files/blkswap.sh $(1)/lib/functions/block/
 endef
 
 $(eval $(call BuildPackage,e2fsprogs))
Index: package/util-linux-ng/files/swap.sh
===================================================================
--- package/util-linux-ng/files/swap.sh	(revision 0)
+++ package/util-linux-ng/files/swap.sh	(revision 0)
@@ -0,0 +1,35 @@
+#!/bin/sh
+# Copyright 2010 Vertical Communications
+
+libmount_is_swap_device() {
+	return 0
+}
+
+config_swapon_by_section() {
+	local cfg="$1"
+
+	swap_cb() {
+		local cfg="$1"
+		local device="$3"
+		local enabled="$4"
+		local uuid="$5"
+		local label="$6"
+		
+		[ -n "$uuid" ] && logger -t 'fstab' "uuid specified for swap device but required package blkid not installed"
+		[ -n "$label" ] && logger -t 'fstab' "label specified for swap device but required package blkid not installed"
+
+		if [ -n "$device" ] && [ -e "$device" ]; then
+			config_create_swap_fstab_entry "$device" "$enabled"
+			grep -q "$device" /proc/swaps || grep -q "$device" /proc/mounts || {
+				[ "$enabled" -eq 1 ] && swapon "$device" | tee /proc/self/fd/2 | logger -t 'fstab'
+			}
+		fi
+		return 0	
+	}
+	config_get_swap "$cfg"
+	reset_block_cb
+}
+
+config_load_block_plugins swap_plugin
+
+
Index: package/util-linux-ng/files/swap.uci-defaults
===================================================================
--- package/util-linux-ng/files/swap.uci-defaults	(revision 0)
+++ package/util-linux-ng/files/swap.uci-defaults	(revision 0)
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+cfgsect="$(uci add fstab plugin)"
+uci set fstab."$cfgsect".plugin_path="/lib/functions/block/swap.sh"
+uci commit
+
Index: package/util-linux-ng/Makefile
===================================================================
--- package/util-linux-ng/Makefile	(revision 19533)
+++ package/util-linux-ng/Makefile	(working copy)
@@ -144,6 +144,10 @@
 	$(INSTALL_DIR) $(1)/sbin
 	$(INSTALL_BIN) $(PKG_BUILD_DIR)/disk-utils/mkswap $(PKG_BUILD_DIR)/mount/swapon $(1)/sbin/
 	ln -sf swapon $(1)/sbin/swapoff
+	$(INSTALL_DIR) $(1)/etc/uci-defaults
+	$(INSTALL_BIN) ./files/swap.uci-defaults $(1)/etc/uci-defaults/swap-utils
+	$(INSTALL_DIR) $(1)/lib/functions/block
+	$(INSTALL_BIN) ./files/swap.sh $(1)/lib/functions/block/
 endef
 
 define Package/hwclock/install

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to