-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploy_icecc.sh
More file actions
executable file
·147 lines (129 loc) · 4.43 KB
/
Copy pathdeploy_icecc.sh
File metadata and controls
executable file
·147 lines (129 loc) · 4.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#!/usr/bin/env bash
set -euo pipefail
echo "==> Installing icecc..."
sudo apt install -y icecc
echo "==> Configuring /etc/icecc/icecc.conf..."
sudo sed -i \
's/^ICECC_NETNAME=""/ICECC_NETNAME="tailscale"/' \
/etc/icecc/icecc.conf
max_jobs=$(($(nproc) - 2))
sudo sed -i \
"s/^ICECC_MAX_JOBS=\"\"/ICECC_MAX_JOBS=\"$max_jobs\"/" \
/etc/icecc/icecc.conf
sudo sed -i \
's/^ICECC_SCHEDULER_HOST=""/ICECC_SCHEDULER_HOST="10.20.33.146"/' \
/etc/icecc/icecc.conf
echo "==> Restarting icecc..."
sudo systemctl restart iceccd
# ---- 自动同步服务询问与安装 ----
CONSENT_FILE="/var/lib/icecc/.sync_service_consent"
ask_sync_service() {
echo ""
echo "============================================"
echo " 是否安装自动同步服务?"
echo "============================================"
echo ""
echo "安装 systemd 定时服务后,系统将每 6 小时从服务端"
echo "(10.20.33.215) 自动同步更新脚本并在后台执行,"
echo "确保 icecc 配置和客户端脚本始终保持最新。"
echo ""
echo "如不安装此服务,您需要手动执行以下命令来更新配置:"
echo " bash <(curl -fsSL http://10.20.33.215:8572/deploy_icecc.sh)"
echo ""
echo -n "是否安装自动同步服务?(y/N): "
read -r reply
case "$reply" in
[yY]|[yY][eE][sS]) return 0 ;;
*) return 1 ;;
esac
}
install_sync_service() {
echo "==> 安装 icecc 自动同步服务..."
# 写入 systemd service
sudo tee /etc/systemd/system/icecc-check.service > /dev/null <<'ICECC_SVC'
[Unit]
Description=Refresh icecc deployment from remote script
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/bin/env bash -c 'bash <(curl -fsSL http://10.20.33.215:8572/deploy_icecc.sh)'
ICECC_SVC
# 写入 systemd timer
sudo tee /etc/systemd/system/icecc-check.timer > /dev/null <<'ICECC_TMR'
[Unit]
Description=Run icecc-check periodically to keep deployment current
[Timer]
OnBootSec=10min
OnUnitActiveSec=6h
RandomizedDelaySec=5min
Persistent=true
[Install]
WantedBy=timers.target
ICECC_TMR
sudo systemctl daemon-reload
sudo systemctl enable --now icecc-check.timer
# 写入标识文件,下次不再询问
sudo mkdir -p /var/lib/icecc
echo "installed" | sudo tee "$CONSENT_FILE" >/dev/null
echo "==> icecc-check.service + icecc-check.timer 已安装并启动,每 6 小时同步一次。"
}
remove_sync_service() {
echo "==> 停止并移除 icecc-check 服务..."
sudo systemctl disable --now icecc-check.timer 2>/dev/null || true
sudo systemctl disable --now icecc-check.service 2>/dev/null || true
sudo rm -f /etc/systemd/system/icecc-check.timer
sudo rm -f /etc/systemd/system/icecc-check.service
sudo systemctl daemon-reload
sudo rm -f "$CONSENT_FILE"
echo "==> 已移除 icecc-check 服务与标识。"
}
# --- 判断是否需要询问 ---
if [ -f "$CONSENT_FILE" ]; then
echo ""
echo "============================================"
echo " 检测到已安装标识,是否继续保留自动同步服务?"
echo "============================================"
echo ""
echo -n "30秒内选择 y/N (超时默认保留): "
read -t 30 reply || true
case "$reply" in
[nN]|[nN][oO])
remove_sync_service
;;
*)
if ! systemctl is-enabled icecc-check.timer &>/dev/null 2>&1; then
sudo systemctl enable --now icecc-check.timer
fi
echo "==> 自动同步服务已保留。"
;;
esac
else
if ask_sync_service; then
install_sync_service
else
remove_sync_service
echo ""
echo "============================================"
echo " 未安装自动同步服务"
echo "============================================"
echo " 如需手动同步,请执行:"
echo " bash <(curl -fsSL http://10.20.33.215:8572/deploy_icecc.sh)"
echo ""
echo " 您也可以稍后手动安装此服务:"
echo " 再次执行本脚本即可重新询问。"
echo "============================================"
fi
fi
echo ""
echo "=== Done ==="
echo ""
echo "Add the following to ~/.bashrc or ~/.zshrc:"
echo ""
cat << 'PROFILE'
if command -v icecc >/dev/null && [[ "$PATH" != *"icecc"* ]]; then
export PATH="/usr/lib/icecc/bin/:$PATH"
fi
PROFILE
echo ""
echo "Then run: source ~/.bashrc (or re-login)"