diff --git a/profiles/mac/profile b/profiles/mac/profile index 4bd62cd..bbaafe4 100644 --- a/profiles/mac/profile +++ b/profiles/mac/profile @@ -1,19 +1,19 @@ -alias l='ls -lhF' -alias ll=l -alias la='ls -AlhF' - -export http_proxyserver="http://127.0.0.1:10809" - -function set-proxy() { - if [[ $1 == "on" ]]; then - export HTTP_PROXY=$http_proxyserver - export HTTPS_PROXY=$http_proxyserver - elif [[ $1 == "off" ]]; then - unset HTTP_PROXY HTTPS_PROXY - fi - - echo - echo "HTTP_PROXY=$HTTP_PROXY" - echo "HTTPS_PROXY=$HTTPS_PROXY" - echo +alias l='ls -lhF' +alias ll=l +alias la='ls -AlhF' + +export http_proxyserver="http://127.0.0.1:10809" + +function set-proxy() { + if [[ $1 == "on" ]]; then + export HTTP_PROXY=$http_proxyserver + export HTTPS_PROXY=$http_proxyserver + elif [[ $1 == "off" ]]; then + unset HTTP_PROXY HTTPS_PROXY + fi + + echo + echo "HTTP_PROXY=$HTTP_PROXY" + echo "HTTPS_PROXY=$HTTPS_PROXY" + echo } \ No newline at end of file diff --git a/profiles/win/profile b/profiles/win/profile index b7a39d1..e088334 100644 --- a/profiles/win/profile +++ b/profiles/win/profile @@ -4,9 +4,9 @@ alias ll=l alias open=explorer export LC_ALL=zh_CN.utf-8 -export http_proxyserver=http://127.0.0.1:10809 +export http_proxyserver="http://127.0.0.1:10809" -function set-proxy() { +function set_proxy() { if [[ $1 == "on" ]]; then export HTTP_PROXY=$http_proxyserver export HTTPS_PROXY=$http_proxyserver @@ -56,9 +56,10 @@ function c3_build() { echo " - Deleting CMakeFiles ..." && rm -rf CMakeFiles echo " - Deleting Makefile ..." && rm -f Makefile echo " - Deleting cmake_install.cmake ..." && rm -f cmake_install.cmake + echo " - Deleting compile_commands.json ..." && rm -f compile_commands.json echo " - Deleting augustus.* ..." && rm -f augustus.* echo " - Deleting res ..." && rm -rf assets maps echo " - Deleting libs ..." && rm -rf SDL2* echo " - Deleting Logs ..." && rm -rf *log*.txt fi -} \ No newline at end of file +} diff --git a/scripts/connect b/scripts/connect index aeecdf9..d99d2f6 100755 --- a/scripts/connect +++ b/scripts/connect @@ -1,177 +1,177 @@ -#!/bin/bash - -GREEN='\033[0;32m' -RED='\033[0;31m' -BLUE='\033[0;34m' -YELLOW='\033[0;33m' -UNDERLINE='\033[4m' # 下划线 -NC='\033[0m' # No Color - -function print_err() { - echo -e "\n[${RED}Err${NC}] $@" -} - -function print_info() { - echo -e "\n[${GREEN}INFO${NC}] $@" -} - -declare -A servers -servers["yact"]="ssh root@172.50.10.83" -servers["tw"]="ssh root@tw.xmdgg.xyz" -servers["hk"]="ssh root@hk.xmdgg.xyz" -servers["us"]="ssh root@us.xmdgg.xyz" -servers["ya"]="ssh -p 7189 gaohengyi@jumpserver.yacloud.net" -servers["u1"]="ssh root@u1" -servers["dev"]="ssh root@125.64.33.85" - -function help() { - echo - echo "Usage:" - echo -e " 1.SSH to server: con (${GREEN}-C${NC}|${GREEN}--connect-host${NC} can be omitted) [NAME]" - echo -e " Options:" - echo -e " -u|--user [USER] Overwrite default user" - echo -e " -p|--port [PORT] Overwrite default port\n" - echo -e " 2.Remove know_hosts: con ${GREEN}-R${NC}|${GREEN}--remove-known-host${NC} [NAME]" - echo "" - echo "Available servers:" - for name in "${!servers[@]}"; do - sshcmd="${servers[$name]}" - srv=($(parse_ssh_string $sshcmd)) - port=${srv[0]} - user=${srv[1]} - host=${srv[2]} - - printf "${GREEN}%-6s${NC}" "* $name" - printf " -> " - printf "${NC}%-24s${NC}" "$user@$host" - printf "${YELLOW}%-16s${NC}\n" " ssh_port:$port" - done - echo -} - -# parse_ssh_string: Parse ssh command to port, user, port -# -# - e.g: result=($(parse_ssh_string "ssh -p 2432 gaofei@192.168.137.105")) -# -# - params: string (e.g: ssh -p 2222 root@192.168.137.101) -# - return: array (port[default:22] user host) -function parse_ssh_string() { - local str="$@" - local port=22 # 默认端口 - local user="" - local host="" - - # 使用正则表达式解析字符串 - if [[ $str =~ -p[[:space:]]([0-9]+) ]]; then - port=${BASH_REMATCH[1]} - fi - - if [[ $str =~ ([^[:space:]]+)@([a-zA-Z0-9.-]+) ]]; then - user=${BASH_REMATCH[1]} - host=${BASH_REMATCH[2]} - fi - - # 将结果存储到数组 - local result=("$port" "$user" "$host") - echo "${result[@]}" -} - -function ssh_to_server() { - if [[ -z $1 ]]; then - print_err "server name not provided." - exit 1 - fi - - user="" - port="" - hostname="" - - while [[ "$#" -gt 0 ]]; do - case $1 in - -u | --user) - user=$2 - shift 2 - ;; - -p | --port) - port=$2 - shift 2 - ;; - *) - hostname=$1 - shift - ;; - esac - done - - for name in "${!servers[@]}"; do - if [[ $hostname == $name ]]; then - sshcmd="${servers[$name]}" - srv=($(parse_ssh_string $sshcmd)) - if [[ -z $port ]]; then - port=${srv[0]} - fi - - if [[ -z $user ]]; then - user=${srv[1]} - fi - - host=${srv[2]} - - cmd="" - if [[ "$port" -eq "22" ]]; then - cmd="ssh $user@$host" - else - cmd="ssh -p $port $user@$host" - fi - - print_info "Executing: $cmd" - eval $cmd - exit $? - fi - done - - print_err "server not found: $hostname" - exit 1 -} - -function remove_known_host() { - target_host=$1 - for name in "${!servers[@]}"; do - if [[ $1 == $name ]]; then - sshcmd="${servers[$name]}" - server=($(parse_ssh_string $sshcmd)) - target_host=${server[2]} - break - fi - done - - cmd="ssh-keygen -R $target_host" - print_info "Executing $cmd" - eval $cmd - exit $? -} - -function main() { - if [[ -z $1 || $1 == "-h" || $1 == "--help" ]]; then - help - exit 0 - fi - - while [[ "$#" -gt 0 ]]; do - case $1 in - -R | --remove-known-host) - shift 1 - remove_known_host $@ - ;; - -C | --connect-host) - shift 1 - ssh_to_server $@ - ;; - *) - ssh_to_server $@ - ;; - esac - done -} - -main $@ +#!/bin/bash + +GREEN='\033[0;32m' +RED='\033[0;31m' +BLUE='\033[0;34m' +YELLOW='\033[0;33m' +UNDERLINE='\033[4m' # 下划线 +NC='\033[0m' # No Color + +function print_err() { + echo -e "\n[${RED}Err${NC}] $@" +} + +function print_info() { + echo -e "\n[${GREEN}INFO${NC}] $@" +} + +declare -A servers +servers["yact"]="ssh root@172.50.10.83" +servers["tw"]="ssh root@tw.xmdgg.xyz" +servers["hk"]="ssh root@hk.xmdgg.xyz" +servers["us"]="ssh root@us.xmdgg.xyz" +servers["ya"]="ssh -p 7189 gaohengyi@jumpserver.yacloud.net" +servers["u1"]="ssh root@u1" +servers["dev"]="ssh root@125.64.33.85" + +function help() { + echo + echo "Usage:" + echo -e " 1.SSH to server: con (${GREEN}-C${NC}|${GREEN}--connect-host${NC} can be omitted) [NAME]" + echo -e " Options:" + echo -e " -u|--user [USER] Overwrite default user" + echo -e " -p|--port [PORT] Overwrite default port\n" + echo -e " 2.Remove know_hosts: con ${GREEN}-R${NC}|${GREEN}--remove-known-host${NC} [NAME]" + echo "" + echo "Available servers:" + for name in "${!servers[@]}"; do + sshcmd="${servers[$name]}" + srv=($(parse_ssh_string $sshcmd)) + port=${srv[0]} + user=${srv[1]} + host=${srv[2]} + + printf "${GREEN}%-6s${NC}" "* $name" + printf " -> " + printf "${NC}%-24s${NC}" "$user@$host" + printf "${YELLOW}%-16s${NC}\n" " ssh_port:$port" + done + echo +} + +# parse_ssh_string: Parse ssh command to port, user, port +# +# - e.g: result=($(parse_ssh_string "ssh -p 2432 gaofei@192.168.137.105")) +# +# - params: string (e.g: ssh -p 2222 root@192.168.137.101) +# - return: array (port[default:22] user host) +function parse_ssh_string() { + local str="$@" + local port=22 # 默认端口 + local user="" + local host="" + + # 使用正则表达式解析字符串 + if [[ $str =~ -p[[:space:]]([0-9]+) ]]; then + port=${BASH_REMATCH[1]} + fi + + if [[ $str =~ ([^[:space:]]+)@([a-zA-Z0-9.-]+) ]]; then + user=${BASH_REMATCH[1]} + host=${BASH_REMATCH[2]} + fi + + # 将结果存储到数组 + local result=("$port" "$user" "$host") + echo "${result[@]}" +} + +function ssh_to_server() { + if [[ -z $1 ]]; then + print_err "server name not provided." + exit 1 + fi + + user="" + port="" + hostname="" + + while [[ "$#" -gt 0 ]]; do + case $1 in + -u | --user) + user=$2 + shift 2 + ;; + -p | --port) + port=$2 + shift 2 + ;; + *) + hostname=$1 + shift + ;; + esac + done + + for name in "${!servers[@]}"; do + if [[ $hostname == $name ]]; then + sshcmd="${servers[$name]}" + srv=($(parse_ssh_string $sshcmd)) + if [[ -z $port ]]; then + port=${srv[0]} + fi + + if [[ -z $user ]]; then + user=${srv[1]} + fi + + host=${srv[2]} + + cmd="" + if [[ "$port" -eq "22" ]]; then + cmd="ssh $user@$host" + else + cmd="ssh -p $port $user@$host" + fi + + print_info "Executing: $cmd" + eval $cmd + exit $? + fi + done + + print_err "server not found: $hostname" + exit 1 +} + +function remove_known_host() { + target_host=$1 + for name in "${!servers[@]}"; do + if [[ $1 == $name ]]; then + sshcmd="${servers[$name]}" + server=($(parse_ssh_string $sshcmd)) + target_host=${server[2]} + break + fi + done + + cmd="ssh-keygen -R $target_host" + print_info "Executing $cmd" + eval $cmd + exit $? +} + +function main() { + if [[ -z $1 || $1 == "-h" || $1 == "--help" ]]; then + help + exit 0 + fi + + while [[ "$#" -gt 0 ]]; do + case $1 in + -R | --remove-known-host) + shift 1 + remove_known_host $@ + ;; + -C | --connect-host) + shift 1 + ssh_to_server $@ + ;; + *) + ssh_to_server $@ + ;; + esac + done +} + +main $@ diff --git a/x/.gitignore b/x/.gitignore index 0ded739..d0ea7f9 100644 --- a/x/.gitignore +++ b/x/.gitignore @@ -1,3 +1,3 @@ -Caddyfile -config.yaml -bin +Caddyfile +config.yaml +bin diff --git a/x/README.md b/x/README.md index 3987e41..352f809 100644 --- a/x/README.md +++ b/x/README.md @@ -1,40 +1,40 @@ -# Verion 0.3 - -## QUICK START - -1. Set variable: `DOMAIN` and `TAG` - -```shell -export DOMAIN=xxx.xxx -export TAG=v0.4 -``` - -2. Start - -#### server - -- Github: - -```shell -bash <(curl -fsSL https://raw.githubusercontent.com/xxoommd/magic/main/x/quick_server.sh) -``` - -- Gitea: - -```shell -bash <(curl -fsSL https://gitee.com/xxoommd/magic/raw/main/x/quick_server.sh) -``` - -#### client - -- Github: - -```shell -bash <(curl -fsSL https://raw.githubusercontent.com/xxoommd/magic/main/x/quick_client.sh) -``` - -- Gitea: - -```shell -bash <(curl -fsSL https://gitee.com/xxoommd/magic/raw/main/x/quick_client.sh) -``` +# Verion 0.3 + +## QUICK START + +1. Set variable: `DOMAIN` and `TAG` + +```shell +export DOMAIN=xxx.xxx +export TAG=v0.4 +``` + +2. Start + +#### server + +- Github: + +```shell +bash <(curl -fsSL https://raw.githubusercontent.com/xxoommd/magic/main/x/quick_server.sh) +``` + +- Gitea: + +```shell +bash <(curl -fsSL https://gitee.com/xxoommd/magic/raw/main/x/quick_server.sh) +``` + +#### client + +- Github: + +```shell +bash <(curl -fsSL https://raw.githubusercontent.com/xxoommd/magic/main/x/quick_client.sh) +``` + +- Gitea: + +```shell +bash <(curl -fsSL https://gitee.com/xxoommd/magic/raw/main/x/quick_client.sh) +``` diff --git a/x/quick_client.sh b/x/quick_client.sh index fd0db43..e1d3c9e 100644 --- a/x/quick_client.sh +++ b/x/quick_client.sh @@ -1,124 +1,124 @@ -#!/bin/bash - -GREEN='\033[0;32m' -RED='\033[0;31m' -BLUE='\033[0;34m' -YELLOW='\033[0;33m' -UNDERLINE='\033[4m' # 下划线 -NC='\033[0m' # No Color - -function logerr() { - echo -e "[${RED}ERR${NC}] $1" -} - -function loginfo() { - echo -e "[INFO] $1" -} - -if [[ -z $DOMAIN ]]; then - echo - logerr "env:DOMAIN is not set" - echo - exit 1 -fi - -TAG=${TAG:-latest} - -github_download_url_prefix="https://github.com/xxoommd/magic/releases/download" -gitee_download_url_prefix="https://github.com/xxoommd/ultimate_collection/releases/download" - -naive_bin_name="" -hysteria_bin_name="" - -os_arch=$(uname -m) -if [[ "$OSTYPE" == "linux-gnu"* ]]; then - if [[ $os_arch != "x86_64" ]]; then - logerr "Unsuppored arch: ${YELLOW}${os_arch}"${NC} - exit 1 - fi - - naive_bin_name="naive-linux-amd64" - hysteria_bin_name="hysteria-linux-amd64" -elif [[ "$OSTYPE" == "darwin"* ]]; then - if [[ $os_arch == "x86_64" ]]; then - naive_bin_name="naive-darwin-amd64" - hysteria_bin_name="hysteria-darwin-amd64" - elif [[ $os_arch == "arm64" ]]; then - naive_bin_name="naive-darwin-arm64" - hysteria_bin_name="hysteria-darwin-arm64" - else - logerr "Unsuppored arch: ${YELLOW}${os_arch}"${NC} - exit 1 - fi -elif [[ "$OSTYPE" == "msys"* || "$OSTYPE" == "cygwin"* ]]; then - if [[ $os_arch == "x86_64" ]]; then - naive_bin_name="naive-windows-amd64.exe" - hysteria_bin_name="hysteria-windows-amd64-avx.exe" - else - logerr "Unsuppored arch: ${YELLOW}${os_arch}"${NC} - exit 1 - fi -else - logerr "Unsupported OS: ${YELLOW}$OSTYPE${NC} arch: {YELLOW}$os_arch${NC}" - exit 1 -fi - -if [ -z "$naive_bin_name" ] || [ -z "$hysteria_bin_name" ]; then - logerr "Download URL is null. Naive:$naive_bin_name Hysteria:$hysteria_bin_name" - exit 1 -fi - -function download_bin() { - download_url_naive="${gitee_download_url_prefix}/${TAG}/${naive_bin_name}" - download_url_hysteria="${gitee_download_url_prefix}/${TAG}/${hysteria_bin_name}" - - curl -o ./naive -L $download_url_naive && curl -o ./hysteria -L $download_url_hysteria && chmod +x ./naive ./hysteria -} - -HYSTERIA_CONFIG="./hysteria-config.yaml" -NAIVE_CONFIG="./naive-config.json" - -function gen_hysteria_config() { - - cat >$HYSTERIA_CONFIG <${NAIVE_CONFIG} <$HYSTERIA_CONFIG <${NAIVE_CONFIG} <${CADDY_CONFIG_FILE} <${HY_CONFIG_FILE} </etc/systemd/system/hysteria.service </etc/systemd/system/caddy.service <${CADDY_CONFIG_FILE} <${HY_CONFIG_FILE} </etc/systemd/system/hysteria.service </etc/systemd/system/caddy.service </dev/null 2>&1; then - GO_VER="$(go version)" - echo "[INFO] Go is installed: " $GO_VER - echo - else - echo "[INFO] Go is not installed. Start installing..." - install_go - - if [[ $? != 0 ]]; then - echo -e "[${RED}Err${NC}] Install ${YELLLOW}golang${NC} fail" - exit 1 - fi - fi -} - -function install_go() { - go_ver=$(curl -s https://go.dev/VERSION?m=text | grep go) - echo "[INFO] Downloading ${go_ver}..." - curl -s -L -o /tmp/$go_ver.linux-amd64.tar.gz https://go.dev/dl/${go_ver}.linux-amd64.tar.gz && - sudo tar -xf /tmp/go*.linux-amd64.tar.gz -C /usr/local/ && - rm /tmp/go*.linux-amd64.tar.gz && - echo 'export GOROOT=/usr/local/go' >>~/.profile && - echo 'export PATH=$GOROOT/bin:$PATH' >>~/.profile && - echo 'export GO111MODULE=on' >>~/.profile && - source ~/.profile && echo -e "[INFO] Install golang success:" && go version && echo -} - -function build_caddy() { - export GOOS=$1 - export GOARCH=$2 - export OUTPUT="caddy-${GOOS}-${GOARCH}" - if [[ "$GOOS" == "windows" ]]; then - export OUTPUT=$OUTPUT.exe - fi - cmd="~/go/bin/xcaddy build --output $BIN_PATH/${OUTPUT} --with github.com/caddyserver/forwardproxy@caddy2=github.com/klzgrad/forwardproxy@naive > /dev/null 2>&1" - echo -e "- Building ${GREEN}${OUTPUT}${NC}: ${YELLOW}${cmd}${NC}" - eval ${cmd} -} - -function update_caddy() { - go env -w GO111MODULE=on && - go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest && - build_caddy "linux" "amd64" && - # build_caddy "darwin" "arm64" && - # build_caddy "darwin" "amd64" && - # build_caddy "windows" "amd64" && - chmod +x $BIN_PATH/* && ls -lhF $BIN_PATH/caddy* -} - -function download_naive() { - NAIVE_VERSION=$1 - OS=$2 - ARCH=$3 - OS_N=$4 - ARCH_N=$5 - SUFFIX=${6:-tar.xz} - - target_name="naive-${OS}-${ARCH}.${SUFFIX}" - download_url="https://github.com/klzgrad/naiveproxy/releases/download/${NAIVE_VERSION}/naiveproxy-${NAIVE_VERSION}-${OS_N}-${ARCH_N}.${SUFFIX}" - download_cmd="curl -s -L -o /tmp/${target_name} $download_url" - decompress_cmd="tar -xf /tmp/${target_name} -C /tmp" - mv_cmd="mv /tmp/naiveproxy-${NAIVE_VERSION}-${OS_N}-${ARCH_N}/naive $BIN_PATH/naive-${OS}-${ARCH}" - - if [[ "$SUFFIX" == "zip" ]]; then - decompress_cmd="unzip -q -o -d /tmp /tmp/${target_name}" - mv_cmd="mv /tmp/naiveproxy-${NAIVE_VERSION}-${OS_N}-${ARCH_N}/naive.exe $BIN_PATH/naive-${OS}-${ARCH}.exe" - fi - - echo -e "- Downloading: ${target_name} ..." - - eval $download_cmd && eval $decompress_cmd && eval $mv_cmd - rm -rf /tmp/naive* -} - -function update_naive() { - rm -rf /tmp/naive* - NAIVE_VERSION="v135.0.7049.38-2" - download_naive $NAIVE_VERSION "linux" "amd64" "linux" "x64" && - download_naive $NAIVE_VERSION "darwin" "amd64" "mac" "x64" && - download_naive $NAIVE_VERSION "darwin" "arm64" "mac" "arm64" && - download_naive $NAIVE_VERSION "windows" "amd64" "win" "x64" "zip" && - echo && - chmod +x $BIN_PATH/naive* && ls -lhF $BIN_PATH/naive* -} - -function download_hysteria() { - echo "- Downloading hysteria-linux-amd64-avx ..." && - curl -s -L -o $BIN_PATH/hysteria-linux-amd64-avx https://download.hysteria.network/app/latest/hysteria-linux-amd64-avx && - echo "- Downloading hysteria-darwin-amd64 ..." && - curl -s -L -o $BIN_PATH/hysteria-darwin-amd64 https://download.hysteria.network/app/latest/hysteria-darwin-amd64 && - echo "- Downloading hysteria-darwin-arm64 ..." && - curl -s -L -o $BIN_PATH/hysteria-darwin-arm64 https://download.hysteria.network/app/latest/hysteria-darwin-arm64 && - echo "- Downloading hysteria-windows-amd64-avx.exe ..." && - curl -s -L -o $BIN_PATH/hysteria-windows-amd64-avx.exe https://download.hysteria.network/app/latest/hysteria-windows-amd64-avx.exe && - echo && - chmod +x $BIN_PATH/* && ls -lhF $BIN_PATH/hy* -} - -function main() { - source ~/.profile - - up_caddy=false - up_hy=false - up_naive=false - - if [[ $# -eq 0 ]]; then - up_caddy=true - up_hy=true - up_naive=true - fi - - while [[ $# -gt 0 ]]; do - case $1 in - caddy) - up_caddy=true - ;; - hysteria | hy) - up_hy=true - ;; - naive) - up_naive=true - ;; - all) - up_naive=true - up_caddy=true - up_hy=true - ;; - *) - echo -e "\n[${RED}Err${NC}] Invalid arg: $1\n" - exit 0 - ;; - esac - shift - done - - [ ! -d "$BIN_PATH" ] && mkdir -p $BIN_PATH # 创建./bin目录 - - if ! check_golang; then - echo -e "[${RED}Err${NC}] Check ${YELLLOW}golang${NC} success" - exit 1 - fi - - if [ "$up_caddy" = true ]; then - echo - echo -e "[INFO] Updating ${GREEN}caddy${NC} ..." - if update_caddy; then - echo -e "[INFO] Updating ${GREEN}caddy${NC} success" - else - echo -e "[INFO] Updating ${GREEN}caddy${NC} fail" - exit 1 - fi - echo - fi - - if [ "$up_hy" = true ]; then - echo -e "[INFO] Downloading ${GREEN}hysteria2${NC} ..." - if download_hysteria; then - echo -e "[INFO] Download ${GREEN}hysteria2${NC} success" - else - echo -e "[Err] Download ${GREEN}hysteria2${NC} fail" - exit 1 - fi - echo - fi - - if [ "$up_naive" = true ]; then - echo -e "[INFO] Downloading ${GREEN}naive${NC} ..." - if ! update_naive; then - echo -e "[${RED}ERR${NC}] Download naive fail" - fi - echo - fi -} - -main $@ +#!/bin/bash + +GREEN='\033[0;32m' +RED='\033[0;31m' +BLUE='\033[0;34m' +YELLOW='\033[0;33m' +UNDERLINE='\033[4m' # 下划线 +NC='\033[0m' # No Color + +BIN_PATH="./bin" + +function check_golang() { + echo + echo "[INFO] Checking golang..." + if command -v go >/dev/null 2>&1; then + GO_VER="$(go version)" + echo "[INFO] Go is installed: " $GO_VER + echo + else + echo "[INFO] Go is not installed. Start installing..." + install_go + + if [[ $? != 0 ]]; then + echo -e "[${RED}Err${NC}] Install ${YELLLOW}golang${NC} fail" + exit 1 + fi + fi +} + +function install_go() { + go_ver=$(curl -s https://go.dev/VERSION?m=text | grep go) + echo "[INFO] Downloading ${go_ver}..." + curl -s -L -o /tmp/$go_ver.linux-amd64.tar.gz https://go.dev/dl/${go_ver}.linux-amd64.tar.gz && + sudo tar -xf /tmp/go*.linux-amd64.tar.gz -C /usr/local/ && + rm /tmp/go*.linux-amd64.tar.gz && + echo 'export GOROOT=/usr/local/go' >>~/.profile && + echo 'export PATH=$GOROOT/bin:$PATH' >>~/.profile && + echo 'export GO111MODULE=on' >>~/.profile && + source ~/.profile && echo -e "[INFO] Install golang success:" && go version && echo +} + +function build_caddy() { + export GOOS=$1 + export GOARCH=$2 + export OUTPUT="caddy-${GOOS}-${GOARCH}" + if [[ "$GOOS" == "windows" ]]; then + export OUTPUT=$OUTPUT.exe + fi + cmd="~/go/bin/xcaddy build --output $BIN_PATH/${OUTPUT} --with github.com/caddyserver/forwardproxy@caddy2=github.com/klzgrad/forwardproxy@naive > /dev/null 2>&1" + echo -e "- Building ${GREEN}${OUTPUT}${NC}: ${YELLOW}${cmd}${NC}" + eval ${cmd} +} + +function update_caddy() { + go env -w GO111MODULE=on && + go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest && + build_caddy "linux" "amd64" && + # build_caddy "darwin" "arm64" && + # build_caddy "darwin" "amd64" && + # build_caddy "windows" "amd64" && + chmod +x $BIN_PATH/* && ls -lhF $BIN_PATH/caddy* +} + +function download_naive() { + NAIVE_VERSION=$1 + OS=$2 + ARCH=$3 + OS_N=$4 + ARCH_N=$5 + SUFFIX=${6:-tar.xz} + + target_name="naive-${OS}-${ARCH}.${SUFFIX}" + download_url="https://github.com/klzgrad/naiveproxy/releases/download/${NAIVE_VERSION}/naiveproxy-${NAIVE_VERSION}-${OS_N}-${ARCH_N}.${SUFFIX}" + download_cmd="curl -s -L -o /tmp/${target_name} $download_url" + decompress_cmd="tar -xf /tmp/${target_name} -C /tmp" + mv_cmd="mv /tmp/naiveproxy-${NAIVE_VERSION}-${OS_N}-${ARCH_N}/naive $BIN_PATH/naive-${OS}-${ARCH}" + + if [[ "$SUFFIX" == "zip" ]]; then + decompress_cmd="unzip -q -o -d /tmp /tmp/${target_name}" + mv_cmd="mv /tmp/naiveproxy-${NAIVE_VERSION}-${OS_N}-${ARCH_N}/naive.exe $BIN_PATH/naive-${OS}-${ARCH}.exe" + fi + + echo -e "- Downloading: ${target_name} ..." + + eval $download_cmd && eval $decompress_cmd && eval $mv_cmd + rm -rf /tmp/naive* +} + +function update_naive() { + rm -rf /tmp/naive* + NAIVE_VERSION="v135.0.7049.38-2" + download_naive $NAIVE_VERSION "linux" "amd64" "linux" "x64" && + download_naive $NAIVE_VERSION "darwin" "amd64" "mac" "x64" && + download_naive $NAIVE_VERSION "darwin" "arm64" "mac" "arm64" && + download_naive $NAIVE_VERSION "windows" "amd64" "win" "x64" "zip" && + echo && + chmod +x $BIN_PATH/naive* && ls -lhF $BIN_PATH/naive* +} + +function download_hysteria() { + echo "- Downloading hysteria-linux-amd64-avx ..." && + curl -s -L -o $BIN_PATH/hysteria-linux-amd64-avx https://download.hysteria.network/app/latest/hysteria-linux-amd64-avx && + echo "- Downloading hysteria-darwin-amd64 ..." && + curl -s -L -o $BIN_PATH/hysteria-darwin-amd64 https://download.hysteria.network/app/latest/hysteria-darwin-amd64 && + echo "- Downloading hysteria-darwin-arm64 ..." && + curl -s -L -o $BIN_PATH/hysteria-darwin-arm64 https://download.hysteria.network/app/latest/hysteria-darwin-arm64 && + echo "- Downloading hysteria-windows-amd64-avx.exe ..." && + curl -s -L -o $BIN_PATH/hysteria-windows-amd64-avx.exe https://download.hysteria.network/app/latest/hysteria-windows-amd64-avx.exe && + echo && + chmod +x $BIN_PATH/* && ls -lhF $BIN_PATH/hy* +} + +function main() { + source ~/.profile + + up_caddy=false + up_hy=false + up_naive=false + + if [[ $# -eq 0 ]]; then + up_caddy=true + up_hy=true + up_naive=true + fi + + while [[ $# -gt 0 ]]; do + case $1 in + caddy) + up_caddy=true + ;; + hysteria | hy) + up_hy=true + ;; + naive) + up_naive=true + ;; + all) + up_naive=true + up_caddy=true + up_hy=true + ;; + *) + echo -e "\n[${RED}Err${NC}] Invalid arg: $1\n" + exit 0 + ;; + esac + shift + done + + [ ! -d "$BIN_PATH" ] && mkdir -p $BIN_PATH # 创建./bin目录 + + if ! check_golang; then + echo -e "[${RED}Err${NC}] Check ${YELLLOW}golang${NC} success" + exit 1 + fi + + if [ "$up_caddy" = true ]; then + echo + echo -e "[INFO] Updating ${GREEN}caddy${NC} ..." + if update_caddy; then + echo -e "[INFO] Updating ${GREEN}caddy${NC} success" + else + echo -e "[INFO] Updating ${GREEN}caddy${NC} fail" + exit 1 + fi + echo + fi + + if [ "$up_hy" = true ]; then + echo -e "[INFO] Downloading ${GREEN}hysteria2${NC} ..." + if download_hysteria; then + echo -e "[INFO] Download ${GREEN}hysteria2${NC} success" + else + echo -e "[Err] Download ${GREEN}hysteria2${NC} fail" + exit 1 + fi + echo + fi + + if [ "$up_naive" = true ]; then + echo -e "[INFO] Downloading ${GREEN}naive${NC} ..." + if ! update_naive; then + echo -e "[${RED}ERR${NC}] Download naive fail" + fi + echo + fi +} + +main $@