Repository navigation
Expand file tree
/
Copy pathdeploy.sh
More file actions
executable file
·77 lines (68 loc) · 2.32 KB
/
Copy pathdeploy.sh
File metadata and controls
executable file
·77 lines (68 loc) · 2.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/bin/sh
# Deploy or upgrade /data/adb/LinuxOnAndroid from this repo (first install included,
# the directory is created if missing).
# Run on the host (macOS/Linux) with adb connected and root (su) available.
# Only syncs repo files; runtime data (rootfs.img, rootfs/, run/, bin/, backup/)
# on the device is left untouched.
set -e
SD=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
DST=${DST:-/data/adb/LinuxOnAndroid}
ADB=${ADB:-adb}
die() { printf '%s\n' "deploy: $*" >&2; exit 1; }
adbcmd=${ADB:-adb}
command -v "${adbcmd%% *}" >/dev/null 2>&1 || die "adb not found, install Android platform-tools first"
if [ "${ADB:-adb}" = "adb" ]; then
devs=$(adb devices | awk 'NR>1 && $2=="device" {print $1}')
n=$(printf '%s\n' "$devs" | sed '/^$/d' | wc -l | tr -d ' ')
if [ "$n" -gt 1 ]; then
printf '%s\n' "deploy: multiple devices, pick one with ADB=\"adb -s <serial>\":" >&2
printf ' %s\n' $devs >&2
exit 1
fi
fi
"$ADB" get-state >/dev/null 2>&1 || die "no adb device"
"$ADB" shell "su -c 'mkdir -p $DST'" >/dev/null 2>&1 || die "$DST not writable (or no root)"
FILES="
LICENSE
README.md
README.zh.md
backup.sh
enter.sh
init.sh
restore.sh
setup_magisk_module.sh
setup_selinux_magisk_module.sh
start.sh
stop.sh
lib/boot-inner
lib/container-init
lib/guest-init-alpine
lib/guest-init-debian
lib/setup-dev
scripts/dns-sync.sh
scripts/env.sh
scripts/rootfs-loop.sh
scripts/start-fore.sh
"
changed=0
for f in $FILES; do
[ -f "$SD/$f" ] || { printf 'skip (missing locally): %s\n' "$f"; continue; }
lsum=$(md5 -q "$SD/$f" 2>/dev/null || md5sum "$SD/$f" | awk '{print $1}')
rsum=$("$ADB" shell "su -c 'md5sum $DST/$f 2>/dev/null'" | tr -d '\r' | awk '{print $1}')
if [ "$lsum" = "$rsum" ]; then
printf 'same: %s\n' "$f"
else
"$ADB" push "$SD/$f" "/data/local/tmp/loa-deploy.tmp" >/dev/null
case $f in
*/*) dir=$DST/${f%/*};;
*) dir=$DST;;
esac
"$ADB" shell "su -c 'mkdir -p $dir; cp /data/local/tmp/loa-deploy.tmp $DST/$f; chmod 755 $DST/$f; rm -f /data/local/tmp/loa-deploy.tmp'" >/dev/null
printf 'updated: %s\n' "$f"
changed=1
fi
done
# Clean macOS junk left by earlier copies.
"$ADB" shell "su -c 'find $DST -name \".DS_Store\" -o -name \"._*\" | while read -r j; do rm -f \"\$j\"; done'" >/dev/null
[ "$changed" = 1 ] || printf '%s\n' 'deploy: already up to date'
printf '%s\n' 'deploy: done'