fscarmen【Sing-box 全家桶】
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
test/platform.sh

173 lines
6.6 KiB

#!/bin/bash
# 更新日期 2022-10-30
PLATFORM=("watchtower" "traffmonetizer" "bitping" "repocket" "peer2profit" "psclient")
REPOSITORY=("containrrr/watchtower" "traffmonetizer/cli" "bitping/bitping-node" "repocket/repocket" "peer2profit/peer2profit_linux" "packetstream/psclient")
PLATFORM_NUM="${#PLATFORM[*]}"
# 自定义字体彩色,read 函数,安装依赖函数
red() { echo -e "\033[31m\033[01m$1$2\033[0m"; }
green() { echo -e "\033[32m\033[01m$1$2\033[0m"; }
yellow() { echo -e "\033[33m\033[01m$1$2\033[0m"; }
reading() { read -rp "$(green "$1")" "$2"; }
# 必须以root运行脚本
check_root() {
[ $(id -u) != 0 ] && red " The script must be run as root, you can enter sudo -i and then download and run again. \n" && exit 1
}
# 判断系统,并选择相应的指令集
check_operating_system() {
CMD=("$(grep -i pretty_name /etc/os-release 2>/dev/null | cut -d \" -f2)"
"$(hostnamectl 2>/dev/null | grep -i system | cut -d : -f2)"
"$(lsb_release -sd 2>/dev/null)" "$(grep -i description /etc/lsb-release 2>/dev/null | cut -d \" -f2)"
"$(grep . /etc/redhat-release 2>/dev/null)"
"$(grep . /etc/issue 2>/dev/null | cut -d \\ -f1 | sed '/^[ ]*$/d')"
)
for i in "${CMD[@]}"; do SYS="$i" && [[ -n $SYS ]] && break; done
REGEX=("debian" "ubuntu" "centos|red hat|kernel|oracle linux|amazon linux|alma|rocky")
RELEASE=("Debian" "Ubuntu" "CentOS")
PACKAGE_UPDATE=("apt -y update" "apt -y update" "yum -y update")
PACKAGE_INSTALL=("apt -y install" "apt -y install" "yum -y install")
PACKAGE_UNINSTALL=("apt -y autoremove" "apt -y autoremove" "yum -y autoremove")
for ((int = 0; int < ${#REGEX[@]}; int++)); do
[[ $(tr '[:upper:]' '[:lower:]' <<< "$SYS") =~ ${REGEX[int]} ]] && SYSTEM="${RELEASE[int]}" && break
done
[ -z "$SYSTEM" ] && red " ERROR: The script supports Debian, Ubuntu, CentOS or Alpine systems only. \n" && exit 1
}
# 判断宿主机的 IPv4 或双栈情况,没有拉取不了 docker
check_ipv4() {
[[ ! $(curl -s4m8 ip.sb) =~ ^([0-9]{1,3}\.){3} ]] && red " ERROR:The host must have IPv4. \n" && exit 1
}
# 查是否已经安装容器
check_install() {
[ $(type -p docker) ] && [[ $(docker ps -a) =~ $CONTAIN_NAME ]] && red " Repocket has been installed. The script exits. \n" && exit 1
}
# 判断 CPU 架构
check_arch() {
ARCHITECTURE=$(uname -m)
[[ ! "$ARCHITECTURE" =~ aarch64|x64|x86_64|amd64 ]] && red " ERROR: Unsupported architecture: $ARCHITECTURE \n" && exit 1 ;;
}
# 选择平台,并输入账户信息
choose_platform() {
until [[ "$CHOOSE" = [1-$((PLATFORM_NUM - 1 ))] ]]; do
yellow "\n Install or change account information:\n 1. Traffmonetizer\n 2. Bitping\n 3. Repocket\n 4. Peer2profit\n 5. PacketStream\n " && reading " Choose [1-$((PLATFORM_NUM - 1 ))]: " CHOOSE
done
[[ "$CHOOSE" = [23] && ! "$ARCHITECTURE" =~ x64|x86_64|amd64 ]] && red " ERROR: ${PLATFORM[$CHOOSE]} support amd64 only. \n" && exit 1
case "$CHOOSE" in
1 ) case "$ARCHITECTURE" in
aarch64 ) ARCH=arm64v8 ;;
x64|x86_64|amd64 ) ARCH=latest ;;
esac
[ -z "$TMTOKEN" ] && reading " Enter your Traffmonetizer token: " TMTOKEN
[ -z "$TMTOKEN" ] && red " ERROR: Wrong account message. \n" && exit 1 ;;
2 ) ;;
3 ) [ -z "$EMAIL" ] && reading " Enter your Email: " EMAIL
[ -z "$PASSWORD" ] && reading " Enter your password: " PASSWORD
[[ -z "$EMAIL" || -z "$PASSWORD" ]] && red " ERROR: Wrong account message. \n" && exit 1 ;;
4 ) [ -z "$EMAIL" ] && reading " Enter your Email: " EMAIL
[ -z "$EMAIL" ] && red " ERROR: Wrong account message. \n" && exit 1 ;;
5 ) [ -z "$CID" ] && reading " Enter your CID: " CID
[ -z "$CID" ] && red " ERROR: Wrong account message. \n" && exit 1 ;;
* ) red " ERROR: Wrong choose. \n" && unset CHOOSE && choose_platform ;;
esac
}
container_build() {
build_1() {
docker rm -f ${PLATFORM[$CHOOSE]} 2>/dev/null || true && docker run -d --name ${PLATFORM[$CHOOSE]} --restart=always ${REPOSITORY[$CHOOSE]}:$ARCH start accept --token "$TMTOKEN"
}
build_2() {
mkdir -p $HOME/.bitping/
docker rm -f ${PLATFORM[$CHOOSE]} 2>/dev/null || true && docker run -it --name ${PLATFORM[$CHOOSE]} --mount type=bind,source="$HOME/.bitping/",target=/root/.bitping ${REPOSITORY[$CHOOSE]}
}
build_3() {
docker rm -f ${PLATFORM[$CHOOSE]} 2>/dev/null || true && docker run -d --name ${PLATFORM[$CHOOSE]} --restart=always -e RP_EMAIL=$EMAIL -e RP_PASSWORD=$PASSWORD ${REPOSITORY[$CHOOSE]}
}
build_4() {
export P2P_EMAIL=$EMAIL
docker rm -f ${PLATFORM[$CHOOSE]} 2>/dev/null || true && docker run -d --name ${PLATFORM[$CHOOSE]} --restart always -e P2P_EMAIL=$P2P_EMAIL ${REPOSITORY[$CHOOSE]}
}
build_5() {
docker rm -f ${PLATFORM[$CHOOSE]} 2>/dev/null || true && docker run -d --name ${PLATFORM[$CHOOSE]} --restart always -e CID=$CID ${REPOSITORY[$CHOOSE]}
}
# 宿主机安装 docker
if ! systemctl is-active docker >/dev/null 2>&1; then
yellow "\n Install docker"
if [ $SYSTEM = "CentOS" ]; then
${PACKAGE_INSTALL[int]} yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
${PACKAGE_INSTALL[int]} docker-ce docker-ce-cli containerd.io
systemctl enable --now docker
else
${PACKAGE_INSTALL[int]} docker.io
fi
fi
# 创建容器
yellow "\n Create the ${PLATFORM[$CHOOSE]} container. \n"
build_$CHOOSE
}
# 安装 watchtower ,以实时同步官方最新镜像
towerwatch_build() {
[[ ! $(docker ps -a) =~ 'watchtower' ]] && yellow " Install Watchtower. \n" && docker run -d --name watchtower --restart always -p 2095:8080 -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup
}
# 显示结果
result() {
docker ps -a | grep -q "${PLATFORM[$CHOOSE]}" && docker ps -a | grep -q "watchtower" && green " Install success. \n" || red " install fail. \n"
}
# 卸载
uninstall() {
# 限定输入范围
until [[ "$REMOVE" = [0-$PLATFORM_NUM] ]]; do
yellow "\n 0. Watchtower\n 1. Traffmonetizer\n 2. Bitping\n 3. Repocket\n 4. Peer2profit\n 5. PacketStream\n 6. Above all\n " && reading " Remove choose [0-${#PLATFORM[*]}]: " REMOVE
done
if [ "$REMOVE" = "${#PLATFORM[*]}" ]; then
docker rm -f ${PLATFORM[*]} 2>/dev/null
docker rmi -f ${REPOSITORY[*]} 2>/dev/null
else
docker rm -f ${PLATFORM[$REMOVE]} 2>/dev/null
docker rmi -f ${REPOSITORY[$REMOVE]} 2>/dev/null
fi
green "\n Uninstall containers and images complete. \n"
exit 0
}
# 主程序1
check_root
check_operating_system
check_ipv4
check_arch
# 传参
while getopts "Uu" OPTNAME; do
case "$OPTNAME" in
'U'|'u' ) uninstall ;;
esac
done
# 主程序2
choose_platform
container_build
towerwatch_build
result