Improved checking for already mounted devices. More readable log format. Added logging of fsck(8) output. Added adding setuid also to /sbin/mount* when USERUMOUNT set to YES. Added error logging of failed mounts.
This commit is contained in:
parent
8a9e8d24f8
commit
3dd2a79948
141
automount
141
automount
|
|
@ -124,30 +124,23 @@ fi
|
||||||
|
|
||||||
if [ "${USERUMOUNT}" = YES ]
|
if [ "${USERUMOUNT}" = YES ]
|
||||||
then
|
then
|
||||||
chmod u+s /sbin/umount # WHEEL group member
|
chmod u+s /sbin/umount 1> /dev/null 2> /dev/null # WHEEL group member
|
||||||
sysctl vfs.usermount=1 # allow USER to mount
|
chmod u+s /sbin/mount* 1> /dev/null 2> /dev/null # WHEEL group member
|
||||||
|
sysctl vfs.usermount=1 1> /dev/null 2> /dev/null # allow USER to mount
|
||||||
fi
|
fi
|
||||||
|
|
||||||
__create_mount_point() { # 1=DEV
|
__create_mount_point() { # 1=DEV
|
||||||
mkdir -p ${MNT}
|
mkdir -p ${MNT}
|
||||||
if ! [ "${USER}" = 0 ]
|
if [ "${USER}" != 0 ]
|
||||||
then
|
then
|
||||||
chown ${USER}:$( id -g -n ${USER} ) ${MNT}
|
chown ${USER}:$( id -g -n ${USER} ) ${MNT}
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
__check_already_mounted() { # 1=MNT
|
|
||||||
if mount | grep " ${1} " 1> /dev/null 2> /dev/null
|
|
||||||
then
|
|
||||||
__log "${DEV}:already mounted (ntfs)"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
__state_add() { # 1=DEV 2=PROVIDER 3=MNT
|
__state_add() { # 1=DEV 2=PROVIDER 3=MNT
|
||||||
if grep -E "${3}$" ${STATE} 1> /dev/null 2> /dev/null
|
if grep -E "${3}$" ${STATE} 1> /dev/null 2> /dev/null
|
||||||
then
|
then
|
||||||
__log "${1}:duplicated '${STATE}'"
|
__log "${1}: duplicated '${STATE}'"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
echo "${1} ${2} ${3}" >> ${STATE}
|
echo "${1} ${2} ${3}" >> ${STATE}
|
||||||
|
|
@ -161,12 +154,34 @@ __state_remove() { # 1=MNT
|
||||||
__remove_dir() { # 1=TARGET
|
__remove_dir() { # 1=TARGET
|
||||||
if [ "${REMOVEDIRS}" = YES ]
|
if [ "${REMOVEDIRS}" = YES ]
|
||||||
then
|
then
|
||||||
find "${1}" -type d -empty -maxdepth 1 -exec rm -r {} '+'
|
find "${1}" -type d -empty -maxdepth 1 -exec rm -r {} '+' 2> /dev/null
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
__log() { # @=MESSAGE
|
__log() { # @=MESSAGE
|
||||||
echo $( date +"${DATEFMT}" ) ${@} >> ${LOG}
|
echo $( date +"${DATEFMT}" ) "${@}" >> ${LOG}
|
||||||
|
}
|
||||||
|
|
||||||
|
__check_already_mounted() { # 1=(-d|-m) 2=(DEV|MNT)
|
||||||
|
local MOUNT="$( mount )"
|
||||||
|
case ${1} in
|
||||||
|
(-d)
|
||||||
|
if echo "${MOUNT}" | grep -q "^${2} on "
|
||||||
|
then
|
||||||
|
local MOUNT="$( echo "${MOUNT}" | grep "^${2} on " | cut -d ' ' -f 3-255 | cut -d '(' -f 1 | sed s/.$// )"
|
||||||
|
__log "${DEV}: -d already mounted on '${MOUNT}' mount point"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
(-m)
|
||||||
|
if echo "${MOUNT}" | grep -q " on ${2} "
|
||||||
|
then
|
||||||
|
local DEVICE="$( echo "${MOUNT}" | grep " on ${2} " | awk '{print $1}' )"
|
||||||
|
__log "${DEVICE}: -m already mounted on '${2}' mount point"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
DEV=/dev/${1}
|
DEV=/dev/${1}
|
||||||
|
|
@ -175,25 +190,33 @@ case ${2} in
|
||||||
(attach)
|
(attach)
|
||||||
ADD=0
|
ADD=0
|
||||||
MNT="${MNTPREFIX}/${1}"
|
MNT="${MNTPREFIX}/${1}"
|
||||||
__check_already_mounted ${MNT}
|
__check_already_mounted -d ${DEV}
|
||||||
|
__check_already_mounted -m ${MNT}
|
||||||
if [ "${ATIME}" = NO ]
|
if [ "${ATIME}" = NO ]
|
||||||
then
|
then
|
||||||
OPTS="noatime"
|
OPTS="noatime"
|
||||||
fi
|
fi
|
||||||
while ! head -c 1 ${DEV} 1> /dev/null 2> /dev/null
|
while ! head -c 1 ${DEV} 1> /dev/null 2> /dev/null
|
||||||
do
|
do
|
||||||
sleep 1
|
sleep 0.2
|
||||||
done
|
done
|
||||||
case $( file -b -L -s ${DEV} | sed -E 's/label:\ \".*\"//g' ) in
|
case $( file -b -L -s ${DEV} | sed -E 's/label:\ \".*\"//g' ) in
|
||||||
(*FAT*) # must be before NTFS section: newfs_msdos -O NTFS -L NTFS
|
(*FAT*) # must be before NTFS section: newfs_msdos -O NTFS -L NTFS
|
||||||
__create_mount_point ${DEV}
|
__create_mount_point ${DEV}
|
||||||
fsck_msdosfs -y ${DEV}
|
fsck_msdosfs -y ${DEV} \
|
||||||
|
| while read LINE
|
||||||
|
do
|
||||||
|
__log "${DEV}: fsck_msdosfs ${LINE}"
|
||||||
|
done
|
||||||
if mount_msdosfs -o large -D ${CODEPAGE} -L ${ENCODING} \
|
if mount_msdosfs -o large -D ${CODEPAGE} -L ${ENCODING} \
|
||||||
-m 644 -M 755 ${DEV} ${MNT}
|
-m 644 -M 755 ${DEV} ${MNT}
|
||||||
then
|
then
|
||||||
ADD=1
|
ADD=1
|
||||||
|
else
|
||||||
|
__log "${DEV}: mount failed (fat) 'mount_msdosfs -o large -D ${CODEPAGE} -L ${ENCODING} -m 644 -M 755 ${DEV} ${MNT}'"
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
__log "${DEV}:mount (fat)"
|
__log "${DEV}: mount (fat)"
|
||||||
;;
|
;;
|
||||||
(*NTFS*) # must be after FAT section: newfs_msdos -O NTFS -L NTFS
|
(*NTFS*) # must be after FAT section: newfs_msdos -O NTFS -L NTFS
|
||||||
__create_mount_point ${DEV}
|
__create_mount_point ${DEV}
|
||||||
|
|
@ -202,6 +225,9 @@ case ${2} in
|
||||||
if ntfs-3g -o ${OPTS} ${DEV} ${MNT}
|
if ntfs-3g -o ${OPTS} ${DEV} ${MNT}
|
||||||
then
|
then
|
||||||
ADD=1
|
ADD=1
|
||||||
|
else
|
||||||
|
__log "${DEV}: mount failed (ntfs) 'ntfs-3g -o ${OPTS} ${DEV} ${MNT}'"
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
if ! [ "${USER}" = 0 ]
|
if ! [ "${USER}" = 0 ]
|
||||||
|
|
@ -211,45 +237,76 @@ case ${2} in
|
||||||
if mount_ntfs ${OPTS} -o noatime ${DEV} ${MNT}
|
if mount_ntfs ${OPTS} -o noatime ${DEV} ${MNT}
|
||||||
then
|
then
|
||||||
ADD=1
|
ADD=1
|
||||||
|
else
|
||||||
|
__log "${DEV}: mount failed (ntfs) 'ntfs-3g -o ${OPTS} ${DEV} ${MNT}'"
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
__log "${DEV}:mount (ntfs)"
|
__log "${DEV}: mount (ntfs)"
|
||||||
;;
|
;;
|
||||||
(*ext2*)
|
(*ext2*)
|
||||||
__create_mount_point ${DEV}
|
__create_mount_point ${DEV}
|
||||||
fsck.ext2 -y ${DEV}
|
fsck.ext2 -y ${DEV} \
|
||||||
|
| while read LINE
|
||||||
|
do
|
||||||
|
__log "${DEV}: fsck.ext2 ${LINE}"
|
||||||
|
done
|
||||||
if mount -t ext2fs -o ${OPTS} ${DEV} ${MNT}
|
if mount -t ext2fs -o ${OPTS} ${DEV} ${MNT}
|
||||||
then
|
then
|
||||||
ADD=1
|
ADD=1
|
||||||
|
else
|
||||||
|
__log "${DEV}: mount failed (ext2) 'mount -t ext2fs -o ${OPTS} ${DEV} ${MNT}'"
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
__log "${DEV}:mount (ext2)"
|
__log "${DEV}: mount (ext2)"
|
||||||
;;
|
;;
|
||||||
(*ext3*)
|
(*ext3*)
|
||||||
__create_mount_point ${DEV}
|
__create_mount_point ${DEV}
|
||||||
fsck.ext3 -y ${DEV}
|
fsck.ext3 -y ${DEV} \
|
||||||
|
| while read LINE
|
||||||
|
do
|
||||||
|
__log "${DEV}: fsck.ext3 ${LINE}"
|
||||||
|
done
|
||||||
if mount -t ext2fs -o ${OPTS} ${DEV} ${MNT}
|
if mount -t ext2fs -o ${OPTS} ${DEV} ${MNT}
|
||||||
then
|
then
|
||||||
ADD=1
|
ADD=1
|
||||||
|
else
|
||||||
|
__log "${DEV}: mount failed (ext3) 'mount -t ext2fs -o ${OPTS} ${DEV} ${MNT}'"
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
__log "${DEV}:mount (ext3)"
|
__log "${DEV}: mount (ext3)"
|
||||||
;;
|
;;
|
||||||
(*ext4*)
|
(*ext4*)
|
||||||
__create_mount_point ${DEV}
|
__create_mount_point ${DEV}
|
||||||
fsck.ext4 -y ${DEV}
|
fsck.ext4 -y ${DEV} \
|
||||||
|
| while read LINE
|
||||||
|
do
|
||||||
|
__log "${DEV}: fsck.ext4 ${LINE}"
|
||||||
|
done
|
||||||
if ext4fuse ${DEV} ${MNT} # sysutils/fusefs-ext4fuse
|
if ext4fuse ${DEV} ${MNT} # sysutils/fusefs-ext4fuse
|
||||||
then
|
then
|
||||||
ADD=1
|
ADD=1
|
||||||
|
else
|
||||||
|
__log "${DEV}: mount failed (ext4) 'ext4fuse ${DEV} ${MNT}'"
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
__log "${DEV}:mount (ext4)"
|
__log "${DEV}: mount (ext4)"
|
||||||
;;
|
;;
|
||||||
(*Unix\ Fast\ File*)
|
(*Unix\ Fast\ File*)
|
||||||
__create_mount_point ${DEV}
|
__create_mount_point ${DEV}
|
||||||
fsck_ufs -C -y ${DEV}
|
fsck_ufs -C -y ${DEV} \
|
||||||
if mount -o ${OPTS} ${DEV} ${MNT}
|
| while read LINE
|
||||||
|
do
|
||||||
|
__log "${DEV}: fsck_ufs ${LINE}"
|
||||||
|
done
|
||||||
|
if mount -t ufs -o ${OPTS} ${DEV} ${MNT}
|
||||||
then
|
then
|
||||||
ADD=1
|
ADD=1
|
||||||
|
else
|
||||||
|
__log "${DEV}: mount failed (ufs) 'mount -t ufs -o ${OPTS} ${DEV} ${MNT}'"
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
__log "${DEV}:mount (ufs)"
|
__log "${DEV}: mount (ufs)"
|
||||||
;;
|
;;
|
||||||
(*)
|
(*)
|
||||||
case $( dd < ${DEV} count=1 2> /dev/null | strings | head -1 ) in
|
case $( dd < ${DEV} count=1 2> /dev/null | strings | head -1 ) in
|
||||||
|
|
@ -258,8 +315,11 @@ case ${2} in
|
||||||
if mount.exfat -o ${OPTS} ${DEV} ${MNT} # sysutils/fusefs-exfat
|
if mount.exfat -o ${OPTS} ${DEV} ${MNT} # sysutils/fusefs-exfat
|
||||||
then
|
then
|
||||||
ADD=1
|
ADD=1
|
||||||
|
else
|
||||||
|
__log "${DEV}: mount failed (exfat) 'mount.exfat -o ${OPTS} ${DEV} ${MNT}'"
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
__log "${DEV}:mount (exfat)"
|
__log "${DEV}: mount (exfat)"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
|
|
@ -271,7 +331,8 @@ case ${2} in
|
||||||
__state_add ${DEV} ${PROVIDER} ${MNT}
|
__state_add ${DEV} ${PROVIDER} ${MNT}
|
||||||
if [ "${USER}" != 0 -a "${FM}" != 0 ]
|
if [ "${USER}" != 0 -a "${FM}" != 0 ]
|
||||||
then
|
then
|
||||||
su - ${USER} -c "env DISPLAY=:0 ${FM} ${MNT} &"
|
# su - ${USER} -c "env DISPLAY=:0 ${FM} ${MNT} &"
|
||||||
|
su - ${USER} -c "env DISPLAY=:0 ${FM} &"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
@ -286,25 +347,17 @@ case ${2} in
|
||||||
then
|
then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
( # put entire umount and find/rm block into background
|
( # put entire umount/find/rm block into background
|
||||||
umount -f ${TARGET}
|
umount -f ${TARGET}
|
||||||
__remove_dir "${TARGET}"
|
__remove_dir "${TARGET}"
|
||||||
__log "${DEV}:removed '${TARGET}'"
|
__log "${DEV}: removed '${TARGET}'"
|
||||||
) &
|
) &
|
||||||
unset TARGET
|
unset TARGET
|
||||||
__log "${DEV}:umount"
|
__log "${DEV}: umount"
|
||||||
done
|
done
|
||||||
__log "${DEV}:detach"
|
__log "${DEV}: detach"
|
||||||
__remove_dir "${MNTPREFIX}/${1}"
|
__remove_dir "${MNTPREFIX}/${1}"
|
||||||
__log "${DEV}:removed '${MNTPREFIX}/${1}'"
|
__log "${DEV}: mount point '${MNTPREFIX}/${1}' removed"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# camcontrol devlist
|
|
||||||
# <INTEL SSDSA2M160G2GC 2CV102HD> at scbus0 target 0 lun 0 (ada0,pass0)
|
|
||||||
# <HTC Android Phone 0100> at scbus4 target 0 lun 0 (pass1,da0)
|
|
||||||
|
|
||||||
# camcontrol devlist | grep -E -o "<.*>" | tr ' ' '-' | tr -d '<>'
|
|
||||||
# INTEL-SSDSA2M160G2GC-2CV102HD
|
|
||||||
# HTC-Android-Phone-0100
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue