mirror of
https://github.com/monlor/MIXBOX-ARCHIVE.git
synced 2026-03-14 17:31:35 +00:00
moxbox init
This commit is contained in:
83
apps/mixbox/bin/applist
Normal file
83
apps/mixbox/bin/applist
Normal file
@@ -0,0 +1,83 @@
|
||||
#!/bin/sh
|
||||
#copyright by monlor
|
||||
# source /etc/mixbox/bin/base
|
||||
export PATH=$PATH:/etc/mixbox/bin
|
||||
mbroot="/etc/mixbox"
|
||||
mbtmp="/tmp/mbtmp"
|
||||
mburl=$(mbdb get mixbox.main.url)
|
||||
model=$(mbdb get mixbox.main.model)
|
||||
|
||||
fix_local_applist() {
|
||||
|
||||
rm -rf ${mbroot}/config/applist.txt
|
||||
if [ ! -f ${mbtmp}/applist.txt ]; then
|
||||
echo "未找到在线插件列表,无法修复!"
|
||||
return 1
|
||||
else
|
||||
|
||||
get_applist all -a | while read line
|
||||
do
|
||||
name="$(get_applist ${line} -n)"
|
||||
checkuci $name && echo ${line} >> ${mbroot}/config/applist.txt
|
||||
done
|
||||
fi
|
||||
if [ ! -f ${mbroot}/config/applist.txt ]; then
|
||||
echo "修复失败!"
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
get_applist() {
|
||||
if [ "$1" = "installed" ]; then
|
||||
[ ! -f ${mbroot}/config/applist.txt ] && fix_local_applist
|
||||
applist_txt="${mbroot}/config/applist.txt"
|
||||
else
|
||||
applist_txt="${mbtmp}/applist.txt"
|
||||
fi
|
||||
|
||||
appname="$1" # all: all app, installed, installed app
|
||||
arg="$2" # -n:appname, -i:appinfo, -e:newinfo, -v:version, -s:service
|
||||
[ "$appname" = "all" -o "$appname" = "installed" ] && appname=".*"
|
||||
case "$arg" in
|
||||
"-n")
|
||||
cat $applist_txt 2> /dev/null | grep -v mixbox | grep "^${appname}|" | cut -d'|' -f1 | sort -u
|
||||
;;
|
||||
"-i")
|
||||
cat $applist_txt 2> /dev/null | grep "^${appname}|" | cut -d'|' -f2
|
||||
;;
|
||||
"-e")
|
||||
cat $applist_txt 2> /dev/null | grep "^${appname}|" | cut -d'|' -f3
|
||||
;;
|
||||
"-v")
|
||||
cat $applist_txt 2> /dev/null | grep "^${appname}|" | cut -d'|' -f4
|
||||
;;
|
||||
"-s")
|
||||
cat $applist_txt 2> /dev/null | grep "^${appname}|" | cut -d'|' -f5
|
||||
;;
|
||||
"-a")
|
||||
cat $applist_txt 2> /dev/null | grep -v mixbox | grep "^${appname}|"
|
||||
;;
|
||||
*)
|
||||
cat $applist_txt 2> /dev/null | sort -u
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
update_applist() {
|
||||
result1=$(curl -skL --connect-timeout 10 -m 20 -w %{http_code} -o ${mbtmp}/applist_tmp.txt $mburl/applist.txt)
|
||||
[ -f ${mbtmp}/applist_tmp.txt ] && result2=$(du -sh ${mbtmp}/applist_tmp.txt | awk '{print$1}') || result2='0'
|
||||
[ "$result1" != "200" -o "$result2" = '0' ] && exit 1
|
||||
cat ${mbtmp}/applist_tmp.txt | grep "${model}" | sort -u > ${mbtmp}/applist.txt
|
||||
rm -rf ${mbtmp}/applist_tmp.txt
|
||||
}
|
||||
|
||||
# force udpate
|
||||
|
||||
[ "$1" = "update" ] && update_applist && exit
|
||||
[ ! -f ${mbtmp}/applist.txt ] && update_applist
|
||||
|
||||
get_applist $@
|
||||
|
||||
exit 0
|
||||
289
apps/mixbox/bin/base
Normal file
289
apps/mixbox/bin/base
Normal file
@@ -0,0 +1,289 @@
|
||||
#!/bin/sh
|
||||
#copyright by monlor
|
||||
export PATH=$PATH:/etc/mixbox/bin
|
||||
|
||||
mburl_coding="https://monlor.coding.net/p/mbfiles/d/mbfiles/git/raw/master"
|
||||
mburl_github="https://raw.githubusercontent.com/monlor/mbfiles/master"
|
||||
mburl_test="https://monlor.coding.net/p/mbfiles/d/mbfiles/git/raw/test"
|
||||
mburl=$(mbdb get mixbox.main.url) || mburl="$mburl_coding"
|
||||
mbroot=$(mbdb get mixbox.main.path)
|
||||
mbdisk=$(mbdb get mixbox.main.mbdisk)
|
||||
mbbackup="/etc/mbbackup"
|
||||
[ -z "$mbdisk" ] && mbdisk="${mbroot}"
|
||||
wanip=$(ubus call network.interface.wan status 2> /dev/null | grep \"address\" | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}') || wanip="127.0.0.1"
|
||||
lanip=$(uci get network.lan.ipaddr 2> /dev/null) || lanip="127.0.0.1"
|
||||
profilepath=$(mbdb get mixbox.main.profilepath)
|
||||
libpath=$(mbdb get mixbox.main.libpath)
|
||||
mbver=$(mbdb get mixbox.main.version)
|
||||
mbtmp=/tmp/mbtmp
|
||||
[ ! -d "${mbtmp}" ] && mkdir -p ${mbtmp}
|
||||
model=$(mbdb get mixbox.main.model)
|
||||
xq=$(cat /proc/xiaoqiang/model 2> /dev/null) || xq="$(uname -s)"
|
||||
|
||||
# if [ "$xq" == "R1D" -o "$xq" == "R2D" -o "$xq" == "R3D" ]; then
|
||||
# model=arm
|
||||
# elif [ "$xq" == "R3" -o "$xq" == "R3P" -o "$xq" == "R3G" -o "$xq" == "R1CM" ]; then
|
||||
# model=mips
|
||||
# fi
|
||||
|
||||
|
||||
# 备份uci配置,主要为了系统升级后能恢复配置
|
||||
# if [ -f "/etc/config/mixbox" ]; then
|
||||
# [ ! -f ${mbroot}/config/mixbox.uci ] && touch ${mbroot}/config/mixbox.uci
|
||||
# md5_1=$(md5sum /etc/config/mixbox | cut -d' ' -f1)
|
||||
# md5_2=$(md5sum ${mbroot}/config/mixbox.uci | cut -d' ' -f1)
|
||||
# if [ "$md5_1" != "$md5_2" ]; then
|
||||
# cp -rf /etc/config/mixbox ${mbroot}/config/mixbox.uci
|
||||
# fi
|
||||
# fi
|
||||
|
||||
checkuci() {
|
||||
# 最初用来检查插件的uci是否存在,现在当插件已经安装则返回0
|
||||
result=$(mbdb show $1.main)
|
||||
if [ ! -z "$result" -a -d ${mbroot}/apps/$1 ]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
checkread() {
|
||||
# 传入参数为0或1则返回0,否则返回1
|
||||
if [ "$1" == '1' -o "$1" == '0' ]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
cutsh() {
|
||||
# 传入要分割的文本和要分割出的位置,以逗号分割
|
||||
local delimiter=","
|
||||
if [ -n "$1" -a -n "$2" ]; then
|
||||
[ -n "$3" ] && delimiter="$3"
|
||||
echo $1 | cut -d"${delimiter}" -f"$2"
|
||||
elif [ -n "$1" -a -z "$2" ]; then
|
||||
[ -n "$2" ] && delimiter="$2"
|
||||
xargs | cut -d"${delimiter}" -f"$1"
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
logsh() {
|
||||
# 输出信息到/tmp/messages和标准输出,-s只输入到标准输出,-p只输入到日志文件
|
||||
command -v logger &> /dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
if [ "$3" == "-s" ]; then
|
||||
logger -s -t "$1" "$2"
|
||||
elif [ "$3" == "-p" ]; then
|
||||
logger -p 1 -t "$1" "$2"
|
||||
else
|
||||
logger -s -p 1 -t "$1" "$2"
|
||||
fi
|
||||
return 0
|
||||
else
|
||||
alias echo_date='echo 【$(TZ=UTC-8 date -R +%Y年%m月%d日\ %X)】:'
|
||||
if [ "$3" == "-s" ]; then
|
||||
echo_date "$2"
|
||||
elif [ "$3" == "-p" ]; then
|
||||
echo_date "$2" &> ${mbroot}/var/log/mixbox.log
|
||||
else
|
||||
echo_date "$2" | tee ${mbroot}/var/log/mixbox.log
|
||||
fi
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
wgetsh() {
|
||||
# 传入下载的文件位置和下载地址,自动下载到${mbtmp},若成功则移到下载位置
|
||||
[ -z "$1" -o -z "$2" ] && return 1
|
||||
[ -x /opt/bin/curl ] && alias curl=/opt/bin/curl
|
||||
local wgetfilepath="$1"
|
||||
local wgetfilename=$(basename $wgetfilepath)
|
||||
local wgetfiledir=$(dirname $wgetfilepath)
|
||||
local wgeturl="$2"
|
||||
[ ! -d "$wgetfiledir" ] && mkdir -p $wgetfiledir
|
||||
[ ! -d ${mbtmp} ] && mkdir -p ${mbtmp}
|
||||
rm -rf ${mbtmp}/${wgetfilename}
|
||||
result1=$(curl -skL --connect-timeout 10 -m 20 -w %{http_code} -o "${mbtmp}/${wgetfilename}" "$wgeturl")
|
||||
[ -f "${mbtmp}/${wgetfilename}" ] && result2=$(du -sh "${mbtmp}/${wgetfilename}" 2> /dev/null | awk '{print$1}')
|
||||
if [ "$result1" != "200" -a "$result2" == '0' ]; then
|
||||
rm -rf ${mbtmp}/${wgetfilename}
|
||||
return 1
|
||||
else
|
||||
chmod +x ${mbtmp}/${wgetfilename} > /dev/null 2>&1
|
||||
mv -f ${mbtmp}/${wgetfilename} $wgetfilepath > /dev/null 2>&1
|
||||
return 0
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
pssh() {
|
||||
|
||||
ps -aux &> /dev/null
|
||||
[ $? -eq 0 ] && ps -aux | grep -v grep || ps -w | grep -v grep
|
||||
|
||||
}
|
||||
|
||||
pingsh() {
|
||||
|
||||
ping qq.com -c 2 &> /dev/null
|
||||
result1="$?"
|
||||
ping baidu.com -c 2 &> /dev/null
|
||||
result2="$?"
|
||||
[ "$result1" -eq 0 -o "$result2" -eq 0 ] && return 0 || return 1
|
||||
|
||||
}
|
||||
|
||||
echosh() {
|
||||
local length=""
|
||||
local string=""
|
||||
if [ -z "$2" ]; then
|
||||
length="$1"
|
||||
string="$(xargs)"
|
||||
else
|
||||
string="$1"
|
||||
length="$2"
|
||||
fi
|
||||
if [ "${#string}" -gt "$length" ]; then
|
||||
let length="$length"-2
|
||||
string="$(echo "$string" | cut -b 1-"$length")"..
|
||||
fi
|
||||
echo -e "$string"
|
||||
}
|
||||
|
||||
readsh() {
|
||||
local readtext="$1"
|
||||
local uciname="$2"
|
||||
local value="$(mbdb get ${appname}.main.$2)"
|
||||
local default="$3"
|
||||
if [ -z "$value" ]; then
|
||||
[ -n "$default" ] && showtext="[回车即$default]" || showtext="[未设置]"
|
||||
else
|
||||
showtext="[回车即$value]"
|
||||
fi
|
||||
read -p "$readtext$showtext:" res
|
||||
if [ "$uciname" = "res" ]; then
|
||||
res="$res"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ "$res" = '-1' ]; then
|
||||
mbdb del ${appname}.main.$uciname
|
||||
else
|
||||
if [ -z "$res" ]; then
|
||||
if [ -n "$value" ]; then
|
||||
mbdb set $appname.main.$uciname="$value" || echo "设置key:"$uciname"等于value:"$value"出错!"
|
||||
else
|
||||
mbdb set $appname.main.$uciname="$default" || echo "设置key:"$uciname"等于value:"$default"出错!"
|
||||
fi
|
||||
else
|
||||
if [ "$uciname" = "port" ] && [ -n "$(netstat -tunpl 2> /dev/null | grep -w "$res")" ]; then
|
||||
echo "端口已被占用!请重新输入!"
|
||||
readsh $@
|
||||
else
|
||||
mbdb set $appname.main.$uciname="$res" || echo "设置key:"$uciname"等于value:"$res"出错!"
|
||||
eval "$uciname"="\"$res\""
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
umountsh() {
|
||||
local mount_point="$1"
|
||||
[ -z "$mount_point" ] && return 1
|
||||
mount_points="$(df -h | grep -Ew "[ ]*"$mount_point"[ ]*" | awk '{print$6}')"
|
||||
[ -n "$mount_points" ] && umount -lf "$mount_points" &> /dev/null
|
||||
return 0
|
||||
}
|
||||
|
||||
write_firewall_start(){
|
||||
if [ "$openport" == "1" ];then
|
||||
logsh "【$service】" "添加nat-start触发事件..."
|
||||
mbdb set mixbox.firewall.${appname}=1
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
remove_firewall_start(){
|
||||
logsh "【$service】" "删除nat-start触发..."
|
||||
[ -z "${appname}" ] && return 1
|
||||
mbdb set mixbox.firewall.${appname}=0
|
||||
}
|
||||
|
||||
daemon() {
|
||||
local binname="$(basename "${1}")"
|
||||
nohup $@ &> ${mbroot}/var/log/${binname}.log &
|
||||
return $?
|
||||
}
|
||||
|
||||
open_port () {
|
||||
local protocol=""
|
||||
[ -n "$1" ] && local port="$1"
|
||||
[ -n "$2" ] && protocol="$2" || protocol="tcp"
|
||||
if [ "$openport" = '1' ]; then
|
||||
if [ -n "$(echo ${port} | grep ',')" ]; then
|
||||
iptables -I INPUT -p "$protocol" -m multiport --dport "${port}" -m comment --comment "mixbox-${appname}" -j ACCEPT
|
||||
else
|
||||
iptables -I INPUT -p "$protocol" --dport "${port}" -m comment --comment "mixbox-${appname}" -j ACCEPT
|
||||
fi
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
close_port () {
|
||||
|
||||
eval `iptables -S | grep "mixbox-${appname}" | sed -e 's/-A/iptables -D/g' | sed -e 's/\$/;/g'`
|
||||
|
||||
}
|
||||
|
||||
bincheck () {
|
||||
|
||||
binname="$@"
|
||||
command -v apt &> /dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
logsh "【$service】" "监测到apt程序,使用apt安装..."
|
||||
echo y | apt install ${binname} &> /dev/null
|
||||
fi
|
||||
command -v yum &> /dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
logsh "【$service】" "监测到yum程序,使用yum安装..."
|
||||
yum install ${binname} -y &> /dev/null
|
||||
fi
|
||||
command -v pacman &> /dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
logsh "【$service】" "监测到pacman程序,使用pacman安装..."
|
||||
pacman -S ${binname} --noconfirm &> /dev/null
|
||||
fi
|
||||
command -v opkg &> /dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
logsh "【$service】" "监测到opkg程序,使用opkg安装..."
|
||||
opkg install ${binname} &> /dev/null
|
||||
[ $? -ne 0 -a -x /opt/bin/opkg ] && /opt/bin/opkg install ${binname} &> /dev/null
|
||||
fi
|
||||
command -v brew &> /dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
logsh "【$service】" "监测到brew程序,使用brew安装..."
|
||||
brew install ${binname} &> /dev/null
|
||||
fi
|
||||
return $?
|
||||
}
|
||||
|
||||
|
||||
# 通过传入一个字符串,取变量名称等于该字符串的变量值
|
||||
parse_str() {
|
||||
|
||||
[ -z "${1}" ] && echo -n "" || eval echo -n '$'"${1}"
|
||||
|
||||
}
|
||||
|
||||
base_encode() {
|
||||
[ -z "${1}" ] && echo -n "" || echo -n "$*" | baseutil --b64
|
||||
}
|
||||
|
||||
base_decode() {
|
||||
[ -z "${1}" ] && echo -n "" || echo -n "$*" | baseutil --b64 -d
|
||||
}
|
||||
BIN
apps/mixbox/bin/baseutil_linux_arm
Executable file
BIN
apps/mixbox/bin/baseutil_linux_arm
Executable file
Binary file not shown.
BIN
apps/mixbox/bin/baseutil_linux_mips
Executable file
BIN
apps/mixbox/bin/baseutil_linux_mips
Executable file
Binary file not shown.
BIN
apps/mixbox/bin/baseutil_linux_x86_64
Executable file
BIN
apps/mixbox/bin/baseutil_linux_x86_64
Executable file
Binary file not shown.
43
apps/mixbox/bin/cru
Normal file
43
apps/mixbox/bin/cru
Normal file
@@ -0,0 +1,43 @@
|
||||
#!/bin/sh
|
||||
#copyright by monlor
|
||||
source /etc/mixbox/bin/base
|
||||
|
||||
# 添加定时任务,利用uci来储存信息,cru {a|d|c} [name] [crontab]
|
||||
method="$1"
|
||||
name="$2"
|
||||
# content="$3"
|
||||
|
||||
case "$method" in
|
||||
a)
|
||||
[ -z "$name" -o -z "$3" ] && exit 1
|
||||
mbdb set mixbox.cru.${name}="$(base_encode "$3")"
|
||||
;;
|
||||
d)
|
||||
[ -z "$name" ] && exit 1
|
||||
mbdb del mixbox.cru.${name}
|
||||
;;
|
||||
c)
|
||||
mbdb clear mixbox.cru
|
||||
;;
|
||||
l)
|
||||
mbdb show mixbox.cru
|
||||
;;
|
||||
esac
|
||||
|
||||
# 使定时任务生效
|
||||
if [ -d /etc/crontabs/ ]; then
|
||||
cronpath="/etc/crontabs/root"
|
||||
elif [ -d /var/spool/cron/ ]; then
|
||||
cronpath="/var/spool/cron/root"
|
||||
elif [ -d /var/spool/cron/crontabs/ ]; then
|
||||
cronpath="/var/spool/cron/crontabs/root"
|
||||
else
|
||||
logsh "【Tools】" "找不到定时任务文件!" -p
|
||||
exit 1
|
||||
fi
|
||||
sed -i "/#mixbox-cru/d" ${cronpath} &> /dev/null
|
||||
mbdb values mixbox.cru | while read line; do
|
||||
echo "$(base_decode "$line") #mixbox-cru" >> ${cronpath}
|
||||
done
|
||||
|
||||
exit 0
|
||||
70
apps/mixbox/bin/mbdb
Normal file
70
apps/mixbox/bin/mbdb
Normal file
@@ -0,0 +1,70 @@
|
||||
#!/bin/sh
|
||||
#copyright by monlor
|
||||
mbroot="/etc/mixbox"
|
||||
|
||||
#${appname}.main.$key=$value 通过uci更轻松的存储数据
|
||||
#采用了key,value对形式储存数据,调用前设置appname和uciname值,uciname默认值为info
|
||||
method="$1"
|
||||
[ -z "$method" ] && method="help"
|
||||
appname="$(echo "$2" | awk -F '=' '{print$1}' | awk -F '\.' '{print$1}')"
|
||||
uciname="$(echo "$2" | awk -F '=' '{print$1}' | awk -F '\.' '{print$2}')"
|
||||
key="$(echo "$2" | awk -F '=' '{print$1}' | awk -F '\.' '{print$3}')"
|
||||
value="$(echo "$2" | cut -d'=' -f2-)"
|
||||
|
||||
configdir=${mbroot}/mbdb
|
||||
alias uci="uci -c ${configdir}"
|
||||
|
||||
help() {
|
||||
echo "\`mbdb $@\` error!"
|
||||
echo -e "Usage: $0 {get|set|del|export|show|clean} [key] [value]"
|
||||
echo -e "Options:"
|
||||
echo -e "\tget\tGet value by key"
|
||||
echo -e "\tset\tSet key and value"
|
||||
echo -e "\tdel\tDelete info by key"
|
||||
echo -e "\tkeys\tShow all key"
|
||||
echo -e "\tvalues\tShow all value"
|
||||
echo -e "\tshow\tShow all key and value"
|
||||
echo -e "\tclear\tClear all info"
|
||||
echo -e "\texport\tGet app configure"
|
||||
exit 1
|
||||
}
|
||||
|
||||
case "$method" in
|
||||
get)
|
||||
uci -q get ${appname}.${uciname}.${key} | sed -e "s/'//g"
|
||||
;;
|
||||
set)
|
||||
[ ! -f ${configdir}/${appname} ] && touch ${configdir}/${appname}
|
||||
uci -q get ${appname}.${uciname} &> /dev/null || uci -q set ${appname}.${uciname}=config
|
||||
uci -q set ${appname}.${uciname}.${key}="${value}"
|
||||
uci commit ${appname}.${uciname}
|
||||
;;
|
||||
del)
|
||||
uci -q del ${appname}.${uciname}.${key}
|
||||
;;
|
||||
keys)
|
||||
uci -q get ${appname}.${uciname} &> /dev/null && uci -q show ${appname}.${uciname} | sed -e "s/'//g" | sed 1d | sed -e "s/${appname}.${uciname}.//g" | cut -d'=' -f1
|
||||
;;
|
||||
values)
|
||||
uci -q get ${appname}.${uciname} &> /dev/null && uci -q show ${appname}.${uciname} | sed -e "s/'//g" | sed 1d | sed -e "s/${appname}.${uciname}.//g" | cut -d'=' -f2-
|
||||
;;
|
||||
show)
|
||||
if [ -z "${uciname}" ]; then
|
||||
uci -q show ${appname} | sed -e "s/'//g" | sed -e "/${appname}.[a-z]\+\=config/d" -e "s/${appname}\.[a-z]\+\.//"
|
||||
else
|
||||
uci -q get ${appname}.${uciname} &> /dev/null && uci -q show ${appname}.${uciname} | sed -e "s/'//g" | sed -e "/${appname}.[a-z]\+\=config/d" -e "s/${appname}\.[a-z]\+\.//"
|
||||
fi
|
||||
;;
|
||||
clear)
|
||||
uci -q del ${appname}.${uciname}
|
||||
;;
|
||||
export)
|
||||
[ -z "${uciname}" ] && uciname="main"
|
||||
uci -q get ${appname}.${uciname} &> /dev/null && uci -q show ${appname}.${uciname} | sed -e "s/'//g" | sed 1d | sed -e "s/${appname}.${uciname}.//g" | sed -e "s/=/='/" -e "s/$/'/" | tr "\n" ";"
|
||||
;;
|
||||
*)
|
||||
help
|
||||
;;
|
||||
esac
|
||||
|
||||
exit $?
|
||||
470
apps/mixbox/bin/mixbox
Normal file
470
apps/mixbox/bin/mixbox
Normal file
@@ -0,0 +1,470 @@
|
||||
#!/bin/sh
|
||||
#copyright by monlor
|
||||
#------------------【Tools】--------------------
|
||||
source /etc/mixbox/bin/base
|
||||
param=$1
|
||||
|
||||
get_status() {
|
||||
applist installed -n 2> /dev/null | while read line; do
|
||||
${mbroot}/apps/${line}/scripts/${line}.sh status
|
||||
done
|
||||
}
|
||||
|
||||
title() {
|
||||
|
||||
clear
|
||||
newver=$(applist mixbox -v)
|
||||
if [ -z "$newver" ]; then
|
||||
newver="获取中"
|
||||
check_update_text=""
|
||||
else
|
||||
[ "$(versioncmp $mbver $newver)" = '1' ] && check_update_text="[\033[36m输入u更新工具箱\033[0m]" || check_update_text=""
|
||||
fi
|
||||
echo "***************************************"
|
||||
echo " ***** MIXBOX 工具箱 ***** "
|
||||
echo "***************************************"
|
||||
echo -e "当前版本:[$mbver]\t最新版本:[$newver]"
|
||||
[ -f /proc/dmu/temperature ] && temp="`cat /proc/dmu/temperature | awk '{printf$4}' | cut -b 1-2`°C"
|
||||
[ -f /sys/devices/virtual/thermal/thermal_zone0/temp ] && temp="$(cat /sys/devices/virtual/thermal/thermal_zone0/temp 2> /dev/null)°C"
|
||||
if [ ! -z "$temp" ]; then
|
||||
temptext="核心温度:[$temp]"
|
||||
else
|
||||
wan_type="$(nvram get nv_wan_type 2> /dev/null)"
|
||||
[ -n "$wan_type" ] && temptext="上网方式:[$wan_type]" || temptext="主机名称:[`uname -n`]"
|
||||
fi
|
||||
echo -e "设备型号:[$xq] \t$temptext"
|
||||
echo "***************************************"
|
||||
|
||||
}
|
||||
|
||||
# install_app() {
|
||||
# echo
|
||||
# echo "获取工具箱插件列表..."
|
||||
# wgetsh ${mbtmp}/applist.txt $mburl/temp/applist_"$xq".txt
|
||||
# if [ $? -ne 0 ]; then
|
||||
# [ "$model" == "arm" ] && applist="applist.txt"
|
||||
# [ "$model" == "mips" ] && applist="applist_mips.txt"
|
||||
# wgetsh ${mbtmp}/applist.txt $mburl/temp/"$applist"
|
||||
# fi
|
||||
# echo "********* 安装/更新插件 ***********"
|
||||
# echo "00. 返回"
|
||||
# i=1
|
||||
# if [ -f ${mbtmp}/applist.txt ]; then
|
||||
# cat ${mbtmp}/applist.txt | while read line
|
||||
# do
|
||||
# checkuci ${line} && tmp="`echo -e "\033[32m已安装\033[0m"`" || tmp="`echo -e "\033[31m未安装\033[0m"`"
|
||||
# [ "$i" -lt "10" ] && k="0$i" || k="$i"
|
||||
# echo "$k. [$tmp] ${line}"
|
||||
# let i=$i+1
|
||||
# done
|
||||
# else
|
||||
# echo "[插件列表未找到,请检查网络问题!]"
|
||||
# fi
|
||||
# echo
|
||||
# read -p "请选择要安装/更新的插件:" res
|
||||
# if [ ! -z "$res" ]; then
|
||||
# if [ "$res" == '0' -o "$res" == '00' -o ! -f ${mbtmp}/applist.txt ]; then
|
||||
# manage
|
||||
# else
|
||||
# result=$(echo $res | grep -c "^[0-9][0-9]*$")
|
||||
# if [ "$result" == '1' ]; then
|
||||
# appname=$(cat ${mbtmp}/applist.txt | sed -n "$res"p)
|
||||
# if [ ! -z "${appname}" ]; then
|
||||
# if checkuci ${appname}; then
|
||||
# read -p "插件${appname}已安装,是否要更新?[1/0] " res
|
||||
# [ "$res" == '1' ] && ${mbroot}/scripts/appmanage.sh upgrade ${appname}
|
||||
# else
|
||||
# ${mbroot}/scripts/appmanage.sh install ${appname}
|
||||
# if checkuci ${appname}; then
|
||||
# source "${mbroot}"/apps/${appname}/config/mixbox.conf
|
||||
# ${appname}
|
||||
#
|
||||
# fi
|
||||
# fi
|
||||
# else
|
||||
# echo "输入有误!"
|
||||
# fi
|
||||
# fi
|
||||
# fi
|
||||
# fi
|
||||
# }
|
||||
|
||||
uninstall_app() {
|
||||
echo
|
||||
echo "********* 卸载插件 ***********"
|
||||
echo "00. 返回管理菜单"
|
||||
i=1
|
||||
applist installed -n | while read line
|
||||
do
|
||||
[ "$i" -lt "10" ] && k="0$i" || k="$i"
|
||||
echo "$k. ${line}"
|
||||
let i=$i+1
|
||||
done
|
||||
echo
|
||||
read -p "请选择要卸载的插件:" res
|
||||
if [ ! -z "$res" ]; then
|
||||
if [ "$res" == '0' ]; then
|
||||
manage_menu
|
||||
else
|
||||
appname=$(applist installed -n | sed -n "$res"p)
|
||||
if [ ! -z "${appname}" ]; then
|
||||
${mbroot}/scripts/appmanage.sh uninstall ${appname}
|
||||
else
|
||||
echo "输入有误,请重新输入!"
|
||||
uninstall_app
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
backup() {
|
||||
if [ -f "$mbbackup".tar.gz ]; then
|
||||
read -p "检测到已被备份插件配置, 确认覆盖?[1/0] " res
|
||||
else
|
||||
read -p "确定要备份所有插件配置吗?[1/0] " res
|
||||
fi
|
||||
if [ "$res" == '1' ]; then
|
||||
rm -rf $mbbackup
|
||||
rm -rf "$mbbackup".tar.gz
|
||||
mkdir -p $mbbackup
|
||||
cp -rf ${mbroot}/mbdb $mbbackup
|
||||
applist installed -n | while read line; do
|
||||
echo "$(mbdb get ${line}.main.backupfiles)" | tr ',' '\n' | while read file; do
|
||||
[ -z "$file" ] && continue
|
||||
savepath="$(dirname $mbbackup/${line}/$file)"
|
||||
[ ! -d "$savepath" ] && mkdir -p $savepath
|
||||
cp -rf ${mbroot}/apps/${line}/$file $mbbackup/${line}/$file &> /dev/null
|
||||
done
|
||||
done
|
||||
cp -rf ${mbroot}/scripts/userscript.sh $mbbackup/userscript.sh
|
||||
cp -rf ${mbroot}/mbdb $mbbackup/mbdb
|
||||
tar zcvf "$mbbackup".tar.gz $mbbackup > /dev/null 2>&1
|
||||
rm -rf $mbbackup
|
||||
echo "备份完成, 配置已备份至$mbbackup.tar.gz"
|
||||
fi
|
||||
}
|
||||
|
||||
recover(){
|
||||
read -p "确定要恢复所有插件配置吗(将会覆盖当前配置)?[1/0] " res
|
||||
if [ "$res" == '1' ]; then
|
||||
[ ! -f "$mbbackup".tar.gz ] && echo "未找到备份文件!" && return 1
|
||||
rm -rf $mbbackup
|
||||
tar zxvf "$mbbackup".tar.gz -C / > /dev/null 2>&1
|
||||
cp -rf $mbbackup/applist.txt ${mbroot}/config/applist.txt
|
||||
applist installed -n | while read line
|
||||
do
|
||||
checkuci ${line} || ${mbroot}/scripts/appmanage.sh install ${line}
|
||||
[ -d "$mbbackup/${line}" ] && cp -rf $mbbackup/${line}/* ${mbroot}/apps/${line}/
|
||||
done
|
||||
# 恢复uci配置
|
||||
cp -rf $mbbackup/mbdb ${mbroot}/
|
||||
cp -rf $mbbackup/userscript.sh ${mbroot}/scripts/userscript.sh
|
||||
rm -rf $mbbackup
|
||||
echo "恢复完成, 初始化工具箱..."
|
||||
${mbroot}/scripts/init.sh
|
||||
fi
|
||||
}
|
||||
|
||||
modify_source() {
|
||||
local mburl_tmp=""
|
||||
case "$mburl" in
|
||||
"$mburl_coding") url_text="coding下载源" ;;
|
||||
"$mburl_github") url_text="github下载源" ;;
|
||||
"$mburl_test") url_text="coding测试源" ;;
|
||||
*) url_text="$mburl" ;;
|
||||
esac
|
||||
echo "下载源【$url_text】使用中"
|
||||
echo "0. 不修改"
|
||||
echo "1. coding下载源"
|
||||
echo "2. github下载源"
|
||||
echo "3. coding测试源(不推荐)"
|
||||
read -p "请选择或输入下载源:" res
|
||||
case "$res" in
|
||||
0) return ;;
|
||||
1) mburl_tmp="$mburl_coding" ;;
|
||||
2) mburl_tmp="$mburl_github" ;;
|
||||
3) mburl_tmp="$mburl_test" ;;
|
||||
*) [ -n "$res" ] && mburl_tmp="$res" ;;
|
||||
esac
|
||||
if [ -n "$mburl_tmp" ]; then
|
||||
mbdb set mixbox.main.url="$mburl_tmp"
|
||||
|
||||
applist update
|
||||
fi
|
||||
}
|
||||
|
||||
# enable_webui() {
|
||||
# read -p "是否要启用工具箱web界面?[1/0] " res
|
||||
# mbdb set mixbox.main.webui="$res"
|
||||
# if [ "$res" == '0' ]; then
|
||||
# umount -lf /usr/lib/lua/luci
|
||||
# rm -rf ${mbtmp}/mountfiles
|
||||
# rm -rf ${mbtmp}/syslogbackup/css
|
||||
# rm -rf ${mbtmp}/syslogbackup/img
|
||||
# rm -rf ${mbtmp}/luci-modulecache
|
||||
# rm -rf ${mbtmp}/luci-indexcache
|
||||
# elif [ "$res" == '1' ]; then
|
||||
# ${mbroot}/scripts/addweb.sh
|
||||
# fi
|
||||
# }
|
||||
|
||||
uninstall() {
|
||||
# wgetsh ${mbtmp}/uninstall.sh $mburl/apps/mixbox/scripts/uninstall.sh
|
||||
# [ $? -eq 0 ] && ${mbtmp}/uninstall.sh || echo "获取卸载脚本失败!"
|
||||
${mbroot}/scripts/uninstall.sh
|
||||
exit
|
||||
}
|
||||
|
||||
update() {
|
||||
# wgetsh ${mbtmp}/update.sh $mburl/apps/mixbox/scripts/update.sh
|
||||
# [ $? -eq 0 ] && ${mbtmp}/update.sh || echo "获取更新脚本失败!"
|
||||
${mbroot}/scripts/update.sh
|
||||
exit
|
||||
}
|
||||
|
||||
check_install() {
|
||||
|
||||
if checkuci $1; then
|
||||
status=$(mbdb get $1.main.status | cut -d'|' -f1) > /dev/null 2>&1
|
||||
if [ ! -z "$status" ]; then
|
||||
if [ "$status" != "未运行" ]; then
|
||||
echo -n "[\033[32m$status\033[0m]"
|
||||
else
|
||||
echo -n "[\033[31m$status\033[0m]"
|
||||
fi
|
||||
else
|
||||
echo -n "[\033[31m未运行\033[0m]"
|
||||
fi
|
||||
else
|
||||
echo -n "[选择以安装]"
|
||||
fi
|
||||
}
|
||||
|
||||
check_update() {
|
||||
[ -z "$1" ] && return
|
||||
[ -n "$2" ] && newver="$2" || newver="$(applist $1 -v)"
|
||||
oldver=$(mbdb get $1.main.version)
|
||||
if [ ! -z "$newver" -a ! -z "$oldver" ] && [ "$(versioncmp $oldver $newver)" = '1' ]; then
|
||||
echo -n "[\033[36m有更新\033[0m]"
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
|
||||
}
|
||||
|
||||
menulist() {
|
||||
|
||||
# if [ "$1" = '0' ]; then
|
||||
# # 检查是否在进行状态检查
|
||||
# for i in $(seq 1 5); do
|
||||
# if [ -n "$(pssh | grep "mixbox.*status")" ]; then
|
||||
# echo "正在检查插件状态,请稍等一会儿~" && sleep 2
|
||||
# else
|
||||
# break
|
||||
# fi
|
||||
# done
|
||||
# fi
|
||||
rm -rf ${mbtmp}/applist_menu.txt
|
||||
echo "00. 返回主菜单"
|
||||
i=0;
|
||||
if [ "$1" = '0' ]; then
|
||||
applist installed -a > ${mbtmp}/applist_all.txt
|
||||
else
|
||||
applist all -a > ${mbtmp}/applist_all.txt
|
||||
fi
|
||||
|
||||
while read line
|
||||
do
|
||||
if [ "$1" = '0' ]; then
|
||||
info=""
|
||||
name="$(echo "$line" | cut -d'|' -f1)"
|
||||
checkuci $name || continue
|
||||
elif [ "$1" = '1' ]; then
|
||||
name="$(echo "$line" | cut -d'|' -f1)"
|
||||
info=["$(echo "$line" | cut -d'|' -f2)"]
|
||||
checkuci $name && continue
|
||||
|
||||
fi
|
||||
appver="$(cat $mbtmp/applist.txt | grep "^$name|" | cut -d'|' -f4)"
|
||||
echo $name >> ${mbtmp}/applist_menu.txt
|
||||
let i=$i+1
|
||||
args="\t"
|
||||
[ "$i" -ge 10 ] && head="$i. $name" || head="0$i. $name"
|
||||
[ "${#head}" -lt 8 ] && args="\t\t"
|
||||
[ "${#head}" -eq 16 ] && args=""
|
||||
if [ "$1" = '0' ]; then
|
||||
echo -e "$head$args`check_install $name` `check_update $name $appver`"
|
||||
elif [ "$1" = '1' ]; then
|
||||
echo -e "$head$info [\033[31m未安装\033[0m]"
|
||||
fi
|
||||
|
||||
done < ${mbtmp}/applist_all.txt
|
||||
rm -rf ${mbtmp}/applist_all.txt
|
||||
|
||||
if [ "$i" = '0' ]; then
|
||||
[ "$1" = '0' ] && echo -e "[未安装任何插件!]" || echo -e "[已经没有插件可安装了哦!]"
|
||||
fi
|
||||
echo
|
||||
}
|
||||
|
||||
wait_back() {
|
||||
echo
|
||||
#echo "$1秒后返回..."
|
||||
#sleep $1
|
||||
echo -n "按任意键返回."
|
||||
read
|
||||
|
||||
}
|
||||
|
||||
select_app() {
|
||||
read -p "请输入你的选择`echo -e $check_update_text`:" select
|
||||
if [ "$select" = 'u' ]; then
|
||||
update
|
||||
elif [ `echo $select | grep -c '^[0-9][0-9]*$'` -eq 1 ]; then
|
||||
if [ "$select" -eq '0' ]; then
|
||||
return 0
|
||||
elif [ "$select" -gt '0' ] && [ "$select" -le "$(cat ${mbtmp}/applist_menu.txt | wc -l)" ]; then
|
||||
appname=$(cat ${mbtmp}/applist_menu.txt | sed -n "$select"p)
|
||||
if [ ! -z "${appname}" ]; then
|
||||
if ! checkuci ${appname}; then
|
||||
read -p "确定要安装${appname}插件?[1/0] " install
|
||||
[ "$install" = '1' ] && ${mbroot}/scripts/appmanage.sh install ${appname}
|
||||
else
|
||||
if [ -n "$(check_update ${appname})" ]; then
|
||||
read -p "是否要更新${appname}插件?[1/0] " update
|
||||
[ "$update" == '1' ] && ${mbroot}/scripts/appmanage.sh upgrade ${appname}
|
||||
fi
|
||||
|
||||
source "${mbroot}"/apps/${appname}/config/mixbox.conf
|
||||
${appname}
|
||||
${mbroot}/apps/${appname}/scripts/${appname}.sh status
|
||||
fi
|
||||
else
|
||||
echo "输入有误,未找到该插件!"
|
||||
fi
|
||||
else
|
||||
echo "输入有误,没有该序号!"
|
||||
fi
|
||||
else
|
||||
echo "输入有误,请输入数字!"
|
||||
fi
|
||||
rm -rf ${mbtmp}/applist_menu.txt
|
||||
wait_back && (title && menulist $1 && select_app $1)
|
||||
}
|
||||
|
||||
auto_update() {
|
||||
[ "$(mbdb get mixbox.main.autoupdate)" = '1' ] && local tmptext="已启用" || local tmptext="未启用"
|
||||
read -p "【谨慎】是否要自动更新工具箱和插件($tmptext)?[1/0] " res
|
||||
checkread $res && mbdb set mixbox.main.autoupdate="$res"
|
||||
}
|
||||
|
||||
manage_menu() {
|
||||
echo "00. 返回主菜单"
|
||||
echo "01. 更换工具箱下载源"
|
||||
echo "02. 备份工具箱配置"
|
||||
echo "03. 恢复工具箱配置"
|
||||
echo "04. 自动更新工具箱和插件"
|
||||
echo "05. 卸载插件"
|
||||
echo "06. 卸载工具箱"
|
||||
echo
|
||||
read -p "请输入你的选择`echo -e $check_update_text`:" select
|
||||
case "$select" in
|
||||
1|01) modify_source ;;
|
||||
2|02) backup ;;
|
||||
3|03) recover ;;
|
||||
4|04) auto_update ;;
|
||||
5|05) uninstall_app ;;
|
||||
6|06) uninstall && exit ;;
|
||||
u) update && exit ;;
|
||||
0|00) return ;;
|
||||
*) echo "输入有误,请重新输入!"
|
||||
esac
|
||||
wait_back && (title && manage_menu)
|
||||
}
|
||||
|
||||
menu() {
|
||||
|
||||
while(true)
|
||||
do
|
||||
title
|
||||
echo "00. 退出工具箱"
|
||||
echo "01. 已安装插件"
|
||||
echo "02. 未安装插件"
|
||||
echo "03. 工具箱管理"
|
||||
echo
|
||||
echo -n "请输入你的选择`echo -e $check_update_text`:"
|
||||
read select
|
||||
case "$select" in
|
||||
00|0) exit 1 ;;
|
||||
01|1) title && menulist 0 && select_app 0;;
|
||||
02|2) title && menulist 1 && select_app 1;;
|
||||
03|3) title && manage_menu ;;
|
||||
u) update ;;
|
||||
*) echo "输入有误,请重新输入!" && wait_back ;;
|
||||
esac
|
||||
echo
|
||||
|
||||
done
|
||||
|
||||
}
|
||||
|
||||
install() {
|
||||
${mbroot}/scripts/appmanage.sh install $1
|
||||
}
|
||||
|
||||
remove() {
|
||||
${mbroot}/scripts/appmanage.sh uninstall $1
|
||||
}
|
||||
|
||||
upgrade() {
|
||||
${mbroot}/scripts/appmanage.sh upgrade $1
|
||||
}
|
||||
|
||||
start() {
|
||||
mbdb set $1.main.enable=1
|
||||
/etc/mixbox/apps/$1/scripts/$1.sh start
|
||||
}
|
||||
|
||||
restart() {
|
||||
mbdb set $1.main.enable=1
|
||||
/etc/mixbox/apps/$1/scripts/$1.sh restart
|
||||
}
|
||||
|
||||
stop() {
|
||||
mbdb set $1.main.enable=0
|
||||
/etc/mixbox/apps/$1/scripts/$1.sh stop
|
||||
}
|
||||
|
||||
help() {
|
||||
cat << EOF
|
||||
Usages: $0 {install|remove|upgrade|start|restart|stop|update|backup|recover|uninstall}
|
||||
Options:
|
||||
install appname Install App
|
||||
remove appname Remove App
|
||||
upgrade appname Upgrade App
|
||||
start appname Start App
|
||||
restart appname Restart App
|
||||
stop appname Stop App
|
||||
update Update Tool
|
||||
backup Backup Tool
|
||||
recover Recover Tool
|
||||
uninstall Uninstall Tool
|
||||
Example:
|
||||
1. mixbox install shadowsocks
|
||||
2. mixbox upgrade kms
|
||||
3. mixbox update
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
#------------------【Tools】--------------------
|
||||
if [ ! -z $param ]; then
|
||||
[ -f ${mbroot}/apps/$param/config/mixbox.conf ] && source ${mbroot}/apps/$param/config/mixbox.conf
|
||||
shift 1
|
||||
$param $@
|
||||
else
|
||||
echo "获取工具箱插件列表..."
|
||||
applist update &
|
||||
get_status
|
||||
menu
|
||||
fi
|
||||
BIN
apps/mixbox/bin/versioncmp_linux_arm
Normal file
BIN
apps/mixbox/bin/versioncmp_linux_arm
Normal file
Binary file not shown.
BIN
apps/mixbox/bin/versioncmp_linux_mips
Normal file
BIN
apps/mixbox/bin/versioncmp_linux_mips
Normal file
Binary file not shown.
BIN
apps/mixbox/bin/versioncmp_linux_x86_64
Normal file
BIN
apps/mixbox/bin/versioncmp_linux_x86_64
Normal file
Binary file not shown.
Reference in New Issue
Block a user