代码拉取完成,页面将自动刷新
#!/usr/bin/env bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
#=================================================
# System Required: CentOS/Debian/Ubuntu
# Description: Peerflix Server
# Version: 1.1.0
# Author: Toyo
# Blog: https://doub.io/wlzy-13/
#=================================================
sh_ver="1.1.0"
node_ver="v8.11.3"
node_file="/etc/node"
ps_file="/etc/node/lib/node_modules/peerflix-server"
conf_file="/etc/peerflix-server"
ps_conf="/etc/peerflix-server/peerflix-server.conf"
ps_log="/tmp/peerflix-server.log"
bt_port="6881"
Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m"
Info="${Green_font_prefix}[信息]${Font_color_suffix}"
Error="${Red_font_prefix}[错误]${Font_color_suffix}"
Tip="${Green_font_prefix}[注意]${Font_color_suffix}"
check_root(){
[[ $EUID != 0 ]] && echo -e "${Error} 当前非ROOT账号(或没有ROOT权限),无法继续操作,请更换ROOT账号或使用 ${Green_background_prefix}sudo su${Font_color_suffix} 命令获取临时ROOT权限(执行后可能会提示输入当前账号的密码)。" && exit 1
}
#检查系统
check_sys(){
if [[ -f /etc/redhat-release ]]; then
release="centos"
elif cat /etc/issue | grep -q -E -i "debian"; then
release="debian"
elif cat /etc/issue | grep -q -E -i "ubuntu"; then
release="ubuntu"
elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat"; then
release="centos"
elif cat /proc/version | grep -q -E -i "debian"; then
release="debian"
elif cat /proc/version | grep -q -E -i "ubuntu"; then
release="ubuntu"
elif cat /proc/version | grep -q -E -i "centos|red hat|redhat"; then
release="centos"
fi
bit=$(uname -m)
}
check_installed_status(){
[[ ! -e ${ps_file} ]] && echo -e "${Error} Peerflix Server 没有安装,请检查 !" && exit 1
}
check_pid(){
PID=$(ps -ef | grep peerflix-server | grep -v grep |grep -v "init.d" |grep -v "service" |awk '{print $2}')
}
Download_ps(){
echo -e "${Info} 开始安装 node-js ..."
if [[ ! -e ${node_file} ]]; then
cd /tmp
if [[ ${bit} == "x86_64" ]]; then
node_name="node-${node_ver}-linux-x64"
wget --no-check-certificate -O node.tar.xz "https://nodejs.org/dist/${node_ver}/node-${node_ver}-linux-x64.tar.xz"
else
node_name="node-${node_ver}-linux-x86"
wget --no-check-certificate -O node.tar.xz "https://nodejs.org/dist/${node_ver}/node-${node_ver}-linux-x86.tar.xz"
fi
[[ ! -e "node.tar.xz" ]] && echo -e "${Error} Peerflix Server 压缩包下载失败 !" && Download_shanhou 0
xz -d node.tar.xz
[[ ! -e "node.tar" ]] && echo -e "${Error} Peerflix Server 解压失败(可能是 压缩包损坏 或者 没有安装 XZ) !" && Download_shanhou 1
tar -xvf "node.tar" -C "/etc"
[[ ! -e "node.tar" ]] && echo -e "${Error} Peerflix Server 解压失败(可能是 压缩包损坏 或者 没有安装 Tar) !" && Download_shanhou 2
mv "/etc/${node_name}" ${node_file}
[[ ! -e "${node_file}" ]] && echo -e "${Error} Peerflix Server 文件夹重命名失败!" && Download_shanhou 4
rm -rf "/tmp/node.tar.xz"
rm -rf "/tmp/node.tar"
ln -s ${node_file}/bin/node /usr/local/bin/node
ln -s ${node_file}/bin/npm /usr/local/bin/npm
echo -e "${Info} node-js 安装完成,开始安装 peerflix-server ..."
else
echo -e "${Info} node-js 已安装,开始安装 peerflix-server ..."
fi
npm install -g peerflix-server
if [[ ! -e ${ps_file} ]]; then
echo -e "${Error} Peerflix Server 安装失败,请检查 !" && exit 1
else
echo -e "${Info} Peerflix Server 安装成功,继续..."
fi
}
Download_shanhou(){
if [[ $1 == 0 ]]; then
rm -rf ${conf_file}
elif [[ $1 == 1 ]]; then
rm -rf ${conf_file}
rm -rf "/tmp/node.tar.xz"
elif [[ $1 == 2 ]]; then
rm -rf ${conf_file}
rm -rf "/tmp/node.tar.xz"
rm -rf "/tmp/node.tar"
elif [[ $1 == 3 ]]; then
rm -rf ${conf_file}
rm -rf "/tmp/node.tar.xz"
rm -rf "/tmp/node.tar"
rm -rf "/etc/node-${node_ver}-linux-x64"
elif [[ $1 == 4 ]]; then
rm -rf ${conf_file}
rm -rf "/tmp/node.tar.xz"
rm -rf "/tmp/node.tar"
rm -rf "/etc/node-${node_ver}-linux-x86"
fi
exit 1
}
Service_ps(){
if [[ ${release} = "centos" ]]; then
if ! wget --no-check-certificate "https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/service/pserver_centos" -O /etc/init.d/pserver; then
echo -e "${Error} Peerflix Server服务 管理脚本下载失败 !" && exit 1
fi
chmod +x /etc/init.d/pserver
chkconfig --add pserver
chkconfig pserver on
else
if ! wget --no-check-certificate "https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/service/pserver_debian" -O /etc/init.d/pserver; then
echo -e "${Error} Peerflix Server服务 管理脚本下载失败 !" && exit 1
fi
chmod +x /etc/init.d/pserver
update-rc.d -f pserver defaults
fi
echo -e "${Info} Peerflix Server服务 管理脚本下载完成 !"
}
Installation_dependency(){
xz_ver=$(xz -V)
tar_ver=$(tar --version)
[[ -z ${xz_ver} ]] && pack_name="xz "
[[ -z ${tar_ver} ]] && pack_name="${pack_name}tar"
if [[ ! -z ${pack_name} ]]; then
if [[ ${release} == "centos" ]]; then
yum update
yum install -y ${pack_name}
else
apt-get update
apt-get install -y ${pack_name}
fi
fi
mkdir "${conf_file}"
}
Write_config(){
echo -e "port = ${ps_port}" > ${ps_conf}
}
Read_config(){
[[ ! -e ${ps_conf} ]] && echo -e "${Error} Peerflix Server 配置文件不存在 !" && exit 1
port=`cat ${ps_conf}|grep "port = "|awk -F "port = " '{print $NF}'`
}
Set_port(){
while true
do
echo -e "请输入 Peerflix Server 监听端口 [1-65535](如果是绑定的域名,那么建议80端口)"
read -e -p "(默认端口: 9000):" ps_port
[[ -z "${ps_port}" ]] && ps_port="9000"
echo $((${ps_port}+0)) &>/dev/null
if [[ $? -eq 0 ]]; then
if [[ ${ps_port} -ge 1 ]] && [[ ${ps_port} -le 65535 ]]; then
echo && echo "========================"
echo -e " 端口 : ${Red_background_prefix} ${ps_port} ${Font_color_suffix}"
echo "========================" && echo
break
else
echo "输入错误, 请输入正确的端口。"
fi
else
echo "输入错误, 请输入正确的端口。"
fi
done
}
Set_ps(){
check_installed_status
Set_port
Read_config
Del_iptables
Write_config
Add_iptables
Save_iptables
Restart_ps
}
Install_ps(){
check_root
[[ -e ${ps_file} ]] && echo -e "${Error} 检测到 Peerflix Server 已安装 !" && exit 1
check_sys
echo -e "${Info} 开始设置 用户配置..."
Set_port
echo -e "${Info} 开始安装/配置 依赖..."
Installation_dependency
echo -e "${Info} 开始下载/安装..."
Download_ps
echo -e "${Info} 开始下载/安装 服务脚本(init)..."
Service_ps
echo -e "${Info} 开始写入 配置文件..."
Write_config
echo -e "${Info} 开始设置 iptables防火墙..."
Set_iptables
echo -e "${Info} 开始添加 iptables防火墙规则..."
Add_iptables
echo -e "${Info} 开始保存 iptables防火墙规则..."
Save_iptables
echo -e "${Info} 所有步骤 安装完毕,开始启动..."
Start_ps
}
Start_ps(){
check_installed_status
check_pid
[[ ! -z ${PID} ]] && echo -e "${Error} Peerflix Server 正在运行,请检查 !" && exit 1
/etc/init.d/pserver start
}
Stop_ps(){
check_installed_status
check_pid
[[ -z ${PID} ]] && echo -e "${Error} Peerflix Server 没有运行,请检查 !" && exit 1
/etc/init.d/pserver stop
}
Restart_ps(){
check_installed_status
check_pid
[[ ! -z ${PID} ]] && /etc/init.d/pserver stop
/etc/init.d/pserver start
}
Log_ps(){
[[ ! -e "${ps_log}" ]] && echo -e "${Error} Peerflix Server 日志文件不存在 !" && exit 1
echo && echo -e "${Tip} 按 ${Red_font_prefix}Ctrl+C${Font_color_suffix} 终止查看日志" && echo -e "如果需要查看完整日志内容,请用 ${Red_font_prefix}cat ${ps_log}${Font_color_suffix} 命令。" && echo
tail -f "${ps_log}"
}
Uninstall_ps(){
check_installed_status
echo "确定要卸载 Peerflix Server ? (y/N)"
echo
read -e -p "(默认: n):" unyn
[[ -z ${unyn} ]] && unyn="n"
if [[ ${unyn} == [Yy] ]]; then
check_pid
[[ ! -z $PID ]] && kill -9 ${PID}
port=`cat ${ps_conf}|grep "port = "|awk -F "port = " '{print $NF}'`
Del_iptables
rm -rf /usr/local/bin/node
rm -rf /usr/local/bin/npm
rm -rf ${node_file}
rm -rf ${conf_file}
rm -rf /etc/init.d/pserver
if [[ ${release} = "centos" ]]; then
chkconfig --del pserver
else
update-rc.d -f pserver remove
fi
echo && echo "Peerflix Server 卸载完成 !" && echo
else
echo && echo "卸载已取消..." && echo
fi
}
View_ps(){
check_installed_status
Read_config
ip=$(wget -qO- -t1 -T2 ipinfo.io/ip)
if [[ -z "${ip}" ]]; then
ip=$(wget -qO- -t1 -T2 api.ip.sb/ip)
if [[ -z "${ip}" ]]; then
ip=$(wget -qO- -t1 -T2 members.3322.org/dyndns/getip)
if [[ -z "${ip}" ]]; then
ip="VPS_IP"
fi
fi
fi
clear && echo "————————————————" && echo
echo -e " Peerflix Server 信息 :" && echo
echo -e " 地址\t: ${Green_font_prefix}http://${ip}:${port}${Font_color_suffix}"
echo && echo "————————————————"
}
Add_iptables(){
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport ${ps_port} -j ACCEPT
iptables -I INPUT -m state --state NEW -m udp -p udp --dport ${ps_port} -j ACCEPT
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport ${bt_port} -j ACCEPT
iptables -I INPUT -m state --state NEW -m udp -p udp --dport ${bt_port} -j ACCEPT
iptables -I OUTPUT -m state --state NEW -m tcp -p tcp --dport ${bt_port} -j ACCEPT
iptables -I OUTPUT -m state --state NEW -m udp -p udp --dport ${bt_port} -j ACCEPT
}
Del_iptables(){
iptables -D INPUT -m state --state NEW -m tcp -p tcp --dport ${port} -j ACCEPT
iptables -D INPUT -m state --state NEW -m udp -p udp --dport ${port} -j ACCEPT
iptables -D INPUT -m state --state NEW -m tcp -p tcp --dport ${bt_port} -j ACCEPT
iptables -D INPUT -m state --state NEW -m udp -p udp --dport ${bt_port} -j ACCEPT
iptables -D OUTPUT -m state --state NEW -m tcp -p tcp --dport ${bt_port} -j ACCEPT
iptables -D OUTPUT -m state --state NEW -m udp -p udp --dport ${bt_port} -j ACCEPT
}
Save_iptables(){
if [[ ${release} == "centos" ]]; then
service iptables save
else
iptables-save > /etc/iptables.up.rules
fi
}
Set_iptables(){
if [[ ${release} == "centos" ]]; then
service iptables save
chkconfig --level 2345 iptables on
else
iptables-save > /etc/iptables.up.rules
echo -e '#!/bin/bash\n/sbin/iptables-restore < /etc/iptables.up.rules' > /etc/network/if-pre-up.d/iptables
chmod +x /etc/network/if-pre-up.d/iptables
fi
}
Update_Shell(){
sh_new_ver=$(wget --no-check-certificate -qO- -t1 -T3 "https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/pserver.sh"|grep 'sh_ver="'|awk -F "=" '{print $NF}'|sed 's/\"//g'|head -1) && sh_new_type="github"
[[ -z ${sh_new_ver} ]] && echo -e "${Error} 无法链接到 Github !" && exit 0
if [[ -e "/etc/init.d/pserver" ]]; then
rm -rf /etc/init.d/pserver
Service_ps
fi
wget -N --no-check-certificate "https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/pserver.sh" && chmod +x pserver.sh
echo -e "脚本已更新为最新版本[ ${sh_new_ver} ] !(注意:因为更新方式为直接覆盖当前运行的脚本,所以可能下面会提示一些报错,无视即可)" && exit 0
}
echo && echo -e " Peerflix Server 一键管理脚本 ${Red_font_prefix}[v${sh_ver}]${Font_color_suffix}
---- Toyo | doub.io/wlzy-13/ ----
${Green_font_prefix}0.${Font_color_suffix} 升级脚本
${Green_font_prefix}1.${Font_color_suffix} 安装 Peerflix Server
${Green_font_prefix}2.${Font_color_suffix} 卸载 Peerflix Server
————————————
${Green_font_prefix}3.${Font_color_suffix} 启动 Peerflix Server
${Green_font_prefix}4.${Font_color_suffix} 停止 Peerflix Server
${Green_font_prefix}5.${Font_color_suffix} 重启 Peerflix Server
————————————
${Green_font_prefix}6.${Font_color_suffix} 设置 Peerflix Server 端口
${Green_font_prefix}7.${Font_color_suffix} 查看 Peerflix Server 信息
${Green_font_prefix}8.${Font_color_suffix} 查看 Peerflix Server 日志
————————————" && echo
if [[ -e ${ps_file} ]]; then
check_pid
if [[ ! -z "${PID}" ]]; then
echo -e " 当前状态: ${Green_font_prefix}已安装${Font_color_suffix} 并 ${Green_font_prefix}已启动${Font_color_suffix}"
else
echo -e " 当前状态: ${Green_font_prefix}已安装${Font_color_suffix} 但 ${Red_font_prefix}未启动${Font_color_suffix}"
fi
else
echo -e " 当前状态: ${Red_font_prefix}未安装${Font_color_suffix}"
fi
echo
read -e -p " 请输入数字 [0-8]:" num
case "$num" in
0)
Update_Shell
;;
1)
Install_ps
;;
2)
Uninstall_ps
;;
3)
Start_ps
;;
4)
Stop_ps
;;
5)
Restart_ps
;;
6)
Set_ps
;;
7)
View_ps
;;
8)
Log_ps
;;
*)
echo "请输入正确数字 [0-8]"
;;
esac
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。