moxbox init

This commit is contained in:
monlor
2020-03-05 00:08:40 +08:00
commit 76dbe98978
856 changed files with 170708 additions and 0 deletions

83
apps/mixbox/bin/applist Normal file
View 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
View 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
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

43
apps/mixbox/bin/cru Normal file
View 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
View File

@@ -0,0 +1,70 @@
#!/bin/sh
#copyright by monlor
mbroot="/etc/mixbox"
#${appname}.main.$key=$value 通过uci更轻松的存储数据
#采用了keyvalue对形式储存数据调用前设置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
View 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

Binary file not shown.

Binary file not shown.

Binary file not shown.