git-reset.sh
· 512 B · Bash
Brut
#!/bin/bash
git status
echo
read -p "Type 'y' to confirm reset and pull (Enter = yes, n = cancel): " confirm </dev/tty
# Treat empty input (Enter) as "y"
confirm="${confirm:-y}"
if [[ "$confirm" == "y" ]]; then
echo "Proceeding with reset and pull..."
git reset --hard HEAD && git clean -fd && git fetch origin && git pull origin main
git status
elif [[ "$confirm" == "n" ]]; then
echo "Operation cancelled by user (n)."
else
echo "Operation cancelled. Only 'y' or Enter will proceed."
fi
| 1 | #!/bin/bash |
| 2 | |
| 3 | git status |
| 4 | |
| 5 | echo |
| 6 | read -p "Type 'y' to confirm reset and pull (Enter = yes, n = cancel): " confirm </dev/tty |
| 7 | |
| 8 | # Treat empty input (Enter) as "y" |
| 9 | confirm="${confirm:-y}" |
| 10 | |
| 11 | if [[ "$confirm" == "y" ]]; then |
| 12 | echo "Proceeding with reset and pull..." |
| 13 | git reset --hard HEAD && git clean -fd && git fetch origin && git pull origin main |
| 14 | git status |
| 15 | elif [[ "$confirm" == "n" ]]; then |
| 16 | echo "Operation cancelled by user (n)." |
| 17 | else |
| 18 | echo "Operation cancelled. Only 'y' or Enter will proceed." |
| 19 | fi |
init_hostname.sh
· 1.5 KiB · Bash
Brut
#!/usr/bin/env bash
set -euo pipefail
# 获取默认路由接口
IFACE=$(
ip -4 route show default \
| awk 'NR == 1 {print $5}'
)
if [[ -z "${IFACE:-}" ]]; then
echo "错误:未找到默认路由接口" >&2
exit 1
fi
# 获取默认路由接口上的 IPv4 地址:
# 先匹配 192.168.*,没有则匹配 172.29.*
IP=$(
ip -4 -o addr show dev "$IFACE" scope global \
| awk '
{
split($4, addr, "/")
ip = addr[1]
if (ip ~ /^192\.168\./ && ip_192 == "") {
ip_192 = ip
}
if (ip ~ /^172\.29\./ && ip_172 == "") {
ip_172 = ip
}
}
END {
if (ip_192 != "") {
print ip_192
} else if (ip_172 != "") {
print ip_172
}
}
'
)
if [[ -z "${IP:-}" ]]; then
echo "错误:接口 ${IFACE} 上未找到 192.168.* 或 172.29.* 地址" >&2
exit 1
fi
# 拆分 IP
IFS='.' read -r OCTET1 OCTET2 OCTET3 OCTET4 <<< "$IP"
# 按 /20 网段判断区域
case "$OCTET3" in
16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31)
REGION="idc"
;;
48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63)
REGION="sz"
;;
64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79)
REGION="bj"
;;
80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95)
REGION="sh"
;;
96|97|98|99|100|101|102|103|104|105|106|107|108|109|110|111)
REGION="cd"
;;
*)
echo "错误:IP ${IP} 不属于已配置的区域网段" >&2
exit 1
;;
esac
SYSTEM_NAME="${REGION}-${IP//./-}"
echo "$SYSTEM_NAME"
| 1 | #!/usr/bin/env bash |
| 2 | |
| 3 | set -euo pipefail |
| 4 | |
| 5 | # 获取默认路由接口 |
| 6 | IFACE=$( |
| 7 | ip -4 route show default \ |
| 8 | | awk 'NR == 1 {print $5}' |
| 9 | ) |
| 10 | |
| 11 | if [[ -z "${IFACE:-}" ]]; then |
| 12 | echo "错误:未找到默认路由接口" >&2 |
| 13 | exit 1 |
| 14 | fi |
| 15 | |
| 16 | # 获取默认路由接口上的 IPv4 地址: |
| 17 | # 先匹配 192.168.*,没有则匹配 172.29.* |
| 18 | IP=$( |
| 19 | ip -4 -o addr show dev "$IFACE" scope global \ |
| 20 | | awk ' |
| 21 | { |
| 22 | split($4, addr, "/") |
| 23 | ip = addr[1] |
| 24 | |
| 25 | if (ip ~ /^192\.168\./ && ip_192 == "") { |
| 26 | ip_192 = ip |
| 27 | } |
| 28 | |
| 29 | if (ip ~ /^172\.29\./ && ip_172 == "") { |
| 30 | ip_172 = ip |
| 31 | } |
| 32 | } |
| 33 | END { |
| 34 | if (ip_192 != "") { |
| 35 | print ip_192 |
| 36 | } else if (ip_172 != "") { |
| 37 | print ip_172 |
| 38 | } |
| 39 | } |
| 40 | ' |
| 41 | ) |
| 42 | |
| 43 | if [[ -z "${IP:-}" ]]; then |
| 44 | echo "错误:接口 ${IFACE} 上未找到 192.168.* 或 172.29.* 地址" >&2 |
| 45 | exit 1 |
| 46 | fi |
| 47 | |
| 48 | # 拆分 IP |
| 49 | IFS='.' read -r OCTET1 OCTET2 OCTET3 OCTET4 <<< "$IP" |
| 50 | |
| 51 | # 按 /20 网段判断区域 |
| 52 | case "$OCTET3" in |
| 53 | 16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31) |
| 54 | REGION="idc" |
| 55 | ;; |
| 56 | 48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63) |
| 57 | REGION="sz" |
| 58 | ;; |
| 59 | 64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79) |
| 60 | REGION="bj" |
| 61 | ;; |
| 62 | 80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95) |
| 63 | REGION="sh" |
| 64 | ;; |
| 65 | 96|97|98|99|100|101|102|103|104|105|106|107|108|109|110|111) |
| 66 | REGION="cd" |
| 67 | ;; |
| 68 | *) |
| 69 | echo "错误:IP ${IP} 不属于已配置的区域网段" >&2 |
| 70 | exit 1 |
| 71 | ;; |
| 72 | esac |
| 73 | |
| 74 | SYSTEM_NAME="${REGION}-${IP//./-}" |
| 75 | |
| 76 | echo "$SYSTEM_NAME" |
install-rpm.sh
· 7.0 KiB · Bash
Brut
#!/bin/bash
# 定义安装命令的函数,接收 user 和 repo 作为参数
case "$(uname -m)" in
x86_64)
arch="amd64"
;;
aarch64)
arch="arm64"
;;
*)
echo "Unsupported architecture: $(uname -m)"
exit 1
;;
esac
if [ "$2" = "-U" ]; then
case "$1" in
"helm" | "k9s" | "govc" | "nerdctl" | "fzf" | "terraform" | "packer" )
rm -rf /usr/local/bin/"$1" "${fpath[0]}"/_"$1" /etc/bash_completion.d/"$1"
echo
echo "-------------------------------------------"
echo "$1 installation complete!"
echo
echo "-------------------------------------------"
echo
;;
"trzsz" )
rm -rf /usr/local/bin/"trzsz" /usr/local/bin/"trz" /usr/local/bin/"tsz" "${fpath[0]}"/_"$1" /etc/bash_completion.d/"trzsz"
echo
echo "-------------------------------------------"
echo "$1 installation complete!"
echo
echo "-------------------------------------------"
echo
;;
*)
echo "Unsupported package: $1"
exit 1
;;
esac
exit 0
else
case "$1" in
"helm")
# helm
echo
echo "Installing helm..."
version=$(curl -s https://get.helm.sh/helm-latest-version)
curl -s -L -o - "https://get.helm.sh/helm-${version}-linux-${arch}.tar.gz" | tar --strip-components=1 -C /usr/local/bin -xzf - linux-amd64/helm
helm completion zsh > "${fpath[1]}/_helm" || true
helm completion bash > /etc/bash_completion.d/helm
# Displaying post-installation instructions
echo
echo "-------------------------------------------"
echo "helm installation complete!"
echo
# Displaying version
helm version
echo
echo "-------------------------------------------"
echo
;;
"k9s")
# derailed k9s
echo
echo "Installing k9s..."
curl -s -L -o - "https://github.com/derailed/k9s/releases/latest/download/k9s_Linux_${arch}.tar.gz" | tar -C /usr/local/bin -xzf - k9s
# Displaying post-installation instructions
echo
echo "-------------------------------------------"
echo "k9s installation complete!"
echo
# Displaying version
k9s version
echo
echo "-------------------------------------------"
echo
;;
"govc")
# vmware govmomi
echo
echo "Installing govmomi..."
curl -s -L -o - "https://github.com/vmware/govmomi/releases/latest/download/govc_$(uname -s)_$(uname -m).tar.gz" | tar -C /usr/local/bin -xvzf - govc
# Displaying post-installation instructions
echo
echo "-------------------------------------------"
echo "nerdctl installation complete!"
echo
# Displaying version
govc version
echo
echo "To initialize the environment, please run:"
echo " export GOVC_URL=\"https://administrator@vsphere.local:password@vcip\""
echo " export GOVC_INSECURE=true"
echo "-------------------------------------------"
echo
;;
"nerdctl")
# vmware nerdctl
echo
echo "Installing nerdctl..."
VERSION=$(curl -s https://api.github.com/repos/containerd/nerdctl/releases/latest | jq -r '.tag_name' | awk -F"v" '{print $NF}')
curl -s -L -o - "https://github.com/containerd/nerdctl/releases/latest/download/nerdctl-${VERSION}-linux-${arch}.tar.gz" | tar -C /usr/local/bin -xvzf - nerdctl
nerdctl completion zsh > "${fpath[1]}/_nerdctl" || true
nerdctl completion bash > /etc/bash_completion.d/nerdctl
# Displaying post-installation instructions
echo
echo "-------------------------------------------"
echo "nerdctl installation complete!"
echo
# Displaying version
nerdctl version
echo
echo "-------------------------------------------"
echo
;;
"fzf")
# fzf
echo
echo "Installing fzf..."
VERSION=$(curl -s https://api.github.com/repos/junegunn/fzf/releases/latest | jq -r '.tag_name' | awk -F"v" '{print $NF}')
curl -s -L -o - "https://github.com/junegunn/fzf/releases/latest/download/fzf-${VERSION}-linux_${arch}.tar.gz" | tar -C /usr/local/bin -xvzf - fzf
fzf --zsh > "${fpath[1]}/_fzf" || true
fzf --bash > /etc/bash_completion.d/fzf
# Displaying post-installation instructions
echo
echo "-------------------------------------------"
echo "fzf installation complete!"
echo
# Displaying version
fzf --version
echo
echo "-------------------------------------------"
echo
;;
"terraform")
# terraform
echo
echo "Installing Terraform..."
# Fetching the latest version of Terraform
VERSION=$(curl -s https://checkpoint-api.hashicorp.com/v1/check/terraform | jq -r -M '.current_version')
curl -s -L -o "terraform_${VERSION}_linux_${arch}.zip" "https://releases.hashicorp.com/terraform/${VERSION}/terraform_${VERSION}_linux_${arch}.zip"
# Unzipping and installing Terraform
unzip -qq -o "terraform_${VERSION}_linux_${arch}.zip" terraform -d /usr/local/bin && rm -f "terraform_${VERSION}_linux_${arch}.zip"
# Displaying post-installation instructions
echo
echo "-------------------------------------------"
echo "Terraform installation complete!"
echo
# Displaying terraform version
terraform --version
echo
echo "To enable CLI auto-completion, please run:"
echo " terraform -install-autocomplete"
echo "-------------------------------------------"
echo
;;
"packer")
# packer
echo
echo "Installing Packer..."
# Fetching the latest version of packer
VERSION=$(curl -s https://checkpoint-api.hashicorp.com/v1/check/packer | jq -r -M '.current_version')
curl -s -L -o "packer_${VERSION}_linux_${arch}.zip" "https://releases.hashicorp.com/packer/${VERSION}/packer_${VERSION}_linux_${arch}.zip"
# Unzipping and installing packer
unzip -qq -o "packer_${VERSION}_linux_${arch}.zip" packer -d /usr/local/bin && rm -rf "packer_${VERSION}_linux_${arch}.zip" /usr/sbin/packer
# Displaying post-installation instructions
echo
echo "-------------------------------------------"
echo "Packer installation complete!"
echo
# Displaying packer version
packer --version
echo
echo "To enable CLI auto-completion, please run:"
echo " packer -autocomplete-install"
echo "-------------------------------------------"
echo
;;
"trzsz")
# trzsz
echo
echo "Installing trzsz..."
curl -s -L -o - "https://github.com/trzsz/trzsz-go/releases/download/v1.1.8/trzsz_1.1.8_linux_$(uname -m).tar.gz" | tar --strip-components=1 -C /usr/local/bin -xvzf -
# Displaying post-installation instructions
echo
echo "-------------------------------------------"
echo "trzsz installation complete!"
echo
# Displaying version
/usr/local/bin/trzsz version
echo
;;
*)
echo
echo "helm k9s govc nerdctl fzf terraform packer trzsz"
exit 1
;;
esac
exit 0
fi
| 1 | #!/bin/bash |
| 2 | |
| 3 | # 定义安装命令的函数,接收 user 和 repo 作为参数 |
| 4 | case "$(uname -m)" in |
| 5 | x86_64) |
| 6 | arch="amd64" |
| 7 | ;; |
| 8 | aarch64) |
| 9 | arch="arm64" |
| 10 | ;; |
| 11 | *) |
| 12 | echo "Unsupported architecture: $(uname -m)" |
| 13 | exit 1 |
| 14 | ;; |
| 15 | esac |
| 16 | |
| 17 | if [ "$2" = "-U" ]; then |
| 18 | case "$1" in |
| 19 | "helm" | "k9s" | "govc" | "nerdctl" | "fzf" | "terraform" | "packer" ) |
| 20 | rm -rf /usr/local/bin/"$1" "${fpath[0]}"/_"$1" /etc/bash_completion.d/"$1" |
| 21 | echo |
| 22 | echo "-------------------------------------------" |
| 23 | echo "$1 installation complete!" |
| 24 | echo |
| 25 | echo "-------------------------------------------" |
| 26 | echo |
| 27 | ;; |
| 28 | "trzsz" ) |
| 29 | rm -rf /usr/local/bin/"trzsz" /usr/local/bin/"trz" /usr/local/bin/"tsz" "${fpath[0]}"/_"$1" /etc/bash_completion.d/"trzsz" |
| 30 | echo |
| 31 | echo "-------------------------------------------" |
| 32 | echo "$1 installation complete!" |
| 33 | echo |
| 34 | echo "-------------------------------------------" |
| 35 | echo |
| 36 | ;; |
| 37 | *) |
| 38 | echo "Unsupported package: $1" |
| 39 | exit 1 |
| 40 | ;; |
| 41 | esac |
| 42 | exit 0 |
| 43 | else |
| 44 | case "$1" in |
| 45 | "helm") |
| 46 | # helm |
| 47 | echo |
| 48 | echo "Installing helm..." |
| 49 | version=$(curl -s https://get.helm.sh/helm-latest-version) |
| 50 | curl -s -L -o - "https://get.helm.sh/helm-${version}-linux-${arch}.tar.gz" | tar --strip-components=1 -C /usr/local/bin -xzf - linux-amd64/helm |
| 51 | helm completion zsh > "${fpath[1]}/_helm" || true |
| 52 | helm completion bash > /etc/bash_completion.d/helm |
| 53 | # Displaying post-installation instructions |
| 54 | echo |
| 55 | echo "-------------------------------------------" |
| 56 | echo "helm installation complete!" |
| 57 | echo |
| 58 | # Displaying version |
| 59 | helm version |
| 60 | echo |
| 61 | echo "-------------------------------------------" |
| 62 | echo |
| 63 | ;; |
| 64 | "k9s") |
| 65 | # derailed k9s |
| 66 | echo |
| 67 | echo "Installing k9s..." |
| 68 | curl -s -L -o - "https://github.com/derailed/k9s/releases/latest/download/k9s_Linux_${arch}.tar.gz" | tar -C /usr/local/bin -xzf - k9s |
| 69 | # Displaying post-installation instructions |
| 70 | echo |
| 71 | echo "-------------------------------------------" |
| 72 | echo "k9s installation complete!" |
| 73 | echo |
| 74 | # Displaying version |
| 75 | k9s version |
| 76 | echo |
| 77 | echo "-------------------------------------------" |
| 78 | echo |
| 79 | ;; |
| 80 | "govc") |
| 81 | # vmware govmomi |
| 82 | echo |
| 83 | echo "Installing govmomi..." |
| 84 | curl -s -L -o - "https://github.com/vmware/govmomi/releases/latest/download/govc_$(uname -s)_$(uname -m).tar.gz" | tar -C /usr/local/bin -xvzf - govc |
| 85 | # Displaying post-installation instructions |
| 86 | echo |
| 87 | echo "-------------------------------------------" |
| 88 | echo "nerdctl installation complete!" |
| 89 | echo |
| 90 | # Displaying version |
| 91 | govc version |
| 92 | echo |
| 93 | echo "To initialize the environment, please run:" |
| 94 | echo " export GOVC_URL=\"https://administrator@vsphere.local:password@vcip\"" |
| 95 | echo " export GOVC_INSECURE=true" |
| 96 | echo "-------------------------------------------" |
| 97 | echo |
| 98 | ;; |
| 99 | "nerdctl") |
| 100 | # vmware nerdctl |
| 101 | echo |
| 102 | echo "Installing nerdctl..." |
| 103 | VERSION=$(curl -s https://api.github.com/repos/containerd/nerdctl/releases/latest | jq -r '.tag_name' | awk -F"v" '{print $NF}') |
| 104 | curl -s -L -o - "https://github.com/containerd/nerdctl/releases/latest/download/nerdctl-${VERSION}-linux-${arch}.tar.gz" | tar -C /usr/local/bin -xvzf - nerdctl |
| 105 | nerdctl completion zsh > "${fpath[1]}/_nerdctl" || true |
| 106 | nerdctl completion bash > /etc/bash_completion.d/nerdctl |
| 107 | # Displaying post-installation instructions |
| 108 | echo |
| 109 | echo "-------------------------------------------" |
| 110 | echo "nerdctl installation complete!" |
| 111 | echo |
| 112 | # Displaying version |
| 113 | nerdctl version |
| 114 | echo |
| 115 | echo "-------------------------------------------" |
| 116 | echo |
| 117 | ;; |
| 118 | "fzf") |
| 119 | # fzf |
| 120 | echo |
| 121 | echo "Installing fzf..." |
| 122 | VERSION=$(curl -s https://api.github.com/repos/junegunn/fzf/releases/latest | jq -r '.tag_name' | awk -F"v" '{print $NF}') |
| 123 | curl -s -L -o - "https://github.com/junegunn/fzf/releases/latest/download/fzf-${VERSION}-linux_${arch}.tar.gz" | tar -C /usr/local/bin -xvzf - fzf |
| 124 | fzf --zsh > "${fpath[1]}/_fzf" || true |
| 125 | fzf --bash > /etc/bash_completion.d/fzf |
| 126 | # Displaying post-installation instructions |
| 127 | echo |
| 128 | echo "-------------------------------------------" |
| 129 | echo "fzf installation complete!" |
| 130 | echo |
| 131 | # Displaying version |
| 132 | fzf --version |
| 133 | echo |
| 134 | echo "-------------------------------------------" |
| 135 | echo |
| 136 | ;; |
| 137 | "terraform") |
| 138 | # terraform |
| 139 | echo |
| 140 | echo "Installing Terraform..." |
| 141 | # Fetching the latest version of Terraform |
| 142 | VERSION=$(curl -s https://checkpoint-api.hashicorp.com/v1/check/terraform | jq -r -M '.current_version') |
| 143 | curl -s -L -o "terraform_${VERSION}_linux_${arch}.zip" "https://releases.hashicorp.com/terraform/${VERSION}/terraform_${VERSION}_linux_${arch}.zip" |
| 144 | # Unzipping and installing Terraform |
| 145 | unzip -qq -o "terraform_${VERSION}_linux_${arch}.zip" terraform -d /usr/local/bin && rm -f "terraform_${VERSION}_linux_${arch}.zip" |
| 146 | # Displaying post-installation instructions |
| 147 | echo |
| 148 | echo "-------------------------------------------" |
| 149 | echo "Terraform installation complete!" |
| 150 | echo |
| 151 | # Displaying terraform version |
| 152 | terraform --version |
| 153 | echo |
| 154 | echo "To enable CLI auto-completion, please run:" |
| 155 | echo " terraform -install-autocomplete" |
| 156 | echo "-------------------------------------------" |
| 157 | echo |
| 158 | ;; |
| 159 | "packer") |
| 160 | # packer |
| 161 | echo |
| 162 | echo "Installing Packer..." |
| 163 | # Fetching the latest version of packer |
| 164 | VERSION=$(curl -s https://checkpoint-api.hashicorp.com/v1/check/packer | jq -r -M '.current_version') |
| 165 | curl -s -L -o "packer_${VERSION}_linux_${arch}.zip" "https://releases.hashicorp.com/packer/${VERSION}/packer_${VERSION}_linux_${arch}.zip" |
| 166 | # Unzipping and installing packer |
| 167 | unzip -qq -o "packer_${VERSION}_linux_${arch}.zip" packer -d /usr/local/bin && rm -rf "packer_${VERSION}_linux_${arch}.zip" /usr/sbin/packer |
| 168 | # Displaying post-installation instructions |
| 169 | echo |
| 170 | echo "-------------------------------------------" |
| 171 | echo "Packer installation complete!" |
| 172 | echo |
| 173 | # Displaying packer version |
| 174 | packer --version |
| 175 | echo |
| 176 | echo "To enable CLI auto-completion, please run:" |
| 177 | echo " packer -autocomplete-install" |
| 178 | echo "-------------------------------------------" |
| 179 | echo |
| 180 | ;; |
| 181 | "trzsz") |
| 182 | # trzsz |
| 183 | echo |
| 184 | echo "Installing trzsz..." |
| 185 | curl -s -L -o - "https://github.com/trzsz/trzsz-go/releases/download/v1.1.8/trzsz_1.1.8_linux_$(uname -m).tar.gz" | tar --strip-components=1 -C /usr/local/bin -xvzf - |
| 186 | # Displaying post-installation instructions |
| 187 | echo |
| 188 | echo "-------------------------------------------" |
| 189 | echo "trzsz installation complete!" |
| 190 | echo |
| 191 | # Displaying version |
| 192 | /usr/local/bin/trzsz version |
| 193 | echo |
| 194 | ;; |
| 195 | *) |
| 196 | echo |
| 197 | echo "helm k9s govc nerdctl fzf terraform packer trzsz" |
| 198 | exit 1 |
| 199 | ;; |
| 200 | esac |
| 201 | exit 0 |
| 202 | fi |
install_beszel-agent.sh
· 1.4 KiB · Bash
Brut
#!/usr/bin/env bash
set -euo pipefail
BASE_DIR="/uk/container/beszel-agent"
COMPOSE_FILE="${BASE_DIR}/docker-compose.yaml"
HOSTNAME_SCRIPT_URL="https://gist.smtx.fun/uk/shell/raw/HEAD/init_hostname.sh"
mkdir -p "${BASE_DIR}/data/beszel_agent_data"
SYSTEM_NAME="$(
curl -fsSL "${HOSTNAME_SCRIPT_URL}" | bash
)"
if [[ -z "${SYSTEM_NAME}" ]]; then
echo "错误:未能生成 Beszel Agent 主机名" >&2
exit 1
fi
if [[ ! "${SYSTEM_NAME}" =~ ^[a-z0-9][a-z0-9-]*$ ]]; then
echo "错误:生成的主机名不合法:${SYSTEM_NAME}" >&2
exit 1
fi
cat > "${COMPOSE_FILE}" <<EOF
services:
beszel-agent:
hostname: "${SYSTEM_NAME}"
container_name: beszel-agent
image: henrygd/beszel-agent:latest
restart: unless-stopped
network_mode: host
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./data/beszel_agent_data:/var/lib/beszel-agent
environment:
LISTEN: "45876"
KEY: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBwdGhEA5KNbeNt761qa4iAu8bL6JsTZtuooEjtYS7z4"
TOKEN: "5840c830-5842-4e4e-b6e3-c0ca5191d4a6"
HUB_URL: "http://192.168.49.1:8022"
healthcheck:
test: ["CMD", "/agent", "health"]
interval: 120s
EOF
echo "生成的系统名称:${SYSTEM_NAME}"
echo "Compose 文件:${COMPOSE_FILE}"
docker compose --project-directory "${BASE_DIR}" -f "${COMPOSE_FILE}" up -d --pull always
docker compose --project-directory "${BASE_DIR}" -f "${COMPOSE_FILE}" ps
| 1 | #!/usr/bin/env bash |
| 2 | |
| 3 | set -euo pipefail |
| 4 | |
| 5 | BASE_DIR="/uk/container/beszel-agent" |
| 6 | COMPOSE_FILE="${BASE_DIR}/docker-compose.yaml" |
| 7 | HOSTNAME_SCRIPT_URL="https://gist.smtx.fun/uk/shell/raw/HEAD/init_hostname.sh" |
| 8 | |
| 9 | mkdir -p "${BASE_DIR}/data/beszel_agent_data" |
| 10 | |
| 11 | SYSTEM_NAME="$( |
| 12 | curl -fsSL "${HOSTNAME_SCRIPT_URL}" | bash |
| 13 | )" |
| 14 | |
| 15 | if [[ -z "${SYSTEM_NAME}" ]]; then |
| 16 | echo "错误:未能生成 Beszel Agent 主机名" >&2 |
| 17 | exit 1 |
| 18 | fi |
| 19 | |
| 20 | if [[ ! "${SYSTEM_NAME}" =~ ^[a-z0-9][a-z0-9-]*$ ]]; then |
| 21 | echo "错误:生成的主机名不合法:${SYSTEM_NAME}" >&2 |
| 22 | exit 1 |
| 23 | fi |
| 24 | |
| 25 | cat > "${COMPOSE_FILE}" <<EOF |
| 26 | services: |
| 27 | beszel-agent: |
| 28 | hostname: "${SYSTEM_NAME}" |
| 29 | container_name: beszel-agent |
| 30 | image: henrygd/beszel-agent:latest |
| 31 | restart: unless-stopped |
| 32 | network_mode: host |
| 33 | |
| 34 | volumes: |
| 35 | - /var/run/docker.sock:/var/run/docker.sock:ro |
| 36 | - ./data/beszel_agent_data:/var/lib/beszel-agent |
| 37 | |
| 38 | environment: |
| 39 | LISTEN: "45876" |
| 40 | KEY: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBwdGhEA5KNbeNt761qa4iAu8bL6JsTZtuooEjtYS7z4" |
| 41 | TOKEN: "5840c830-5842-4e4e-b6e3-c0ca5191d4a6" |
| 42 | HUB_URL: "http://192.168.49.1:8022" |
| 43 | |
| 44 | healthcheck: |
| 45 | test: ["CMD", "/agent", "health"] |
| 46 | interval: 120s |
| 47 | EOF |
| 48 | |
| 49 | echo "生成的系统名称:${SYSTEM_NAME}" |
| 50 | echo "Compose 文件:${COMPOSE_FILE}" |
| 51 | |
| 52 | docker compose --project-directory "${BASE_DIR}" -f "${COMPOSE_FILE}" up -d --pull always |
| 53 | |
| 54 | docker compose --project-directory "${BASE_DIR}" -f "${COMPOSE_FILE}" ps |
install_ohmyzsh.sh
· 1.9 KiB · Bash
Brut
#!/bin/bash
# check sudo
if command -v sudo &>/dev/null; then
SUDO=sudo
else
SUDO=""
fi
# install package
if command -v yum &>/dev/null; then
$SUDO yum install -y -q git zsh bash-completion wget unzip tree tmux vim sysstat &> /dev/null
elif command -v apt &>/dev/null; then
$SUDO apt update -qq &>/dev/null
$SUDO apt install -y git zsh bash-completion wget unzip tree tmux vim sysstat &> /dev/null
else
echo "[ERROR] unsupport os" >&2
exit 1
fi
# install oh-my-zsh
# git clone https://mirrors.tuna.tsinghua.edu.cn/git/ohmyzsh.git
# REMOTE=https://mirrors.tuna.tsinghua.edu.cn/git/ohmyzsh.git sh ohmyzsh/tools/install.sh && rm -rf ohmyzsh
REPO=sjtug/ohmyzsh REMOTE=https://git.sjtu.edu.cn/${REPO}.git sh -c "$(curl -fsSL https://git.sjtu.edu.cn/sjtug/ohmyzsh/-/raw/master/tools/install.sh\?inline\=false)"
ZSH=$HOME/.oh-my-zsh
# install zsh-syntax-highlighting
# git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://mirrors.nju.edu.cn/git/zsh-syntax-highlighting.git $ZSH/custom/plugins/zsh-syntax-highlighting
# install zsh-autosuggestions
# git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://mirrors.nju.edu.cn/git/zsh-autosuggestions.git $ZSH/custom/plugins/zsh-autosuggestions
# install zsh-you-should-use
# git clone https://github.com/MichaelAquilina/zsh-you-should-use.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/you-should-use
# git clone https://github.com/MichaelAquilina/zsh-you-should-use.git $ZSH/custom/plugins/you-should-use
# replace plugins and theme
cp $HOME/.zshrc $HOME/.zshrc.bak
zsh -c 'source ~/.zshrc && omz plugin enable zsh-autosuggestions zsh-syntax-highlighting sudo'
zsh -c 'source ~/.zshrc && omz theme set ys'
cat >> ~/.zshrc <<UK
## add
zstyle ':omz:update' mode disabled
HIST_STAMPS="yyyy-mm-dd"
alias vi="vim"
UK
source ~/.zshrc
| 1 | #!/bin/bash |
| 2 | |
| 3 | # check sudo |
| 4 | if command -v sudo &>/dev/null; then |
| 5 | SUDO=sudo |
| 6 | else |
| 7 | SUDO="" |
| 8 | fi |
| 9 | |
| 10 | # install package |
| 11 | if command -v yum &>/dev/null; then |
| 12 | $SUDO yum install -y -q git zsh bash-completion wget unzip tree tmux vim sysstat &> /dev/null |
| 13 | elif command -v apt &>/dev/null; then |
| 14 | $SUDO apt update -qq &>/dev/null |
| 15 | $SUDO apt install -y git zsh bash-completion wget unzip tree tmux vim sysstat &> /dev/null |
| 16 | else |
| 17 | echo "[ERROR] unsupport os" >&2 |
| 18 | exit 1 |
| 19 | fi |
| 20 | |
| 21 | # install oh-my-zsh |
| 22 | # git clone https://mirrors.tuna.tsinghua.edu.cn/git/ohmyzsh.git |
| 23 | # REMOTE=https://mirrors.tuna.tsinghua.edu.cn/git/ohmyzsh.git sh ohmyzsh/tools/install.sh && rm -rf ohmyzsh |
| 24 | REPO=sjtug/ohmyzsh REMOTE=https://git.sjtu.edu.cn/${REPO}.git sh -c "$(curl -fsSL https://git.sjtu.edu.cn/sjtug/ohmyzsh/-/raw/master/tools/install.sh\?inline\=false)" |
| 25 | |
| 26 | ZSH=$HOME/.oh-my-zsh |
| 27 | |
| 28 | # install zsh-syntax-highlighting |
| 29 | # git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting |
| 30 | git clone https://mirrors.nju.edu.cn/git/zsh-syntax-highlighting.git $ZSH/custom/plugins/zsh-syntax-highlighting |
| 31 | |
| 32 | # install zsh-autosuggestions |
| 33 | # git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions |
| 34 | git clone https://mirrors.nju.edu.cn/git/zsh-autosuggestions.git $ZSH/custom/plugins/zsh-autosuggestions |
| 35 | |
| 36 | # install zsh-you-should-use |
| 37 | # git clone https://github.com/MichaelAquilina/zsh-you-should-use.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/you-should-use |
| 38 | # git clone https://github.com/MichaelAquilina/zsh-you-should-use.git $ZSH/custom/plugins/you-should-use |
| 39 | |
| 40 | # replace plugins and theme |
| 41 | cp $HOME/.zshrc $HOME/.zshrc.bak |
| 42 | zsh -c 'source ~/.zshrc && omz plugin enable zsh-autosuggestions zsh-syntax-highlighting sudo' |
| 43 | zsh -c 'source ~/.zshrc && omz theme set ys' |
| 44 | |
| 45 | cat >> ~/.zshrc <<UK |
| 46 | |
| 47 | ## add |
| 48 | zstyle ':omz:update' mode disabled |
| 49 | HIST_STAMPS="yyyy-mm-dd" |
| 50 | alias vi="vim" |
| 51 | UK |
| 52 | |
| 53 | source ~/.zshrc |
install_vmtools.sh
· 2.8 KiB · Bash
Brut
#!/bin/bash
set -e
# Define variables
ISO_FILENAME="SMTX_VMTOOLS-4.0.0-2506271023.iso"
ISO_FILE="/tmp/${ISO_FILENAME}"
MOUNT_POINT="/mnt/wuke-vmtools"
# Extract version from ISO filename
VMTOOLS_VERSION=$(echo "$ISO_FILENAME" | awk -F'-' '{print $2}')
echo "Extracted VMTools version: $VMTOOLS_VERSION"
# Detect gateway and set ISO_URL
GATEWAY=$(ip route | grep default | awk '{print $3}')
echo "Detected gateway: $GATEWAY"
if [[ $GATEWAY == 172.29.16.* ]]; then
ISO_URL="http://172.29.16.5/VMTOOLS/${VMTOOLS_VERSION}/${ISO_FILENAME}"
elif [[ $GATEWAY == 172.29.48.* ]]; then
ISO_URL="http://172.29.48.5/VMTOOLS/${VMTOOLS_VERSION}/${ISO_FILENAME}"
elif [[ $GATEWAY == 172.29.80.* ]]; then
ISO_URL="http://172.29.80.5/VMTOOLS/${VMTOOLS_VERSION}/${ISO_FILENAME}"
elif [[ $GATEWAY == 172.29.112.* ]]; then
ISO_URL="http://172.29.112.5/VMTOOLS/${VMTOOLS_VERSION}/${ISO_FILENAME}"
elif [[ $GATEWAY == 192.168.48.* ]]; then
ISO_URL="http://192.168.48.2/VMTOOLS/${VMTOOLS_VERSION}/${ISO_FILENAME}"
else
echo "Unsupported gateway network: $GATEWAY"
exit 1
fi
echo "Selected ISO URL: $ISO_URL"
# Function to check and install a package if missing
install_package_if_missing() {
local package_name=$1
if command -v yum >/dev/null 2>&1; then
if ! rpm -q "$package_name" >/dev/null 2>&1; then
echo "Installing $package_name using yum..."
yum install -y "$package_name"
else
echo "Package $package_name already installed (yum)."
fi
elif command -v apt >/dev/null 2>&1; then
if ! dpkg -s "$package_name" >/dev/null 2>&1; then
echo "Installing $package_name using apt..."
apt update
apt install -y "$package_name"
else
echo "Package $package_name already installed (apt)."
fi
else
echo "Unsupported OS: yum or apt not found."
exit 1
fi
}
# 1. Install required packages
install_package_if_missing tar
install_package_if_missing bzip2
install_package_if_missing curl
# 2. Check if ISO URL is accessible
echo "Checking if ISO URL is accessible..."
if ! curl --head --silent --fail "$ISO_URL" >/dev/null; then
echo "Error: ISO URL $ISO_URL is not accessible."
exit 1
fi
# 3. Download the ISO file
echo "Downloading VMTools ISO..."
curl -o "$ISO_FILE" "$ISO_URL"
# 4. Check if /mnt/wuke-vmtools exists
if [ -d "$MOUNT_POINT" ]; then
echo "Directory $MOUNT_POINT exists, removing..."
umount "$MOUNT_POINT" || true
rm -rf "$MOUNT_POINT"
fi
echo "Creating directory $MOUNT_POINT..."
mkdir -p "$MOUNT_POINT"
# 5. Mount the ISO
echo "Mounting ISO file to $MOUNT_POINT..."
mount -o loop "$ISO_FILE" "$MOUNT_POINT"
# 6. Execute the installation script
echo "Running VMTools installation script..."
bash "$MOUNT_POINT/SMTX_VM_TOOLS_INSTALL.sh"
# 7. Cleanup
echo "Cleaning up temporary files..."
umount "$MOUNT_POINT" || true
rm -f "$ISO_FILE"
rm -rf "$MOUNT_POINT"
echo "Installation and cleanup completed."
| 1 | #!/bin/bash |
| 2 | set -e |
| 3 | |
| 4 | # Define variables |
| 5 | ISO_FILENAME="SMTX_VMTOOLS-4.0.0-2506271023.iso" |
| 6 | ISO_FILE="/tmp/${ISO_FILENAME}" |
| 7 | MOUNT_POINT="/mnt/wuke-vmtools" |
| 8 | |
| 9 | # Extract version from ISO filename |
| 10 | VMTOOLS_VERSION=$(echo "$ISO_FILENAME" | awk -F'-' '{print $2}') |
| 11 | echo "Extracted VMTools version: $VMTOOLS_VERSION" |
| 12 | |
| 13 | # Detect gateway and set ISO_URL |
| 14 | GATEWAY=$(ip route | grep default | awk '{print $3}') |
| 15 | echo "Detected gateway: $GATEWAY" |
| 16 | |
| 17 | if [[ $GATEWAY == 172.29.16.* ]]; then |
| 18 | ISO_URL="http://172.29.16.5/VMTOOLS/${VMTOOLS_VERSION}/${ISO_FILENAME}" |
| 19 | elif [[ $GATEWAY == 172.29.48.* ]]; then |
| 20 | ISO_URL="http://172.29.48.5/VMTOOLS/${VMTOOLS_VERSION}/${ISO_FILENAME}" |
| 21 | elif [[ $GATEWAY == 172.29.80.* ]]; then |
| 22 | ISO_URL="http://172.29.80.5/VMTOOLS/${VMTOOLS_VERSION}/${ISO_FILENAME}" |
| 23 | elif [[ $GATEWAY == 172.29.112.* ]]; then |
| 24 | ISO_URL="http://172.29.112.5/VMTOOLS/${VMTOOLS_VERSION}/${ISO_FILENAME}" |
| 25 | elif [[ $GATEWAY == 192.168.48.* ]]; then |
| 26 | ISO_URL="http://192.168.48.2/VMTOOLS/${VMTOOLS_VERSION}/${ISO_FILENAME}" |
| 27 | else |
| 28 | echo "Unsupported gateway network: $GATEWAY" |
| 29 | exit 1 |
| 30 | fi |
| 31 | |
| 32 | echo "Selected ISO URL: $ISO_URL" |
| 33 | |
| 34 | # Function to check and install a package if missing |
| 35 | install_package_if_missing() { |
| 36 | local package_name=$1 |
| 37 | |
| 38 | if command -v yum >/dev/null 2>&1; then |
| 39 | if ! rpm -q "$package_name" >/dev/null 2>&1; then |
| 40 | echo "Installing $package_name using yum..." |
| 41 | yum install -y "$package_name" |
| 42 | else |
| 43 | echo "Package $package_name already installed (yum)." |
| 44 | fi |
| 45 | elif command -v apt >/dev/null 2>&1; then |
| 46 | if ! dpkg -s "$package_name" >/dev/null 2>&1; then |
| 47 | echo "Installing $package_name using apt..." |
| 48 | apt update |
| 49 | apt install -y "$package_name" |
| 50 | else |
| 51 | echo "Package $package_name already installed (apt)." |
| 52 | fi |
| 53 | else |
| 54 | echo "Unsupported OS: yum or apt not found." |
| 55 | exit 1 |
| 56 | fi |
| 57 | } |
| 58 | |
| 59 | # 1. Install required packages |
| 60 | install_package_if_missing tar |
| 61 | install_package_if_missing bzip2 |
| 62 | install_package_if_missing curl |
| 63 | |
| 64 | # 2. Check if ISO URL is accessible |
| 65 | echo "Checking if ISO URL is accessible..." |
| 66 | if ! curl --head --silent --fail "$ISO_URL" >/dev/null; then |
| 67 | echo "Error: ISO URL $ISO_URL is not accessible." |
| 68 | exit 1 |
| 69 | fi |
| 70 | |
| 71 | # 3. Download the ISO file |
| 72 | echo "Downloading VMTools ISO..." |
| 73 | curl -o "$ISO_FILE" "$ISO_URL" |
| 74 | |
| 75 | # 4. Check if /mnt/wuke-vmtools exists |
| 76 | if [ -d "$MOUNT_POINT" ]; then |
| 77 | echo "Directory $MOUNT_POINT exists, removing..." |
| 78 | umount "$MOUNT_POINT" || true |
| 79 | rm -rf "$MOUNT_POINT" |
| 80 | fi |
| 81 | |
| 82 | echo "Creating directory $MOUNT_POINT..." |
| 83 | mkdir -p "$MOUNT_POINT" |
| 84 | |
| 85 | # 5. Mount the ISO |
| 86 | echo "Mounting ISO file to $MOUNT_POINT..." |
| 87 | mount -o loop "$ISO_FILE" "$MOUNT_POINT" |
| 88 | |
| 89 | # 6. Execute the installation script |
| 90 | echo "Running VMTools installation script..." |
| 91 | bash "$MOUNT_POINT/SMTX_VM_TOOLS_INSTALL.sh" |
| 92 | |
| 93 | # 7. Cleanup |
| 94 | echo "Cleaning up temporary files..." |
| 95 | umount "$MOUNT_POINT" || true |
| 96 | rm -f "$ISO_FILE" |
| 97 | rm -rf "$MOUNT_POINT" |
| 98 | |
| 99 | echo "Installation and cleanup completed." |
packer_rename-no-mf.sh
· 521 B · Bash
Brut
#!/bin/bash
set -o errexit
set -o nounset
set -o pipefail
VM_NEW_NAME=$1
# 提取当前OVF文件名
VM_NOW_NAME=$(basename *.ovf | awk -F '.ovf' '{print $1}')
# 重命名OVF文件和VMDK文件
mv "$VM_NOW_NAME".ovf "$VM_NEW_NAME".ovf
mv "$VM_NOW_NAME"-1.vmdk "$VM_NEW_NAME".vmdk
# 在OVF文件中替换名称
sed -i "s/$VM_NOW_NAME/$VM_NEW_NAME/g" "$VM_NEW_NAME".ovf
sed -i "s/${VM_NEW_NAME}-1/$VM_NEW_NAME/g" "$VM_NEW_NAME".ovf
echo "#### PACKER_COMPLETE ####"
# 脚本执行完以后,删除本脚本
rm -f "$0"
| 1 | #!/bin/bash |
| 2 | |
| 3 | set -o errexit |
| 4 | set -o nounset |
| 5 | set -o pipefail |
| 6 | |
| 7 | VM_NEW_NAME=$1 |
| 8 | |
| 9 | # 提取当前OVF文件名 |
| 10 | VM_NOW_NAME=$(basename *.ovf | awk -F '.ovf' '{print $1}') |
| 11 | |
| 12 | # 重命名OVF文件和VMDK文件 |
| 13 | mv "$VM_NOW_NAME".ovf "$VM_NEW_NAME".ovf |
| 14 | mv "$VM_NOW_NAME"-1.vmdk "$VM_NEW_NAME".vmdk |
| 15 | |
| 16 | # 在OVF文件中替换名称 |
| 17 | sed -i "s/$VM_NOW_NAME/$VM_NEW_NAME/g" "$VM_NEW_NAME".ovf |
| 18 | sed -i "s/${VM_NEW_NAME}-1/$VM_NEW_NAME/g" "$VM_NEW_NAME".ovf |
| 19 | |
| 20 | echo "#### PACKER_COMPLETE ####" |
| 21 | |
| 22 | # 脚本执行完以后,删除本脚本 |
| 23 | rm -f "$0" |
packer_rename.sh
· 716 B · Bash
Brut
#!/bin/bash
set -o errexit
set -o nounset
set -o pipefail
VM_NEW_NAME=$1
# 提取当前OVF文件名
VM_NOW_NAME=$(basename *.ovf | awk -F '.ovf' '{print $1}')
# 重命名OVF文件和VMDK文件
mv "$VM_NOW_NAME".ovf "$VM_NEW_NAME".ovf
mv "$VM_NOW_NAME"-1.vmdk "$VM_NEW_NAME".vmdk
# 在OVF文件中替换名称
sed -i "s/$VM_NOW_NAME/$VM_NEW_NAME/g" "$VM_NEW_NAME".ovf
sed -i "s/${VM_NEW_NAME}-1/$VM_NEW_NAME/g" "$VM_NEW_NAME".ovf
# 增加 mf 文件
openssl sha256 "$VM_NEW_NAME".vmdk "$VM_NEW_NAME".ovf > "$VM_NEW_NAME".mf
# 导出成 OVA
tar -cf "$VM_NEW_NAME".ova "$VM_NEW_NAME".ovf "$VM_NEW_NAME".vmdk "$VM_NEW_NAME".mf
echo "#### PACKER_COMPLETE ####"
# 脚本执行完以后,删除本脚本
rm -f "$0"
| 1 | #!/bin/bash |
| 2 | |
| 3 | set -o errexit |
| 4 | set -o nounset |
| 5 | set -o pipefail |
| 6 | |
| 7 | VM_NEW_NAME=$1 |
| 8 | |
| 9 | # 提取当前OVF文件名 |
| 10 | VM_NOW_NAME=$(basename *.ovf | awk -F '.ovf' '{print $1}') |
| 11 | |
| 12 | # 重命名OVF文件和VMDK文件 |
| 13 | mv "$VM_NOW_NAME".ovf "$VM_NEW_NAME".ovf |
| 14 | mv "$VM_NOW_NAME"-1.vmdk "$VM_NEW_NAME".vmdk |
| 15 | |
| 16 | # 在OVF文件中替换名称 |
| 17 | sed -i "s/$VM_NOW_NAME/$VM_NEW_NAME/g" "$VM_NEW_NAME".ovf |
| 18 | sed -i "s/${VM_NEW_NAME}-1/$VM_NEW_NAME/g" "$VM_NEW_NAME".ovf |
| 19 | |
| 20 | # 增加 mf 文件 |
| 21 | openssl sha256 "$VM_NEW_NAME".vmdk "$VM_NEW_NAME".ovf > "$VM_NEW_NAME".mf |
| 22 | |
| 23 | # 导出成 OVA |
| 24 | tar -cf "$VM_NEW_NAME".ova "$VM_NEW_NAME".ovf "$VM_NEW_NAME".vmdk "$VM_NEW_NAME".mf |
| 25 | |
| 26 | echo "#### PACKER_COMPLETE ####" |
| 27 | |
| 28 | # 脚本执行完以后,删除本脚本 |
| 29 | rm -f "$0" |
set-docker-prosy.sh
· 1.0 KiB · Bash
Brut
#!/bin/bash
# 获取默认网关地址
GATEWAY=$(ip route | awk '/default/ {print $3}' | uniq | head -n 1)
# 创建配置目录
sudo mkdir -p /etc/systemd/system/docker.service.d
# 根据默认网关设置对应的代理地址
case "$GATEWAY" in
192.168.48.1)
PROXY="http://192.168.48.48:7891"
;;
172.29.48.1)
PROXY="http://172.29.48.3:7891"
;;
172.29.16.1)
PROXY="http://172.29.16.3:7891"
;;
172.29.80.1)
PROXY="http://172.29.80.3:7891"
;;
172.29.112.1)
PROXY="http://172.29.112.3:7891"
;;
*)
echo "未识别的默认网关: $GATEWAY"
exit 1
;;
esac
# 写入 docker 的代理配置
sudo bash -c "cat << UK > /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment=\"HTTP_PROXY=$PROXY\"
Environment=\"HTTPS_PROXY=$PROXY\"
Environment=\"NO_PROXY=localhost,127.0.0.1,10.0.0.0/8,192.168.0.0/16,10.0.0.0/8,172.29.0.0/16,localhost,registry.smtx.io\"
UK"
# 应用更改
sudo systemctl daemon-reload
sudo systemctl restart docker
# 检查代理配置是否生效
docker info | grep -i proxy
| 1 | #!/bin/bash |
| 2 | |
| 3 | # 获取默认网关地址 |
| 4 | GATEWAY=$(ip route | awk '/default/ {print $3}' | uniq | head -n 1) |
| 5 | |
| 6 | # 创建配置目录 |
| 7 | sudo mkdir -p /etc/systemd/system/docker.service.d |
| 8 | |
| 9 | # 根据默认网关设置对应的代理地址 |
| 10 | case "$GATEWAY" in |
| 11 | 192.168.48.1) |
| 12 | PROXY="http://192.168.48.48:7891" |
| 13 | ;; |
| 14 | 172.29.48.1) |
| 15 | PROXY="http://172.29.48.3:7891" |
| 16 | ;; |
| 17 | 172.29.16.1) |
| 18 | PROXY="http://172.29.16.3:7891" |
| 19 | ;; |
| 20 | 172.29.80.1) |
| 21 | PROXY="http://172.29.80.3:7891" |
| 22 | ;; |
| 23 | 172.29.112.1) |
| 24 | PROXY="http://172.29.112.3:7891" |
| 25 | ;; |
| 26 | *) |
| 27 | echo "未识别的默认网关: $GATEWAY" |
| 28 | exit 1 |
| 29 | ;; |
| 30 | esac |
| 31 | |
| 32 | # 写入 docker 的代理配置 |
| 33 | sudo bash -c "cat << UK > /etc/systemd/system/docker.service.d/http-proxy.conf |
| 34 | [Service] |
| 35 | Environment=\"HTTP_PROXY=$PROXY\" |
| 36 | Environment=\"HTTPS_PROXY=$PROXY\" |
| 37 | Environment=\"NO_PROXY=localhost,127.0.0.1,10.0.0.0/8,192.168.0.0/16,10.0.0.0/8,172.29.0.0/16,localhost,registry.smtx.io\" |
| 38 | UK" |
| 39 | |
| 40 | # 应用更改 |
| 41 | sudo systemctl daemon-reload |
| 42 | sudo systemctl restart docker |
| 43 | |
| 44 | # 检查代理配置是否生效 |
| 45 | docker info | grep -i proxy |
| 46 |
snippetfile1.txt
· 521 B · Text
Brut
#!/bin/bash
set -o errexit
set -o nounset
set -o pipefail
VM_NEW_NAME=$1
# 进入 WORKDIR
cd assets
# 提取当前OVF文件名
VM_NOW_NAME=$(basename packer-*.ovf | awk -F. '{print $1}')
# 重命名OVF文件和VMDK文件
mv "$VM_NOW_NAME".ovf "$VM_NEW_NAME".ovf
mv "$VM_NOW_NAME"-1.vmdk "$VM_NEW_NAME"-1.vmdk
# 在OVF文件中替换名称
sed -i "s/$VM_NOW_NAME/$VM_NEW_NAME/g" "$VM_NEW_NAME".ovf
# 导出成 OVA
tar -cf "$VM_NEW_NAME".ova "$VM_NEW_NAME".ovf "$VM_NEW_NAME"-1.vmdk
echo "#### PACKER_COMPLETE ####"
| 1 | #!/bin/bash |
| 2 | |
| 3 | set -o errexit |
| 4 | set -o nounset |
| 5 | set -o pipefail |
| 6 | |
| 7 | VM_NEW_NAME=$1 |
| 8 | |
| 9 | # 进入 WORKDIR |
| 10 | cd assets |
| 11 | |
| 12 | # 提取当前OVF文件名 |
| 13 | VM_NOW_NAME=$(basename packer-*.ovf | awk -F. '{print $1}') |
| 14 | |
| 15 | # 重命名OVF文件和VMDK文件 |
| 16 | mv "$VM_NOW_NAME".ovf "$VM_NEW_NAME".ovf |
| 17 | mv "$VM_NOW_NAME"-1.vmdk "$VM_NEW_NAME"-1.vmdk |
| 18 | |
| 19 | # 在OVF文件中替换名称 |
| 20 | sed -i "s/$VM_NOW_NAME/$VM_NEW_NAME/g" "$VM_NEW_NAME".ovf |
| 21 | |
| 22 | # 导出成 OVA |
| 23 | tar -cf "$VM_NEW_NAME".ova "$VM_NEW_NAME".ovf "$VM_NEW_NAME"-1.vmdk |
| 24 | |
| 25 | echo "#### PACKER_COMPLETE ####" |
tower_shutdown_delete-old-vm.sh
· 670 B · Bash
Brut
#!/bin/bash
set -o errexit
set -o nounset
set -o pipefail
export TOWER_HOST=$TOWER_HOST
export TOWER_USERNAME=$TOWER_USERNAME
export TOWER_PASSWORD=$TOWER_PASSWORD
export VM_NAME=$VM_NAME
export TOWER_SOURCE=LOCAL
env
# 下载二进制命令并授予执行权限
wget -O /tmp/shutdown-vm http://192.168.48.2/Software/bin/tower/shutdown-vm-alpine
wget -O /tmp/delete-vm http://192.168.48.2/Software/bin/tower/delete-vm-alpine
chmod +x /tmp/shutdown-vm /tmp/delete-vm
# 强制关机
/tmp/shutdown-vm -force -vm $VM_NAME || true
# 删除虚拟机并移入回收站
/tmp/delete-vm -recycle-bin -vm $VM_NAME || true
# 脚本执行完以后,删除本脚本
rm -f "$0"
| 1 | #!/bin/bash |
| 2 | |
| 3 | set -o errexit |
| 4 | set -o nounset |
| 5 | set -o pipefail |
| 6 | |
| 7 | export TOWER_HOST=$TOWER_HOST |
| 8 | export TOWER_USERNAME=$TOWER_USERNAME |
| 9 | export TOWER_PASSWORD=$TOWER_PASSWORD |
| 10 | export VM_NAME=$VM_NAME |
| 11 | export TOWER_SOURCE=LOCAL |
| 12 | |
| 13 | env |
| 14 | |
| 15 | # 下载二进制命令并授予执行权限 |
| 16 | wget -O /tmp/shutdown-vm http://192.168.48.2/Software/bin/tower/shutdown-vm-alpine |
| 17 | wget -O /tmp/delete-vm http://192.168.48.2/Software/bin/tower/delete-vm-alpine |
| 18 | chmod +x /tmp/shutdown-vm /tmp/delete-vm |
| 19 | |
| 20 | # 强制关机 |
| 21 | /tmp/shutdown-vm -force -vm $VM_NAME || true |
| 22 | |
| 23 | # 删除虚拟机并移入回收站 |
| 24 | /tmp/delete-vm -recycle-bin -vm $VM_NAME || true |
| 25 | |
| 26 | # 脚本执行完以后,删除本脚本 |
| 27 | rm -f "$0" |