-
-
Notifications
You must be signed in to change notification settings - Fork 12
/
install-tarball.sh
93 lines (82 loc) · 2.47 KB
/
install-tarball.sh
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/system/bin/sh
# ${1:-$id} Tarball Installer
# Copyright 2019-2021, VR25
# License: GPLv3+
#
# this file must be in the same directory as the tarball
# $1: module id
# $2: parent install dir, optional
# example: sh install-tarball.sh acc /data/data/github.vr25.acc/files
id=djs
domain=vr25
data_dir=/data/adb/$domain/${1:-$id}-data
# log
[ -z "${LINENO-}" ] || export PS4='$LINENO: '
mkdir -p $data_dir/logs
exec 2>$data_dir/logs/install-tarball.sh.log
set -x
# set up busybox
#BB#
[ -x /dev/.vr25/busybox/ls ] || {
mkdir -p /dev/.vr25/busybox
chmod 0700 /dev/.vr25/busybox
if [ -f /data/adb/vr25/bin/busybox ]; then
[ -x /data/adb/vr25/bin/busybox ] || chmod -R 0700 /data/adb/vr25/bin
/data/adb/vr25/bin/busybox --install -s /dev/.vr25/busybox
elif [ -f /data/adb/magisk/busybox ]; then
[ -x /data/adb/magisk/busybox ] || chmod 0700 /data/adb/magisk/busybox
/data/adb/magisk/busybox --install -s /dev/.vr25/busybox
elif which busybox > /dev/null; then
eval "$(which busybox) --install -s /dev/.vr25/busybox"
else
echo "(!) Install busybox or simply place it in /data/adb/vr25/bin/"
exit 3
fi
}
case $PATH in
/data/adb/vr25/bin:*) :;;
*) export PATH=/data/adb/vr25/bin:/dev/.vr25/busybox:$PATH;;
esac
#/BB#
# root check
[ $(id -u) -ne 0 ] && {
echo "(!) $0 must run as root (su)"
exit 4
}
set -e
# get into the target directory
[ -f $PWD/${0##*/} ] || cd $(readlink -f ${0%/*})
# this runs on exit if the installer is launched by a front-end app
copy_log() {
rm -rf ${1-$id}[-_]*/ 2>/dev/null
case "$PWD" in
/data/data/*|/data/user/*)
mkdir -p logs
cp -af $data_dir/logs/install.log logs/${1:-$id}-install.log 2>/dev/null || return 0
chown -R $(stat -c %u:%g .) logs
/system/bin/restorecon -R logs
;;
esac
}
trap copy_log EXIT
# extract tarball
rm -rf ${1:-$id}[-_]*/ 2>/dev/null
test -f ${1:-$id}[-_]*.tar.gz && ext=tar.gz || ext=tgz
tar -xf ${1:-$id}[-_]*.$ext
unset ext
# prevent frontends from downgrading/reinstalling modules
case "$PWD" in
/data/data/*|/data/user/*)
get_ver() { sed -n '/^versionCode=/s/.*=//p' ${1}module.prop 2>/dev/null || echo 0; }
bundled_ver=$(get_ver ${1:-$id}[-_]*/)
regular_ver=$(get_ver /data/adb/$domain/${1:-$id}/)
if [ $bundled_ver -le $regular_ver ] && [ $regular_ver -ne 0 ]; then
ln -s $(readlink -f /data/adb/$domain/${1:-$id}) .
exit 0
fi 2>/dev/null || :
;;
esac
# install ${1:-$id}
export installDir="$2"
/system/bin/sh ${1:-$id}[-_]*/install.sh
exit 0