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