xref: /OK3568_Linux_fs/device/rockchip/common/scripts/post-helper (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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