This commit is contained in:
xxoommd 2025-04-27 09:28:01 +08:00
parent 8b2517b9b1
commit 501cd1ff93
8 changed files with 733 additions and 732 deletions

View File

@ -1,19 +1,19 @@
alias l='ls -lhF' alias l='ls -lhF'
alias ll=l alias ll=l
alias la='ls -AlhF' alias la='ls -AlhF'
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 if [[ $1 == "on" ]]; then
export HTTP_PROXY=$http_proxyserver export HTTP_PROXY=$http_proxyserver
export HTTPS_PROXY=$http_proxyserver export HTTPS_PROXY=$http_proxyserver
elif [[ $1 == "off" ]]; then elif [[ $1 == "off" ]]; then
unset HTTP_PROXY HTTPS_PROXY unset HTTP_PROXY HTTPS_PROXY
fi fi
echo echo
echo "HTTP_PROXY=$HTTP_PROXY" echo "HTTP_PROXY=$HTTP_PROXY"
echo "HTTPS_PROXY=$HTTPS_PROXY" echo "HTTPS_PROXY=$HTTPS_PROXY"
echo echo
} }

View File

@ -4,9 +4,9 @@ alias ll=l
alias open=explorer alias open=explorer
export LC_ALL=zh_CN.utf-8 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 if [[ $1 == "on" ]]; then
export HTTP_PROXY=$http_proxyserver export HTTP_PROXY=$http_proxyserver
export HTTPS_PROXY=$http_proxyserver export HTTPS_PROXY=$http_proxyserver
@ -56,9 +56,10 @@ function c3_build() {
echo " - Deleting CMakeFiles ..." && rm -rf CMakeFiles echo " - Deleting CMakeFiles ..." && rm -rf CMakeFiles
echo " - Deleting Makefile ..." && rm -f Makefile echo " - Deleting Makefile ..." && rm -f Makefile
echo " - Deleting cmake_install.cmake ..." && rm -f cmake_install.cmake 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 augustus.* ..." && rm -f augustus.*
echo " - Deleting res ..." && rm -rf assets maps echo " - Deleting res ..." && rm -rf assets maps
echo " - Deleting libs ..." && rm -rf SDL2* echo " - Deleting libs ..." && rm -rf SDL2*
echo " - Deleting Logs ..." && rm -rf *log*.txt echo " - Deleting Logs ..." && rm -rf *log*.txt
fi fi
} }

View File

