mirror of
https://github.com/monlor/MIXBOX-ARCHIVE.git
synced 2026-03-10 23:41:27 +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.
7
apps/mixbox/config/mixbox.uci
Normal file
7
apps/mixbox/config/mixbox.uci
Normal file
@@ -0,0 +1,7 @@
|
||||
service="MIXBOX"
|
||||
appname="mixbox"
|
||||
needver=""
|
||||
supports="linux_arm,linux_mips,linux_x86_64"
|
||||
appinfo="一款支持多平台,多架构的Shell工具箱"
|
||||
newinfo="新增功能parse_str,用于解析变量,新增baseutils工具"
|
||||
version="0.1.4"
|
||||
11
apps/mixbox/config/profile
Normal file
11
apps/mixbox/config/profile
Normal file
@@ -0,0 +1,11 @@
|
||||
source /etc/mixbox/bin/base
|
||||
appname="tools"
|
||||
uciname="profile"
|
||||
profilepath="${mbroot}/bin${profilepath}:$PATH"
|
||||
[ -z "${LD_LIBRARY_PATH}" ] && libpath="/usr/lib:/lib${libpath}" || libpath="${LD_LIBRARY_PATH}${libpath}"
|
||||
|
||||
export PATH="${profilepath}"
|
||||
export LD_LIBRARY_PATH="${libpath}"
|
||||
export TERM=xterm
|
||||
|
||||
alias ll="ls -l"
|
||||
132
apps/mixbox/scripts/appmanage.sh
Normal file
132
apps/mixbox/scripts/appmanage.sh
Normal file
@@ -0,0 +1,132 @@
|
||||
#!/bin/sh
|
||||
#copyright by monlor
|
||||
source /etc/mixbox/bin/base
|
||||
appname="$2"
|
||||
[ -z "${appname}" ] && logsh "【Tools】" "请输入插件名!" && exit 1
|
||||
|
||||
get_app_byurl () {
|
||||
logsh "【Tools】" "下载插件安装文件..."
|
||||
wgetsh "${mbtmp}/${appname}.tar.gz" "$mburl/appstore/${appname}_${model}.tar.gz"
|
||||
if [ $? -eq 1 ]; then
|
||||
logsh "【Tools】" "文件下载失败!"
|
||||
exit
|
||||
fi
|
||||
logsh "【Tools】" "解压安装文件..."
|
||||
tar -zxvf ${mbtmp}/${appname}.tar.gz -C ${mbtmp} > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
logsh "【Tools】" "文件解压失败!"
|
||||
exit
|
||||
fi
|
||||
logsh "【Tools】" "赋予可执行文件..."
|
||||
chmod +x -R ${mbtmp}/${appname}/
|
||||
}
|
||||
|
||||
install () {
|
||||
|
||||
logsh "【Tools】" "开始安装【${appname}】插件..."
|
||||
get_app_byurl
|
||||
|
||||
# if [ "$model" = "armv7l" ]; then
|
||||
# rm -rf ${mbtmp}/${appname}/bin/*_mips
|
||||
# else
|
||||
# rm -rf ${mbtmp}/${appname}/bin/*_armv7l
|
||||
# fi
|
||||
# ls ${mbtmp}/${appname}/bin/ 2> /dev/null | while read line; do
|
||||
# [ -d ${mbtmp}/${appname}/bin/${line} ] && continue
|
||||
# mv ${mbtmp}/${appname}/bin/${line} ${mbtmp}/${appname}/bin/"$(echo ${line} | sed -e 's/_.*//g')"
|
||||
# done
|
||||
# 开始判断
|
||||
. ${mbtmp}/${appname}/config/${appname}.uci
|
||||
if [ -n "$(echo $supports | grep "$model")" ]; then
|
||||
logsh "【Tools】" "处理器架构符合安装要求"
|
||||
else
|
||||
logsh "【Tools】" "设备架构:$model,插件支持:$supports,无法安装!"
|
||||
rm -rf ${mbtmp}/${appname}
|
||||
rm -rf ${mbtmp}/${appname}.tar.gz
|
||||
exit 1
|
||||
fi
|
||||
|
||||
logsh "【Tools】" "检查工具箱版本..."
|
||||
if [ "$(versioncmp $needver $mbver)" = '-1' ]; then
|
||||
logsh "【Tools】" "工具箱版本过低!【${appname}】要求工具箱版本:$needver"
|
||||
logsh "【Tools】" "插件【${appname}】安装失败!清理文件..."
|
||||
rm -rf ${mbtmp}/${appname}
|
||||
rm -rf ${mbtmp}/${appname}.tar.gz
|
||||
exit 1
|
||||
else
|
||||
logsh "【Tools】" "工具箱版本[$mbver]满足安装要求"
|
||||
fi
|
||||
logsh "【Tools】" "检查插件的额外安装脚本..."
|
||||
if [ -f ${mbtmp}/${appname}/scripts/install.sh ]; then
|
||||
logsh "【Tools】" "运行插件安装脚本"
|
||||
${mbtmp}/${appname}/scripts/install.sh
|
||||
rm -rf ${mbtmp}/${appname}/scripts/install.sh
|
||||
fi
|
||||
|
||||
logsh "【Tools】" "初始化uci配置信息..."
|
||||
echo >> ${mbtmp}/${appname}/config/${appname}.uci # 防止最后一行读取不到
|
||||
cat ${mbtmp}/${appname}/config/${appname}.uci | while read line; do
|
||||
[ -z "$line" ] && continue
|
||||
local ucikey="$(echo $line | cut -d'=' -f1)"
|
||||
local ucivalue="$(echo $line | cut -d'=' -f2 | sed -e 's/\"//g')"
|
||||
mbdb set $appname.main."$ucikey"="$ucivalue"
|
||||
done
|
||||
[ "$app_enabled" = '1' ] && mbdb set ${appname}.main.enable='1'
|
||||
|
||||
logsh "【Tools】" "添加插件到工具箱..."
|
||||
sed -i "/^${appname}/d" ${mbroot}/config/applist.txt
|
||||
echo "${appname}|${appinfo}" >> ${mbroot}/config/applist.txt
|
||||
mkdir -p ${mbroot}/apps/${appname}
|
||||
cp -rf ${mbtmp}/${appname}/ ${mbroot}/apps/
|
||||
|
||||
#清除临时文件
|
||||
rm -rf ${mbtmp}/${appname}
|
||||
rm -rf ${mbtmp}/${appname}.tar.gz
|
||||
|
||||
logsh "【Tools】" "插件安装完成!"
|
||||
if [ -n "${newinfo}" ]; then
|
||||
echo -e "-----------------------------------------"
|
||||
echo -e "${newinfo}"
|
||||
echo -e "-----------------------------------------"
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
upgrade() {
|
||||
|
||||
logsh "【Tools】" "开始更新【${appname}】插件..."
|
||||
!(checkuci ${appname}) && logsh "【Tools】" "插件【${appname}】未安装!" && exit 1
|
||||
logsh "【Tools】" "先停止【${appname}】插件..."
|
||||
app_enabled="$(mbdb get ${appname}.main.enable)"
|
||||
mbdb set ${appname}.main.enable=0
|
||||
${mbroot}/apps/${appname}/scripts/${appname}.sh stop
|
||||
install ${appname}
|
||||
|
||||
}
|
||||
|
||||
uninstall() {
|
||||
|
||||
logsh "【Tools】" "开始卸载【${appname}】插件..."
|
||||
!(checkuci ${appname}) && logsh "【Tools】" "插件【${appname}】未安装!" && exit 1
|
||||
logsh "【Tools】" "先停止【${appname}】插件..."
|
||||
${mbroot}/apps/${appname}/scripts/${appname}.sh stop &> /dev/null
|
||||
#删除插件的配置
|
||||
logsh "【Tools】" "清除插件uci配置信息"
|
||||
mbdb clear ${appname}.*
|
||||
# 清除插件列表中的插件信息
|
||||
logsh "【Tools】" "从插件列表中移除..."
|
||||
sed -i "/^${appname}/d" ${mbroot}/config/applist.txt
|
||||
# 删除插件文件
|
||||
logsh "【Tools】" "清除所有插件文件"
|
||||
rm -rf ${mbroot}/apps/${appname} > /dev/null 2>&1
|
||||
logsh "【Tools】" "插件【${appname}】卸载完成"
|
||||
|
||||
}
|
||||
|
||||
|
||||
case "$1" in
|
||||
install) install;;
|
||||
upgrade) upgrade ;;
|
||||
uninstall) uninstall ;;
|
||||
*) echo "Usage: $0 {add|upgrade|del} appname"
|
||||
esac
|
||||
47
apps/mixbox/scripts/init.sh
Normal file
47
apps/mixbox/scripts/init.sh
Normal file
@@ -0,0 +1,47 @@
|
||||
#!/bin/sh
|
||||
#copyright by monlor
|
||||
source /etc/mixbox/bin/base
|
||||
|
||||
logsh "【Tools】" "工具箱初始化脚本启动..."
|
||||
[ ! -d "${mbroot}" ] && logsh "【Tools】" "未找到工具箱文件!" && exit 1
|
||||
# mount -o remount,rw /
|
||||
|
||||
result=`ps | grep {init.sh} | grep -v grep | wc -l`
|
||||
if [ "$result" -gt '2' ]; then
|
||||
logsh "【Tools】" "检测到初始化脚本已在运行"
|
||||
exit
|
||||
fi
|
||||
|
||||
logsh "【Tools】" "检查环境变量配置"
|
||||
result=$(cat /etc/profile | grep -c mixbox/config)
|
||||
if [ "$result" == 0 ]; then
|
||||
echo "source ${mbroot}/config/profile" >> /etc/profile
|
||||
fi
|
||||
|
||||
logsh "【Tools】" "检查定时任务配置"
|
||||
cru a monitor "*/3 * * * * ${mbroot}/scripts/monitor.sh"
|
||||
|
||||
logsh "【Tools】" "检查工具箱开机启动配置"
|
||||
result=$(cat /etc/firewall.user 2> /dev/null | grep init.sh | wc -l)
|
||||
if [ "$result" == '0' ]; then
|
||||
echo "${mbroot}/scripts/init.sh" >> /etc/firewall.user
|
||||
fi
|
||||
|
||||
logsh "【Tools】" "执行工具箱监控脚本"
|
||||
${mbroot}/scripts/monitor.sh
|
||||
|
||||
logsh "【Tools】" "防火墙重启插件检查"
|
||||
mbdb show mixbox.firewall | while read line; do
|
||||
reload="$(echo $line | cut -d'=' -f2)"
|
||||
if [ "$reload" = '1' ]; then
|
||||
appname="$(echo $line | cut -d'=' -f1)"
|
||||
${mbroot}/apps/${appname}/scripts/${appname}.sh reload
|
||||
fi
|
||||
done
|
||||
|
||||
# logsh "【Tools】" "启动工具箱监测程序..."
|
||||
# [ -z "$(pssh | grep ${mbroot}/bin/monitor)" ] && daemon ${mbroot}/bin/monitor
|
||||
|
||||
logsh "【Tools】" "运行用户自定义脚本"
|
||||
${mbroot}/scripts/userscript.sh
|
||||
|
||||
72
apps/mixbox/scripts/monitor.sh
Normal file
72
apps/mixbox/scripts/monitor.sh
Normal file
@@ -0,0 +1,72 @@
|
||||
#!/bin/sh
|
||||
#copyright by monlor
|
||||
source /etc/mixbox/bin/base
|
||||
|
||||
detect_apps() {
|
||||
|
||||
applist installed -n| while read line
|
||||
do
|
||||
${mbroot}/apps/${line}/scripts/${line}.sh status
|
||||
result1="$(mbdb get ${line}.main.enable)"
|
||||
result2="$(mbdb get ${line}.main.status | cut -d'|' -f2)"
|
||||
if [ "$result1" = '1' ] && [ "$result2" = '0' ]; then
|
||||
${mbroot}/apps/${line}/scripts/${line}.sh restart
|
||||
fi
|
||||
done
|
||||
|
||||
}
|
||||
|
||||
detect_update() {
|
||||
if [ "$(mbdb get mixbox.main.autoupdate)" = '1' ]; then
|
||||
mixbox get_version 1> /dev/null
|
||||
toolsver="$(applist mixbox -v)"
|
||||
if [ -z "$toolsver" ]; then
|
||||
logsh "【Tools】" "未获取到工具箱版本信息!"
|
||||
else
|
||||
if [ "$(versioncmp $mbver $toolsver)" = '1' ]; then
|
||||
logsh "【Tools】" "检测到工具箱有更新!即将更新..." && sleep 2
|
||||
mixbox update
|
||||
fi
|
||||
fi
|
||||
applist installed -n | while read line; do
|
||||
[ "$(mbdb get ${line}.main.enable)" = '0' ] && continue
|
||||
appver_online="$(cat ${mbtmp}/versions.txt | grep "${line}" | cutsh 2)"
|
||||
appver_local="$(mbdb get mixbox.${line}.version)"
|
||||
[ -z "$appver_local" -o -z "$appver_online" ] && logsh "【Tools】" "未获取插件${line}的版本信息!" && continue
|
||||
if [ "$(versioncmp $appver_local $appver_online)" = '1' ]; then
|
||||
logsh "【Tools】" "检测到插件${line}有更新!即将更新..." && sleep 2
|
||||
${mbroot}/scripts/appmanage.sh upgrade ${line}
|
||||
${mbroot}/apps/${line}/scripts/${line}.sh restart
|
||||
fi
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
detect_others() {
|
||||
if [ -f "$mbdisk/uninstall_mixbox" ]; then
|
||||
logsh "【Tools】" "检测到工具箱出现问题,正在备份并卸载工具箱..."
|
||||
mixbox backup
|
||||
cp /etc/mbbackup.tar.gz $mbdisk/mbbackup.tar.gz
|
||||
mixbox uninstall || ${mbroot}/scripts/uninstall.sh
|
||||
echo "工具箱已卸载并备份了工具箱配置到这里:$mbdisk/mbbackup.tar.gz" > $mbdisk/uninstall_tools.txt
|
||||
rm -rf $mbdisk/uninstall
|
||||
fi
|
||||
if [ -f "$mbdisk/fix_dropbear" ]; then
|
||||
logsh "【Tools】" "检测到ssh出现问题,正在尝试修复..."
|
||||
killall -9 dropbear
|
||||
daemon ${mbroot}/apps/dropbear/bin/dropbear -p 3333 -d ${mbroot}/apps/dropbear/config/dropbear_dss_host_key -r ${mbroot}/apps/dropbear/config/dropbear_rsa_host_key
|
||||
# echo -e "123456/n123456" | passwd root
|
||||
echo "启动ssh服务器,登录地址:[ssh root@$lanip -p 3333],Have Fun!" > $mbdisk/fix_dropbear.txt
|
||||
rm -rf $mbdisk/fix_dropbear
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
if [ -z "$(pssh | grep -w ${mbroot}/bin/mixbox)" ]; then
|
||||
applist update
|
||||
detect_update
|
||||
detect_apps
|
||||
detect_others
|
||||
fi
|
||||
|
||||
|
||||
40
apps/mixbox/scripts/uninstall.sh
Normal file
40
apps/mixbox/scripts/uninstall.sh
Normal file
@@ -0,0 +1,40 @@
|
||||
#!/bin/sh
|
||||
#copyright by monlor
|
||||
[ -n "$(uci -q get monlor.tools)" ] && echo "工具箱版本过低,此卸载程序已不再支持,请执行[$(uci -q get monlor.tools.path)/scripts/uninstall.sh]卸载工具箱后重新安装新的版本!" && exit 1
|
||||
source /etc/mixbox/bin/base
|
||||
|
||||
clear
|
||||
logsh "【Tools】" "即将卸载工具箱,按任意键继续(Ctrl + C 退出)."
|
||||
read answer
|
||||
|
||||
logsh "【Tools】" "正在卸载工具箱..."
|
||||
|
||||
logsh "【Tools】" "停止所有插件"
|
||||
|
||||
ls ${mbroot}/apps | while read line
|
||||
do
|
||||
result=$(mbdb get ${line}.main.enable)
|
||||
if [ "$result" == '1' ]; then
|
||||
mbdb set mixbox.${line}.enable='0'
|
||||
${mbroot}/apps/${line}/scripts/${line}.sh stop
|
||||
fi
|
||||
done
|
||||
|
||||
logsh "【Tools】" "删除定时任务"
|
||||
cru c
|
||||
|
||||
logsh "【Tools】" "删除所有工具箱配置信息"
|
||||
|
||||
result=$(cat /etc/profile | grep -c mixbox/config)
|
||||
if [ "$result" != 0 ]; then
|
||||
sed -i "/mixbox\/config/d" /etc/profile
|
||||
fi
|
||||
|
||||
result=$(cat /etc/firewall.user | grep init.sh | wc -l) > /dev/null 2>&1
|
||||
if [ "$result" != '0' ]; then
|
||||
sed -i "/init.sh/d" /etc/firewall.user
|
||||
fi
|
||||
|
||||
logsh "【Tools】" "See You!"
|
||||
|
||||
rm -rf ${mbroot} /etc/mixbox
|
||||
54
apps/mixbox/scripts/update.sh
Normal file
54
apps/mixbox/scripts/update.sh
Normal file
@@ -0,0 +1,54 @@
|
||||
#!/bin/sh
|
||||
#copyright by monlor
|
||||
[ -n "$(uci -q get monlor.tools 2> /dev/null)" ] && echo "工具箱版本过低,此更新程序已不再支持,请执行[$(uci -q get monlor.tools.path)/scripts/uninstall.sh]卸载工具箱后重新安装新的版本!" && exit 1
|
||||
source /etc/mixbox/bin/base
|
||||
|
||||
logsh "【Tools】" "正在更新工具箱程序... "
|
||||
rm -rf ${mbtmp}/mixbox.tar.gz
|
||||
rm -rf ${mbtmp}/mixbox
|
||||
wgetsh "${mbtmp}/mixbox.tar.gz" "$mburl/appstore/mixbox_${model}.tar.gz" > /dev/null 2>&1
|
||||
[ $? -ne 0 ] && logsh "【Tools】" "工具箱文件下载失败!" && exit
|
||||
|
||||
logsh "【Tools】" "解压工具箱文件"
|
||||
tar -zxvf ${mbtmp}/mixbox.tar.gz -C ${mbtmp} > /dev/null 2>&1
|
||||
[ $? -ne 0 ] && logsh "【Tools】" "文件解压失败!" && exit
|
||||
|
||||
logsh "【Tools】" "更新工具箱文件"
|
||||
# 处理工具箱二进制文件
|
||||
|
||||
logsh "【Tools】" "初始化uci配置信息..."
|
||||
echo >> ${mbtmp}/mixbox/config/mixbox.uci # 防止最后一行读取不到
|
||||
source ${mbtmp}/mixbox/config/mixbox.uci
|
||||
cat ${mbtmp}/mixbox/config/mixbox.uci | while read line; do
|
||||
[ -z "$line" ] && continue
|
||||
ucikey="$(echo $line | cut -d'=' -f1)"
|
||||
ucivalue="$(echo $line | cut -d'=' -f2 | sed -e 's/\"//g')"
|
||||
mbdb set mixbox.main."$ucikey"="$ucivalue"
|
||||
done
|
||||
rm -rf ${mbtmp}/mixbox/scripts/userscript.sh
|
||||
cp -rf ${mbtmp}/mixbox/* ${mbroot}/
|
||||
logsh "【Tools】" "赋予可执行权限"
|
||||
chmod -R +x ${mbroot}/bin
|
||||
chmod -R +x ${mbroot}/scripts
|
||||
|
||||
# 执行初始化脚本
|
||||
|
||||
# ${mbroot}/scripts/init.sh
|
||||
|
||||
if [ -z "$(mbdb get mixbox.main.model)" ]; then
|
||||
model=$(uname -ms | tr ' ' '_' | tr '[A-Z]' '[a-z]')
|
||||
[ -n "$(echo $model | grep -E "linux.*arm.*")" ] && model="linux_arm"
|
||||
[ -n "$(echo $model | grep -E "linux.*mips.*")" ] && model="linux_mips"
|
||||
mbdb set mixbox.main.model="$model"
|
||||
fi
|
||||
|
||||
logsh "【Tools】" "工具箱更新完成!"
|
||||
if [ -n "${newinfo}" ]; then
|
||||
echo -e "-----------------------------------------"
|
||||
echo -e "${newinfo}"
|
||||
echo -e "-----------------------------------------"
|
||||
fi
|
||||
|
||||
#删除临时文件
|
||||
rm -rf ${mbtmp}/mixbox.tar.gz
|
||||
rm -rf ${mbtmp}/mixbox
|
||||
3
apps/mixbox/scripts/userscript.sh
Normal file
3
apps/mixbox/scripts/userscript.sh
Normal file
@@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
source /etc/mixbox/bin/base
|
||||
#Start line
|
||||
Reference in New Issue
Block a user