1*4882a593Smuzhiyun#!/bin/bash -e 2*4882a593Smuzhiyun 3*4882a593SmuzhiyunTARGET_DIR=$1 4*4882a593Smuzhiyunshift 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunFSTAB="${TARGET_DIR}/etc/fstab" 7*4882a593SmuzhiyunOS_RELEASE="${TARGET_DIR}/etc/os-release" 8*4882a593Smuzhiyun 9*4882a593Smuzhiyunfunction fixup_root() 10*4882a593Smuzhiyun{ 11*4882a593Smuzhiyun echo "Fixing up rootfs type: $1" 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun FS_TYPE=$1 14*4882a593Smuzhiyun sed -i "s#\([[:space:]]/[[:space:]]\+\)\w\+#\1${FS_TYPE}#" "$FSTAB" 15*4882a593Smuzhiyun} 16*4882a593Smuzhiyun 17*4882a593Smuzhiyundel_part() 18*4882a593Smuzhiyun{ 19*4882a593Smuzhiyun echo "Deleting partition: $1 $2" 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun SRC="$1" 22*4882a593Smuzhiyun MOUNTPOINT="$2" 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun # Remove old entries with same mountpoint 25*4882a593Smuzhiyun sed -i "/[[:space:]]${MOUNTPOINT//\//\\\/}[[:space:]]/d" "$FSTAB" 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun if [ "$SRC" != tmpfs ]; then 28*4882a593Smuzhiyun # Remove old entries with same source 29*4882a593Smuzhiyun sed -i "/^${SRC//\//\\\/}[[:space:]]/d" "$FSTAB" 30*4882a593Smuzhiyun fi 31*4882a593Smuzhiyun} 32*4882a593Smuzhiyun 33*4882a593Smuzhiyunfunction fixup_part() 34*4882a593Smuzhiyun{ 35*4882a593Smuzhiyun del_part $@ 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun echo "Fixing up partition: ${@//: }" 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun SRC="$1" 40*4882a593Smuzhiyun MOUNT="$2" 41*4882a593Smuzhiyun FS_TYPE="$3" 42*4882a593Smuzhiyun MOUNT_OPTS="$4" 43*4882a593Smuzhiyun PASS="$5" 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun # Append new entry 46*4882a593Smuzhiyun echo -e "${SRC}\t${MOUNT}\t${FS_TYPE}\t${MOUNT_OPTS}\t0 $PASS" >> "$FSTAB" 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun mkdir -p "${TARGET_DIR}/${MOUNT}" 49*4882a593Smuzhiyun} 50*4882a593Smuzhiyun 51*4882a593Smuzhiyunfunction fixup_basic_part() 52*4882a593Smuzhiyun{ 53*4882a593Smuzhiyun echo "Fixing up basic partition: $@" 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun FS_TYPE="$1" 56*4882a593Smuzhiyun MOUNT="$2" 57*4882a593Smuzhiyun MOUNT_OPTS="${3:-defaults}" 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun fixup_part "$FS_TYPE" "$MOUNT" "$FS_TYPE" "$MOUNT_OPTS" 0 60*4882a593Smuzhiyun} 61*4882a593Smuzhiyun 62*4882a593Smuzhiyunfunction partition_arg() { 63*4882a593Smuzhiyun PART="$1" 64*4882a593Smuzhiyun I="$2" 65*4882a593Smuzhiyun DEFAULT="$3" 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun ARG=$(echo $PART | cut -d':' -f"$I") 68*4882a593Smuzhiyun echo ${ARG:-$DEFAULT} 69*4882a593Smuzhiyun} 70*4882a593Smuzhiyun 71*4882a593Smuzhiyunfunction fixup_device_part() 72*4882a593Smuzhiyun{ 73*4882a593Smuzhiyun echo "Fixing up device partition: ${@//: }" 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun DEV="$(partition_arg "$*" 1)" 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun # Dev is either <name> or /dev/.../<name> 78*4882a593Smuzhiyun [ "$DEV" ] || return 0 79*4882a593Smuzhiyun echo $DEV | grep -qE "^/" || DEV="LABEL=$DEV" 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun MOUNT="$(partition_arg "$*" 2 "/${DEV##*[/=]}")" 82*4882a593Smuzhiyun FS_TYPE="$(partition_arg "$*" 3 ext4)" 83*4882a593Smuzhiyun MOUNT_OPTS="$(partition_arg "$*" 4 defaults)" 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun fixup_part "$DEV" "$MOUNT" "$FS_TYPE" "$MOUNT_OPTS" 2 86*4882a593Smuzhiyun} 87*4882a593Smuzhiyun 88*4882a593Smuzhiyunfunction fixup_fstab() 89*4882a593Smuzhiyun{ 90*4882a593Smuzhiyun echo "Fixing up /etc/fstab..." 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun fixup_root auto 93*4882a593Smuzhiyun fixup_basic_part proc /proc 94*4882a593Smuzhiyun fixup_basic_part devtmpfs /dev 95*4882a593Smuzhiyun fixup_basic_part devpts /dev/pts mode=0620,ptmxmode=0666,gid=5 96*4882a593Smuzhiyun fixup_basic_part tmpfs /dev/shm nosuid,nodev,noexec 97*4882a593Smuzhiyun fixup_basic_part sysfs /sys 98*4882a593Smuzhiyun fixup_basic_part debugfs /sys/kernel/debug 99*4882a593Smuzhiyun fixup_basic_part pstore /sys/fs/pstore 100*4882a593Smuzhiyun} 101*4882a593Smuzhiyun 102*4882a593Smuzhiyunfunction add_build_info() 103*4882a593Smuzhiyun{ 104*4882a593Smuzhiyun [ -f "$OS_RELEASE" ] && sed -i "/^BUILD_ID=/d" "$OS_RELEASE" 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun echo "Adding build-info to /etc/os-release..." 107*4882a593Smuzhiyun echo "BUILD_INFO=\"$(whoami)@$(hostname) $(date)${@:+ - $@}\"" >> \ 108*4882a593Smuzhiyun "$OS_RELEASE" 109*4882a593Smuzhiyun} 110*4882a593Smuzhiyun 111*4882a593Smuzhiyunecho "Executing $(basename $0)..." 112*4882a593Smuzhiyun 113*4882a593Smuzhiyunadd_build_info $@ 114*4882a593Smuzhiyun[ -f "$FSTAB" ] && fixup_fstab 115*4882a593Smuzhiyun 116*4882a593Smuzhiyunexit 0 117