blob: 236791910893999b335a49f0436285d42cb85199 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
#!/bin/sh
MOUNT_OPTIONS_DEFAULT="ro,noexec"
MOUNT_OPTIONS_VFAT="umask=0022"
MOUNT_OPTIONS_EXT=""
MOUNT_OPTIONS_NTFS=""
MOUNT_OPTIONS_ISO9660=""
VERBOSE=false
# Source a configuration file that can override mount options if exists
[ -f /etc/automount.conf ] && . /etc/automount.conf
mount_device() {
MOUNT_OPTIONS=""
FSTYPE="$( udevadm info "${1}" "${2}" | awk -v FS== '/ID_FS_TYPE/ {print $2}' )"
DEVNAME="$( udevadm info "${1}" "${2}" | awk -v FS== '/DEVNAME/ {print $2}' )"
case $FSTYPE in
vfat)
MOUNT_OPTIONS="${MOUNT_OPTIONS_VFAT}"
;;
ext[2-4])
MOUNT_OPTIONS="${MOUNT_OPTIONS_EXT}"
;;
ntfs)
MOUNT_OPTIONS="${MOUNT_OPTIONS_NTFS}"
;;
iso9660)
MOUNT_OPTIONS="${MOUNT_OPTIONS_ISO9660}"
;;
"")
if $VERBOSE; then
echo "[INFO][${DEVNAME}] Not a partition with a filesystem!"
fi
return
;;
*)
echo "[WARNING][${DEVNAME}] The filesystem '${FSTYPE}' is not supported!"
return
;;
esac
if [ -n "${MOUNT_OPTIONS_DEFAULT}" ]; then
if [ -z "${MOUNT_OPTIONS}" ]; then
MOUNT_OPTIONS="${MOUNT_OPTIONS_DEFAULT}"
else
MOUNT_OPTIONS="${MOUNT_OPTIONS_DEFAULT},${MOUNT_OPTIONS}"
fi
fi
if $VERBOSE; then
echo "[INFO][${DEVNAME}] Mounting a ${FSTYPE}'s filesystem with options: ${MOUNT_OPTIONS}"
fi
if command -v udisksctl > /dev/null 2>&1; then
if [ -n "${MOUNT_OPTIONS}" ]; then
MOUNT_OPTIONS="-o ${MOUNT_OPTIONS}"
fi
udisksctl mount -t "${FSTYPE}" -b "${DEVNAME}" ${MOUNT_OPTIONS}
elif command -v udisks >/dev/null 2>&1; then
if [ -n "${MOUNT_OPTIONS}" ]; then
MOUNT_OPTIONS="--mount-options ${MOUNT_OPTIONS}"
fi
udisks --mount-fstype "${FSTYPE}" --mount "${DEVNAME}" ${MOUNT_OPTIONS}
else
echo "[ERROR] Unable to find binary for mounting ${DEVNAME}" >&2
return
fi
if [ "$?" -ne "0" ]; then
echo "[ERROR] Failed to mount the device ${DEVNAME} of type ${FSTYPE} with options ${MOUNT_OPTIONS}" >&2
fi
}
# At startup, remove empty directories that may exists
rmdir /media/* > /dev/null 2>&1
# Mount already plugged devices
for DEVICE in $( lsblk -dn | cut -d' ' -f1 ); do
REMOVABLE=$( cat "/sys/block/${DEVICE}/removable" )
if [ "${REMOVABLE}" -eq "1" ]; then
for PART in "/dev/${DEVICE}"*; do
mount_device -n "${PART}"
done
fi
done
# Wait for plug events and mount devices
stdbuf -oL -- udevadm monitor --udev -s block |
while read -r -- _ _ EVENT DEVPATH _
do
if [ "${EVENT}" = "add" ]; then
mount_device -p "/sys/${DEVPATH}"
fi
done
|