add the block-mount package by Daniel Dickinson (cshore), replacing existing automount functionality
SVN-Revision: 19877master
parent
87298f0de2
commit
bfeb96126d
@ -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 |
|
@ -0,0 +1,86 @@ |
|||||||
|
#
|
||||||
|
# Copyright (C) 2006-2009 OpenWrt.org
|
||||||
|
# Copyright 2010 Vertical Communications
|
||||||
|
# This is free software, licensed under the GNU General Public License v2.
|
||||||
|
# See /LICENSE for more information.
|
||||||
|
#
|
||||||
|
|
||||||
|
include $(TOPDIR)/rules.mk |
||||||
|
|
||||||
|
PKG_NAME:=block-mount
|
||||||
|
PKG_VERSION:=0.1.0
|
||||||
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
|
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
||||||
|
|
||||||
|
include $(INCLUDE_DIR)/package.mk |
||||||
|
|
||||||
|
define Package/block-mount/Default |
||||||
|
SECTION:=base
|
||||||
|
CATEGORY:=Base system
|
||||||
|
endef |
||||||
|
|
||||||
|
define Package/block-mount |
||||||
|
$(call Package/block-mount/Default)
|
||||||
|
TITLE:=Block device mounting and checking
|
||||||
|
endef |
||||||
|
|
||||||
|
define Package/block-mount/config |
||||||
|
select BUSYBOX_CONFIG_MKSWAP
|
||||||
|
select BUSYBOX_CONFIG_FEATURE_MKSWAP_UUID
|
||||||
|
select BUSYBOX_CONFIG_SWAPONOFF
|
||||||
|
select BUSYBOX_CONFIG_BLKID
|
||||||
|
select BUSYBOX_CONFIG_FEATURE_VOLUMEID_EXT
|
||||||
|
select BUSYBOX_CONFIG_FEATURE_VOLUMEID_REISERFS
|
||||||
|
select BUSYBOX_CONFIG_FEATURE_VOLUMEID_FAT
|
||||||
|
select BUSYBOX_CONFIG_FEATURE_VOLUMEID_HFS
|
||||||
|
select BUSYBOX_CONFIG_FEATURE_VOLUMEID_JFS
|
||||||
|
select BUSYBOX_CONFIG_FEATURE_VOLUMEID_XFS
|
||||||
|
select BUSYBOX_CONFIG_FEATURE_VOLUMEID_NTFS
|
||||||
|
select BUSYBOX_CONFIG_FEATURE_VOLUMEID_SYSV
|
||||||
|
select BUSYBOX_CONFIG_FEATURE_VOLUMEID_OCFS2
|
||||||
|
select BUSYBOX_CONFIG_FEATURE_VOLUMEID_ISO9660
|
||||||
|
select BUSYBOX_CONFIG_FEATURE_VOLUMEID_UDF
|
||||||
|
select BUSYBOX_CONFIG_FEATURE_VOLUMEID_LINUXSWAP
|
||||||
|
select BUSYBOX_CONFIG_FEATURE_VOLUMEID_CRAMFS
|
||||||
|
select BUSYBOX_CONFIG_FEATURE_VOLUMEID_ROMFS
|
||||||
|
endef |
||||||
|
|
||||||
|
define Package/block-mount/description |
||||||
|
Scripts used to mount and check block devices (filesystems and swap)
|
||||||
|
endef |
||||||
|
|
||||||
|
define Package/block-hotplug |
||||||
|
$(call Package/block-mount/Default)
|
||||||
|
TITLE:=Automount and autocheck block devices
|
||||||
|
DEPENDS:=block-mount hotplug2
|
||||||
|
endef |
||||||
|
|
||||||
|
define Package/block-hotplug/description |
||||||
|
Scripts used to automatically check and mount filesystem and/or swap
|
||||||
|
endef |
||||||
|
|
||||||
|
define Build/Compile |
||||||
|
endef |
||||||
|
|
||||||
|
define Package/block-mount/install |
||||||
|
$(INSTALL_DIR) $(1)/etc/init.d
|
||||||
|
$(INSTALL_BIN) ./files/fstab.init $(1)/etc/init.d/fstab
|
||||||
|
$(INSTALL_DIR) $(1)/etc/config
|
||||||
|
$(INSTALL_DATA) ./files/fstab.config $(1)/etc/config/fstab
|
||||||
|
$(INSTALL_DIR) $(1)/lib/functions
|
||||||
|
$(INSTALL_DATA) ./files/mount.sh $(1)/lib/functions/
|
||||||
|
$(INSTALL_DATA) ./files/fsck.sh $(1)/lib/functions/
|
||||||
|
$(INSTALL_DATA) ./files/block.sh $(1)/lib/functions/
|
||||||
|
endef |
||||||
|
|
||||||
|
define Package/block-hotplug/install |
||||||
|
$(INSTALL_DIR) $(1)/etc/hotplug.d/block
|
||||||
|
$(INSTALL_DATA) ./files/10-swap $(1)/etc/hotplug.d/block/
|
||||||
|
$(INSTALL_DATA) ./files/20-fsck $(1)/etc/hotplug.d/block/
|
||||||
|
$(INSTALL_DATA) ./files/40-mount $(1)/etc/hotplug.d/block/
|
||||||
|
endef |
||||||
|
|
||||||
|
$(eval $(call BuildPackage,block-mount)) |
||||||
|
$(eval $(call BuildPackage,block-hotplug)) |
||||||
|
|
@ -0,0 +1,78 @@ |
|||||||
|
#!/bin/sh |
||||||
|
# Copyright (C) 2009-2010 OpenWrt.org |
||||||
|
# Copyright (C) 2010 Vertical Communications |
||||||
|
# This is free software, licensed under the GNU General Public License v2. |
||||||
|
# See /LICENSE for more information. |
||||||
|
# |
||||||
|
|
||||||
|
. /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 ] && { |
||||||
|
grep -q "$use_device" /proc/swaps || grep -q "$use_device" /proc/mounts || { |
||||||
|
swapon "$use_device" |
||||||
|
} |
||||||
|
} |
||||||
|
reset_dev_section_cb |
||||||
|
;; |
||||||
|
remove) |
||||||
|
grep -q "/dev/$device" /proc/swaps && { |
||||||
|
swapoff "/dev/$device" |
||||||
|
} |
||||||
|
;; |
||||||
|
esac |
||||||
|
fi |
||||||
|
|
@ -0,0 +1,83 @@ |
|||||||
|
#!/bin/sh |
||||||
|
# Copyright (C) 2009-2010 OpenWrt.org |
||||||
|
# Copyright (C) 2010 Vertical Communications |
||||||
|
# This is free software, licensed under the GNU General Public License v2. |
||||||
|
# See /LICENSE for more information. |
||||||
|
# |
||||||
|
|
||||||
|
. /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 |
||||||
|
local hotplug_blkid_fstype_match |
||||||
|
|
||||||
|
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 |
||||||
|
fsck_type="$mds_mount_fstype" |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
[ -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="" && hotplug_blkid_fstype_match=0 |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
[ "$do_fsck" -eq 1 ] && { |
||||||
|
libmount_fsck "$use_device" "$fsck_type" "$do_fsck" |
||||||
|
} |
||||||
|
|
||||||
|
reset_dev_section_cb |
||||||
|
;; |
||||||
|
esac |
||||||
|
fi |
||||||
|
|
@ -0,0 +1,84 @@ |
|||||||
|
#!/bin/sh |
||||||
|
# Copyright (C) 2009-2010 OpenWrt.org |
||||||
|
# Copyright (C) 2010 Vertical Communications |
||||||
|
# This is free software, licensed under the GNU General Public License v2. |
||||||
|
# See /LICENSE for more information. |
||||||
|
# |
||||||
|
|
||||||
|
. /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 |
||||||
|
|
@ -0,0 +1,262 @@ |
|||||||
|
#!/bin/sh |
||||||
|
# Copyright 2010 Vertical Communications |
||||||
|
# This is free software, licensed under the GNU General Public License v2. |
||||||
|
# See /LICENSE for more information. |
||||||
|
# |
||||||
|
|
||||||
|
. /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" |
||||||
|
shift |
||||||
|
dmc_is_rootfs="$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" |
||||||
|
shift |
||||||
|
dmds_is_rootfs="$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 |
||||||
|
local gm_is_rootfs |
||||||
|
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 |
||||||
|
config_get_bool gm_is_rootfs "$1" is_rootfs 0 |
||||||
|
mount_cb "$gm_cfg" "$gm_param" "$gm_target" "$gm_device" "$gm_fstype" "$gm_options" "$gm_enabled" "$gm_enabled_fsck" "$gm_uuid" "$gm_label" "$gm_is_rootfs" |
||||||
|
} |
||||||
|
|
||||||
|
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')" |
||||||
|
|
||||||
|
mkdir -p /var/lock |
||||||
|
lock /var/lock/fstab.lck |
||||||
|
cat /tmp/fstab | grep -E -v "^$device[[:blank:]]" >>"$fstabnew" |
||||||
|
[ "$enabled" -eq 1 ] && echo "$device none swap sw 0 0" >> "$fstabnew" |
||||||
|
cat "$fstabnew" >/tmp/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')" |
||||||
|
|
||||||
|
mkdir -p /var/lock |
||||||
|
lock /var/lock/fstab.lck |
||||||
|
cat /tmp/fstab | grep -E -v "^$device[[:blank:]]" | grep -v "$target" >>"$fstabnew" |
||||||
|
echo "$device $target $fstype $options 0 0" >>"$fstabnew" |
||||||
|
cat "$fstabnew" >/tmp/fstab |
||||||
|
lock -u /var/lock/fstab.lck |
||||||
|
rm -f $fstabnew |
||||||
|
} |
||||||
|
|
||||||
|
libmount_find_token() { |
||||||
|
local token="$1" |
||||||
|
local value="$2" |
||||||
|
local device |
||||||
|
device="$(blkid | grep "$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 |
||||||
|
[ -n "$device" ] && [ "$device" != "$found_device" ] && { |
||||||
|
found_device="" |
||||||
|
} |
||||||
|
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= |
||||||
|
local msbd_is_rootfs |
||||||
|
local msbd_blkid_fstype_match= |
||||||
|
mount_cb() { |
||||||
|
local mc_cfg="$1" |
||||||
|
local mc_device="$2" |
||||||
|
shift |
||||||
|
local mc_target="$2" |
||||||
|
local mc_cfgdevice="$3" |
||||||
|
local mc_fstype="$4" |
||||||
|
local mc_uuid="$8" |
||||||
|
local mc_label="$9" |
||||||
|
shift |
||||||
|
local mc_is_rootfs="$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="$mc_target" |
||||||
|
msbd_mount_device="$mc_found_device" |
||||||
|
msbd_fstype="$mc_fstype" |
||||||
|
msbd_options="$4" |
||||||
|
msbd_enabled="$5" |
||||||
|
msbd_enabled_fsck="$6" |
||||||
|
msbd_uuid="$7" |
||||||
|
msbd_label="$8" |
||||||
|
msbd_is_rootfs="$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" "$msbd_is_rootfs" |
||||||
|
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 |
||||||
|
} |
||||||
|
|
||||||
|
|
@ -0,0 +1,36 @@ |
|||||||
|
#!/bin/sh |
||||||
|
# Copyright 2010 Vertical Communications |
||||||
|
# This is free software, licensed under the GNU General Public License v2. |
||||||
|
# See /LICENSE for more information. |
||||||
|
# |
||||||
|
|
||||||
|
libmount_fsck() { |
||||||
|
local device="$1" |
||||||
|
local fsck_fstype="$2" |
||||||
|
local fsck_enabled="$3" |
||||||
|
local known_type |
||||||
|
local found_fsck=0 |
||||||
|
|
||||||
|
|
||||||
|
[ -n "$fsck_type" ] && [ "$fsck_type" != "swap" ] && { |
||||||
|
grep -q "$device" /proc/swaps || grep -q "$device" /proc/mounts || { |
||||||
|
[ -e "$device" ] && [ "$fsck_enabled" -eq 1 ] && { |
||||||
|
for known_type in $libmount_known_fsck; do |
||||||
|
if [ "$known_type" = "$fsck_fstype" ]; then |
||||||
|
fsck_${known_type} "$device" |
||||||
|
found_fsck=1 |
||||||
|
break |
||||||
|
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_known_fsck="" |
||||||
|
|
||||||
|
include /lib/functions/fsck |
||||||
|
|
@ -1,10 +1,20 @@ |
|||||||
|
config global automount |
||||||
|
option from_fstab 1 |
||||||
|
option anon_mount 1 |
||||||
|
|
||||||
|
config global autoswap |
||||||
|
option from_fstab 1 |
||||||
|
option anon_swap 0 |
||||||
|
|
||||||
config mount |
config mount |
||||||
option target /home |
option target /home |
||||||
option device /dev/sda1 |
option device /dev/sda1 |
||||||
option fstype ext3 |
option fstype ext3 |
||||||
option options rw,sync |
option options rw,sync |
||||||
option enabled 0 |
option enabled 0 |
||||||
|
option enabled_fsck 0 |
||||||
|
|
||||||
config swap |
config swap |
||||||
option device /dev/sda2 |
option device /dev/sda2 |
||||||
option enabled 0 |
option enabled 0 |
||||||
|
|
@ -0,0 +1,89 @@ |
|||||||
|
#!/bin/sh |
||||||
|
# Copyright 2010 Vertical Communications |
||||||
|
# This is free software, licensed under the GNU General Public License v2. |
||||||
|
# See /LICENSE for more information. |
||||||
|
# |
||||||
|
|
||||||
|
|
||||||
|
. /lib/functions/block.sh |
||||||
|
. /lib/functions/fsck.sh |
||||||
|
|
||||||
|
config_mount_by_section() { |
||||||
|
local cfg="$1" |
||||||
|
local find_rootfs="$2" |
||||||
|
|
||||||
|
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" |
||||||
|
shift |
||||||
|
local is_rootfs="$9" |
||||||
|
shift |
||||||
|
local found_device="" |
||||||
|
local fsck_type="" |
||||||
|
|
||||||
|
found_device="$(libmount_find_device_by_id "$uuid" "$label" "$device" "$cfgdevice")" |
||||||
|
if [ -n "$found_device" ]; then |
||||||
|
if [ -z "$find_rootfs" ] || [ "$find_rootfs" -eq 0 ] || [ "$is_rootfs" -eq 1 ]; then |
||||||
|
[ "$enabled_fsck" -eq 1 ] && { |
||||||
|
grep -q "$found_device" /proc/swaps || grep -q "$found_device" /proc/mounts || { |
||||||
|
libmount_fsck "$found_device" "$fsck_type" "$enabled_fsck" |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
[ "$is_rootfs" -eq 1 ] && [ "$find_rootfs" -eq 1 ] && { |
||||||
|
target=/overlay |
||||||
|
} |
||||||
|
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 |
||||||
|
fi |
||||||
|
[ "$is_rootfs" -eq 1 ] && [ "$find_rootfs" -eq 1 ] && { |
||||||
|
rootfs_found=1 |
||||||
|
} |
||||||
|
return 0 |
||||||
|
} |
||||||
|
config_get_mount "$cfg" |
||||||
|
reset_block_cb |
||||||
|
} |
||||||
|
|
||||||
|
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 uuid |
||||||
|
local label |
||||||
|
|
||||||
|
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 |
||||||
|
} |
@ -1,35 +0,0 @@ |
|||||||
#!/bin/sh /etc/rc.common |
|
||||||
# Copyright (C) 2008 OpenWrt.org |
|
||||||
# Vasilis Tsiligiannis <acinonyxs@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 |
|
||||||
} |
|
||||||
|
|
@ -0,0 +1,35 @@ |
|||||||
|
#!/bin/sh |
||||||
|
# Copyright 2010 Vertical Communications |
||||||
|
# This is free software, licensed under the GNU General Public License v2. |
||||||
|
# See /LICENSE for more information. |
||||||
|
# |
||||||
|
|
||||||
|
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" |
Loading…
Reference in new issue