| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417 |
- #!/bin/bash
- # MTProto一键安装脚本
- # Author: palm<https://tizi.blog>
- RED="\033[31m" # Error message
- GREEN="\033[32m" # Success message
- YELLOW="\033[33m" # Warning message
- BLUE="\033[36m" # Info message
- PLAIN='\033[0m'
- export MTG_CONFIG="${MTG_CONFIG:-$HOME/.config/mtg}"
- export MTG_ENV="$MTG_CONFIG/env"
- export MTG_SECRET="$MTG_CONFIG/secret"
- export MTG_CONTAINER="${MTG_CONTAINER:-mtg}"
- export MTG_IMAGENAME="${MTG_IMAGENAME:-nineseconds/mtg:1}"
- DOCKER_CMD="$(command -v docker)"
- OSNAME=`hostnamectl | grep -i system | cut -d: -f2`
- IP=`curl -sL -4 ip.sb`
- colorEcho() {
- echo -e "${1}${@:2}${PLAIN}"
- }
- checkSystem() {
- result=$(id | awk '{print $1}')
- if [[ $result != "uid=0(root)" ]]; then
- colorEcho $RED " 请以root身份执行该脚本"
- exit 1
- fi
- res=`which yum`
- if [[ "$?" != "0" ]]; then
- res=`which apt`
- if [ "$?" != "0" ]; then
- colorEcho $RED " 不受支持的Linux系统"
- exit 1
- fi
- res=`hostnamectl | grep -i ubuntu`
- if [[ "${res}" != "" ]]; then
- OS="ubuntu"
- else
- OS="debian"
- fi
- PMT="apt"
- CMD_INSTALL="apt install -y "
- CMD_REMOVE="apt remove -y "
- else
- OS="centos"
- PMT="yum"
- CMD_INSTALL="yum install -y "
- CMD_REMOVE="yum remove -y "
- fi
- res=`which systemctl`
- if [[ "$?" != "0" ]]; then
- colorEcho $RED " 系统版本过低,请升级到最新版本"
- exit 1
- fi
- }
- status() {
- if [[ "$DOCKER_CMD" = "" ]]; then
- echo 0
- return
- elif [[ ! -f $MTG_ENV ]]; then
- echo 1
- return
- fi
- port=`grep MTG_PORT $MTG_ENV|cut -d= -f2`
- if [[ -z "$port" ]]; then
- echo 2
- return
- fi
- res=`ss -ntlp| grep ${port} | grep docker`
- if [[ -z "$res" ]]; then
- echo 3
- else
- echo 4
- fi
- }
- statusText() {
- res=`status`
- case $res in
- 3)
- echo -e ${GREEN}已安装${PLAIN} ${RED}未运行${PLAIN}
- ;;
- 4)
- echo -e ${GREEN}已安装${PLAIN} ${GREEN}正在运行${PLAIN}
- ;;
- *)
- echo -e ${RED}未安装${PLAIN}
- ;;
- esac
- }
- getData() {
- read -p " 请输入MTProto端口[100-65535的一个数字]:" PORT
- [[ -z "${PORT}" ]] && {
- echo -e " ${RED}请输入MTProto端口!${PLAIN}"
- exit 1
- }
- if [[ "${PORT:0:1}" = "0" ]]; then
- echo -e " ${RED}端口不能以0开头${PLAIN}"
- exit 1
- fi
- MTG_PORT=$PORT
- mkdir -p $MTG_CONFIG
- echo "MTG_IMAGENAME=$MTG_IMAGENAME" > "$MTG_ENV"
- echo "MTG_PORT=$MTG_PORT" >> "$MTG_ENV"
- echo "MTG_CONTAINER=$MTG_CONTAINER" >> "$MTG_ENV"
- }
- installDocker() {
- if [[ "$DOCKER_CMD" != "" ]]; then
- systemctl enable docker
- systemctl start docker
- selinux
- return
- fi
- #$CMD_REMOVE docker docker-engine docker.io containerd runc
- $PMT clean all
- $CMD_INSTALL wget curl
- if [[ $PMT = "apt" ]]; then
- apt clean all
- apt-get -y install \
- apt-transport-https \
- ca-certificates \
- curl \
- gnupg-agent \
- software-properties-common
- curl -fsSL https://download.docker.com/linux/$OS/gpg | apt-key add -
- add-apt-repository \
- "deb [arch=amd64] https://download.docker.com/linux/$OS \
- $(lsb_release -cs) \
- stable"
- apt update
- else
- wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
- yum clean all
- fi
- $CMD_INSTALL docker-ce docker-ce-cli containerd.io
- DOCKER_CMD="$(command -v docker)"
- if [[ "$DOCKER_CMD" = "" ]]; then
- echo -e " ${RED}$OSNAME docker安装失败,请到https://tizi.blog反馈${PLAIN}"
- exit 1
- fi
- systemctl enable docker
- systemctl start docker
- selinux
- }
- pullImage() {
- if [[ "$DOCKER_CMD" = "" ]]; then
- echo -e " ${RED}MTProto未安装,请先安装!${PLAIN}"
- exit 1
- fi
- set -a
- source "$MTG_ENV"
- set +a
- $DOCKER_CMD pull "$MTG_IMAGENAME" > /dev/null
- }
- selinux() {
- if [[ -s /etc/selinux/config ]] && grep 'SELINUX=enforcing' /etc/selinux/config; then
- sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
- setenforce 0
- fi
- }
- firewall() {
- port=$1
- systemctl status firewalld > /dev/null 2>&1
- if [[ $? -eq 0 ]];then
- firewall-cmd --permanent --add-port=$port/tcp
- firewall-cmd --reload
- else
- nl=`iptables -nL | nl | grep FORWARD | awk '{print $1}'`
- if [ "$nl" != "3" ]; then
- iptables -I INPUT -p tcp --dport=$port -j ACCEPT
- else
- res=`ufw status | grep -i inactive`
- if [ "$res" = "" ]; then
- ufw allow $port/tcp
- fi
- fi
- fi
- }
- start() {
- res=`status`
- if [[ $res -lt 3 ]]; then
- echo -e " ${RED}MTProto未安装,请先安装!${PLAIN}"
- return
- fi
- set -a
- source "$MTG_ENV"
- set +a
- if [[ ! -f "$MTG_SECRET" ]]; then
- $DOCKER_CMD run \
- --rm \
- "$MTG_IMAGENAME" \
- generate-secret tls -c "$(openssl rand -hex 16).com" \
- > "$MTG_SECRET"
- fi
- $DOCKER_CMD ps --filter "Name=$MTG_CONTAINER" -aq | xargs -r $DOCKER_CMD rm -fv > /dev/null
- $DOCKER_CMD run \
- -d \
- --restart=unless-stopped \
- --name "$MTG_CONTAINER" \
- --ulimit nofile=51200:51200 \
- -p "$MTG_PORT:3128" \
- "$MTG_IMAGENAME" run "$(cat "$MTG_SECRET")" > /dev/null
- sleep 3
- res=`ss -ntlp| grep ${MTG_PORT} | grep docker`
- if [[ "$res" = "" ]]; then
- docker logs $MTG_CONTAINER | tail
- echo -e " ${RED}$OSNAME 启动docker镜像失败,请到 https://tizi.blog 反馈${PLAIN}"
- exit 1
- else
- colorEcho $BLUE " MTProto启动成功!"
- fi
- }
- stop() {
- res=`status`
- if [[ $res -lt 3 ]]; then
- echo -e " ${RED}MTProto未安装,请先安装!${PLAIN}"
- return
- fi
- set -a
- source "$MTG_ENV"
- set +a
- $DOCKER_CMD stop $MTG_CONTAINER >> /dev/null
- colorEcho $BLUE " MTProto停止成功!"
- }
- showInfo() {
- res=`status`
- if [[ $res -lt 3 ]]; then
- echo -e " ${RED}MTProto未安装,请先安装!${PLAIN}"
- return
- fi
- SECRET=$(cat "$MTG_SECRET")
- set -a
- source "$MTG_ENV"
- set +a
- echo
- echo -e " ${RED}MTProto代理信息:${PLAIN}"
- echo
- echo -n -e " ${BLUE}当前状态:${PLAIN}"
- statusText
- echo -e " ${BLUE}IP:${PLAIN}${RED}$IP${PLAIN}"
- echo -e " ${BLUE}端口:${PLAIN}${RED}$MTG_PORT${PLAIN}"
- echo -e " ${BLUE}密钥:${PLAIN}${RED}$SECRET${PLAIN}"
- echo ""
- echo -e " 如需获取tg://proxy形式的链接,请打开telegrame关注${GREEN}@MTProxybot${PLAIN}生成"
- echo ""
- }
- install() {
- getData
- installDocker
- pullImage
- start
- firewall $MTG_PORT
- showInfo
- }
- update() {
- res=`status`
- if [[ $res -lt 2 ]]; then
- echo -e " ${RED}MTProto未安装,请先安装!${PLAIN}"
- return
- fi
- pullImage
- stop
- start
- showInfo
- }
- uninstall() {
- echo ""
- read -p " 确定卸载MTProto?[y/n]:" answer
- if [[ "$answer" = "y" ]] || [[ "$answer" = "Y" ]]; then
- stop
- rm -rf $MTG_CONFIG
- docker system prune -af
- systemctl stop docker
- systemctl disable docker
- $CMD_REMOVE docker-ce docker-ce-cli containerd.io
- colorEcho $GREEN " 卸载成功"
- fi
- }
- restart() {
- res=`status`
- if [[ $res -lt 3 ]]; then
- echo -e " ${RED}MTProto未安装,请先安装!${PLAIN}"
- return
- fi
- stop
- start
- }
- reconfig()
- {
- res=`status`
- if [[ $res -lt 2 ]]; then
- echo -e " ${RED}MTProto未安装,请先安装!${PLAIN}"
- return
- fi
- getData
- stop
- start
- firewall $MTG_PORT
- showInfo
- }
- showLog() {
- res=`status`
- if [[ $res -lt 3 ]]; then
- echo -e " ${RED}MTProto未安装,请先安装!${PLAIN}"
- return
- fi
- set -a
- source "$MTG_ENV"
- set +a
- $DOCKER_CMD logs $MTG_CONTAINER | tail
- }
- menu() {
- clear
- echo "#############################################################"
- echo -e "# ${RED}MTProto一键安装脚本${PLAIN} #"
- echo "#############################################################"
- echo ""
- echo -e " ${GREEN}1.${PLAIN} 安装MTProto代理"
- echo -e " ${GREEN}2.${PLAIN} 更新MTProto代理"
- echo -e " ${GREEN}3.${PLAIN} 卸载MTProto代理"
- echo " -------------"
- echo -e " ${GREEN}4.${PLAIN} 启动MTProto代理"
- echo -e " ${GREEN}5.${PLAIN} 重启MTProto代理"
- echo -e " ${GREEN}6.${PLAIN} 停止MTProto代理"
- echo " -------------"
- echo -e " ${GREEN}7.${PLAIN} 查看MTProto信息"
- echo -e " ${GREEN}8.${PLAIN} 修改MTProto配置"
- echo -e " ${GREEN}9.${PLAIN} 查看MTProto日志"
- echo " -------------"
- echo -e " ${GREEN}0.${PLAIN} 退出"
- echo
- echo -n " 当前状态:"
- statusText
- echo
- read -p " 请选择操作[0-9]:" answer
- case $answer in
- 0)
- exit 0
- ;;
- 1)
- install
- ;;
- 2)
- update
- ;;
- 3)
- uninstall
- ;;
- 4)
- start
- ;;
- 5)
- restart
- ;;
- 6)
- stop
- ;;
- 7)
- showInfo
- ;;
- 8)
- reconfig
- ;;
- 9)
- showLog
- ;;
- *)
- echo -e " ${RED}请选择正确的操作!${PLAIN}"
- exit 1
- ;;
- esac
- }
- checkSystem
- menu
|