Skip to content

Instantly share code, notes, and snippets.

@betaboon betaboon/remote_install.sh Secret
Created Dec 3, 2019

Embed
What would you like to do?
#!/usr/bin/env bash
FILENAME=$1
USERDATA_DEVICE=/dev/block/by-name/userdata
FORWARD_PORT=5555
# check if filename has been provided
if [ $# -ne 1 ]; then
echo "Usage: $(basename $0) FILENAME"
exit 1
fi
# check if adb is available
if ! [ -x "$(command -v adb)" ]; then
echo "Error: adb is not installed" >&2
exit 1
fi
# check if pv is available
if ! [ -x "$(command -v pv)" ]; then
echo "Error: pv is not installed" >&2
exit 1
fi
# check if nc is available
if ! [ -x "$(command -v nc)" ]; then
echo "Error: nc is not installed" >&2
exit 1
fi
# check if file(system.img) exists and is readable
if ! [ -r $FILENAME ]; then
echo "Error: $FILENAME is not readable!" >&2
exit 1
fi
# check if device is available via adb
adb_state=$(adb get-state 2>/dev/null)
if [ "$adb_state" != "recovery" ]; then
echo "Error: did not find a device in recovery mode!" >&2
exit 1
fi
# check if device has twrp
adb shell "command -v twrp > /dev/null"
if [ $? -ne 0 ]; then
echo "Error: device is not running twrp!" >&2
exit 1
fi
# check if userdata-device exists
adb shell "[ -w $USERDATA_DEVICE ]"
if [ $? -ne 0 ]; then
echo "Error: could not find userdata-partition on device!" >&2
exit 1
fi
cleanup() {
# remove adb forward
echo "+ removing port-forward"
adb forward --remove tcp:$FORWARD_PORT &>/dev/null
}
main() {
# create adb forward
echo "+ creating port-forward"
adb forward tcp:$FORWARD_PORT tcp:$FORWARD_PORT
sleep 1
# run nc|gunzip|dd on device
echo "+ starting receiver"
$(adb shell "nc -l -p $FORWARD_PORT|gunzip|dd of=$USERDATA_DEVICE") &
sleep 1
# run pv|gzip|on local device
echo "+ starting sender"
pv $FILENAME|gzip|nc -N 127.0.0.1 $FORWARD_PORT
echo "+ done"
exit 0
}
trap exit INT TERM ERR
trap cleanup EXIT
main
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.