Create the standard directories in the rebuildfstab script instead of grml-autoconfig.
[grml-udev-config.git] / scripts / grml-udev-rebuildfstab
index 53521c8..9aaf08f 100755 (executable)
@@ -1,17 +1,17 @@
 #!/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=/mnt
+MNTFILE="$MOUNTPOINT_PREFIX/.grml-auto-created_do-not-delete-this-file"
 
 
 logit() {
@@ -50,7 +50,7 @@ fi
 
 
 if grep -q " nofstab" /proc/cmdline ; then
-   exit
+   bailout 0
 fi
 
 grep -q 'nolabel' /proc/cmdline && NOLABEL='TRUE' || LABEL='TRUE'
@@ -58,15 +58,23 @@ 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
+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
@@ -84,29 +92,28 @@ proc           /proc          proc   rw,nosuid,nodev,noexec                 0
 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
 #
-# 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
 
 [ ! -w /etc/fstab ] && {
   logit "fatal - /etc/fstab not writeable, exiting"
-  exit
+  bailout 0
 }
 
 # Simple shell grep, searches for lines STARTING with string
@@ -138,7 +145,18 @@ iso9660)
 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
@@ -146,7 +164,7 @@ esac
 NAME="$DEVNAME"
 for name in $DEVLINKS ; do
     case $name in
-        *usb*|*cdrom*|*dvd*)
+        *usb-sd*|*cdrom*|*dvd*)
             NAME="$name"
            break;
         ;;
@@ -159,7 +177,7 @@ get_mount_point() {
     device="$1"
     mountpoint="${device##*/}"
     mountpoint="${mountpoint#*=}"
-    echo /mnt/$mountpoint
+    echo "$MOUNTPOINT_PREFIX/$mountpoint"
 }
 
 append_fstab() {
@@ -185,13 +203,13 @@ fi
 
 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
 
@@ -208,12 +226,17 @@ 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
+
+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
@@ -241,8 +264,8 @@ case $ACTION 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
 
 
@@ -278,4 +301,6 @@ if [ -r "$MNTFILE" ] ; then
    cat $TMPFILE > $MNTFILE
 fi
 
+bailout 0
+
 ## END OF FILE #################################################################