2024-08-05 14:21:57 +08:00

167 lines
3.7 KiB
Bash
Executable File

#!/bin/sh /etc/rc.common
# start prio
START=50
# use proc to start service
USE_PROCD=1
# package name
PACKAGE_NAME="acc.ipk"
# binary dir
sbin_dir="/usr/sbin/leigod"
# binary name
binary_prefix="acc-gw.linux"
# download acceleration binary
download_acc_binary() {
echo "begin to download file... ..."
# create download
local url="http://119.3.40.126/${PACKAGE_NAME}"
echo "download path: ${url}"
local path="/tmp/${PACKAGE_NAME}"
local code=$(curl --connect-timeout 2 -L -s -k -o "${path}" -w "%{http_code}" "${url}")
for i in $(seq 1 2)
do
if [ "$?" != "0" -o "${code}" != "200" -o ! -f "${path}" ]; then
echo "download failed: ${code}"
rm -f ${path}
sleep 5
continue
fi
echo "download success"
break
done
echo "download file success... ..."
}
# mkdir acc dir
mk_acc_dir() {
echo "begin to mkdir... ..."
# should make sure dir exist
local cmd="mkdir -p ${BINARY_DIR}"
echo "exec mkdir dir: ${cmd}"
local code=`$cmd`
echo "mkdir success... ..."
}
# decompress file
decompress_file() {
echo "begin to decompress file... ..."
# compress file path
local path="/tmp/${PACKAGE_NAME}"
# decompress command
local cmd="tar -zxvf ${path} -C ${BINARY_DIR}"
local code=`${cmd}`
echo "decompress file success... ..."
}
# install ipk
install_package() {
echo "begin to overwrite package"
# local cmd = "opkg install /tmp/${PACKAGE_NAME} --force-overwrite"
# `$cmd`
echo "overwrite finish, begin to start"
}
# main
prepare_env() {
# mkdir
mk_acc_dir
# download file
download_acc_binary
# decompress file
install_package
}
main() {
prepare_env
}
# get_device_arch,
# current support arch: arm64 arm x86_64 mips
get_device_arch() {
arch=$(uname -m)
if [ $? != "0" ]; then
echo "arch cant be get"
return -1
fi
# fix arch
if [ ${arch} == "x86_64" ]; then
echo "match x86_64 -> amd64"
arch="amd64"
elif [ ${arch} == "aarch64" ]; then
echo "match aarch64 -> arm64"
arch="arm64"
elif [ ${arch} == "mips" ]; then
echo "match mips -> mipsle"
arch="mipsle"
elif [ ${arch} == "armv7l" ]; then
echo "match armv7l -> arm"
arch="arm"
fi
return 0
}
# get_xiaomi_name check if is xiaomi
get_xiaomi_name() {
local name=$(uci get misc.hardware.displayName)
if [[ $? == "0" && ${name} != "" ]]; then
echo "router is xiaomi series, name: ${name}"
sbin_dir="/userdisk/appdata/leigod"
init_dir="/userdisk/appdata/leigod"
args="--mode tun"
is_xiaomi=true
return 0
fi
local name=$(uci get misc.hardware.model)
if [[ $? == "0" && ${name} != "" ]]; then
echo "router is xiaomi series, name: ${name}"
sbin_dir="/userdisk/appdata/leigod"
init_dir="/userdisk/appdata/leigod"
args="--mode tun"
is_xiaomi=true
return 0
fi
echo "router is not xiaomi, use general openwrt"
sbin_dir="/usr/sbin/leigod"
init_dir="/etc/init.d"
return 0
}
# run service as daemon
start_service_daemon() {
# open once instance
procd_open_instance
# run binary
local cmd="${sbin_dir}/${binary_prefix}.${arch} ${args}"
echo "start service: ${cmd}"
procd_set_param command ${cmd}
# auto start when failed
procd_set_param respawn
# close instance
procd_close_instance
# start check update
# update_plugin &
}
# proc start service
start_service() {
config_load "accelerator"
local enabled
config_get_bool enabled base enabled 0
local tun
config_get_bool tun base tun 0
[ "${enabled}" -gt 0 ] || return
[ "${tun}" -eq 1 ] && args="--mode tun"
get_device_arch
start_service_daemon
}