#!/bin/sh # add_fstab_entry # place in /lib/udev # $1 = devicename # $2 = fstype devicename=$(basename $1) fstype=$2 if [ -z "$fstype" ]; then fstype="$ID_FS_TYPE" # fstype unknown, do nothing [ -n "$fstype" ] || exit 1 fi [ "$fstype" != "swap" ] || exit 0 BASEDEV=$(echo $devicename | tr -d "0-9") if [ ${BASEDEV} = "fd" ]; then DEVNUM=$(echo $devicename | tr -d "fd") LABEL="floppy${DEVNUM}" fstype="vfat" else export $(udevinfo --query=env --name=$devicename) LABEL=${ID_FS_LABEL_SAFE} if [ -z ${LABEL} ]; then LABEL=$(echo ${ID_BUS}${ID_TYPE}-$devicename |tr " " "_") fi fi # make sure the root we mount to exists ROOT=/tmp/drives [ -d $ROOT ] || mkdir ${ROOT} # invent $MOUNTPOINT MOUNTPOINT=$ROOT/$LABEL [ -d $MOUNTPOINT ] || mkdir ${MOUNTPOINT} BLOCKS=${3:-0} SIZE=$((${BLOCKS}*512/1048576)) DESCRIPTION="${ID_VENDOR}" ENC_CONF="/etc/udev/fs-encoding.conf" [ -f "$ENC_CONF" ] && . "$ENC_CONF" CODEPAGE=${CODEPAGE:-866} IOCHARSET=${IOCHARSET:-utf8} if [ "${ID_TYPE}" = "cd" ]; then MOUNTOPTS="ro" if [ -n "${ID_CDROM_DVD}" ]; then DESCRIPTION="DVD" else DESCRIPTION="CD" fi DESCRIPTION="${DESCRIPTION}-ROM" if [ "${IOCHARSET}" = "utf8" ]; then MOUNTOPTS="${MOUNTOPTS},utf8" else MOUNTOPTS="${MOUNTOPTS},iocharset=${IOCHARSET}" fi echo "/dev/$devicename ${MOUNTPOINT} udf,iso9660,cdfs ${MOUNTOPTS} 0 0" >> /tmp/fstab echo "AddCdromDrive|${LABEL}|/dev/${devicename}|${DESCRIPTION}" > /tmp/lbus.fifo else REMOVABLE=0 MOUNTOPTS="rw,noatime" if [ ${BASEDEV} = "fd" ]; then DESCRIPTION="Floppy" MOUNTOPTS="${MOUNTOPTS},codepage=866,utf8" else if [ "${ID_BUS}" = "usb" ]; then DESCRIPTION="USB DISK ${ID_VENDOR}" REMOVABLE=1 elif [ "${ID_BUS}" = "scsi" -a "${ID_VENDOR}" = "ATA" ]; then DESCRIPTION="SATA DISK" else DESCRIPTION="ATA DISK" fi DESCRIPTION="${DESCRIPTION} ${ID_MODEL}" if [ "${fstype}" = "vfat" -o "${fstype}" = "fat" ]; then MOUNTOPTS="${MOUNTOPTS},codepage=${CODEPAGE}" fi if [ "${fstype}" = "iso9660" -o "${fstype}" = "ntfs" -o "${fstype}" = "vfat" -a "${IOCHARSET}" = "utf8" ]; then MOUNTOPTS="${MOUNTOPTS},utf8" elif [ "${fstype}" = "fat" -o "${fstype}" = "jfs" -o "${fstype}" = "iso9660" -o "${fstype}" = "vfat" -o "${fstype}" = "udf" ]; then MOUNTOPTS="${MOUNTOPTS},iocharset=${IOCHARSET}" fi if [ "${fstype}" = "ntfs" ]; then if grep -q '^fuse[[:blank:]]' /proc/modules; then if [ -x /sbin/mount.fuse.ntfs ]; then fstype="fuse.ntfs" MOUNTOPTS="${MOUNTOPTS},silent,umask=000" elif [ -x /sbin/mount.ntfs-3g ]; then fstype="ntfs-3g" MOUNTOPTS="${MOUNTOPTS},silent,umask=000" fi else MOUNTOPTS="${MOUNTOPTS},nls=${IOCHARSET}" fi fi fi echo "/dev/$devicename ${MOUNTPOINT} ${fstype} ${MOUNTOPTS} 0 0" >> /tmp/fstab echo "AddBlockDevice|${LABEL}|/dev/${devicename}|${REMOVABLE}|${SIZE}|${DESCRIPTION}" > /tmp/lbus.fifo fi