mirror of
https://github.com/monlor/MIXBOX-ARCHIVE.git
synced 2026-03-10 23:41:27 +00:00
261 lines
6.7 KiB
Bash
261 lines
6.7 KiB
Bash
#!/bin/sh
|
||
#copyright by monlor
|
||
export PATH=$PATH:/etc/mixbox/bin
|
||
|
||
mburl_coding="https://monlor.coding.net/p/mbfiles/d/mbfiles/git/lfs/master"
|
||
mburl_github="https://raw.githubusercontent.com/monlor/mbfiles/master"
|
||
mburl_gitee="https://gitee.com/monlor/mbfiles/raw/master"
|
||
mburl=$(mbdb get mixbox.main.url) || mburl="$mburl_gitee"
|
||
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)"
|
||
|
||
source ${mbroot}/scripts/helper.sh
|
||
|
||
# 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
|
||
|
||
}
|
||
|
||
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}")"
|
||
$@ &> ${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}"
|
||
|
||
}
|
||
|