1#!/bin/bash 2 3[ -z "$DEBUG" ] || set -x 4 5# Make sure that we are sourced and called inside of RK build scripts. 6if [ "$BASH_SOURCE" = "$0" -o -z "$RK_SESSION" ];then 7 echo "$(realpath "$0") is not supposed to be executed directly" 8 exit 1 9fi 10 11err_handler() 12{ 13 ret=${1:-$?} 14 [ "$ret" -eq 0 ] && return 15 16 echo "ERROR: Running $0 - ${2:-${FUNCNAME[1]}} failed!" 17 echo "ERROR: exit code $ret from line ${BASH_LINENO[0]}:" 18 echo " ${3:-$BASH_COMMAND}" 19 echo "ERROR: call stack:" 20 for i in $(seq 1 $((${#FUNCNAME[@]} - 1))); do 21 SOURCE="${BASH_SOURCE[$i]}" 22 LINE=${BASH_LINENO[$(( $i - 1 ))]} 23 echo " $(basename "$SOURCE"): ${FUNCNAME[$i]}($LINE)" 24 done 25 exit $ret 26} 27trap 'err_handler' ERR 28set -eE 29 30usage() 31{ 32 echo "Usage: $0 [OPTIONS]" 33 echo "<rootfs dir> - target rootfs dir" 34 echo "help - usage" 35 exit 1 36} 37 38case "$1" in 39 usage | help | h | -h | --help | \?) usage ;; 40esac 41 42[ -d "$1" ] || usage 43 44TARGET_DIR=$(realpath "$1") 45shift 46 47POST_OS=unknown 48case "$(grep "^ID=" "$TARGET_DIR/etc/os-release" 2>/dev/null)" in 49 ID=buildroot) POST_OS=buildroot ;; 50 ID=debian) POST_OS=debian ;; 51 ID=poky) POST_OS=yocto ;; 52esac 53case "$TARGET_DIR/" in 54 */output/*_ramboot/target/*) POST_OS=ramboot ;; 55 */output/*_recovery/target/*) POST_OS=recovery ;; 56 */output/*_pcba/target/*) POST_OS=pcba ;; 57esac 58echo "$POST_OS_DISALLOWED" | grep -wvq $POST_OS || exit 0 59 60unset POST_ROOTFS 61case "$POST_OS" in 62 buildroot | debian | yocto) POST_ROOTFS=1 ;; 63 *) [ -z "$POST_ROOTFS_ONLY" ] || exit 0 ;; 64esac 65 66unset POST_INIT_BUSYBOX POST_INIT_SYSTEMD POST_INIT_SYSV 67if [ -e "$TARGET_DIR/etc/init.d/rcS" ]; then 68 if [ -d "$TARGET_DIR/etc/rcS.d" ]; then 69 POST_INIT_SYSV=1 70 POST_INIT=sysv 71 fi 72 if grep -wq BusyBox "$TARGET_DIR/etc/inittab"; then 73 POST_INIT_BUSYBOX=1 74 POST_INIT="${POST_INIT:+$POST_INIT }busybox" 75 fi 76fi 77if [ -d "$TARGET_DIR/etc/systemd/system/" ]; then 78 mkdir -p "$TARGET_DIR/lib/systemd/system/" 79 POST_INIT_SYSTEMD=1 80 POST_INIT="${POST_INIT:+$POST_INIT }systemd" 81fi 82 83echo "Running $(basename "$0") for $TARGET_DIR ($POST_OS init=${POST_INIT:-none})..." 84 85cd "$TARGET_DIR" 86