- #!/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=0
- local target="/var/run/uvol/$volname"
- local uuid uciname
-
- [ "$mode" = "ro" ] && autofs=1
- uciname="${volname//[-.]/_}"
- uciname="${uciname//[!([:alnum:]_)]}"
- uuid="$(/sbin/block info | grep "^$2" | xargs -n 1 echo | grep "^UUID=.*")"
- [ "$uuid" ] || return 22
- uuid="${uuid:5}"
-
- case "$uciname" in
- "_meta")
- target="/var/run/uvol/.meta"
- ;;
- "_"*)
- return 1
- ;;
- esac
-
- _uvol_init_spooldir
- 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=$target
- set fstab.$uciname.options=$mode
- set fstab.$uciname.autofs=$autofs
- set fstab.$uciname.enabled=1
- EOF
- }
-
- uvol_uci_remove() {
- local volname="$1"
- local uciname
-
- uciname="${volname//[-.]/_}"
- uciname="${uciname//[!([:alnum:]_)]}"
- 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
- EOF
- }
-
- uvol_uci_commit() {
- local volname="$1"
- local ucibatch
-
- for ucibatch in "${UCI_SPOOLDIR}/"*"-$volname"${volname+*} ; do
- [ -e "$ucibatch" ] || break
- uci batch < "$ucibatch"
- [ $? -eq 0 ] && rm "$ucibatch"
- done
-
- uci commit fstab
- return $?
- }
-
- uvol_uci_init() {
- uci -q get fstab.@uvol[0] && return
- uci add fstab uvol
- uci set fstab.@uvol[-1].initialized=1
- }
|