#!/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"
TMP=$(mktemp 2>/dev/null)
TMPFILE=$(mktemp 2>/dev/null)
ADDEDBYGRML="# Added by GRML"
-MNTFILE="/mnt/.grml-auto-created_do-not-delete-this-file"
-MOUNTPOINT_PREFIX=/mnt/
+MOUNTPOINT_PREFIX=/media
+MNTFILE="$MOUNTPOINT_PREFIX/.grml-auto-created_do-not-delete-this-file"
logit() {
fi
-if grep -q ' /mnt ' /proc/mounts ; then
- logit '/mnt is a mounted directory, exiting.'
+if grep -q ' $MOUNTPOINT_PREFIX ' /proc/mounts ; then
+ logit '$MOUNTPOINT_PREFIX is a mounted directory, exiting.'
bailout 1
fi
+# default directories {{{
+if [ -d "$MOUNTPOINT_PREFIX" ] ; then
+ [ -d "$MOUNTPOINT_PREFIX/floppy" ] || mkdir "$MOUNTPOINT_PREFIX/floppy"
+ [ -d "$MOUNTPOINT_PREFIX/cdrom" ] || mkdir "$MOUNTPOINT_PREFIX/cdrom"
+ [ -d "$MOUNTPOINT_PREFIX/test" ] || mkdir "$MOUNTPOINT_PREFIX/test"
+fi
+# }}}
+
# make sure we have the $MNTFILE before reading/writing into it
if [ -z "$NO_AUTO_FILE" ] ; then
[ -r $MNTFILE ] || touch $MNTFILE
none /proc/bus/usb usbfs defaults,noauto 0 0
sysfs /sys sysfs rw,nosuid,nodev,noexec 0 0
devpts /dev/pts devpts noauto,mode=0622 0 0
-/dev/fd0 /mnt/floppy auto user,noauto,exec 0 0
-/dev/external /mnt/external auto user,noauto,exec,rw,uid=grml,gid=grml 0 0
-/dev/external1 /mnt/external1 auto user,noauto,exec,rw,uid=grml,gid=grml 0 0
-/dev/cdrom /mnt/cdrom auto user,noauto,exec,ro 0 0
-/dev/dvd /mnt/dvd auto user,noauto,exec,ro 0 0
+/dev/external ${MOUNTPOINT_PREFIX}/external auto user,noauto,exec,rw,uid=grml,gid=grml 0 0
+/dev/external1 ${MOUNTPOINT_PREFIX}/external1 auto user,noauto,exec,rw,uid=grml,gid=grml 0 0
+/dev/cdrom ${MOUNTPOINT_PREFIX}/cdrom auto user,noauto,exec,ro 0 0
+/dev/dvd ${MOUNTPOINT_PREFIX}/dvd auto user,noauto,exec,ro 0 0
# some other examples:
-# /dev/hda1 /Grml ext3 dev,suid,user,noauto 0 2
+# /dev/sda1 /Grml ext3 dev,suid,user,noauto 0 2
# //1.2.3.4/pub /smb/pub smbfs defaults,user,noauto,uid=grml,gid=grml 0 0
# linux:/pub /beer nfs defaults 0 0
# tmpfs /tmp tmpfs size=300M 0 0
# none /proc/bus/usb usbfs defaults,nodev,noexec,nosuid,noauto,devgid=1001,devmode=664 0 0
-# 192.168.1.101:/backups /mnt/nfs nfs defaults,user,wsize=8192,rsize=8192 0 0
+# 192.168.1.101:/backups ${MOUNTPOINT_PREFIX}/nfs nfs defaults,user,wsize=8192,rsize=8192 0 0
#
-# Warning! Please do *not* change any lines below because they are auto-generated by rebuildfstab!
+# Warning! Please do *not* change any lines below because they are auto-generated.
# If you want to disable rebuildfstab set CONFIG_FSTAB='no' in /etc/grml/autoconfig!
-# See 'man grml-rebuildfstab' for more details about the following entries.
+# See 'man grml-udev-rebuildfstab' for more details about the following entries.
EOF
fi
) 200>/var/run/rebuildfstab.lock
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;
;;
device="$1"
mountpoint="${device##*/}"
mountpoint="${mountpoint#*=}"
- echo /mnt/$mountpoint
+ echo "$MOUNTPOINT_PREFIX/$mountpoint"
}
append_fstab() {
for devicelink in $DEVLINKS ; do
# ignore external
- case "$devicelink" in "*external*") continue ;; esac
+ case "$devicelink" in *external*) continue ;; esac
stringinfile $devicelink $TMPFILE && bailout 0
done
# if entry is already present ignore it
stringinfile $device $TMPFILE && bailout 0
+if [ "$ID_FS_USAGE" != "filesystem" -a "$ID_FS_TYPE" != "swap" ]; then
+ # blockdevice in question won't be mountable in this case
+ bailout 0
+fi
+
options=noauto,user,dev,suid,exec
case $ID_FS_TYPE in
ntfs)
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
;;
esac
-# Clean /mnt/... according to info $MNTFILE
+# Clean $MOUNTPOINT_PREFIX according to info $MNTFILE
if [ -r "$MNTFILE" ] ; then
for directory in $(cat $MNTFILE) ; do
rmdir $directory 2>/dev/null && sed -i "s#$directory##" $MNTFILE
cat $TMPFILE > $MNTFILE
fi
-# Make sure we have all /mnt/* directories
+# Make sure we have all directories in $MOUNTPOINT_PREFIX
while read p m f relax; do
case "$m" in *none*|*proc*|*sys*|'') continue ;; esac
if ! grep -q "$m" /proc/mounts ; then