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