#!/bin/bash
-# Filename: rebuildfstab
-# Purpose: calls scanpartitions as root and adds entries to /etc/fstab
-# Authors: grml-team (grml.org), (c) Klaus Knopper Nov 2002, (c) Michael Prokop <mika@grml.org>
+# Filename: scripts/grml-udev-rebuildfstab
+# Purpose: udev script to update /etc/fstab
+# Authors: grml-team (grml.org)
# Bug-Reports: see http://grml.org/bugs/
-# License: This file is licensed under the GPL v2.
+# License: This file is licensed under the GPL v2+.
################################################################################
PATH="/bin:/sbin:/usr/bin:/usr/sbin"
if grep -q " nofstab" /proc/cmdline ; then
- exit
+ bailout 0
fi
grep -q 'nolabel' /proc/cmdline && NOLABEL='TRUE' || LABEL='TRUE'
if [ "$CONFIG_FSTAB" = "no" ] ; then
- exit
+ bailout 0
fi
if grep -q ' /mnt ' /proc/mounts ; then
logit '/mnt is a mounted directory, exiting.'
- exit 1
+ bailout 1
fi
# make sure we have the $MNTFILE before reading/writing into it
[ ! -w /etc/fstab ] && {
logit "fatal - /etc/fstab not writeable, exiting"
- exit
+ bailout 0
}
# Simple shell grep, searches for lines STARTING with string
break;
;;
*)
-[ -n "$LABEL" ] && [ -n "$ID_FS_LABEL" ] && echo "LABEL=$ID_FS_LABEL_ENC" && return
+if [ -n "$LABEL" ] && [ -n "$ID_FS_LABEL_ENC" ] ; then
+ # see check_for_label() in scanpartitions for details
+ case $ID_FS_LABEL_ENC in
+ *\x*)
+ addinfo=" # special char in label ($ID_FS_LABEL_ENC) not supported"
+ break ;;
+ *)
+ echo "LABEL=$ID_FS_LABEL_ENC"
+ return
+ break;
+ esac
+fi
;;
esac
[ -n "$DM_NAME" ] && echo /dev/mapper/$DM_NAME && return
NAME="$DEVNAME"
for name in $DEVLINKS ; do
case $name in
- *usb*|*cdrom*|*dvd*)
+ *usb-sd*|*cdrom*|*dvd*)
NAME="$name"
break;
;;
if [ -z "$ACTION" ] ; then
logit "Seems that $0 is not run in a udev environment, exiting." >&2
- exit 1
+ bailout 1
fi
# ignore loop devices for now.
case $DEVNAME in
/dev/loop*)
- exit 0
+ bailout 0
;;
esac
-removeentries "$ADDEDBYGRML $DEVNAME" /etc/fstab
+removeentries "$ADDEDBYGRML $DEVNAME" /etc/fstab
device=$(get_device_name)
mountpoint=$(get_mount_point $device)
for devicelink in $DEVLINKS ; do
# ignore external
- case "$devicelink" in "*external*") continue ;; esac
- stringinfile $devicelink $TMPFILE && exit
+ case "$devicelink" in *external*) continue ;; esac
+ stringinfile $devicelink $TMPFILE && bailout 0
done
# if entry is already present ignore it
-stringinfile $device $TMPFILE && exit
+stringinfile $device $TMPFILE && bailout 0
options=noauto,user,dev,suid,exec
case $ID_FS_TYPE in
add|change)
(
flock -x 200
- echo $ADDEDBYGRML $DEVNAME >> /etc/fstab
- echo $device $mountpoint $ID_FS_TYPE $options 0 0 $addinfo >> /etc/fstab
+ echo "$ADDEDBYGRML $DEVNAME" >> /etc/fstab
+ echo "$device $mountpoint $ID_FS_TYPE $options 0 0 $addinfo # $DEVNAME" >> /etc/fstab
) 200>/var/run/rebuildfstab.lock
cat $TMPFILE > $MNTFILE
fi
+bailout 0
+
## END OF FILE #################################################################