@ -1,177 +1,177 @@
#!/bin/bash #!/bin/bash
GREEN='\033[0;32m' GREEN='\033[0;32m'
RED='\033[0;31m' RED='\033[0;31m'
BLUE='\033[0;34m' BLUE='\033[0;34m'
YELLOW='\033[0;33m' YELLOW='\033[0;33m'
UNDERLINE='\033[4m' # 下划线 UNDERLINE='\033[4m' # 下划线
NC='\033[0m' # No Color NC='\033[0m' # No Color
function print_err() { function print_err() {
echo -e "\n[${RED}Err${NC}] $@" echo -e "\n[${RED}Err${NC}] $@"
} }
function print_info() { function print_info() {
echo -e "\n[${GREEN}INFO${NC}] $@" echo -e "\n[${GREEN}INFO${NC}] $@"
} }
declare -A servers declare -A servers
servers["yact"]="ssh root@172.50.10.83" servers["yact"]="ssh root@172.50.10.83"
servers["tw"]="ssh root@tw.xmdgg.xyz" servers["tw"]="ssh root@tw.xmdgg.xyz"
servers["hk"]="ssh root@hk.xmdgg.xyz" servers["hk"]="ssh root@hk.xmdgg.xyz"
servers["us"]="ssh root@us.xmdgg.xyz" servers["us"]="ssh root@us.xmdgg.xyz"
servers["ya"]="ssh -p 7189 gaohengyi@jumpserver.yacloud.net" servers["ya"]="ssh -p 7189 gaohengyi@jumpserver.yacloud.net"
servers["u1"]="ssh root@u1" servers["u1"]="ssh root@u1"
servers["dev"]="ssh root@125.64.33.85" servers["dev"]="ssh root@125.64.33.85"
function help() { function help() {
echo echo
echo "Usage:" echo "Usage:"
echo -e " 1.SSH to server: con (${GREEN}-C${NC}|${GREEN}--connect-host${NC} can be omitted) [NAME]" echo -e " 1.SSH to server: con (${GREEN}-C${NC}|${GREEN}--connect-host${NC} can be omitted) [NAME]"
echo -e " Options:" echo -e " Options:"
echo -e " -u|--user [USER] Overwrite default user" echo -e " -u|--user [USER] Overwrite default user"
echo -e " -p|--port [PORT] Overwrite default port\n" 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 -e " 2.Remove know_hosts: con ${GREEN}-R${NC}|${GREEN}--remove-known-host${NC} [NAME]"
echo "" echo ""
echo "Available servers:" echo "Available servers:"
for name in "${!servers[@]}"; do for name in "${!servers[@]}"; do
sshcmd="${servers[$name]}" sshcmd="${servers[$name]}"
srv=($(parse_ssh_string $sshcmd)) srv=($(parse_ssh_string $sshcmd))
port=${srv[0]} port=${srv[0]}
user=${srv[1]} user=${srv[1]}
host=${srv[2]} host=${srv[2]}
printf "${GREEN}%-6s${NC}" "* $name" printf "${GREEN}%-6s${NC}" "* $name"
printf " -> " printf " -> "
printf "${NC}%-24s${NC}" "$user@$host" printf "${NC}%-24s${NC}" "$user@$host"
printf "${YELLOW}%-16s${NC}\n" " ssh_port:$port" printf "${YELLOW}%-16s${NC}\n" " ssh_port:$port"
done done
echo echo
} }
# parse_ssh_string: Parse ssh command to port, user, port # parse_ssh_string: Parse ssh command to port, user, port
# #
# - e.g: result=($(parse_ssh_string "ssh -p 2432 gaofei@192.168.137.105")) # - 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) # - params: string (e.g: ssh -p 2222 root@192.168.137.101)
# - return: array (port[default:22] user host) # - return: array (port[default:22] user host)
function parse_ssh_string() { function parse_ssh_string() {
local str="$@" local str="$@"
local port=22 # 默认端口 local port=22 # 默认端口
local user="" local user=""
local host="" local host=""
# 使用正则表达式解析字符串 # 使用正则表达式解析字符串
if [[ $str =~ -p[[:space:]]([0-9]+) ]]; then if [[ $str =~ -p[[:space:]]([0-9]+) ]]; then
port=${BASH_REMATCH[1]} port=${BASH_REMATCH[1]}
fi fi
if [[ $str =~ ([^[:space:]]+)@([a-zA-Z0-9.-]+) ]]; then if [[ $str =~ ([^[:space:]]+)@([a-zA-Z0-9.-]+) ]]; then
user=${BASH_REMATCH[1]} user=${BASH_REMATCH[1]}
host=${BASH_REMATCH[2]} host=${BASH_REMATCH[2]}
fi fi
# 将结果存储到数组 # 将结果存储到数组
local result=("$port" "$user" "$host") local result=("$port" "$user" "$host")
echo "${result[@]}" echo "${result[@]}"
} }
function ssh_to_server() { function ssh_to_server() {
if [[ -z $1 ]]; then if [[ -z $1 ]]; then
print_err "server name not provided." print_err "server name not provided."
exit 1 exit 1
fi fi
user="" user=""
port="" port=""
hostname="" hostname=""
while [[ "$#" -gt 0 ]]; do while [[ "$#" -gt 0 ]]; do
case $1 in case $1 in
-u | --user) -u | --user)
user=$2 user=$2
shift 2 shift 2
;; ;;
-p | --port) -p | --port)
port=$2 port=$2
shift 2 shift 2
;; ;;
*) *)
hostname=$1 hostname=$1
shift shift
;; ;;
esac esac
done done
for name in "${!servers[@]}"; do for name in "${!servers[@]}"; do
if [[ $hostname == $name ]]; then if [[ $hostname == $name ]]; then
sshcmd="${servers[$name]}" sshcmd="${servers[$name]}"
srv=($(parse_ssh_string $sshcmd)) srv=($(parse_ssh_string $sshcmd))
if [[ -z $port ]]; then if [[ -z $port ]]; then
port=${srv[0]} port=${srv[0]}
fi fi
if [[ -z $user ]]; then if [[ -z $user ]]; then
user=${srv[1]} user=${srv[1]}
fi fi
host=${srv[2]} host=${srv[2]}
cmd="" cmd=""
if [[ "$port" -eq "22" ]]; then if [[ "$port" -eq "22" ]]; then
cmd="ssh $user@$host" cmd="ssh $user@$host"
else else
cmd="ssh -p $port $user@$host" cmd="ssh -p $port $user@$host"
fi fi
print_info "Executing: $cmd" print_info "Executing: $cmd"
eval $cmd eval $cmd
exit $? exit $?
fi fi
done done
print_err "server not found: $hostname" print_err "server not found: $hostname"
exit 1 exit 1
} }
function remove_known_host() { function remove_known_host() {
target_host=$1 target_host=$1
for name in "${!servers[@]}"; do for name in "${!servers[@]}"; do
if [[ $1 == $name ]]; then if [[ $1 == $name ]]; then
sshcmd="${servers[$name]}" sshcmd="${servers[$name]}"
server=($(parse_ssh_string $sshcmd)) server=($(parse_ssh_string $sshcmd))
target_host=${server[2]} target_host=${server[2]}
break break
fi fi
done done
cmd="ssh-keygen -R $target_host" cmd="ssh-keygen -R $target_host"
print_info "Executing $cmd" print_info "Executing $cmd"
eval $cmd eval $cmd
exit $? exit $?
} }
function main() { function main() {
if [[ -z $1 || $1 == "-h" || $1 == "--help" ]]; then if [[ -z $1 || $1 == "-h" || $1 == "--help" ]]; then
help help
exit 0 exit 0
fi fi
while [[ "$#" -gt 0 ]]; do while [[ "$#" -gt 0 ]]; do
case $1 in case $1 in
-R | --remove-known-host) -R | --remove-known-host)
shift 1 shift 1
remove_known_host $@ remove_known_host $@
;; ;;
-C | --connect-host) -C | --connect-host)
shift 1 shift 1
ssh_to_server $@ ssh_to_server $@
;; ;;
*) *)
ssh_to_server $@ ssh_to_server $@
;; ;;
esac esac
done done
} }
main $@ main $@

6
x/.gitignore vendored
View File

@ -1,3 +1,3 @@
Caddyfile Caddyfile
config.yaml config.yaml
bin bin

