#!/bin/sh

#     DESCRIPTION
#
# Update /etc/fstab for rootfs and /tmp
# Add local devices, and make for them /mnt/{dir}


#     REQUIRES
#
# Nothing


#     INFO
#

NAME="init1-fstab"
CONFIG="/etc/rc.d/rc.sysinit"
TMP_CONF="${CONFIG}.new"

verbose()
{
    if [ -n "$GLOBAL_VERBOSE" ]; then
        echo "HOOK: $NAME: $@"
    fi
}

verbose "has started"

verbose "Add / to /etc/fstab"
echo "/dev/root / auto  defaults,ro 0 0" >>/etc/fstab
verbose "Add /tmp to /etc/fstab"
echo "tmpfs /tmp tmpfs defaults 0 0" >>/etc/fstab


insert_at="$(sed -n '/^# The root filesystem is now read-write/=' "$CONFIG" | head -n 1)"
verbose "inserting to $CONFIG at $insert_at mount local storages"

# part 1 (head)
head -n $((insert_at-1)) $CONFIG > "$TMP_CONF"

# part 2 (inserted text)
cat >> "$TMP_CONF" <<'__EOF__'

# inserted by HOOK ###########################################

MNT_PREFIX="/mnt"
FSTAB="/etc/fstab"
MOUNT_OPTIONS_VFAT="users,noatime,codepage=866,shortname=winnt,iocharset=utf8,gid=0100,fmask=111,dmask=0000"
MOUNT_OPTIONS_NTFS3G="users,locale=ru_RU.utf8,gid=100,fmask=111,dmask=000" # force
MOUNT_OPTIONS_OTHER="noauto"

blkid -o value -s UUID | while read uuid; do
    dev="$(blkid -o device -l -t UUID="$uuid")"
    
    # 1. don't use device mapper or raid chunks
    echo "$dev" | grep -q -e 'dm-' -e 'evms' && continue
    
    # 2. check for already added devices in existing /etc/fstab
    grep -q -e "$uuid" -e "$dev" "$FSTAB" && continue

    # 3. don't add already mounted device
    grep -q -e "$dev" /proc/mounts && continue

    # 4. don't add to /etc/fstab USB devices
    which udevinfo > /dev/null 2>&1 || continue                             # no udevinfo utility, don't add to /etc/fstab any device
    udev_info=$(udevinfo --query=all --name="$dev" 2>/dev/null)             # ask info about current device
    [ -n "$udev_info" ] || continue                                         # can't get partition info
    ID_BUS="$(echo "$udev_info" | grep "ID_BUS" | sed -n "s/.*ID_BUS=//p")" # ask device bus attached to
    [ "$ID_BUS" = "usb" ] && continue                                       # skip any usb device
    
    fstype="$(blkid -s TYPE -o value -l -t UUID="$uuid")"
    [ -z "$fstype" ] && continue
    
    case "$fstype" in
        "swap" | "mdraid")
              continue
              ;;
        "vfat")
              mnt_options="$MOUNT_OPTIONS_VFAT"
              ;;
        "ntfs")
              mnt_options="$MOUNT_OPTIONS_NTFS3G"
              fstype="ntfs-3g"
              ;;
        *)
              mnt_options="$MOUNT_OPTIONS_OTHER"
    esac
    
    mnt_point="$MNT_PREFIX/$(basename $dev)"
    mkdir -p "$mnt_point"
    
    echo -e "UUID=${uuid}\t${mnt_point}\t${fstype}\t${mnt_options}\t0\t0" >> "$FSTAB"
done

##############################################################

__EOF__

# part 3 (tail)
sed -n "$insert_at,\$p" "$CONFIG" >> "$TMP_CONF"
mv -f "$TMP_CONF" "$CONFIG"
chmod 755 "$CONFIG"

chmod 4755 "$(which ntfs-3g)"

verbose "finished"
