aboutsummaryrefslogtreecommitdiff
path: root/utils/uvol/files/common.sh
diff options
context:
space:
mode:
Diffstat (limited to 'utils/uvol/files/common.sh')
-rw-r--r--utils/uvol/files/common.sh66
1 files changed, 66 insertions, 0 deletions
diff --git a/utils/uvol/files/common.sh b/utils/uvol/files/common.sh
new file mode 100644
index 000000000..0eee6d432
--- /dev/null
+++ b/utils/uvol/files/common.sh
@@ -0,0 +1,66 @@
+#!/bin/sh
+
+UCI_SPOOLDIR="/var/spool/uvol"
+
+_uvol_init_spooldir() {
+ [ ! -d "$(dirname "$UCI_SPOOLDIR")" ] && mkdir -p "$(dirname "$UCI_SPOOLDIR")"
+ mkdir -m 0700 -p "$UCI_SPOOLDIR"
+}
+
+uvol_uci_add() {
+ local volname="$1"
+ local devname="$2"
+ local mode="$3"
+ local autofs uuid uciname
+
+ uciname=${volname//-/_}
+ uuid="$(/sbin/block info | grep "^$2" | xargs -n 1 echo | grep "^UUID=.*")"
+ [ "$uuid" ] || return 22
+ _uvol_init_spooldir
+ uuid="${uuid:5}"
+ autofs=0
+ [ "$mode" = "ro" ] && autofs=1
+ if [ -e "${UCI_SPOOLDIR}/remove-$1" ]; then
+ rm "${UCI_SPOOLDIR}/remove-$1"
+ fi
+
+ cat >"${UCI_SPOOLDIR}/add-$1" <<EOF
+set fstab.$uciname=mount
+set fstab.$uciname.uuid=$uuid
+set fstab.$uciname.target=/var/run/uvol/$volname
+set fstab.$uciname.options=$mode
+set fstab.$uciname.autofs=$autofs
+set fstab.$uciname.enabled=1
+commit fstab
+EOF
+}
+
+uvol_uci_remove() {
+ local volname="$1"
+ local uciname
+
+ uciname=${volname//-/_}
+ if [ -e "${UCI_SPOOLDIR}/add-$1" ]; then
+ rm "${UCI_SPOOLDIR}/add-$1"
+ return
+ fi
+ _uvol_init_spooldir
+ cat >"${UCI_SPOOLDIR}/remove-$1" <<EOF
+delete fstab.$uciname
+commit fstab
+EOF
+}
+
+uvol_uci_commit() {
+ local volname="$1"
+
+ if [ -e "${UCI_SPOOLDIR}/add-$1" ]; then
+ uci batch < "${UCI_SPOOLDIR}/add-$1"
+ rm "${UCI_SPOOLDIR}/add-$1"
+ elif [ -e "${UCI_SPOOLDIR}/remove-$1" ]; then
+ uci batch < "${UCI_SPOOLDIR}/remove-$1"
+ rm "${UCI_SPOOLDIR}/remove-$1"
+ fi
+
+ return $?
+}