init
This commit is contained in:
@@ -0,0 +1,210 @@
|
||||
#!/bin/bash
|
||||
# Author: Jrohy
|
||||
# github: https://github.com/Jrohy/trojan
|
||||
|
||||
# Supported invocation modes:
|
||||
# bash install.sh [--remove]
|
||||
# source <(curl -fsSL https://<your-domain>/install.sh) [--remove]
|
||||
if (return 0 2>/dev/null); then
|
||||
sourced=1
|
||||
else
|
||||
sourced=0
|
||||
fi
|
||||
|
||||
#定义操作变量, 0为否, 1为是
|
||||
help=0
|
||||
|
||||
remove=0
|
||||
|
||||
update=0
|
||||
|
||||
download_url="https://github.com/Jrohy/trojan/releases/download/"
|
||||
|
||||
version_check="https://api.github.com/repos/Jrohy/trojan/releases/latest"
|
||||
|
||||
service_url="https://raw.githubusercontent.com/Jrohy/trojan/master/asset/trojan-web.service"
|
||||
|
||||
[[ -e /var/lib/trojan-manager ]] && update=1
|
||||
|
||||
#Centos 临时取消别名
|
||||
[[ -f /etc/redhat-release && -z $(echo $SHELL|grep zsh) ]] && unalias -a
|
||||
|
||||
[[ -z $(echo $SHELL|grep zsh) ]] && shell_way="bash" || shell_way="zsh"
|
||||
|
||||
#######color code########
|
||||
red="31m"
|
||||
green="32m"
|
||||
yellow="33m"
|
||||
blue="36m"
|
||||
fuchsia="35m"
|
||||
|
||||
colorEcho(){
|
||||
color=$1
|
||||
echo -e "\033[${color}${@:2}\033[0m"
|
||||
}
|
||||
|
||||
#######get params#########
|
||||
while [[ $# > 0 ]];do
|
||||
key="$1"
|
||||
case $key in
|
||||
--remove)
|
||||
remove=1
|
||||
;;
|
||||
-h|--help)
|
||||
help=1
|
||||
;;
|
||||
*)
|
||||
# unknown option
|
||||
;;
|
||||
esac
|
||||
shift # past argument or value
|
||||
done
|
||||
#############################
|
||||
|
||||
help(){
|
||||
echo "Usage: bash install.sh [-h|--help] [--remove]"
|
||||
echo " or: source <(curl -fsSL https://<your-domain>/install.sh) [--remove]"
|
||||
echo " -h, --help Show help"
|
||||
echo " --remove remove trojan"
|
||||
return 0
|
||||
}
|
||||
|
||||
removeTrojan() {
|
||||
#移除trojan
|
||||
rm -rf /usr/bin/trojan >/dev/null 2>&1
|
||||
rm -rf /usr/local/etc/trojan >/dev/null 2>&1
|
||||
rm -f /etc/systemd/system/trojan.service >/dev/null 2>&1
|
||||
|
||||
#移除trojan管理程序
|
||||
rm -f /usr/local/bin/trojan >/dev/null 2>&1
|
||||
rm -rf /var/lib/trojan-manager >/dev/null 2>&1
|
||||
rm -f /etc/systemd/system/trojan-web.service >/dev/null 2>&1
|
||||
|
||||
systemctl daemon-reload
|
||||
|
||||
#移除trojan的专用db
|
||||
docker rm -f trojan-mysql trojan-mariadb >/dev/null 2>&1
|
||||
rm -rf /home/mysql /home/mariadb >/dev/null 2>&1
|
||||
|
||||
#移除环境变量
|
||||
sed -i '/trojan/d' ~/.${shell_way}rc
|
||||
source ~/.${shell_way}rc
|
||||
|
||||
colorEcho ${green} "uninstall success!"
|
||||
}
|
||||
|
||||
checkSys() {
|
||||
#检查是否为Root
|
||||
[ $(id -u) != "0" ] && { colorEcho ${red} "Error: You must be root to run this script"; return 1; }
|
||||
|
||||
arch=$(uname -m 2> /dev/null)
|
||||
if [[ $arch != x86_64 && $arch != aarch64 ]];then
|
||||
colorEcho $yellow "not support $arch machine".
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ `command -v apt-get` ]];then
|
||||
package_manager='apt-get'
|
||||
elif [[ `command -v dnf` ]];then
|
||||
package_manager='dnf'
|
||||
elif [[ `command -v yum` ]];then
|
||||
package_manager='yum'
|
||||
else
|
||||
colorEcho $red "Not support OS!"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# 缺失/usr/local/bin路径时自动添加
|
||||
[[ -z `echo $PATH|grep /usr/local/bin` ]] && { echo 'export PATH=$PATH:/usr/local/bin' >> /etc/bashrc; source /etc/bashrc; }
|
||||
}
|
||||
|
||||
#安装依赖
|
||||
installDependent(){
|
||||
if [[ ${package_manager} == 'dnf' || ${package_manager} == 'yum' ]];then
|
||||
${package_manager} install socat crontabs bash-completion -y
|
||||
else
|
||||
${package_manager} update
|
||||
${package_manager} install socat cron bash-completion xz-utils -y
|
||||
fi
|
||||
}
|
||||
|
||||
setupCron() {
|
||||
if [[ `crontab -l 2>/dev/null|grep acme` ]]; then
|
||||
if [[ -z `crontab -l 2>/dev/null|grep trojan-web` || `crontab -l 2>/dev/null|grep trojan-web|grep "&"` ]]; then
|
||||
#计算北京时间早上3点时VPS的实际时间
|
||||
origin_time_zone=$(date -R|awk '{printf"%d",$6}')
|
||||
local_time_zone=${origin_time_zone%00}
|
||||
beijing_zone=8
|
||||
beijing_update_time=3
|
||||
diff_zone=$[$beijing_zone-$local_time_zone]
|
||||
local_time=$[$beijing_update_time-$diff_zone]
|
||||
if [ $local_time -lt 0 ];then
|
||||
local_time=$[24+$local_time]
|
||||
elif [ $local_time -ge 24 ];then
|
||||
local_time=$[$local_time-24]
|
||||
fi
|
||||
crontab -l 2>/dev/null|sed '/acme.sh/d' > crontab.txt
|
||||
echo "0 ${local_time}"' * * * systemctl stop trojan-web; "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null; systemctl start trojan-web' >> crontab.txt
|
||||
crontab crontab.txt
|
||||
rm -f crontab.txt
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
installTrojan(){
|
||||
local show_tip=0
|
||||
if [[ $update == 1 ]];then
|
||||
systemctl stop trojan-web >/dev/null 2>&1
|
||||
rm -f /usr/local/bin/trojan
|
||||
fi
|
||||
lastest_version=$(curl -H 'Cache-Control: no-cache' -s "$version_check" | grep 'tag_name' | cut -d\" -f4)
|
||||
echo "正在下载管理程序`colorEcho $blue $lastest_version`版本..."
|
||||
[[ $arch == x86_64 ]] && bin="trojan-linux-amd64" || bin="trojan-linux-arm64"
|
||||
curl -L "$download_url/$lastest_version/$bin" -o /usr/local/bin/trojan
|
||||
chmod +x /usr/local/bin/trojan
|
||||
if [[ ! -e /etc/systemd/system/trojan-web.service ]];then
|
||||
show_tip=1
|
||||
curl -L $service_url -o /etc/systemd/system/trojan-web.service
|
||||
systemctl daemon-reload
|
||||
systemctl enable trojan-web
|
||||
fi
|
||||
#命令补全环境变量
|
||||
[[ -z $(grep trojan ~/.${shell_way}rc) ]] && echo "source <(trojan completion ${shell_way})" >> ~/.${shell_way}rc
|
||||
source ~/.${shell_way}rc
|
||||
if [[ $update == 0 ]];then
|
||||
colorEcho $green "安装trojan管理程序成功!\n"
|
||||
echo -e "运行命令`colorEcho $blue trojan`可进行trojan管理\n"
|
||||
/usr/local/bin/trojan
|
||||
else
|
||||
if [[ `cat /usr/local/etc/trojan/config.json|grep -w "\"db\""` ]];then
|
||||
sed -i "s/\"db\"/\"database\"/g" /usr/local/etc/trojan/config.json
|
||||
systemctl restart trojan
|
||||
fi
|
||||
/usr/local/bin/trojan upgrade db
|
||||
if [[ -z `cat /usr/local/etc/trojan/config.json|grep sni` ]];then
|
||||
/usr/local/bin/trojan upgrade config
|
||||
fi
|
||||
systemctl restart trojan-web
|
||||
colorEcho $green "更新trojan管理程序成功!\n"
|
||||
fi
|
||||
setupCron
|
||||
[[ $show_tip == 1 ]] && echo "浏览器访问'`colorEcho $blue https://域名`'可在线trojan多用户管理"
|
||||
}
|
||||
|
||||
main(){
|
||||
[[ ${help} == 1 ]] && help && return
|
||||
[[ ${remove} == 1 ]] && removeTrojan && return
|
||||
[[ $update == 0 ]] && echo "正在安装trojan管理程序.." || echo "正在更新trojan管理程序.."
|
||||
checkSys || return 1
|
||||
[[ $update == 0 ]] && installDependent
|
||||
installTrojan
|
||||
}
|
||||
|
||||
main "$@"
|
||||
result=$?
|
||||
|
||||
# Do not terminate the interactive shell when the script was invoked by source.
|
||||
if [[ $sourced == 1 ]]; then
|
||||
return $result
|
||||
fi
|
||||
exit $result
|
||||
Reference in New Issue
Block a user