Files
MIXBOX-ARCHIVE/apps/mixbox/bin/mixbox
2020-03-05 21:17:07 +08:00

481 lines
13 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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