mirror of
https://github.com/monlor/MIXBOX-ARCHIVE.git
synced 2026-03-10 23:41:27 +00:00
481 lines
13 KiB
Bash
481 lines
13 KiB
Bash
#!/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}/config/applist.txt $mbbackup/applist.txt
|
||
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
|
||
# todo 配置方式修改
|
||
if [ -f ${mbroot}/apps/${appname}/config.sh ]; then
|
||
${mbroot}/apps/${appname}/config.sh
|
||
if [ $? -eq 0 ]; then
|
||
${mbroot}/apps/${appname}/scripts/${appname}.sh restart
|
||
else
|
||
${mbroot}/apps/${appname}/scripts/${appname}.sh stop
|
||
fi
|
||
else
|
||
source "${mbroot}"/apps/${appname}/config/mixbox.conf
|
||
${appname}
|
||
fi
|
||
${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
|