From 927208a6775eccfa5ac952a7eb13525c8a179bea Mon Sep 17 00:00:00 2001 From: Vahagn Khachatryan Date: Fri, 23 Jun 2023 18:28:38 +0100 Subject: [PATCH] Automatically detect and falsh acramfs from the working dir. --- _roku.sh | 133 +++++++++++++++++++++++++------------------------ _roku_build.sh | 10 ++++ 2 files changed, 77 insertions(+), 66 deletions(-) diff --git a/_roku.sh b/_roku.sh index 52e4e23..89ecc5e 100755 --- a/_roku.sh +++ b/_roku.sh @@ -7,6 +7,22 @@ source $_ROKU_SHELL_DIR/_roku_shared.sh source $_ROKU_SHELL_DIR/_roku_lt.sh source $_ROKU_SHELL_DIR/_roku_build.sh +############################################################################### +# +# Web server related +# +_roku_webserver_ip() +{ + ip route get "$1" | sed -n "s/.* src \([\.0-9]*\) .*/\1/p" +} + +_roku_webserver_relative_path() +{ + [ -z "$ROKU_WEB_DIR" ] && echo "ROKU_WEB_DIR must be defined" >&2 && exit 1 + realpath --relative-to="$ROKU_WEB_DIR" "$1" +} + + ############################################################################### # # Helper functions @@ -14,7 +30,7 @@ source $_ROKU_SHELL_DIR/_roku_build.sh __set_master_ip() { - MASTER_IP=$(ip route get "${ROKU_DEV_TARGET}" | sed -n "s/.* src \([\.0-9]*\) .*/\1/p") + MASTER_IP=$(_roku_webserver_ip $ROKU_DEV_TARGET) } __netcat() @@ -39,10 +55,16 @@ __device_cmd() _roku_device_platform() { - [ -z "$ROKU_DEV_TARGET" ] && echo "ROKU_DEV_TARGET must be defined" && return 0 + [ -z "$ROKU_DEV_TARGET" ] && echo "ROKU_DEV_TARGET must be defined" >&2 && exit 1 __device_cmd "echo \$ROKU_PLATFORM" | tail -1 | tr -d '\r\n' } +_check_roku_env() +{ + [ -z "$ROKU_DEV_TARGET" ] && echo "ROKU_DEV_TARGET must be defined. Run 'roku device' to setup." >&2 && exit 1 + [ -z "$ROKU_DEV_PLATFORM" ] && echo "ROKU_DEV_PLATFORM must be defined. Run 'roku device' to setup." >&2 && exit 1 +} + ############################################################################### # @@ -50,15 +72,28 @@ _roku_device_platform() # _roku_telnet() { - [ -z "$ROKU_DEV_TARGET" ] && echo "ROKU_DEV_TARGET must be defined" && return 0 + _check_roku_env + telnet "$ROKU_DEV_TARGET" $1 } _roku_flash() { - [ -z "$ROKU_DEV_TARGET" ] && echo "ROKU_DEV_TARGET must be defined" && return 0 - __set_master_ip - __device_cmd ". /nvram/san; export MASTER_IP=$MASTER_IP; rokuflash $1" + _check_roku_env + + [ -z "$ROKU_DEV_TARGET" ] && echo "ROKU_DEV_TARGET must be defined" >&2 && exit 1 + [ -z "$ROKU_DEV_PLATFORM" ] && echo "ROKU_DEV_PLATFORM must be defined. Run 'roku device' to setup." >&2 && exit 1 + local ACRAMFS_WEB_PATH=$1 + local WEBSERVER_IP=$(_roku_webserver_ip $ROKU_DEV_TARGET) + if [ -z "$ACRAMFS_WEB_PATH" ]; then + local REPO_ROOT=$(_roku_repo_root .) + local ACRAMFS=$(_roku_repo_acramfs_location $REPO_ROOT $ROKU_DEV_PLATFORM) + [ ! -f "$ACRAMFS" ] && echo "No acramfs found: $ACRAMFS" >&2 && exit 1 + ACRAMFS_WEB_PATH=$(_roku_webserver_relative_path $ACRAMFS) + [ -z "$ACRAMFS_WEB_PATH" ] && exit 1 + fi + echo "Flashing $ACRAMFS_WEB_PATH" + __device_cmd ". /nvram/san; export MASTER_IP=$WEBSERVER_IP; rokuflash $ACRAMFS_WEB_PATH" } # Side loaded applications: @@ -76,27 +111,36 @@ _roku_flash() # 8889 voice_adapter_console _roku_log() { - [ -z "$ROKU_DEV_TARGET" ] && echo "ROKU_DEV_TARGET must be defined" && return 0 + _check_roku_env + __device_cmd "setconsole /dev/pts/0" } _roku_loglog() { - [ -z "$ROKU_DEV_TARGET" ] && echo "ROKU_DEV_TARGET must be defined" && return 0 + _check_roku_env + __netcat $1 } _roku_reboot() { - [ -z "$ROKU_DEV_TARGET" ] && echo "ROKU_DEV_TARGET must be defined" && return 0 + _check_roku_env + __device_cmd "reboot" } _roku_san_update() { - [ -z "$ROKU_DEV_TARGET" ] && echo "ROKU_DEV_TARGET must be defined" && return 0 - __set_master_ip - __device_cmd "wget -O /nvram/san http://${MASTER_IP}/roku/san/san; source /nvram/san; setup_san" + _check_roku_env + [ -z "$ROKU_WEB_PREFIX" ] && echo "ROKU_WEB_PREFIX must be defined." >&2 && exit 1 + + local SAN_LOCATION=$_ROKU_SHELL_DIR/san + [ ! -f "$SAN_LOCATION" ] && echo "SAN script is not found: $SAN_LOCATION" >&2 && exit 1 + + local WEBSERVER_IP=$(_roku_webserver_ip $ROKU_DEV_TARGET) + local SAN_URL="http://$WEBSERVER_IP/$ROKU_WEB_PREFIX/$(_roku_webserver_relative_path $SAN_LOCATION)" + __device_cmd "wget -O /nvram/san $SAN_URL; source /nvram/san; setup_san" } ############################################################################### @@ -105,8 +149,9 @@ _roku_san_update() # _roku_audcap() { - [ -z "$ROKU_DEV_TARGET" ] && echo "ROKU_DEV_TARGET must be defined" && return 0 - [ -z "$1" ] && echo "Syntax: roku audcap " && return 0 + _check_roku_env + [ -z "$1" ] && echo "Syntax: roku audcap " >&2 && exit 1 + __set_master_ip __app_cmd "audcap record start 00" echo -n "Press Enter to stop capture." @@ -122,14 +167,15 @@ _roku_audcap() # _roku_gdb_attach() { - [ -z "$ROKU_DEV_TARGET" ] && echo "ROKU_DEV_TARGET must be defined" && return 0 + _check_roku_env + __device_cmd "/nvram/tools/gdbserver :5555 --attach \$(pgrep Application)" } _roku_gdb() { - echo $ROKU_DEV_PLATFORM >> test.txt - [ -z "$ROKU_DEV_TARGET" ] && echo "ROKU_DEV_TARGET must be defined" && return 0 + _check_roku_env + # __device_cmd "/tmp/tools/gdbserver :5555 --attach \$(pgrep Application)" & # sleep 2 gdb-multiarch \ @@ -150,65 +196,20 @@ _roku_gdb() # _roku_token_install() { + _check_roku_env [ ! -f "$1" ] && echo "usage: install_auth_toke \n ROKU_DEV_TARGET=${ROKU_DEV_TARGET}" && return 0 - [ -z "$ROKU_DEV_TARGET" ] && echo "ROKU_DEV_TARGET must be defined" && return 0 + curl --data-binary @$1 http://${ROKU_DEV_TARGET}:8060/token/install } _roku_sideload() { + _check_roku_env [ ! -f "$1" ] && echo "usage: sideload \n ${ROKU_DEV_TARGET}=${ROKU_DEV_TARGET}" && return 0 - [ -z "$ROKU_DEV_TARGET" ] && echo "ROKU_DEV_TARGET must be defined" && return 0 + curl --anyauth --user "rokudev:${DEVPASSWORD}" -F "mysubmit=Install_Netflix" -F "archive=@$1" http://${ROKU_DEV_TARGET}/plugin_install } -############################################################################### -# -# Logging -# -LOGDIR="${HOME}/roku/logs" - - -dcapture() -{ - nc minicom "$@" -C $LOGDIR/.log.$(date +%Y-%m-%d--%H-%M-%S) -} - - -dfile() -{ - local Nth="-1" - if [ $# -gt 0 ]; then - Nth="$1" - fi - - echo $(ls -tr -1 ${LOGDIR}/minicom.log.* | tail ${Nth} | head -1) -} - -dless() -{ - less $(lfile "$@") -} - -dcat() -{ - cat $(lfile "$@") -} - -dgrep() -{ - lcat | grep -a --color "$@" -} - -dtail() -{ - if [ $# -gt 0 ]; then - tail -f $(lfile) | grep "$@" - else - tail -f $(lfile) - fi -} - ############################################################################### # # Misc diff --git a/_roku_build.sh b/_roku_build.sh index 36afa69..b10ad6c 100644 --- a/_roku_build.sh +++ b/_roku_build.sh @@ -5,6 +5,16 @@ _roku_build_completion() : } +_roku_repo_root() +{ + eval "cd $1; git rev-parse --show-toplevel" +} + +_roku_repo_acramfs_location() +{ + echo "$1/port/realtek/stark/$2/dist/image/acramfs/acramfs.bin" +} + _roku_build() { __build "$@"