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