167 lines
3.7 KiB
Bash
Executable File
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
|
|
}
|
|
|