update zerotier module to support rootless app
This commit is contained in:
@@ -14,6 +14,8 @@
|
|||||||
|
|
||||||
**Use Android App to control ZeroTier**
|
**Use Android App to control ZeroTier**
|
||||||
|
|
||||||
|
**Support for Private Root Servers**
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
1. a version is built with Android NDK Toolchain, supporting api 28 (Android 9.0) and above.
|
1. a version is built with Android NDK Toolchain, supporting api 28 (Android 9.0) and above.
|
||||||
@@ -34,9 +36,13 @@ AArch64 suppots ARMv8-A and above; Arm version supports ARMv7-A (compiling with
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
### Use Private Root Servers
|
||||||
|
|
||||||
|
Replace `/data/adb/zerotier/home/planet` with your own `planet` file.
|
||||||
|
|
||||||
### Controller App
|
### Controller App
|
||||||
|
|
||||||
Needs root privilege
|
Does not need root privilege
|
||||||
|
|
||||||
| Feature | Supported? |
|
| Feature | Supported? |
|
||||||
| :----------------- | :--------- |
|
| :----------------- | :--------- |
|
||||||
|
|||||||
+7
-1
@@ -14,6 +14,8 @@
|
|||||||
|
|
||||||
**使用 Android App 进行控制**
|
**使用 Android App 进行控制**
|
||||||
|
|
||||||
|
**支持自建 Planet**
|
||||||
|
|
||||||
## 运行要求
|
## 运行要求
|
||||||
|
|
||||||
1. 使用 NDK 编译的版本,支持 api 28 (Android 9.0) 及以上的设备
|
1. 使用 NDK 编译的版本,支持 api 28 (Android 9.0) 及以上的设备
|
||||||
@@ -34,9 +36,13 @@ AArch64 版本支持 ARMv8-A 及以上;Arm 版本均对 ARMv7-A 进行编译 (
|
|||||||
|
|
||||||
## 使用
|
## 使用
|
||||||
|
|
||||||
|
### 自建 Planet
|
||||||
|
|
||||||
|
将 `/data/adb/zerotier/home/planet` 替换为自己的 planet 文件即可
|
||||||
|
|
||||||
### 控制器 App
|
### 控制器 App
|
||||||
|
|
||||||
需要 root 授权
|
无需 root 授权
|
||||||
|
|
||||||
| 功能 | 支持状态 |
|
| 功能 | 支持状态 |
|
||||||
| :--------------- | :------- |
|
| :--------------- | :------- |
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'package:http/http.dart' as http;
|
import 'package:http/http.dart' as http;
|
||||||
|
import 'package:path_provider/path_provider.dart';
|
||||||
|
|
||||||
class AuthedClientInner extends http.BaseClient {
|
class AuthedClientInner extends http.BaseClient {
|
||||||
final String _secret;
|
final String _secret;
|
||||||
@@ -25,9 +26,11 @@ class AuthedClientInner extends http.BaseClient {
|
|||||||
class AuthedClient {
|
class AuthedClient {
|
||||||
late Future<AuthedClientInner> client;
|
late Future<AuthedClientInner> client;
|
||||||
Future<AuthedClientInner> loadSecret() async {
|
Future<AuthedClientInner> loadSecret() async {
|
||||||
final results = await Process.run(
|
final path = (await getApplicationDocumentsDirectory()).path;
|
||||||
'su', ['-c', 'cat', '/data/adb/zerotier/home/authtoken.secret']);
|
final file = File('$path/authtoken');
|
||||||
return AuthedClientInner(results.stdout.toString().trim(), http.Client());
|
final token = await file.readAsString();
|
||||||
|
|
||||||
|
return AuthedClientInner(token.trim(), http.Client());
|
||||||
}
|
}
|
||||||
|
|
||||||
AuthedClient() {
|
AuthedClient() {
|
||||||
|
|||||||
+5
-6
@@ -40,9 +40,8 @@ class MyHomePage extends StatefulWidget {
|
|||||||
State<MyHomePage> createState() => _MyHomePageState();
|
State<MyHomePage> createState() => _MyHomePageState();
|
||||||
}
|
}
|
||||||
|
|
||||||
Future zerotierCommand(String exe, String command) {
|
Future zerotierCommand(String command) {
|
||||||
return Process.run('su', ['-c', '/data/adb/zerotier/$exe', command],
|
return Process.run('echo', [command, '>/data/data/com.eventlowop.zerotier_magisk_app/files/pipe']);
|
||||||
environment: {'LD_LIBRARY_PATH': '/system/lib64:/data/adb/zerotier/lib'});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class _MyHomePageState extends State<MyHomePage> {
|
class _MyHomePageState extends State<MyHomePage> {
|
||||||
@@ -125,9 +124,9 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||||||
|
|
||||||
_MyHomePageState() : super() {
|
_MyHomePageState() : super() {
|
||||||
restartFn =
|
restartFn =
|
||||||
cmdButtonWrapper(() => zerotierCommand('zerotier.sh', 'restart'));
|
cmdButtonWrapper(() => zerotierCommand('restart'));
|
||||||
startFn = cmdButtonWrapper(() => zerotierCommand('zerotier.sh', 'start'));
|
startFn = cmdButtonWrapper(() => zerotierCommand('start'));
|
||||||
stopFn = cmdButtonWrapper(() => zerotierCommand('zerotier.sh', 'stop'));
|
stopFn = cmdButtonWrapper(() => zerotierCommand('stop'));
|
||||||
joinFn = cmdButtonWrapper(() => joinNetwork(_idInputController.text));
|
joinFn = cmdButtonWrapper(() => joinNetwork(_idInputController.text));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+89
-1
@@ -97,6 +97,14 @@ packages:
|
|||||||
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.1"
|
version: "1.3.1"
|
||||||
|
ffi:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: ffi
|
||||||
|
sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21"
|
||||||
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.2"
|
||||||
flutter:
|
flutter:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description: flutter
|
description: flutter
|
||||||
@@ -227,6 +235,54 @@ packages:
|
|||||||
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.9.0"
|
version: "1.9.0"
|
||||||
|
path_provider:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: path_provider
|
||||||
|
sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161
|
||||||
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.3"
|
||||||
|
path_provider_android:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_android
|
||||||
|
sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d
|
||||||
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
|
source: hosted
|
||||||
|
version: "2.2.4"
|
||||||
|
path_provider_foundation:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_foundation
|
||||||
|
sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16
|
||||||
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
|
source: hosted
|
||||||
|
version: "2.4.0"
|
||||||
|
path_provider_linux:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_linux
|
||||||
|
sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
|
||||||
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
|
source: hosted
|
||||||
|
version: "2.2.1"
|
||||||
|
path_provider_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_platform_interface
|
||||||
|
sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
|
||||||
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.2"
|
||||||
|
path_provider_windows:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_windows
|
||||||
|
sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170"
|
||||||
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
|
source: hosted
|
||||||
|
version: "2.2.1"
|
||||||
petitparser:
|
petitparser:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -235,6 +291,22 @@ packages:
|
|||||||
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.0.2"
|
version: "6.0.2"
|
||||||
|
platform:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: platform
|
||||||
|
sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65"
|
||||||
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
|
source: hosted
|
||||||
|
version: "3.1.5"
|
||||||
|
plugin_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: plugin_platform_interface
|
||||||
|
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
|
||||||
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.8"
|
||||||
sky_engine:
|
sky_engine:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
@@ -320,6 +392,22 @@ packages:
|
|||||||
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.5.1"
|
version: "0.5.1"
|
||||||
|
win32:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: win32
|
||||||
|
sha256: "0eaf06e3446824099858367950a813472af675116bf63f008a4c2a75ae13e9cb"
|
||||||
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
|
source: hosted
|
||||||
|
version: "5.5.0"
|
||||||
|
xdg_directories:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: xdg_directories
|
||||||
|
sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d
|
||||||
|
url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.4"
|
||||||
xml:
|
xml:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -338,4 +426,4 @@ packages:
|
|||||||
version: "3.1.2"
|
version: "3.1.2"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=3.3.4 <4.0.0"
|
dart: ">=3.3.4 <4.0.0"
|
||||||
flutter: ">=1.17.0"
|
flutter: ">=3.16.6"
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ dependencies:
|
|||||||
# Use with the CupertinoIcons class for iOS style icons.
|
# Use with the CupertinoIcons class for iOS style icons.
|
||||||
cupertino_icons: ^1.0.6
|
cupertino_icons: ^1.0.6
|
||||||
http: ^1.2.1
|
http: ^1.2.1
|
||||||
|
path_provider: ^2.1.3
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ ln -sf $ZTPATH/zerotier-idtool $MODPATH$SYSBIN/zerotier-idtool
|
|||||||
ui_print "- set file permission"
|
ui_print "- set file permission"
|
||||||
set_perm_recursive $MODPATH 0 0 0755 0644
|
set_perm_recursive $MODPATH 0 0 0755 0644
|
||||||
set_perm_recursive $ZTPATH 0 0 0755 0644
|
set_perm_recursive $ZTPATH 0 0 0755 0644
|
||||||
|
set_perm $MODPATH/handle.sh 0 0 0755
|
||||||
set_perm $ZTPATH/zerotier.sh 0 0 0755
|
set_perm $ZTPATH/zerotier.sh 0 0 0755
|
||||||
set_perm $ZTPATH/zerotier-one 0 0 0755
|
set_perm $ZTPATH/zerotier-one 0 0 0755
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,83 @@
|
|||||||
|
#!/system/bin/sh
|
||||||
|
|
||||||
|
MODDIR=${0%/*}
|
||||||
|
|
||||||
|
# load variables
|
||||||
|
. $MODDIR/vars.sh
|
||||||
|
|
||||||
|
# LD_LIBRARY_PATH for NDK
|
||||||
|
export LD_LIBRARY_PATH=/system/lib64:/data/adb/zerotier/lib
|
||||||
|
|
||||||
|
log_cli() {
|
||||||
|
echo -e "$1" >> $ZTROOT/run/cli.out
|
||||||
|
}
|
||||||
|
log() {
|
||||||
|
t=`date +"%m-%d %H:%M:%S.%3N"`
|
||||||
|
echo -e "[$t][$$][L] $@" >> $DAEMON_LOG
|
||||||
|
log_cli "$@"
|
||||||
|
}
|
||||||
|
_stop() {
|
||||||
|
pid=`pidof zerotier-one`
|
||||||
|
if [[ $? -ne 0 ]]; then
|
||||||
|
log "zerotier-one not running"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
kill -9 $pid
|
||||||
|
if [[ $? -ne 0 ]]; then
|
||||||
|
log "kill zerotier-one failed"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
wait
|
||||||
|
sleep 1 # sometimes it fails without sleeping
|
||||||
|
|
||||||
|
log "stopped zerotier-one"
|
||||||
|
}
|
||||||
|
_start() {
|
||||||
|
if pid=`pidof zerotier-one`; then
|
||||||
|
log "zerotier-one already running pid $pid"
|
||||||
|
else
|
||||||
|
$ZTROOT/zerotier-one -d >> $ZT_LOG 2>&1 &
|
||||||
|
pid=`pidof zerotier-one`
|
||||||
|
log "started zerotier-one pid $pid"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
_status() {
|
||||||
|
# fake systemd lol
|
||||||
|
if pid=`pidof zerotier-one`; then
|
||||||
|
log_cli "\033[32m●\033[0m zerotier-one.service - ZeroTier One - Global Area Networking"
|
||||||
|
log_cli " Active: \033[32mactive (running)\033[0m"
|
||||||
|
log_cli " Main PID: $pid (zerotier-one)"
|
||||||
|
else
|
||||||
|
read pid_ < $ZTROOT/home/zerotier-one.pid
|
||||||
|
log_cli "○ zerotier-one.service - ZeroTier One - Global Area Networking"
|
||||||
|
log_cli " Active: inactive (dead)"
|
||||||
|
log_cli " Main PID: $pid_ (code=exited)"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# ----------------------------------------------
|
||||||
|
# call from inotifyd
|
||||||
|
# ----------------------------------------------
|
||||||
|
|
||||||
|
if [[ $# == 2 && "$1" == "w" ]]; then
|
||||||
|
read cmd < $2
|
||||||
|
rm -f $ZTROOT/run/cli.out
|
||||||
|
|
||||||
|
case "$cmd" in
|
||||||
|
"start") _start;;
|
||||||
|
"stop") _stop;;
|
||||||
|
"restart") _stop; _start;;
|
||||||
|
"status") _status;;
|
||||||
|
*) log "unknown command $cmd";;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [[ -f "$ZTROOT/run/cli.pid" ]]; then
|
||||||
|
read cpid < $ZTROOT/run/cli.pid
|
||||||
|
rm -f $ZTROOT/run/cli.pid
|
||||||
|
kill -SIGUSR1 $cpid
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
+61
-91
@@ -2,96 +2,66 @@
|
|||||||
|
|
||||||
MODDIR=${0%/*}
|
MODDIR=${0%/*}
|
||||||
|
|
||||||
ZTROOT=/data/adb/zerotier
|
# load variables
|
||||||
ZTRUNTIME=$ZTROOT/run
|
. $MODDIR/vars.sh
|
||||||
APPROOT=/data/data/com.eventlowop.zerotier_magisk_app/files
|
|
||||||
|
|
||||||
pipe=$ZTRUNTIME/pipe
|
# wait_until_login from yc9559/uperf at uperf/magisk/script/libcommon.sh
|
||||||
ZTLOG=$ZTRUNTIME/zerotier.log
|
wait_until_login() {
|
||||||
daemon_log=$ZTRUNTIME/daemon.log
|
# in case of /data encryption is disabled
|
||||||
|
while [ "$(getprop sys.boot_completed)" != "1" ]; do
|
||||||
cli_output=$ZTRUNTIME/cli.out
|
sleep 1
|
||||||
cli_pid=$ZTRUNTIME/cli.pid
|
|
||||||
|
|
||||||
log() {
|
|
||||||
t=`date +"%m-%d %H:%M:%S.%3N"`
|
|
||||||
echo -e "[$t][$$][L] $1" >> $daemon_log
|
|
||||||
echo -e "$1" >> $cli_output
|
|
||||||
}
|
|
||||||
log_cli() {
|
|
||||||
echo -e "$1" >> $cli_output
|
|
||||||
}
|
|
||||||
_stop() {
|
|
||||||
pid=`pidof zerotier-one`
|
|
||||||
if [[ $? -ne 0 ]]; then
|
|
||||||
log "zerotier-one not running"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
kill -9 $pid
|
|
||||||
if [[ $? -ne 0 ]]; then
|
|
||||||
log "kill zerotier-one failed"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
wait
|
|
||||||
log "stopped zerotier-one"
|
|
||||||
}
|
|
||||||
__start() {
|
|
||||||
$ZTROOT/zerotier-one -d >> $ZTLOG 2>&1 &
|
|
||||||
}
|
|
||||||
_start() {
|
|
||||||
if pid=`pidof zerotier-one`; then
|
|
||||||
log "zerotier-one already running pid $pid"
|
|
||||||
else
|
|
||||||
__start
|
|
||||||
pid=`pidof zerotier-one`
|
|
||||||
log "started zerotier-one pid $pid"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
_status() {
|
|
||||||
# fake systemd lol
|
|
||||||
if pid=`pidof zerotier-one`; then
|
|
||||||
log_cli "\033[32m●\033[0m zerotier-one.service - ZeroTier One - Global Area Networking"
|
|
||||||
log_cli " Active: \033[32mactive (running)\033[0m"
|
|
||||||
log_cli " Main PID: $pid (zerotier-one)"
|
|
||||||
else
|
|
||||||
pid_=`cat $zerotier_root/home/zerotier-one.pid`
|
|
||||||
log_cli "○ zerotier-one.service - ZeroTier One - Global Area Networking"
|
|
||||||
log_cli " Active: inactive (dead)"
|
|
||||||
log_cli " Main PID: $pid_ (code=exited)"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
cd $ZTROOT
|
|
||||||
rm -f $ZTRUNTIME
|
|
||||||
mkfifo $pipe
|
|
||||||
|
|
||||||
chmod 666 $pipe $cli_output $cli_pid
|
|
||||||
|
|
||||||
ip rule add from all lookup main pref 1
|
|
||||||
export LD_LIBRARY_PATH=/system/lib64:/data/adb/zerotier/lib
|
|
||||||
|
|
||||||
if [[ -e /data/data/com.eventlowop.zerotier_magisk_app/files ]]; then
|
|
||||||
ln -sf $pipe $APPROOT/pipe
|
|
||||||
ln -sf $cli_output $APPROOT/cli.out
|
|
||||||
ln -sf $cli_pid $APPROOT/cli.pid
|
|
||||||
fi
|
|
||||||
|
|
||||||
__start
|
|
||||||
|
|
||||||
while true
|
|
||||||
do
|
|
||||||
if read cmd < $pipe; then
|
|
||||||
case "$cmd" in
|
|
||||||
"start") _start;;
|
|
||||||
"stop") _stop;;
|
|
||||||
"restart") _stop; _start;;
|
|
||||||
"status") _status;;
|
|
||||||
*) log "unknown command $cmd";;
|
|
||||||
esac
|
|
||||||
|
|
||||||
cpid=`cat $cli_pid`
|
|
||||||
kill -SIGUSR1 $cpid;
|
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# we doesn't have the permission to rw "/sdcard" before the user unlocks the screen
|
||||||
|
local test_file="/sdcard/Android/.PERMISSION_TEST"
|
||||||
|
true >"$test_file"
|
||||||
|
while [ ! -f "$test_file" ]; do
|
||||||
|
true >"$test_file"
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
rm "$test_file"
|
||||||
|
}
|
||||||
|
|
||||||
|
# ----------------------------------------------
|
||||||
|
# clean before start
|
||||||
|
# ----------------------------------------------
|
||||||
|
|
||||||
|
rm -rf $ZTROOT/run
|
||||||
|
mkdir -p $ZTROOT/run
|
||||||
|
|
||||||
|
# ----------------------------------------------
|
||||||
|
# start zerotier
|
||||||
|
# ----------------------------------------------
|
||||||
|
|
||||||
|
# add main route table to lookup rules
|
||||||
|
ip rule add from all lookup main pref 1
|
||||||
|
ip -6 rule add from all lookup main pref 1
|
||||||
|
|
||||||
|
# LD_LIBRARY_PATH for NDK
|
||||||
|
export LD_LIBRARY_PATH=$ZTROOT/lib
|
||||||
|
|
||||||
|
# start zerotier
|
||||||
|
$ZTROOT/zerotier-one -d >> $ZT_LOG 2>&1 &
|
||||||
|
|
||||||
|
# ----------------------------------------------
|
||||||
|
# CLI before login
|
||||||
|
# ----------------------------------------------
|
||||||
|
|
||||||
|
touch $PIPE_CLI
|
||||||
|
inotifyd $MODDIR/handle.sh $PIPE_CLI:w &>/dev/null & # toybox inotifyd bug: needs an extra character after colon
|
||||||
|
|
||||||
|
# ----------------------------------------------
|
||||||
|
# APP after login
|
||||||
|
# ----------------------------------------------
|
||||||
|
|
||||||
|
wait_until_login
|
||||||
|
|
||||||
|
if [[ -d "$APPROOT" ]]; then
|
||||||
|
rm -rf $APPROOT/run
|
||||||
|
mkdir -p $APPROOT/run
|
||||||
|
|
||||||
|
cp $ZTROOT/home/authtoken.secret $APPROOT/run/authtoken
|
||||||
|
touch $PIPE_APP
|
||||||
|
chmod 666 $APPROOT/run/authtoken $PIPE_APP
|
||||||
|
inotifyd $MODDIR/handle.sh $PIPE_APP:w &>/dev/null &
|
||||||
|
fi
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
# variables
|
||||||
|
|
||||||
|
ZTROOT=/data/adb/zerotier
|
||||||
|
APPROOT=/data/data/com.eventlowop.zerotier_magisk_app/app_flutter
|
||||||
|
|
||||||
|
ZT_LOG=$ZTROOT/run/zerotier.log
|
||||||
|
DAEMON_LOG=$ZTROOT/run/daemon.log
|
||||||
|
|
||||||
|
PIPE_CLI=$ZTROOT/run/pipe
|
||||||
|
PIPE_APP=$APPROOT/run/pipe
|
||||||
|
|
||||||
|
BB=/data/adb/magisk/busybox
|
||||||
@@ -1,26 +1,24 @@
|
|||||||
#!/system/bin/sh
|
#!/system/bin/sh
|
||||||
pipe=/data/adb/zerotier/run/pipe
|
|
||||||
|
|
||||||
cli_output=/data/adb/zerotier/run/cli.out
|
ZTROOT=/data/adb/zerotier
|
||||||
cli_pid=/data/adb/zerotier/run/cli.pid
|
PIPE=$ZTROOT/run/pipe
|
||||||
|
|
||||||
help_text="Usage: zerotier.sh {start|stop|restart|status}"
|
HELP="Usage: zerotier.sh {start|stop|restart|status}"
|
||||||
|
|
||||||
if [[ ! -p $pipe ]]; then
|
if [[ ! -f $PIPE ]]; then
|
||||||
echo "daemon not running"
|
echo "daemon not running"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rm -f $cli_output
|
echo $$ > $ZTROOT/run/cli.pid
|
||||||
echo $$ > $cli_pid
|
|
||||||
|
|
||||||
on_receive() {
|
on_receive() {
|
||||||
kill -9 %%
|
kill -9 %%
|
||||||
cat $cli_output
|
cat $ZTROOT/run/cli.out
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
run() {
|
run() {
|
||||||
echo $cmd > $pipe
|
echo $cmd > $PIPE
|
||||||
}
|
}
|
||||||
|
|
||||||
trap 'on_receive' SIGUSR1
|
trap 'on_receive' SIGUSR1
|
||||||
@@ -35,7 +33,7 @@ if [[ $# -eq 1 ]]; then
|
|||||||
*) echo "unknown command $cmd";;
|
*) echo "unknown command $cmd";;
|
||||||
esac
|
esac
|
||||||
else
|
else
|
||||||
echo $help_text
|
echo $HELP
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user