View File

@ -1,40 +1,40 @@
# Verion 0.3 # Verion 0.3
## QUICK START ## QUICK START
1. Set variable: `DOMAIN` and `TAG` 1. Set variable: `DOMAIN` and `TAG`
```shell ```shell
export DOMAIN=xxx.xxx export DOMAIN=xxx.xxx
export TAG=v0.4 export TAG=v0.4
``` ```
2. Start 2. Start
#### server #### server
- Github: - Github:
```shell ```shell
bash <(curl -fsSL https://raw.githubusercontent.com/xxoommd/magic/main/x/quick_server.sh) bash <(curl -fsSL https://raw.githubusercontent.com/xxoommd/magic/main/x/quick_server.sh)
``` ```
- Gitea: - Gitea:
```shell ```shell
bash <(curl -fsSL https://gitee.com/xxoommd/magic/raw/main/x/quick_server.sh) bash <(curl -fsSL https://gitee.com/xxoommd/magic/raw/main/x/quick_server.sh)
``` ```
#### client #### client
- Github: - Github:
```shell ```shell
bash <(curl -fsSL https://raw.githubusercontent.com/xxoommd/magic/main/x/quick_client.sh) bash <(curl -fsSL https://raw.githubusercontent.com/xxoommd/magic/main/x/quick_client.sh)
``` ```
- Gitea: - Gitea:
```shell ```shell
bash <(curl -fsSL https://gitee.com/xxoommd/magic/raw/main/x/quick_client.sh) bash <(curl -fsSL https://gitee.com/xxoommd/magic/raw/main/x/quick_client.sh)
``` ```

View File

@ -1,124 +1,124 @@
#!/bin/bash #!/bin/bash
GREEN='\033[0;32m' GREEN='\033[0;32m'
RED='\033[0;31m' RED='\033[0;31m'
BLUE='\033[0;34m' BLUE='\033[0;34m'
YELLOW='\033[0;33m' YELLOW='\033[0;33m'
UNDERLINE='\033[4m' # 下划线 UNDERLINE='\033[4m' # 下划线
NC='\033[0m' # No Color NC='\033[0m' # No Color
function logerr() { function logerr() {
echo -e "[${RED}ERR${NC}] $1" echo -e "[${RED}ERR${NC}] $1"
} }
function loginfo() { function loginfo() {
echo -e "[INFO] $1" echo -e "[INFO] $1"
} }
if [[ -z $DOMAIN ]]; then if [[ -z $DOMAIN ]]; then
echo echo
logerr "env:DOMAIN is not set" logerr "env:DOMAIN is not set"
echo echo
exit 1 exit 1
fi fi
TAG=${TAG:-latest} TAG=${TAG:-latest}
github_download_url_prefix="https://github.com/xxoommd/magic/releases/download" github_download_url_prefix="https://github.com/xxoommd/magic/releases/download"
gitee_download_url_prefix="https://github.com/xxoommd/ultimate_collection/releases/download" gitee_download_url_prefix="https://github.com/xxoommd/ultimate_collection/releases/download"
naive_bin_name="" naive_bin_name=""
hysteria_bin_name="" hysteria_bin_name=""
os_arch=$(uname -m) os_arch=$(uname -m)
if [[ "$OSTYPE" == "linux-gnu"* ]]; then if [[ "$OSTYPE" == "linux-gnu"* ]]; then
if [[ $os_arch != "x86_64" ]]; then if [[ $os_arch != "x86_64" ]]; then
logerr "Unsuppored arch: ${YELLOW}${os_arch}"${NC} logerr "Unsuppored arch: ${YELLOW}${os_arch}"${NC}
exit 1 exit 1
fi fi
naive_bin_name="naive-linux-amd64" naive_bin_name="naive-linux-amd64"
hysteria_bin_name="hysteria-linux-amd64" hysteria_bin_name="hysteria-linux-amd64"
elif [[ "$OSTYPE" == "darwin"* ]]; then elif [[ "$OSTYPE" == "darwin"* ]]; then
if [[ $os_arch == "x86_64" ]]; then if [[ $os_arch == "x86_64" ]]; then
naive_bin_name="naive-darwin-amd64" naive_bin_name="naive-darwin-amd64"
hysteria_bin_name="hysteria-darwin-amd64" hysteria_bin_name="hysteria-darwin-amd64"
elif [[ $os_arch == "arm64" ]]; then elif [[ $os_arch == "arm64" ]]; then
naive_bin_name="naive-darwin-arm64" naive_bin_name="naive-darwin-arm64"
hysteria_bin_name="hysteria-darwin-arm64" hysteria_bin_name="hysteria-darwin-arm64"
else else
logerr "Unsuppored arch: ${YELLOW}${os_arch}"${NC} logerr "Unsuppored arch: ${YELLOW}${os_arch}"${NC}
exit 1 exit 1
fi fi
elif [[ "$OSTYPE" == "msys"* || "$OSTYPE" == "cygwin"* ]]; then elif [[ "$OSTYPE" == "msys"* || "$OSTYPE" == "cygwin"* ]]; then
if [[ $os_arch == "x86_64" ]]; then if [[ $os_arch == "x86_64" ]]; then
naive_bin_name="naive-windows-amd64.exe" naive_bin_name="naive-windows-amd64.exe"
hysteria_bin_name="hysteria-windows-amd64-avx.exe" hysteria_bin_name="hysteria-windows-amd64-avx.exe"
else else
logerr "Unsuppored arch: ${YELLOW}${os_arch}"${NC} logerr "Unsuppored arch: ${YELLOW}${os_arch}"${NC}
exit 1 exit 1
fi fi
else else
logerr "Unsupported OS: ${YELLOW}$OSTYPE${NC} arch: {YELLOW}$os_arch${NC}" logerr "Unsupported OS: ${YELLOW}$OSTYPE${NC} arch: {YELLOW}$os_arch${NC}"
exit 1 exit 1
fi fi
if [ -z "$naive_bin_name" ] || [ -z "$hysteria_bin_name" ]; then if [ -z "$naive_bin_name" ] || [ -z "$hysteria_bin_name" ]; then
logerr "Download URL is null. Naive:$naive_bin_name Hysteria:$hysteria_bin_name" logerr "Download URL is null. Naive:$naive_bin_name Hysteria:$hysteria_bin_name"
exit 1 exit 1
fi fi
function download_bin() { function download_bin() {
download_url_naive="${gitee_download_url_prefix}/${TAG}/${naive_bin_name}" download_url_naive="${gitee_download_url_prefix}/${TAG}/${naive_bin_name}"
download_url_hysteria="${gitee_download_url_prefix}/${TAG}/${hysteria_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 curl -o ./naive -L $download_url_naive && curl -o ./hysteria -L $download_url_hysteria && chmod +x ./naive ./hysteria
} }
HYSTERIA_CONFIG="./hysteria-config.yaml" HYSTERIA_CONFIG="./hysteria-config.yaml"
NAIVE_CONFIG="./naive-config.json" NAIVE_CONFIG="./naive-config.json"
function gen_hysteria_config() { function gen_hysteria_config() {
cat >$HYSTERIA_CONFIG <<EOF cat >$HYSTERIA_CONFIG <<EOF
server: $DOMAIN:8443 server: $DOMAIN:8443
auth: fuckyouall auth: fuckyouall
bandwidth: bandwidth:
up: 100 mbps up: 100 mbps
down: 1000 mbps down: 1000 mbps
socks5: socks5:
listen: 127.0.0.1:21089 listen: 127.0.0.1:21089
http: http:
listen: 127.0.0.1:28080 listen: 127.0.0.1:28080
EOF EOF
} }
function gen_naive_config() { function gen_naive_config() {
echo -e "[INFO] Generate ${GREEN}${NAIVE_CONFIG}${NC} ..." echo -e "[INFO] Generate ${GREEN}${NAIVE_CONFIG}${NC} ..."
cat >${NAIVE_CONFIG} <<EOF cat >${NAIVE_CONFIG} <<EOF
{ {
"listen": "http://127.0.0.1:28081", "listen": "http://127.0.0.1:28081",
"proxy": "quic://xxoommd:fuckyouall@$DOMAIN" "proxy": "quic://xxoommd:fuckyouall@$DOMAIN"
} }
EOF EOF
echo -e "[INFO] Generate Done\n" echo -e "[INFO] Generate Done\n"
} }
function main() { function main() {
if download_bin; then if download_bin; then
if gen_hysteria_config; then if gen_hysteria_config; then
if gen_naive_config; then if gen_naive_config; then
loginfo "ALL SUCCESS. Use: ./naive $NAIVE_CONFIG AND ./hysteria -c $HYSTERIA_CONFIG" loginfo "ALL SUCCESS. Use: ./naive $NAIVE_CONFIG AND ./hysteria -c $HYSTERIA_CONFIG"
exit 0 exit 0
fi fi
fi fi
else else
echo echo
logerr "Download binary fail." logerr "Download binary fail."
echo echo
exit 1 exit 1
fi fi
} }
main $@ main $@

View File

@ -1,178 +1,178 @@
#!/bin/bash #!/bin/bash
GREEN='\033[0;32m' GREEN='\033[0;32m'
RED='\033[0;31m' RED='\033[0;31m'
BLUE='\033[0;34m' BLUE='\033[0;34m'
YELLOW='\033[0;33m' YELLOW='\033[0;33m'
UNDERLINE='\033[4m' # 下划线 UNDERLINE='\033[4m' # 下划线
NC='\033[0m' # No Color NC='\033[0m' # No Color
# 仅root用户执行 # 仅root用户执行
if [ "$(id -u)" -eq 0 ]; then if [ "$(id -u)" -eq 0 ]; then
echo "当前用户是 root" echo "当前用户是 root"
else else
echo -e "${RED}[Err]${NC}当前用户不是 root" echo -e "${RED}[Err]${NC}当前用户不是 root"
exit 1 exit 1
fi fi
# 验证域名格式是否合法 # 验证域名格式是否合法
function is_valid_domain() { function is_valid_domain() {
local str="$1" local str="$1"
# 使用正则表达式匹配合法域名格式 # 使用正则表达式匹配合法域名格式
if [[ $str =~ ^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z]{2,})+$ ]]; then if [[ $str =~ ^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z]{2,})+$ ]]; then
return 0 # 合法返回0 return 0 # 合法返回0
else else
return 1 # 不合法返回1 return 1 # 不合法返回1
fi fi
} }
echo "Enabling BBR..." echo "Enabling BBR..."
echo "net.core.default_qdisc=fq" | tee -a /etc/sysctl.conf echo "net.core.default_qdisc=fq" | tee -a /etc/sysctl.conf
echo "net.ipv4.tcp.congestion_control=bbr" |tee -a /etc/sysctl.conf echo "net.ipv4.tcp.congestion_control=bbr" |tee -a /etc/sysctl.conf
sysctl -p sysctl -p
echo -e "\n[INFO] Validate DOMAN: ${BLUE}${DOMAIN}${NC} ..." echo -e "\n[INFO] Validate DOMAN: ${BLUE}${DOMAIN}${NC} ..."
if [[ -z $DOMAIN ]]; then if [[ -z $DOMAIN ]]; then
echo echo
echo "[${RED}Err${NC}] DOMAIN is not set" echo "[${RED}Err${NC}] DOMAIN is not set"
echo echo
exit 1 exit 1
fi fi
if is_valid_domain "$DOMAIN"; then if is_valid_domain "$DOMAIN"; then
echo -e "[INFO] ${BLUE}${UNDERLINE}$DOMAIN${NC} is a valid domain.\n" echo -e "[INFO] ${BLUE}${UNDERLINE}$DOMAIN${NC} is a valid domain.\n"
else else
echo -e "[${RED}ERR${NC}] ${BLUE}${UNDERLINE}$DOMAIN${NC} is not a valid domain. Abort." echo -e "[${RED}ERR${NC}] ${BLUE}${UNDERLINE}$DOMAIN${NC} is not a valid domain. Abort."
exit 1 exit 1
fi fi
TAG=${TAG:-"latest"} TAG=${TAG:-"latest"}
echo -e "[INFO] Using TAG: ${YELLOW}${TAG}${NC}" echo -e "[INFO] Using TAG: ${YELLOW}${TAG}${NC}"
caddy_download_url="" caddy_download_url=""
hysteria_download_url="" hysteria_download_url=""
if [ "$DOWNLOAD_SRC" = "gitee" ]; then if [ "$DOWNLOAD_SRC" = "gitee" ]; then
echo -e "[INFO] Download from ${YELLOW}Gitee${NC} ..." echo -e "[INFO] Download from ${YELLOW}Gitee${NC} ..."
caddy_download_url="https://gitee.com/xxoommd/magic/releases/download/${TAG}/caddy-linux-amd64" caddy_download_url="https://gitee.com/xxoommd/magic/releases/download/${TAG}/caddy-linux-amd64"
hysteria_download_url="https://gitee.com/xxoommd/magic/releases/download/${TAG}/hysteria-linux-amd64-avx" hysteria_download_url="https://gitee.com/xxoommd/magic/releases/download/${TAG}/hysteria-linux-amd64-avx"
else else
echo -e "[INFO] Download from ${YELLOW}Github${NC} ..." echo -e "[INFO] Download from ${YELLOW}Github${NC} ..."
caddy_download_url="https://github.com/xxoommd/magic/releases/download/${TAG}/caddy-linux-amd64" caddy_download_url="https://github.com/xxoommd/magic/releases/download/${TAG}/caddy-linux-amd64"
hysteria_download_url="https://github.com/xxoommd/magic/releases/download/${TAG}/hysteria-linux-amd64-avx" hysteria_download_url="https://github.com/xxoommd/magic/releases/download/${TAG}/hysteria-linux-amd64-avx"
fi fi
# 设置工作目录 # 设置工作目录
WORKING_DIR="/root/.local/magic" WORKING_DIR="/root/.local/magic"
if [ ! -d "${WORKING_DIR}" ]; then if [ ! -d "${WORKING_DIR}" ]; then
mkdir -p "${WORKING_DIR}" mkdir -p "${WORKING_DIR}"
fi fi
CADDY_STORAGE="${WORKING_DIR}/caddy" CADDY_STORAGE="${WORKING_DIR}/caddy"
CERT_DIR="$CADDY_STORAGE/certificates/acme-v02.api.letsencrypt.org-directory/$DOMAIN" CERT_DIR="$CADDY_STORAGE/certificates/acme-v02.api.letsencrypt.org-directory/$DOMAIN"
CRT_FILE="$CERT_DIR/$DOMAIN.crt" CRT_FILE="$CERT_DIR/$DOMAIN.crt"
KEY_FILE="$CERT_DIR/$DOMAIN.key" KEY_FILE="$CERT_DIR/$DOMAIN.key"
HY_CONFIG_FILE="${WORKING_DIR}/hy-config.yaml" HY_CONFIG_FILE="${WORKING_DIR}/hy-config.yaml"
CADDY_CONFIG_FILE="${WORKING_DIR}/Caddyfile" CADDY_CONFIG_FILE="${WORKING_DIR}/Caddyfile"
echo -e "[INFO] Download ${GREEN}hysteria${NC} and ${GREEN}caddy${NC} ..." echo -e "[INFO] Download ${GREEN}hysteria${NC} and ${GREEN}caddy${NC} ..."
curl -L -o /usr/local/bin/hysteria $hysteria_download_url && \ curl -L -o /usr/local/bin/hysteria $hysteria_download_url && \
curl -L -o /usr/local/bin/caddy $caddy_download_url && \ curl -L -o /usr/local/bin/caddy $caddy_download_url && \
chmod +x /usr/local/bin/hysteria /usr/local/bin/caddy chmod +x /usr/local/bin/hysteria /usr/local/bin/caddy
echo -e "[INFO] Download Done\n" echo -e "[INFO] Download Done\n"
# Generating all config files... # Generating all config files...
echo -e "[INFO] Generate ${GREEN}${CADDY_CONFIG_FILE}${NC} ..." echo -e "[INFO] Generate ${GREEN}${CADDY_CONFIG_FILE}${NC} ..."
cat >${CADDY_CONFIG_FILE} <<EOF cat >${CADDY_CONFIG_FILE} <<EOF
{ {
storage file_system $CADDY_STORAGE storage file_system $CADDY_STORAGE
} }
:443, ${DOMAIN} :443, ${DOMAIN}
tls xxoommd@${DOMAIN} tls xxoommd@${DOMAIN}
route { route {
forward_proxy { forward_proxy {
basic_auth xxoommd fuckyouall basic_auth xxoommd fuckyouall
hide_ip hide_ip
hide_via hide_via
probe_resistance probe_resistance
# upstream socks5://127.0.0.1:40000 # upstream socks5://127.0.0.1:40000
} }
respond "hello ${DOMAIN}@naive!" respond "hello ${DOMAIN}@naive!"
} }
EOF EOF
echo -e "[INFO] Generate Done\n" echo -e "[INFO] Generate Done\n"
echo -e "[INFO] Generate ${GREEN}${HY_CONFIG_FILE}${NC} ..." echo -e "[INFO] Generate ${GREEN}${HY_CONFIG_FILE}${NC} ..."
cat >${HY_CONFIG_FILE} <<EOF cat >${HY_CONFIG_FILE} <<EOF
listen: :8443 listen: :8443
tls: tls:
cert: $CRT_FILE cert: $CRT_FILE
key: $KEY_FILE key: $KEY_FILE
auth: auth:
type: password type: password
password: fuckyouall password: fuckyouall
masquerade: masquerade:
type: string type: string
string: string:
content: 'hello ${DOMAIN}@hysteria2' content: 'hello ${DOMAIN}@hysteria2'
headers: headers:
content-type: text/plain content-type: text/plain
custom-stuff: ice cream so good custom-stuff: ice cream so good
statusCode: 200 statusCode: 200
disableUDP: false disableUDP: false
EOF EOF
echo -e "[INFO] Generate Done\n" echo -e "[INFO] Generate Done\n"
echo -e "[INFO] Generate ${GREEN}hysteria.service${NC} ..." echo -e "[INFO] Generate ${GREEN}hysteria.service${NC} ..."
cat >/etc/systemd/system/hysteria.service <<EOF cat >/etc/systemd/system/hysteria.service <<EOF
[Unit] [Unit]
Description=Hysteria Server Description=Hysteria Server
After=network.target After=network.target
[Service] [Service]
Type=simple Type=simple
ExecStart=/usr/local/bin/hysteria server --config /${HY_CONFIG_FILE} ExecStart=/usr/local/bin/hysteria server --config /${HY_CONFIG_FILE}
WorkingDirectory=${WORKING_DIR} WorkingDirectory=${WORKING_DIR}
Restart=on-failure Restart=on-failure
User=root User=root
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
echo -e "[INFO] Generate Done\n" echo -e "[INFO] Generate Done\n"
echo -e "[INFO] Generating caddy.service${NC} ..." echo -e "[INFO] Generating caddy.service${NC} ..."
cat >/etc/systemd/system/caddy.service <<EOF cat >/etc/systemd/system/caddy.service <<EOF
[Unit] [Unit]
Description=Caddy Description=Caddy
Documentation=https://caddyserver.com/docs/ Documentation=https://caddyserver.com/docs/
After=network.target network-online.target After=network.target network-online.target
Requires=network-online.target Requires=network-online.target
[Service] [Service]
User=root User=root
ExecStart=/usr/local/bin/caddy run --environ --config ${CADDY_CONFIG_FILE} ExecStart=/usr/local/bin/caddy run --environ --config ${CADDY_CONFIG_FILE}
ExecReload=/usr/local/bin/caddy reload --config ${CADDY_CONFIG_FILE} ExecReload=/usr/local/bin/caddy reload --config ${CADDY_CONFIG_FILE}
TimeoutStopSec=5s TimeoutStopSec=5s
LimitNOFILE=1048576 LimitNOFILE=1048576
LimitNPROC=512 LimitNPROC=512
PrivateTmp=true PrivateTmp=true
ProtectSystem=full ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE AmbientCapabilities=CAP_NET_BIND_SERVICE
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
echo -e "[INFO] Generate Done\n" echo -e "[INFO] Generate Done\n"
echo -e "[INFO] Handling ${GREEN}system daemons${NC} ..." echo -e "[INFO] Handling ${GREEN}system daemons${NC} ..."
systemctl daemon-reload && systemctl enable caddy && systemctl enable hysteria systemctl daemon-reload && systemctl enable caddy && systemctl enable hysteria
echo -e "[INFO] Generate Done\n" echo -e "[INFO] Generate Done\n"
echo -e "All ready!!!" echo -e "All ready!!!"
echo -e " Note: Run ${GREEN}caddy${NC} first to gain certificates. Wait a few seconds then start ${GREEN}hysteria${NC}." echo -e " Note: Run ${GREEN}caddy${NC} first to gain certificates. Wait a few seconds then start ${GREEN}hysteria${NC}."
echo -e " E.g: ${GREEN}systemctl start caddy && sleep 10 && systemctl start hysteria${NC}\n" echo -e " E.g: ${GREEN}systemctl start caddy && sleep 10 && systemctl start hysteria${NC}\n"

