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