linuxOS_AP06/device/rockchip/common/scripts/post-fstab.sh
2025-06-03 12:28:32 +08:00

116 lines
2.4 KiB
Bash
Executable File

#!/bin/bash -e
source "${RK_POST_HELPER:-$(dirname "$(realpath "$0")")/post-helper}"
FSTAB="$TARGET_DIR/etc/fstab"
fixup_root()
{
message "Fixing up rootfs type: $1"
FS_TYPE=$1
sed -i "s~\([[:space:]]/[[:space:]]\+\)\w\+~\1${FS_TYPE}~" "$FSTAB"
}
del_part()
{
SRC="$1"
MOUNTPOINT="$2"
# Remove old entries with same mountpoint
sed -i "/[[:space:]]${MOUNTPOINT//\//\\\/}[[:space:]]/d" "$FSTAB"
if [ "$SRC" != tmpfs ]; then
# Remove old entries with same source
sed -i "/^${SRC//\//\\\/}[[:space:]]/d" "$FSTAB"
fi
}
fixup_part()
{
del_part $@
SRC="$1"
MOUNTPOINT="$2"
FS_TYPE="$3"
MOUNT_OPTS="$4"
PASS="$5"
# Append new entry
echo -e "$SRC\t$MOUNTPOINT\t$FS_TYPE\t$MOUNT_OPTS\t0 $PASS" >> "$FSTAB"
mkdir -p "$TARGET_DIR/$MOUNTPOINT"
}
fixup_basic_part()
{
message "Fixing up basic partition: $@"
FS_TYPE="$1"
MOUNTPOINT="$2"
MOUNT_OPTS="${3:-defaults}"
fixup_part "$FS_TYPE" "$MOUNTPOINT" "$FS_TYPE" "$MOUNT_OPTS" 0
}
fixup_device_part()
{
message "Fixing up device partition: $@"
DEV="$1"
[ "$DEV" ] || return 0
MOUNTPOINT="${2:-/${DEV##*[/=]}}"
FS_TYPE="${3:-ext4}"
MOUNT_OPTS="${4:-defaults}"
fixup_part "$DEV" "$MOUNTPOINT" "$FS_TYPE" "$MOUNT_OPTS" 2
}
message "Fixing up /etc/fstab..."
mkdir -p "$TARGET_DIR/etc"
touch "$FSTAB"
case "$RK_ROOTFS_TYPE" in
ext[234])
fixup_root "$RK_ROOTFS_TYPE"
;;
*)
fixup_root auto
;;
esac
if [ "$(readlink "$TARGET_DIR/sbin/init")" != /lib/systemd/systemd ]; then
message "Fixup basic partitions for non-systemd init..."
fixup_basic_part proc /proc
fixup_basic_part devtmpfs /dev
fixup_basic_part devpts /dev/pts mode=0620,ptmxmode=0000,gid=5 # tty group
fixup_basic_part tmpfs /dev/shm nosuid,nodev,noexec
fixup_basic_part sysfs /sys nosuid,nodev,noexec
fixup_basic_part configfs /sys/kernel/config
fixup_basic_part debugfs /sys/kernel/debug
fixup_basic_part pstore /sys/fs/pstore nosuid,nodev,noexec
fi
if [ "$POST_OS" = recovery ]; then
fixup_device_part /dev/sda1 /mnt/udisk auto
fixup_device_part /dev/mmcblk1p1 /mnt/sdcard auto
fi
for idx in $(seq 1 "$(rk_extra_part_num)"); do
DEV="$(rk_extra_part_dev $idx)"
MOUNTPOINT="$(rk_extra_part_mountpoint $idx)"
FS_TYPE="$(rk_extra_part_fstype $idx)"
# No fstab entry for built-in partitions
if rk_extra_part_builtin $idx; then
del_part "$DEV" "$MOUNTPOINT" "$FS_TYPE"
continue
fi
fixup_device_part "$DEV" "$MOUNTPOINT" "$FS_TYPE" \
"$(rk_extra_part_options $idx)"
done