androdeb: Reorganize a bit, make headers update possible post install
Signed-off-by: Joel Fernandes <joel@linuxinternals.org>
diff --git a/androdeb b/androdeb
index ce8d02a..b23cfcc 100755
--- a/androdeb
+++ b/androdeb
@@ -7,7 +7,13 @@
source $spath/utils/banners
# Set default vars
-DISTRO=buster; PACKAGES=""; ARCH=arm64
+DISTRO=buster; ARCH=arm64
+
+# Default packages
+DEFAULT_PACKAGES+="\
+bash
+ca-certificates
+"
# Parse command line parameters
if [ $# -lt 1 ]; then usage; fi; POSITIONAL=()
@@ -31,17 +37,11 @@
esac
done
-if [ ! -z "$PREPARE" ] && [ -z "$DOWNLOAD" ] && [ -z "$TARF" ] && [ "x$PACKAGES" == "x" ]; then
+if [ ! -z "$PREPARE" ] && [ -z "$DOWNLOAD" ] && [ -z "$TARF" ] && [ -z "$PACKAGES" ] && [ -z "$KERNELSRC" ]; then
echo "Need to specifify something to prepare, or try: ./andrdeb prepare --download"; usage; fi
if [[ ! -z ${TARDIR+x} ]] && [[ ! -d $TARDIR ]]; then die 7 "Tar dir specified doesn't exist"; fi
-# Default packages
-PACKAGES+="\
-bash
-ca-certificates
-"
-
do_adb_root || die 3 "adb root failed, make sure:
- device is connected, and there's only one device (TODO: add multi device support)
- device is userdebug."
@@ -62,14 +62,29 @@
##########################################################
# PREPARE
##########################################################
+
+function do_cleanup() {
+ rm -rf $TDIR/*; if [ $MKTEMP -eq 1 ]; then rm -rf $TDIR; fi
+}
+
+function push_unpack_headers() {
+ adb shell ls /data/androdeb/debian > /dev/null 2>&1
+ if [ $? -ne 0 ]; then die 8 "Existing androdev env not found to update kernel headers into."; fi
+
+ adb shell rm -rf /data/androdeb/debian/kernel-headers/
+ adb shell mkdir /data/androdeb/debian/kernel-headers/
+ adb push $TDIR_ABS/kh.tgz /data/androdeb/
+ echo "Storing kernel headers into androdeb /kernel-headers/"
+ adb shell tar -xvf /data/androdeb/kh.tgz -C /data/androdeb/debian/kernel-headers/ > /dev/null
+ adb shell rm /data/androdeb/kh.tgz
+}
+
# Prepare is the last command checked
if [ -z "$PREPARE" ]; then usage; fi
if [[ $EUID -ne 0 ]]; then die 6 "For prepare, this tool must run as root. Try: ./sudo androdeb prepare <args>"; fi
-if [ ! -z "$TARF" ] && [ -z "$DOWNLOAD" ]; then
- if [ ! -f ${TARF} ]; then die 7 "archive provided doesn't exist"; fi
-fi
+if [ ! -z "$TARF" ] && [ ! -f $TARF ] && [ -z "$DOWNLOAD" ]; then die 7 "archive provided doesn't exist"; fi
if [[ ! -z ${INSTALL_BCC+x} ]] && [[ -z ${KERNELSRC+x} ]]; then die 4 "--kernelsrc must be provided with --bcc"; fi
@@ -88,24 +103,35 @@
curl -L https://github.com/joelagnel/androdeb/releases/download/$VERSION/androdeb-fs.tgz --output $TDIR_ABS/androdeb-fs.tgz;
TARF=$TDIR_ABS/androdeb-fs.tgz; fi
-# Package kernel headers
-if [[ ! -z ${INSTALL_BCC} ]] && [[ ! -z ${KERNELSRC} ]]; then
-$spath/bcc/build-kheaders-targz.sh ${KERNELSRC} $TDIR_ABS/kh.tgz || die 6 "Failed to package kernel headers"; fi
-
OUT_TMP=$TDIR/debian; rm -rf $OUT_TMP; mkdir -p $OUT_TMP
-if [ -f $TDIR_ABS/kh.tgz ]; then
+
+# Package kernel headers
+if [ ! -z "$KERNELSRC" ]; then
+ $spath/bcc/build-kheaders-targz.sh ${KERNELSRC} $TDIR_ABS/kh.tgz ||
+ die 6 "Failed to package kernel headers"
+ # Is header update the only thing left to do?
+ if [[ -z "$PACKAGES" ]] && [[ -z "$TARF" ]]; then
+ push_unpack_headers; do_cleanup; exit 0; fi
+
mkdir $OUT_TMP/kernel-headers
tar -xvf $TDIR_ABS/kh.tgz -C $OUT_TMP/kernel-headers/
fi
+# Build FS from existing tar, very simple.
if [ ! -z "$TARF" ]; then
echo "Using archive at $TARF for filesystem preparation"
adb shell mkdir -p /data/androdeb/
adb push $TARF /data/androdeb/deb.tar.gz
adb push $spath/addons/* /data/androdeb/
adb shell /data/androdeb/device-unpack
-else
+ if [ ! -z "$KERNELSRC" ]; then push_unpack_headers; fi
+
+ do_cleanup
+ exit 0
+fi
+
+PACKAGES+="$DEFAULT_PACKAGES"
echo "Full package list: $PACKAGES"
echo "Using temporary directory: $TDIR"
@@ -156,10 +182,7 @@
if [[ ! -z ${INSTALL_BCC+x} ]]; then
adb shell /data/androdeb/run-command /bcc-master/build-bcc.sh; fi
-
-fi # !TARF
-
-rm -rf $TDIR/*; if [ $MKTEMP -eq 1 ]; then rm -rf $TDIR; fi
+do_cleanup
# Extract a tar of the built, compiled and installed androdeb env
if [[ ! -z ${TARDIR+x} ]]; then