From 2eb319c29e2607829aed3d2b965c40a965ead6df Mon Sep 17 00:00:00 2001 From: Leon Date: Sat, 7 Aug 2021 22:38:18 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=97=A1hhl.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Scripts/sh/hhl.sh | 259 ++++++++++++++++++++++++++++++++++++++++++++++ Scripts/sh/v2p.sh | 10 +- Scripts/sh/v4.sh | 2 +- 3 files changed, 265 insertions(+), 6 deletions(-) create mode 100644 Scripts/sh/hhl.sh diff --git a/Scripts/sh/hhl.sh b/Scripts/sh/hhl.sh new file mode 100644 index 0000000..2c47b1a --- /dev/null +++ b/Scripts/sh/hhl.sh @@ -0,0 +1,259 @@ +#!/usr/bin/env bash + +clear + +echo " + + ▄▄ ▄▄ ▄▄ ▄▄ ▄▄ + ██ ██ ██ ██ ██ + ██ ██ ██ ██ ██ + ████████ ████████ ██ + ██ ██ ██ ██ ██ + ██ ██ ██ ██ ██▄▄▄▄▄▄ + +" + +DOCKER_IMG_NAME="classmatelin/hhl" +JD_PATH="" +SHELL_FOLDER=$(pwd) +CONTAINER_NAME="" +TAG="latest" +NETWORK="bridge" + +HAS_IMAGE=false +EXT_ALL=true +PULL_IMAGE=true +HAS_CONTAINER=false +DEL_CONTAINER=true +INSTALL_WATCH=false +ENABLE_WEB_PANEL=true +ENABLE_HANGUP=true +OLD_IMAGE_ID="" + +log() { + echo -e "\e[32m\n$1 \e[0m\n" +} + +inp() { + echo -e "\e[33m\n$1 \e[0m\n" +} + +opt(){ + echo -n -e "\e[36m输入您的选择->\e[0m" +} + +warn() { + echo -e "\e[31m$1 \e[0m\n" +} + +cancelrun() { + if [ $# -gt 0 ]; then + echo -e "\e[31m $1 \e[0m" + fi + exit 1 +} + +docker_install() { + echo "检测 Docker......" + if [ -x "$(command -v docker)" ]; then + echo "检测到 Docker 已安装!" + else + if [ -r /etc/os-release ]; then + lsb_dist="$(. /etc/os-release && echo "$ID")" + fi + if [ $lsb_dist == "openwrt" ]; then + echo "openwrt 环境请自行安装 docker" + exit 1 + else + echo "安装 docker 环境..." + curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun + echo "安装 docker 环境...安装完成!" + systemctl enable docker + systemctl start docker + fi + fi +} + +# 配置文件保存目录 +set_savedir(){ +echo -n -e "\e[33m\n一、请输入配置文件保存的绝对路径(示例:/root),回车默认为当前目录:\e[0m" +read jd_path +if [ -z "$jd_path" ]; then + JD_PATH=$SHELL_FOLDER +elif [ -d "$jd_path" ]; then + JD_PATH=$jd_path +else + mkdir -p $jd_path + JD_PATH=$jd_path +fi +CONF_PATH=$JD_PATH/hhl/conf +LOG_PATH=$JD_PATH/hhl/logs +SHELL_PATH=$JD_PATH/hhl/shell +TOOL_PATH=$JD_PATH/hhl/tools +} + +docker_install +warn "项目地址:https://github.com/ClassmateLin/jd_scripts" + +inp "选择你想拉取的 hhl 镜像:\n1) classmatelin/hhl[默认]\n2) classmatelin/hhl-n1" +opt +read image +if [ "$image" = "2" ]; then + DOCKER_IMG_NAME="classmatelin/hhl-n1" +fi + +inp "是否将目录映射到外部:\n1) 映射[默认]\n2) 不映射" +opt +read ext_all +if [ "$ext_all" = "2" ]; then + EXT_ALL=false +else + set_savedir +fi + +# 检测镜像是否存在 +if [ ! -z "$(docker images -q $DOCKER_IMG_NAME:$TAG 2> /dev/null)" ]; then + HAS_IMAGE=true + OLD_IMAGE_ID=$(docker images -q --filter reference=$DOCKER_IMG_NAME:$TAG) + inp "检测到先前已经存在的镜像,是否拉取最新的镜像:\n1) 拉取[默认]\n2) 不拉取" + opt + read update + if [ "$update" = "2" ]; then + PULL_IMAGE=false + fi +fi + +# 检测容器是否存在 +check_container_name() { + if [ ! -z "$(docker ps -a | grep $CONTAINER_NAME 2> /dev/null)" ]; then + HAS_CONTAINER=true + inp "检测到先前已经存在的容器,是否删除先前的容器:\n1) 删除[默认]\n2) 不删除" + opt + read update + if [ "$update" = "2" ]; then + PULL_IMAGE=false + inp "您选择了不删除之前的容器,需要重新输入容器名称" + input_container_name + fi + fi +} + +# 容器名称 +input_container_name() { + echo -n -e "\e[33m\n二、请输入要创建的 Docker 容器名称[默认为:hhl]->\e[0m" + read container_name + if [ -z "$container_name" ]; then + CONTAINER_NAME="hhl" + else + CONTAINER_NAME=$container_name + fi + check_container_name +} +input_container_name + +# 是否安装 WatchTower +inp "是否安装 containrrr/watchtower 自动更新 Docker 容器:\n1) 安装\n2) 不安装[默认]" +opt +read watchtower +if [ "$watchtower" = "1" ]; then + INSTALL_WATCH=true +fi + +inp "请选择容器的网络类型:\n1) host\n2) bridge[默认]" +opt +read net +if [ "$net" = "1" ]; then + NETWORK="host" + CHANGE_NETWORK="--network $NETWORK" +else + CHANGE_NETWORK="--network $NETWORK" +fi + +# 配置已经创建完成,开始执行 +if [ $EXT_ALL = true ]; then + log "1.开始创建配置文件目录" + PATH_LIST=($CONF_PATH $LOG_PATH $SHELL_PATH $TOOL_PATH) + for i in ${PATH_LIST[@]}; do + mkdir -p $i + done + if [ $? -ne 0 ] ; then + cancelrun "** 错误:目录创建错误请重试!" + fi +fi + +if [ $HAS_CONTAINER = true ] && [ $DEL_CONTAINER = true ]; then + log "2.1.删除先前的容器" + docker stop $CONTAINER_NAME >/dev/null + docker rm $CONTAINER_NAME >/dev/null +fi + +if [ $HAS_IMAGE = true ] && [ $PULL_IMAGE = true ]; then + if [ ! -z "$OLD_IMAGE_ID" ] && [ $HAS_CONTAINER = true ] && [ $DEL_CONTAINER = true ]; then + log "2.2.删除旧的镜像" + docker image rm $OLD_IMAGE_ID + fi + log "2.3.开始拉取最新的镜像" + docker pull $DOCKER_IMG_NAME:$TAG + if [ $? -ne 0 ] ; then + cancelrun "** 错误:拉取不到镜像!" + fi +fi + + +log "3.开始创建容器并执行" +run_v(){ + docker run -dit \ + -t \ + -v $CONF_PATH:/scripts/conf \ + -v $LOG_PATH:/scripts/logs \ + -v $SHELL_PATH:/scripts/shell \ + -v $TOOL_PATH:/scripts/tools \ + --name $CONTAINER_NAME \ + --restart always \ + $CHANGE_NETWORK \ + $DOCKER_IMG_NAME:$TAG +} +run_nov(){ + docker run -dit \ + -t \ + --name $CONTAINER_NAME \ + --restart always \ + $CHANGE_NETWORK \ + $DOCKER_IMG_NAME:$TAG +} +if [ $EXT_ALL = true ]; then + run_v +else + run_nov +fi + +if [ $? -ne 0 ] ; then + cancelrun "** 错误:容器创建失败,多数由于 docker 空间不足引起,请检查!" +fi + +if [ $INSTALL_WATCH = true ]; then + log "3.1.开始创建容器并执行" + docker run -d \ + --name watchtower \ + --restart always \ + -v /var/run/docker.sock:/var/run/docker.sock \ + containrrr/watchtower -c\ + --schedule "13,14,15 3 * * * *" \ + $CONTAINER_NAME +fi + +# 检查 config 文件是否存在 +if [ ! -f "$CODE_DIR/conf/config.yaml" ]; then + docker cp $CONTAINER_NAME:/scripts/conf/config.yaml $CONFIG_PATH/config.yaml + if [ $? -ne 0 ] ; then + cancelrun "** 错误:找不到配置文件!" + fi + fi + +log "4.下面列出所有容器" +docker ps + +log "5.薅薅乐使用说明:https://github.com/ClassmateLin/jd_scripts#readme" + + +log "enjoy!!!" \ No newline at end of file diff --git a/Scripts/sh/v2p.sh b/Scripts/sh/v2p.sh index b6945ba..4d9d79b 100644 --- a/Scripts/sh/v2p.sh +++ b/Scripts/sh/v2p.sh @@ -17,7 +17,7 @@ DOCKER_IMG_NAME="elecv2/elecv2p" V2P_PATH="" SHELL_FOLDER=$(pwd) CONTAINER_NAME="" -TAG="" +TAG="latest" NETWORK="bridge" V2P_PORT=8100 # webUI 后台管理界面。添加规则/JS 文件管理/定时任务管理/MITM 证书等 HTTP_PORT=8101 # ANYPROXY HTTP 代理端口。(代理端口不是网页,不能通过浏览器直接访问) @@ -104,9 +104,9 @@ opt read architecture architecture=${image:-'1'} if [ "$architecture" = "2" ]; then - TAG=":arm64" + TAG="arm64" elif [ "$architecture" = "3" ]; then - TAG=":arm32" + TAG="arm32" fi inp "是否将目录映射到外部:\n1) 映射[默认]\n2) 不映射" @@ -260,7 +260,7 @@ run_v(){ --name $CONTAINER_NAME \ --restart always \ $CHANGE_NETWORK \ - $DOCKER_IMG_NAME$TAG + $DOCKER_IMG_NAME:$TAG } run_nov(){ docker run -dit \ @@ -272,7 +272,7 @@ run_nov(){ --name $CONTAINER_NAME \ --restart always \ $CHANGE_NETWORK \ - $DOCKER_IMG_NAME$TAG + $DOCKER_IMG_NAME:$TAG } if [ $EXT_ALL = true ]; then run_v diff --git a/Scripts/sh/v4.sh b/Scripts/sh/v4.sh index 17c9418..65f6481 100644 --- a/Scripts/sh/v4.sh +++ b/Scripts/sh/v4.sh @@ -101,7 +101,7 @@ OWN_PATH=$JD_PATH/v4/own SCRIPT_PATH=$JD_PATH/v4/scripts DIY_PATH=$JD_PATH/v4/diy -inp "选择你想拉取的 V4 镜像:\n1) annyooo/jd[默认]\n2) jiulan/jd:test(备份 nevinee/jd:v4)\n3) jiulan/jd:v4\n4) jiulan/jd:v4_arm64" +inp "选择你想拉取的 V4 镜像:\n1) annyooo/jd:v4_bot[默认]\n2) jiulan/jd:test(备份 nevinee/jd:v4)\n3) jiulan/jd:v4\n4) jiulan/jd:v4_arm64" opt read image image=${image:-'1'}