feat: 添加时间同步配置功能至安装脚本
- 在 install.sh 中新增 sync_time 函数,配置系统时间同步,设置时区为 Asia/Shanghai,并安装 chrony。 - 配置 NTP 服务器为阿里云和腾讯云,确保时间同步的准确性。 - 更新主函数以调用时间同步配置,优化安装流程。
This commit is contained in:
138
install.sh
138
install.sh
@@ -410,6 +410,119 @@ install_dependencies() {
|
||||
echo -e "${GREEN}✓ 系统依赖安装完成${NC}"
|
||||
}
|
||||
|
||||
# 配置时间同步
|
||||
sync_time() {
|
||||
echo -e "${BLUE}配置时间同步...${NC}"
|
||||
|
||||
# 1. 设置时区为 Asia/Shanghai
|
||||
echo -e "${BLUE}[1/6] 设置时区为 Asia/Shanghai${NC}"
|
||||
if command -v timedatectl > /dev/null 2>&1; then
|
||||
sudo timedatectl set-timezone Asia/Shanghai 2>/dev/null || {
|
||||
echo -e "${YELLOW}⚠ timedatectl 设置时区失败,尝试其他方法${NC}"
|
||||
# 尝试创建时区链接(适用于较老的系统)
|
||||
if [ -f /usr/share/zoneinfo/Asia/Shanghai ]; then
|
||||
sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 2>/dev/null || true
|
||||
fi
|
||||
}
|
||||
elif [ -f /usr/share/zoneinfo/Asia/Shanghai ]; then
|
||||
sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# 2. 安装 chrony
|
||||
echo -e "${BLUE}[2/6] 安装 chrony${NC}"
|
||||
if [ "$OS" = "ubuntu" ] || [ "$OS" = "debian" ]; then
|
||||
if ! dpkg -l 2>/dev/null | grep -q "^ii.*chrony"; then
|
||||
sudo apt-get install -y chrony
|
||||
else
|
||||
echo -e "${BLUE}chrony 已安装,跳过${NC}"
|
||||
fi
|
||||
elif [ "$OS" = "centos" ] || [ "$OS" = "rhel" ] || [ "$OS" = "rocky" ] || [ "$OS" = "almalinux" ]; then
|
||||
if ! rpm -q chrony &>/dev/null; then
|
||||
sudo yum install -y chrony
|
||||
else
|
||||
echo -e "${BLUE}chrony 已安装,跳过${NC}"
|
||||
fi
|
||||
else
|
||||
echo -e "${YELLOW}⚠ 未知系统类型,跳过 chrony 安装${NC}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# 3. 配置 NTP 服务器
|
||||
echo -e "${BLUE}[3/6] 配置 NTP 服务器${NC}"
|
||||
CONF="/etc/chrony.conf"
|
||||
|
||||
if [ -f "$CONF" ]; then
|
||||
# 备份配置文件
|
||||
if [ ! -f "${CONF}.backup.$(date +%Y%m%d)" ]; then
|
||||
sudo cp "$CONF" "${CONF}.backup.$(date +%Y%m%d)" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# 注释掉原有的 server 行
|
||||
sudo sed -i 's/^server /#server /g' "$CONF" 2>/dev/null || true
|
||||
|
||||
# 添加中国 NTP 服务器(如果还没有)
|
||||
if ! grep -q "ntp.aliyun.com" "$CONF"; then
|
||||
sudo tee -a "$CONF" > /dev/null <<EOF
|
||||
|
||||
# China NTP servers (added by LinkMaster Node installer)
|
||||
server ntp.aliyun.com iburst
|
||||
server ntp.tencent.com iburst
|
||||
server ntp1.aliyun.com iburst
|
||||
EOF
|
||||
fi
|
||||
else
|
||||
echo -e "${YELLOW}⚠ chrony.conf 不存在,跳过配置${NC}"
|
||||
fi
|
||||
|
||||
# 4. 启动并启用 chronyd
|
||||
echo -e "${BLUE}[4/6] 启动 chronyd${NC}"
|
||||
if command -v systemctl > /dev/null 2>&1; then
|
||||
sudo systemctl enable chronyd --now 2>/dev/null || {
|
||||
# 如果 systemctl 失败,尝试使用 service 命令
|
||||
if command -v service > /dev/null 2>&1; then
|
||||
sudo service chronyd start 2>/dev/null || true
|
||||
sudo chkconfig chronyd on 2>/dev/null || true
|
||||
fi
|
||||
}
|
||||
elif command -v service > /dev/null 2>&1; then
|
||||
sudo service chronyd start 2>/dev/null || true
|
||||
sudo chkconfig chronyd on 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# 等待服务启动
|
||||
sleep 2
|
||||
|
||||
# 5. 立即强制同步
|
||||
echo -e "${BLUE}[5/6] 强制同步系统时间${NC}"
|
||||
if command -v chronyc > /dev/null 2>&1; then
|
||||
sudo chronyc -a makestep 2>/dev/null || {
|
||||
# 如果 makestep 失败,尝试使用 sources 和 sourcestats
|
||||
sudo chronyc sources 2>/dev/null || true
|
||||
sudo chronyc sourcestats 2>/dev/null || true
|
||||
}
|
||||
fi
|
||||
|
||||
# 6. 写入硬件时间
|
||||
echo -e "${BLUE}[6/6] 写入硬件时钟${NC}"
|
||||
if command -v hwclock > /dev/null 2>&1; then
|
||||
sudo hwclock --systohc 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# 显示时间状态
|
||||
echo -e "${BLUE}当前时间状态:${NC}"
|
||||
if command -v timedatectl > /dev/null 2>&1; then
|
||||
sudo timedatectl status 2>/dev/null || true
|
||||
else
|
||||
date
|
||||
if command -v hwclock > /dev/null 2>&1; then
|
||||
echo -e "${BLUE}硬件时钟:${NC}"
|
||||
sudo hwclock 2>/dev/null || true
|
||||
fi
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}✓ 时间同步配置完成${NC}"
|
||||
}
|
||||
|
||||
# 从官网下载安装 Go
|
||||
install_go_from_official() {
|
||||
echo -e "${BLUE}从 Go 官网下载安装...${NC}"
|
||||
@@ -1515,26 +1628,29 @@ main() {
|
||||
echo -e "${BLUE}后端地址: ${BACKEND_URL}${NC}"
|
||||
echo ""
|
||||
|
||||
echo -e "${BLUE}[1/8] 检测系统类型...${NC}"
|
||||
echo -e "${BLUE}[1/11] 检测系统类型...${NC}"
|
||||
detect_system
|
||||
|
||||
# 检查是否已安装,如果已安装则先卸载
|
||||
if check_installed; then
|
||||
echo -e "${BLUE}[2/8] 卸载已存在的服务...${NC}"
|
||||
echo -e "${BLUE}[2/11] 卸载已存在的服务...${NC}"
|
||||
uninstall_service
|
||||
else
|
||||
echo -e "${BLUE}[2/8] 检查已安装服务...${NC}"
|
||||
echo -e "${BLUE}[2/11] 检查已安装服务...${NC}"
|
||||
echo -e "${GREEN}✓ 未检测到已安装的服务${NC}"
|
||||
fi
|
||||
|
||||
echo -e "${BLUE}[3/8] 检测并配置镜像源...${NC}"
|
||||
echo -e "${BLUE}[3/11] 检测并配置镜像源...${NC}"
|
||||
detect_fastest_mirror
|
||||
|
||||
echo -e "${BLUE}[4/8] 安装系统依赖...${NC}"
|
||||
echo -e "${BLUE}[4/11] 安装系统依赖...${NC}"
|
||||
install_dependencies
|
||||
|
||||
echo -e "${BLUE}[5/11] 配置时间同步...${NC}"
|
||||
sync_time
|
||||
|
||||
# 优先尝试从 Releases 下载二进制文件
|
||||
echo -e "${BLUE}[5/8] 下载或编译二进制文件...${NC}"
|
||||
echo -e "${BLUE}[6/11] 下载或编译二进制文件...${NC}"
|
||||
if ! download_binary_from_releases; then
|
||||
echo -e "${BLUE}从 Releases 下载失败,开始从源码编译...${NC}"
|
||||
build_from_source
|
||||
@@ -1542,19 +1658,19 @@ main() {
|
||||
echo -e "${GREEN}✓ 使用预编译二进制文件,跳过编译步骤${NC}"
|
||||
fi
|
||||
|
||||
echo -e "${BLUE}[6/8] 创建 systemd 服务...${NC}"
|
||||
echo -e "${BLUE}[7/11] 创建 systemd 服务...${NC}"
|
||||
create_service
|
||||
|
||||
echo -e "${BLUE}[7/8] 配置防火墙规则...${NC}"
|
||||
echo -e "${BLUE}[8/11] 配置防火墙规则...${NC}"
|
||||
configure_firewall
|
||||
|
||||
echo -e "${BLUE}[8/8] 登记节点到后端服务器...${NC}"
|
||||
echo -e "${BLUE}[9/11] 登记节点到后端服务器...${NC}"
|
||||
register_node
|
||||
|
||||
echo -e "${BLUE}[9/9] 启动服务...${NC}"
|
||||
echo -e "${BLUE}[10/11] 启动服务...${NC}"
|
||||
start_service
|
||||
|
||||
echo -e "${BLUE}[10/10] 验证安装...${NC}"
|
||||
echo -e "${BLUE}[11/11] 验证安装...${NC}"
|
||||
verify_installation
|
||||
|
||||
echo ""
|
||||
|
||||
Reference in New Issue
Block a user