forked from CHIZI-0618/box4magisk
-
Notifications
You must be signed in to change notification settings - Fork 138
Expand file tree
/
Copy pathcustomize.sh
More file actions
246 lines (207 loc) · 8.22 KB
/
customize.sh
File metadata and controls
246 lines (207 loc) · 8.22 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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
#!/bin/sh
SKIPUNZIP=1
ASH_STANDALONE=1
CURRENT_MODULES_DIR="/data/adb/modules"
UPDATE_MODULES_DIR="/data/adb/modules_update"
magisk -v | grep -q lite && CURRENT_MODULES_DIR="/data/adb/lite_modules" && UPDATE_MODULES_DIR="/data/adb/lite_modules_update"
SURFING_PATH="$CURRENT_MODULES_DIR/Surfing"
BOX_BLL_PATH="/data/adb/box_bll"
BIN_PATH="$BOX_BLL_PATH/bin"
SCRIPTS_PATH="$BOX_BLL_PATH/scripts"
NET_PATH="/data/misc/net"
CTR_PATH="/data/misc/net/rt_tables"
CONFIG_FILE="$BOX_BLL_PATH/clash/config.yaml"
BACKUP_FILE="$BOX_BLL_PATH/clash/proxies/subscribe_urls_backup.txt"
INSTALL_DIR="/data/app"
HOSTS_FILE="$BOX_BLL_PATH/clash/etc/hosts"
HOSTS_PATH="$BOX_BLL_PATH/clash/etc"
HOSTS_BACKUP="$BOX_BLL_PATH/clash/etc/hosts.bak"
SURFING_TILE_ZIP="$MODPATH/SurfingTile.zip"
CURRENT_SURFING_TILE_DIR="$CURRENT_MODULES_DIR/SurfingTile"
UPDATE_SURFING_TILE_DIR="$UPDATE_MODULES_DIR/SurfingTile"
MODULE_PROP_PATH="$CURRENT_MODULES_DIR/Surfing/module.prop"
MODULE_VERSION_CODE=0
[ -f "$MODULE_PROP_PATH" ] && MODULE_VERSION_CODE=$(awk -F'=' '/versionCode/ {print $2}' "$MODULE_PROP_PATH")
if [ "$MODULE_VERSION_CODE" -lt 1646 ]; then
INSTALL_TILE=true
else
INSTALL_TILE=false
fi
init_busybox_toolchain() {
chmod 755 "$BIN_PATH/busybox"
cd "$BIN_PATH" && find . -type l -delete && ./busybox --install -s . && cd "$MODPATH"
}
extract_subscribe_urls() {
if [ -f "$CONFIG_FILE" ]; then
awk '/proxy-providers:/,/^profile:/' "$CONFIG_FILE" | \
grep -Eo 'url: ".*"' | \
sed -E 's/url: "(.*)"/\1/' | \
sed 's/&/\\&/g' > "$BACKUP_FILE"
if [ -s "$BACKUP_FILE" ]; then
ui_print "Backed up subscription URLs to:"
ui_print "proxies/subscribe_urls_backup.txt"
else
ui_print "No URLs found. Check config format."
fi
else
ui_print "Config file missing. Cannot extract URLs."
fi
}
restore_subscribe_urls() {
if [ -f "$BACKUP_FILE" ] && [ -s "$BACKUP_FILE" ]; then
awk 'NR==FNR {
urls[++n] = $0; next
}
/proxy-providers:/ { inBlock = 1 }
inBlock && /url: / {
sub(/url: ".*"/, "url: \"" urls[++i] "\"")
}
/profile:/ { inBlock = 0 }
{ print }
' "$BACKUP_FILE" "$CONFIG_FILE" > "$CONFIG_FILE.tmp" && mv "$CONFIG_FILE.tmp" "$CONFIG_FILE"
ui_print "Restored URLs to config.yaml"
else
ui_print "No valid backup found. Skipped restore."
fi
}
install_surfingtile_apk() {
APK_SRC="$UPDATE_SURFING_TILE_DIR/system/app/com.surfing.tile/com.surfing.tile.apk"
APK_TMP="$INSTALL_DIR/com.surfing.tile.apk"
if [ -f "$APK_SRC" ]; then
cp "$APK_SRC" "$APK_TMP"
ui_print "Installing Surfingtile APK..."
pm install "$APK_TMP"
rm -f "$APK_TMP"
else
ui_print "Surfingtile APK not found"
fi
}
install_surfingtile_module() {
mkdir -p "$UPDATE_SURFING_TILE_DIR"
mkdir -p "$CURRENT_SURFING_TILE_DIR"
unzip -o "$SURFING_TILE_ZIP" -d "$UPDATE_SURFING_TILE_DIR" >/dev/null 2>&1
cp -f "$UPDATE_SURFING_TILE_DIR/module.prop" "$CURRENT_SURFING_TILE_DIR"
touch "$CURRENT_SURFING_TILE_DIR/update"
}
sync_version_from_module_prop() {
dst_prop="$CURRENT_MODULES_DIR/Surfing/module.prop"
if [ -f "$MODPATH/module.prop" ] && [ -d "$CURRENT_MODULES_DIR/Surfing" ]; then
cp -f "$MODPATH/module.prop" "$dst_prop"
fi
}
choose_volume_key() {
timeout_seconds=10
ui_print "Waiting for input (${timeout_seconds}s)..."
line=$(timeout $timeout_seconds getevent -ql | awk '/KEY_VOLUME/ {print; exit}')
if [ -z "$line" ]; then
ui_print "No input detected. Running default option..."
return 1
fi
if echo "$line" | grep -q "KEY_VOLUMEUP"; then
return 0
else
return 1
fi
}
choose_to_umount_hosts_file() {
ui_print "Mount the hosts file to the system ?"
ui_print "Volume Up: Mount"
ui_print "Volume Down: Uninstall (default)"
if choose_volume_key; then
ui_print "Hosts file mounted"
else
ui_print "Uninstalling hosts file is complete"
rm -f "$HOSTS_FILE"
fi
}
remove_old_surfingtile(){
rm -rf /data/adb/modules/Surfingtile 2>/dev/null
rm -rf /data/adb/modules_update/Surfingtile 2>/dev/null
rm -rf /data/adb/lite_modules/Surfingtile 2>/dev/null
rm -rf /data/adb/lite_modules_update/Surfingtile 2>/dev/null
rm -rf /data/adb/modules/Surfing_Tile 2>/dev/null
rm -rf /data/adb/modules_update/Surfing_Tile 2>/dev/null
rm -rf /data/adb/lite_modules/Surfing_Tile 2>/dev/null
rm -rf /data/adb/lite_modules_update/Surfing_Tile 2>/dev/null
pm uninstall "com.yadli.surfingtile" > /dev/null 2>&1 || pm uninstall --user 0 "com.yadli.surfingtile" > /dev/null 2>&1
}
if [ "$BOOTMODE" != true ]; then
abort "Error: Please install via Magisk Manager / KernelSU Manager / APatch"
elif [ "$KSU" = true ] && [ "$KSU_VER_CODE" -lt 10670 ]; then
abort "Error: Please update your KernelSU Manager version"
fi
if [ "$KSU" = true ] && [ "$KSU_VER_CODE" -lt 10683 ]; then
service_dir="/data/adb/ksu/service.d"
else
service_dir="/data/adb/service.d"
fi
[ ! -d "$service_dir" ] && mkdir -p "$service_dir"
unzip -qo "${ZIPFILE}" -x 'META-INF/*' -d "$MODPATH"
remove_old_surfingtile
sync_version_from_module_prop
if [ -d "$BOX_BLL_PATH" ]; then
ui_print "Updating..."
ui_print "↴"
cp -f "$MODPATH/box_bll/bin/busybox" "$BIN_PATH/busybox" && init_busybox_toolchain
[ "$INSTALL_TILE" = "true" ] && install_surfingtile_module && install_surfingtile_apk
extract_subscribe_urls
[ -f "$HOSTS_FILE" ] && cp -f "$HOSTS_FILE" "$HOSTS_BACKUP"
mkdir -p "$HOSTS_PATH" && touch "$HOSTS_FILE"
cp "$BOX_BLL_PATH/clash/config.yaml" "$BOX_BLL_PATH/clash/config.yaml.bak"
cp "$BOX_BLL_PATH/scripts/box.config" "$BOX_BLL_PATH/scripts/box.config.bak"
cp -f "$MODPATH/box_bll/clash/config.yaml" "$BOX_BLL_PATH/clash/"
cp -f "$MODPATH/box_bll/clash/Toolbox.sh" "$BOX_BLL_PATH/clash/"
cp -f "$MODPATH/box_bll/scripts/"* "$BOX_BLL_PATH/scripts/"
OLD_CONFIG="$BOX_BLL_PATH/scripts/box.config.bak"
NEW_CONFIG="$BOX_BLL_PATH/scripts/box.config"
if [ -f "$OLD_CONFIG" ]; then
ui_print "Migrating network service control settings..."
TMP_CONFIG="${NEW_CONFIG}.tmp"
cp -f "$NEW_CONFIG" "$TMP_CONFIG"
VARS="enable_network_service_control use_module_on_wifi_disconnect use_module_on_wifi use_ssid_matching use_wifi_list_mode blacklist_wifi_ssids whitelist_wifi_ssids ap_list gid_list user_packages_list proxy_mode proxy_method ipv6"
for var in $VARS; do
val=$(grep "^${var}=" "$OLD_CONFIG" | cut -d'=' -f2-)
[ -n "$val" ] && sed "s@^${var}=.*@${var}=${val}@" "$TMP_CONFIG" > "${TMP_CONFIG}.bak" && mv -f "${TMP_CONFIG}.bak" "$TMP_CONFIG"
done
mv -f "$TMP_CONFIG" "$NEW_CONFIG"
ui_print "Settings migrated successfully"
fi
restore_subscribe_urls
for pid in $(pidof inotifyd); do
if [ -f "/proc/${pid}/cmdline" ] && grep -qE "box.inotify|net.inotify|ctr.inotify" "/proc/${pid}/cmdline"; then
kill "$pid"
fi
done
nohup inotifyd "${SCRIPTS_PATH}/box.inotify" "$HOSTS_PATH" > /dev/null 2>&1 &
nohup inotifyd "${SCRIPTS_PATH}/box.inotify" "$SURFING_PATH" > /dev/null 2>&1 &
nohup inotifyd "${SCRIPTS_PATH}/net.inotify" "$NET_PATH" > /dev/null 2>&1 &
nohup inotifyd "${SCRIPTS_PATH}/ctr.inotify" "$CTR_PATH" > /dev/null 2>&1 &
[ -d "$CURRENT_SURFING_TILE_DIR" ] && inotifyd "${SCRIPTS_PATH}/box.inotify" "/data/system" >/dev/null 2>&1 &
sleep 1
cp -f "$MODPATH/box_bll/clash/etc/hosts" "$BOX_BLL_PATH/clash/etc/"
rm -f "$BOX_BLL_PATH/clash/Toolbox.sh"
rm -rf "$BOX_BLL_PATH/clash/Model.bin" "$BOX_BLL_PATH/clash/smart_weight_data.csv" "$BOX_BLL_PATH/scripts/box.upgrade"
rm -rf "$MODPATH/box_bll"
choose_to_umount_hosts_file
ui_print "Update completed."
else
ui_print "Installing..."
ui_print "↴"
mv "$MODPATH/box_bll" /data/adb/
init_busybox_toolchain
install_surfingtile_module
install_surfingtile_apk
ui_print "Module installation completed."
choose_to_umount_hosts_file
fi
mv -f "$MODPATH/Surfing_service.sh" "$service_dir/"
rm -f "$SURFING_TILE_ZIP"
set_perm_recursive "$MODPATH" 0 0 0755 0644
set_perm_recursive "$UPDATE_SURFING_TILE_DIR" 0 0 0755 0644
set_perm_recursive "$BOX_BLL_PATH" 0 3005 0755 0644
set_perm_recursive "$BOX_BLL_PATH/scripts" 0 3005 0755 0700
set_perm_recursive "$BIN_PATH" 0 0 0755 0755
set_perm_recursive "$BOX_BLL_PATH/clash/etc" 0 0 0755 0644
set_perm "$service_dir/Surfing_service.sh" 0 0 0700
chmod ugo+x "$BOX_BLL_PATH/scripts/"*
rm -f customize.sh