View File

@ -1,189 +1,189 @@
#!/bin/bash #!/bin/bash
GREEN='\033[0;32m' GREEN='\033[0;32m'
RED='\033[0;31m' RED='\033[0;31m'
BLUE='\033[0;34m' BLUE='\033[0;34m'
YELLOW='\033[0;33m' YELLOW='\033[0;33m'
UNDERLINE='\033[4m' # 下划线 UNDERLINE='\033[4m' # 下划线
NC='\033[0m' # No Color NC='\033[0m' # No Color
BIN_PATH="./bin" BIN_PATH="./bin"
function check_golang() { function check_golang() {
echo echo
echo "[INFO] Checking golang..." echo "[INFO] Checking golang..."
if command -v go >/dev/null 2>&1; then if command -v go >/dev/null 2>&1; then
GO_VER="$(go version)" GO_VER="$(go version)"
echo "[INFO] Go is installed: " $GO_VER echo "[INFO] Go is installed: " $GO_VER
echo echo
else else
echo "[INFO] Go is not installed. Start installing..." echo "[INFO] Go is not installed. Start installing..."
install_go install_go
if [[ $? != 0 ]]; then if [[ $? != 0 ]]; then
echo -e "[${RED}Err${NC}] Install ${YELLLOW}golang${NC} fail" echo -e "[${RED}Err${NC}] Install ${YELLLOW}golang${NC} fail"
exit 1 exit 1
fi fi
fi fi
} }
function install_go() { function install_go() {
go_ver=$(curl -s https://go.dev/VERSION?m=text | grep go) go_ver=$(curl -s https://go.dev/VERSION?m=text | grep go)
echo "[INFO] Downloading ${go_ver}..." 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 && 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/ && sudo tar -xf /tmp/go*.linux-amd64.tar.gz -C /usr/local/ &&
rm /tmp/go*.linux-amd64.tar.gz && rm /tmp/go*.linux-amd64.tar.gz &&
echo 'export GOROOT=/usr/local/go' >>~/.profile && echo 'export GOROOT=/usr/local/go' >>~/.profile &&
echo 'export PATH=$GOROOT/bin:$PATH' >>~/.profile && echo 'export PATH=$GOROOT/bin:$PATH' >>~/.profile &&
echo 'export GO111MODULE=on' >>~/.profile && echo 'export GO111MODULE=on' >>~/.profile &&
source ~/.profile && echo -e "[INFO] Install golang success:" && go version && echo source ~/.profile && echo -e "[INFO] Install golang success:" && go version && echo
} }
function build_caddy() { function build_caddy() {
export GOOS=$1 export GOOS=$1
export GOARCH=$2 export GOARCH=$2
export OUTPUT="caddy-${GOOS}-${GOARCH}" export OUTPUT="caddy-${GOOS}-${GOARCH}"
if [[ "$GOOS" == "windows" ]]; then if [[ "$GOOS" == "windows" ]]; then
export OUTPUT=$OUTPUT.exe export OUTPUT=$OUTPUT.exe
fi 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" 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}" echo -e "- Building ${GREEN}${OUTPUT}${NC}: ${YELLOW}${cmd}${NC}"
eval ${cmd} eval ${cmd}
} }
function update_caddy() { function update_caddy() {
go env -w GO111MODULE=on && go env -w GO111MODULE=on &&
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest && go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest &&
build_caddy "linux" "amd64" && build_caddy "linux" "amd64" &&
# build_caddy "darwin" "arm64" && # build_caddy "darwin" "arm64" &&
# build_caddy "darwin" "amd64" && # build_caddy "darwin" "amd64" &&
# build_caddy "windows" "amd64" && # build_caddy "windows" "amd64" &&
chmod +x $BIN_PATH/* && ls -lhF $BIN_PATH/caddy* chmod +x $BIN_PATH/* && ls -lhF $BIN_PATH/caddy*
} }
function download_naive() { function download_naive() {
NAIVE_VERSION=$1 NAIVE_VERSION=$1
OS=$2 OS=$2
ARCH=$3 ARCH=$3
OS_N=$4 OS_N=$4
ARCH_N=$5 ARCH_N=$5
SUFFIX=${6:-tar.xz} SUFFIX=${6:-tar.xz}
target_name="naive-${OS}-${ARCH}.${SUFFIX}" 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_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" download_cmd="curl -s -L -o /tmp/${target_name} $download_url"
decompress_cmd="tar -xf /tmp/${target_name} -C /tmp" 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}" mv_cmd="mv /tmp/naiveproxy-${NAIVE_VERSION}-${OS_N}-${ARCH_N}/naive $BIN_PATH/naive-${OS}-${ARCH}"
if [[ "$SUFFIX" == "zip" ]]; then if [[ "$SUFFIX" == "zip" ]]; then
decompress_cmd="unzip -q -o -d /tmp /tmp/${target_name}" 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" mv_cmd="mv /tmp/naiveproxy-${NAIVE_VERSION}-${OS_N}-${ARCH_N}/naive.exe $BIN_PATH/naive-${OS}-${ARCH}.exe"
fi fi
echo -e "- Downloading: ${target_name} ..." echo -e "- Downloading: ${target_name} ..."
eval $download_cmd && eval $decompress_cmd && eval $mv_cmd eval $download_cmd && eval $decompress_cmd && eval $mv_cmd
rm -rf /tmp/naive* rm -rf /tmp/naive*
} }
function update_naive() { function update_naive() {
rm -rf /tmp/naive* rm -rf /tmp/naive*
NAIVE_VERSION="v135.0.7049.38-2" NAIVE_VERSION="v135.0.7049.38-2"
download_naive $NAIVE_VERSION "linux" "amd64" "linux" "x64" && download_naive $NAIVE_VERSION "linux" "amd64" "linux" "x64" &&
download_naive $NAIVE_VERSION "darwin" "amd64" "mac" "x64" && download_naive $NAIVE_VERSION "darwin" "amd64" "mac" "x64" &&
download_naive $NAIVE_VERSION "darwin" "arm64" "mac" "arm64" && download_naive $NAIVE_VERSION "darwin" "arm64" "mac" "arm64" &&
download_naive $NAIVE_VERSION "windows" "amd64" "win" "x64" "zip" && download_naive $NAIVE_VERSION "windows" "amd64" "win" "x64" "zip" &&
echo && echo &&
chmod +x $BIN_PATH/naive* && ls -lhF $BIN_PATH/naive* chmod +x $BIN_PATH/naive* && ls -lhF $BIN_PATH/naive*
} }
function download_hysteria() { function download_hysteria() {
echo "- Downloading hysteria-linux-amd64-avx ..." && 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 && 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 ..." && echo "- Downloading hysteria-darwin-amd64 ..." &&
curl -s -L -o $BIN_PATH/hysteria-darwin-amd64 https://download.hysteria.network/app/latest/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 ..." && echo "- Downloading hysteria-darwin-arm64 ..." &&
curl -s -L -o $BIN_PATH/hysteria-darwin-arm64 https://download.hysteria.network/app/latest/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 ..." && 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 && curl -s -L -o $BIN_PATH/hysteria-windows-amd64-avx.exe https://download.hysteria.network/app/latest/hysteria-windows-amd64-avx.exe &&
echo && echo &&
chmod +x $BIN_PATH/* && ls -lhF $BIN_PATH/hy* chmod +x $BIN_PATH/* && ls -lhF $BIN_PATH/hy*
} }
function main() { function main() {
source ~/.profile source ~/.profile
up_caddy=false up_caddy=false
up_hy=false up_hy=false
up_naive=false up_naive=false
if [[ $# -eq 0 ]]; then if [[ $# -eq 0 ]]; then
up_caddy=true up_caddy=true
up_hy=true up_hy=true
up_naive=true up_naive=true
fi fi
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
case $1 in case $1 in
caddy) caddy)
up_caddy=true up_caddy=true
;; ;;
hysteria | hy) hysteria | hy)
up_hy=true up_hy=true
;; ;;
naive) naive)
up_naive=true up_naive=true
;; ;;
all) all)
up_naive=true up_naive=true
up_caddy=true up_caddy=true
up_hy=true up_hy=true
;; ;;
*) *)
echo -e "\n[${RED}Err${NC}] Invalid arg: $1\n" echo -e "\n[${RED}Err${NC}] Invalid arg: $1\n"
exit 0 exit 0
;; ;;
esac esac
shift shift
done done
[ ! -d "$BIN_PATH" ] && mkdir -p $BIN_PATH # 创建./bin目录 [ ! -d "$BIN_PATH" ] && mkdir -p $BIN_PATH # 创建./bin目录
if ! check_golang; then if ! check_golang; then
echo -e "[${RED}Err${NC}] Check ${YELLLOW}golang${NC} success" echo -e "[${RED}Err${NC}] Check ${YELLLOW}golang${NC} success"
exit 1 exit 1
fi fi
if [ "$up_caddy" = true ]; then if [ "$up_caddy" = true ]; then
echo echo
echo -e "[INFO] Updating ${GREEN}caddy${NC} ..." echo -e "[INFO] Updating ${GREEN}caddy${NC} ..."
if update_caddy; then if update_caddy; then
echo -e "[INFO] Updating ${GREEN}caddy${NC} success" echo -e "[INFO] Updating ${GREEN}caddy${NC} success"
else else
echo -e "[INFO] Updating ${GREEN}caddy${NC} fail" echo -e "[INFO] Updating ${GREEN}caddy${NC} fail"
exit 1 exit 1
fi fi
echo echo
fi fi
if [ "$up_hy" = true ]; then if [ "$up_hy" = true ]; then
echo -e "[INFO] Downloading ${GREEN}hysteria2${NC} ..." echo -e "[INFO] Downloading ${GREEN}hysteria2${NC} ..."
if download_hysteria; then if download_hysteria; then
echo -e "[INFO] Download ${GREEN}hysteria2${NC} success" echo -e "[INFO] Download ${GREEN}hysteria2${NC} success"
else else
echo -e "[Err] Download ${GREEN}hysteria2${NC} fail" echo -e "[Err] Download ${GREEN}hysteria2${NC} fail"
exit 1 exit 1
fi fi
echo echo
fi fi
if [ "$up_naive" = true ]; then if [ "$up_naive" = true ]; then
echo -e "[INFO] Downloading ${GREEN}naive${NC} ..." echo -e "[INFO] Downloading ${GREEN}naive${NC} ..."
if ! update_naive; then if ! update_naive; then
echo -e "[${RED}ERR${NC}] Download naive fail" echo -e "[${RED}ERR${NC}] Download naive fail"
fi fi
echo echo
fi fi
} }
main $@ main $@