Compare commits

1 Commits

Author SHA1 Message Date
zhaoyukun
efae786eed add_time_select 2026-04-28 10:40:34 +08:00

View File

@@ -215,7 +215,7 @@ echo "rc.local 已写入 monitor VLAN 配置"
# ----------------------- # -----------------------
echo "=== k3s 安装配置 ===" echo "=== k3s 安装配置 ==="
echo "=== 下载 K3s 二进制到 /usr/bin/ ===" echo "=== 下载 K3s 二进制到 /usr/bin/ ==="
curl -L -o /usr/bin/k3s "https://file.piicloud.com/f/acfd6bc97c7e42de8647/?dl=1" curl -L -o /usr/bin/k3s "https://file.piicloud.com/f/4108d2f3b3c047be85a8/?dl=1"
chmod +x /usr/bin/k3s chmod +x /usr/bin/k3s
ls -lh /usr/bin/k3s ls -lh /usr/bin/k3s
@@ -231,9 +231,9 @@ fi
# 下载镜像 # 下载镜像
[ -f "/var/lib/rancher/agent/images/base.tar" ] || \ [ -f "/var/lib/rancher/agent/images/base.tar" ] || \
curl -L -o /var/lib/rancher/agent/images/base.tar "https://file.piicloud.com/f/40e4c1cc37564dd8900d/?dl=1" curl -L -o /var/lib/rancher/agent/images/base.tar "https://file.piicloud.com/f/11cce6158b9e4f59ba2c/?dl=1"
[ -f "/var/lib/rancher/agent/images/expend.tar" ] || \ [ -f "/var/lib/rancher/agent/images/expend.tar" ] || \
curl -L -o /var/lib/rancher/agent/images/expend.tar "https://file.piicloud.com/f/c6cf4a7811d344ca9bf6/?dl=1" curl -L -o /var/lib/rancher/agent/images/expend.tar "https://file.piicloud.com/f/414c2646352945b282c0/?dl=1"
chown root:root /var/lib/rancher/agent/images/*.tar chown root:root /var/lib/rancher/agent/images/*.tar
chmod 644 /var/lib/rancher/agent/images/*.tar chmod 644 /var/lib/rancher/agent/images/*.tar
@@ -425,70 +425,72 @@ echo "=== 时间同步配置 ==="
: "${ENABLE_CHRONY:=true}" : "${ENABLE_CHRONY:=true}"
: "${ENABLE_GPTP:=false}" : "${ENABLE_GPTP:=false}"
if [[ "${ENABLE_CHRONY}" == "true" && "${ENABLE_GPTP}" == "true" ]]; then
echo "错误ENABLE_CHRONY 和 ENABLE_GPTP 不能同时为 true"
exit 1
fi
echo "=== 从 RTC 恢复系统时间 ==="
hwclock -s 2>/dev/null || hwclock --hctosys 2>/dev/null || true
date
if [[ "${ENABLE_CHRONY}" == "true" || "${ENABLE_GPTP}" == "true" ]]; then if [[ "${ENABLE_CHRONY}" == "true" || "${ENABLE_GPTP}" == "true" ]]; then
echo "安装时间同步相关组件..." echo "安装时间同步相关组件..."
apt update apt update
apt install -y chrony linuxptp apt install -y chrony linuxptp
fi fi
# ===================================================
# chrony 配置:由客户选择是否启用
# ===================================================
if [[ "${ENABLE_CHRONY}" == "true" ]]; then if [[ "${ENABLE_CHRONY}" == "true" ]]; then
echo "=== 启用 chrony 时间同步 ===" echo "=== 启用 chrony 时间同步 ==="
systemctl disable --now gptp.service 2>/dev/null || true
systemctl disable --now phc2sys.service 2>/dev/null || true
pkill ptp4l 2>/dev/null || true
pkill phc2sys 2>/dev/null || true
cp /etc/chrony/chrony.conf /etc/chrony/chrony.conf.bak 2>/dev/null || true cp /etc/chrony/chrony.conf /etc/chrony/chrony.conf.bak 2>/dev/null || true
cat > /etc/chrony/chrony.conf << EOF cat > /etc/chrony/chrony.conf << EOF
# 由 bushu.sh 自动生成 # 由 bushu.sh 自动生成
EOF EOF
for server in "${CHRONY_SERVERS[@]}"; do for server in "${CHRONY_SERVERS[@]}"; do
echo "server ${server} iburst" >> /etc/chrony/chrony.conf echo "server ${server}" >> /etc/chrony/chrony.conf
done done
cat >> /etc/chrony/chrony.conf << EOF cat >> /etc/chrony/chrony.conf << EOF
driftfile /var/lib/chrony/chrony.drift driftfile /var/lib/chrony/chrony.drift
makestep 1.0 -1 makestep 1.0 3
rtcsync rtcsync
logdir /var/log/chrony logdir /var/log/chrony
EOF EOF
systemctl enable --now chrony systemctl enable chrony
chronyc -a makestep || true systemctl restart chrony
sleep 3
chronyc sources -v || true chronyc sources || true
chronyc tracking || true chronyc tracking || true
elif [[ "${ENABLE_GPTP}" == "true" ]]; then echo "chrony 已启用"
else
echo "=== 未启用 chrony ==="
systemctl disable chrony 2>/dev/null || true
systemctl stop chrony 2>/dev/null || true
fi
# ===================================================
# gPTP 配置:由客户选择是否启用
# ===================================================
if [[ "${ENABLE_GPTP}" == "true" ]]; then
echo "=== 启用 gPTP 时间同步 ===" echo "=== 启用 gPTP 时间同步 ==="
systemctl disable --now chrony 2>/dev/null || true
: "${GPTP_IFACE:?请在 bushu.conf 中配置 GPTP_IFACE}" : "${GPTP_IFACE:?请在 bushu.conf 中配置 GPTP_IFACE}"
echo "gPTP 使用物理网卡: ${GPTP_IFACE}"
mkdir -p /usr/local/bin mkdir -p /usr/local/bin
mkdir -p /etc/linuxptp mkdir -p /etc/linuxptp
# -----------------------
# 创建 gPTP 配置文件
# -----------------------
cat > /etc/linuxptp/gptp.cfg << EOF cat > /etc/linuxptp/gptp.cfg << EOF
# 由 bushu.sh 自动生成 # 由 bushu.sh 自动生成
# gPTP / IEEE 802.1AS 配置 # gPTP / IEEE 802.1AS 配置
[global] [global]
gmCapable 0 gmCapable 1
priority1 248 priority1 248
priority2 248 priority2 248
logAnnounceInterval 0 logAnnounceInterval 0
@@ -506,29 +508,38 @@ delay_mechanism P2P
time_stamping hardware time_stamping hardware
EOF EOF
# -----------------------
# 创建 gPTP 执行脚本
# -----------------------
cat > /usr/local/bin/start-gptp.sh << 'EOF' cat > /usr/local/bin/start-gptp.sh << 'EOF'
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
GPTP_IFACE="${1:?Usage: start-gptp.sh <interface>}" GPTP_IFACE="${1:?Usage: start-gptp.sh <interface>}"
echo "gPTP interface: ${GPTP_IFACE}"
# 等待网卡出现
while ! ip link show "${GPTP_IFACE}" >/dev/null 2>&1; do while ! ip link show "${GPTP_IFACE}" >/dev/null 2>&1; do
echo "等待网卡 ${GPTP_IFACE} 出现..." echo "等待网卡 ${GPTP_IFACE} 出现..."
sleep 1 sleep 1
done done
# 启动网卡
ip link set dev "${GPTP_IFACE}" up ip link set dev "${GPTP_IFACE}" up
# 检查网卡是否支持硬件时间戳
if ethtool -T "${GPTP_IFACE}" 2>/dev/null | grep -q "hardware-transmit"; then if ethtool -T "${GPTP_IFACE}" 2>/dev/null | grep -q "hardware-transmit"; then
TS_MODE="hardware" TS_MODE="hardware"
else else
echo "警告:${GPTP_IFACE} 不支持硬件时间戳,切换为 software timestamp" echo "警告:${GPTP_IFACE} 可能不支持硬件时间戳,切换为 software timestamp"
TS_MODE="software" TS_MODE="software"
sed -i 's/^time_stamping.*/time_stamping software/' /etc/linuxptp/gptp.cfg sed -i 's/^time_stamping.*/time_stamping software/' /etc/linuxptp/gptp.cfg
fi fi
echo "gPTP timestamp mode: ${TS_MODE}" echo "gPTP timestamp mode: ${TS_MODE}"
# 启动 ptp4l使用 gPTP 配置
exec /usr/sbin/ptp4l \ exec /usr/sbin/ptp4l \
-i "${GPTP_IFACE}" \ -i "${GPTP_IFACE}" \
-f /etc/linuxptp/gptp.cfg \ -f /etc/linuxptp/gptp.cfg \
@@ -537,9 +548,13 @@ EOF
chmod +x /usr/local/bin/start-gptp.sh chmod +x /usr/local/bin/start-gptp.sh
# -----------------------
# 创建 gPTP systemd 服务
# -----------------------
cat > /etc/systemd/system/gptp.service << EOF cat > /etc/systemd/system/gptp.service << EOF
[Unit] [Unit]
Description=gPTP IEEE 802.1AS Service Description=gPTP IEEE 802.1AS Service
Documentation=man:ptp4l
After=network-online.target After=network-online.target
Wants=network-online.target Wants=network-online.target
@@ -550,48 +565,20 @@ Restart=always
RestartSec=5 RestartSec=5
User=root User=root
[Install]
WantedBy=multi-user.target
EOF
cat > /etc/systemd/system/phc2sys.service << EOF
[Unit]
Description=Synchronize system clock from gPTP PHC
After=gptp.service
Requires=gptp.service
[Service]
Type=simple
ExecStartPre=/bin/sleep 10
ExecStart=/usr/sbin/phc2sys -s ${GPTP_IFACE} -c CLOCK_REALTIME -O 0 -m
Restart=always
RestartSec=5
User=root
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
systemctl daemon-reload systemctl daemon-reload
systemctl enable --now gptp.service systemctl enable gptp.service
systemctl enable --now phc2sys.service systemctl restart gptp.service
echo "gPTP 服务已启用"
systemctl status gptp.service --no-pager || true
else else
echo "=== 未启用时间同步 ===" echo "=== 未启用 gPTP ==="
systemctl disable --now chrony 2>/dev/null || true systemctl disable gptp.service 2>/dev/null || true
systemctl disable --now gptp.service 2>/dev/null || true systemctl stop gptp.service 2>/dev/null || true
systemctl disable --now phc2sys.service 2>/dev/null || true
fi
echo "=== 检查系统时间 ==="
date
timedatectl || true
YEAR=$(date +%Y)
if (( YEAR < 2024 )); then
echo "错误:系统时间异常,当前时间:$(date)"
echo "拒绝继续执行,避免 apt/curl/k3s TLS 失败"
exit 1
fi fi