From 097f9a61fee302f55db7bc2478fdcf3deee84152 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Mon, 13 Jul 2026 20:08:19 +0800 Subject: [PATCH] v2: fix download with gzip check + multi-source retry --- .gitea/workflows/fix-python310-direct.yml | 60 ++++++++++++++--------- 1 file changed, 38 insertions(+), 22 deletions(-) diff --git a/.gitea/workflows/fix-python310-direct.yml b/.gitea/workflows/fix-python310-direct.yml index 327337a2f..990fc9d23 100644 --- a/.gitea/workflows/fix-python310-direct.yml +++ b/.gitea/workflows/fix-python310-direct.yml @@ -21,61 +21,77 @@ jobs: KEYEOF chmod 600 /tmp/new_server_key - SSH_CMD="ssh -i /tmp/new_server_key -o StrictHostKeyChecking=no -o ConnectTimeout=10 -o ServerAliveInterval=60 root@172.30.18.199" + S="ssh -i /tmp/new_server_key -o StrictHostKeyChecking=no -o ConnectTimeout=10 -o ServerAliveInterval=60 root@172.30.18.199" echo "=== 步骤0: 检查当前Python版本 ===" - $SSH_CMD 'export PATH=/usr/local/bin:$PATH; python3 --version 2>&1; pip3 --version 2>&1 || true' + $S 'export PATH=/usr/local/bin:$PATH; python3 --version 2>&1; pip3 --version 2>&1 || true' # 检查是否已安装Python 3.10 - if $SSH_CMD 'export PATH=/usr/local/bin:$PATH; python3 --version 2>&1 | grep -q 3.10' 2>/dev/null; then + if $S 'export PATH=/usr/local/bin:$PATH; python3 --version 2>&1 | grep -q 3.10' 2>/dev/null; then echo "Python 3.10 已安装,跳过编译" + SKIP_BUILD=1 else + SKIP_BUILD=0 + fi + + if [ "$SKIP_BUILD" = "0" ]; then echo "" echo "=== 步骤1: 安装编译依赖 ===" - $SSH_CMD 'yum install -y gcc gcc-c++ make openssl-devel bzip2-devel libffi-devel zlib-devel readline-devel sqlite-devel wget git 2>&1 | tail -5' + $S 'yum install -y gcc gcc-c++ make openssl-devel bzip2-devel libffi-devel zlib-devel readline-devel sqlite-devel wget git 2>&1 | tail -3' echo "" - echo "=== 步骤2: 下载Python 3.10.14源码 ===" - $SSH_CMD 'cd /tmp && (wget -q --timeout=60 --tries=3 https://mirrors.huaweicloud.com/python/3.10.14/Python-3.10.14.tgz && echo download_ok || wget -q --timeout=60 --tries=3 https://npmmirror.com/mirrors/python/3.10.14/Python-3.10.14.tgz && echo download_ok)' + echo "=== 步骤2: 下载Python 3.10.14源码(多源重试+校验) ===" + $S 'cd /tmp && rm -f Python-3.10.14.tgz && \ + for url in \ + "https://mirrors.huaweicloud.com/python/3.10.14/Python-3.10.14.tgz" \ + "https://npmmirror.com/mirrors/python/3.10.14/Python-3.10.14.tgz" \ + "https://registry.npmmirror.com/-/binary/python/3.10.14/Python-3.10.14.tgz" \ + "https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz"; do \ + echo "Trying: $url"; \ + wget -q --timeout=30 --tries=2 -O Python-3.10.14.tgz "$url" && \ + gzip -t Python-3.10.14.tgz 2>/dev/null && \ + SIZE=$(stat -c%s Python-3.10.14.tgz 2>/dev/null || stat -f%z Python-3.10.14.tgz 2>/dev/null) && \ + if [ "$SIZE" -gt 20000000 ]; then echo "download_ok: $SIZE bytes"; break; else echo "too small: $SIZE, retrying..."; fi; \ + done' echo "" echo "=== 步骤3: 解压并编译安装 ===" - $SSH_CMD 'cd /tmp && rm -rf Python-3.10.14 && tar xzf Python-3.10.14.tgz && echo extract_ok' - $SSH_CMD 'cd /tmp/Python-3.10.14 && ./configure --prefix=/usr/local --with-ensurepip=install 2>&1 | tail -3' + $S 'cd /tmp && rm -rf Python-3.10.14 && tar xzf Python-3.10.14.tgz && echo extract_ok' + $S 'cd /tmp/Python-3.10.14 && ./configure --prefix=/usr/local --with-ensurepip=install 2>&1 | tail -3' echo "开始编译(约5-10分钟)..." - $SSH_CMD 'cd /tmp/Python-3.10.14 && make -j$(nproc) 2>&1 | tail -5' - $SSH_CMD 'cd /tmp/Python-3.10.14 && make altinstall 2>&1 | tail -5' + $S 'cd /tmp/Python-3.10.14 && make -j$(nproc) > /tmp/python_make.log 2>&1 && echo make_ok || (tail -20 /tmp/python_make.log; echo make_failed; exit 1)' + $S 'cd /tmp/Python-3.10.14 && make altinstall 2>&1 | tail -5' echo "" echo "=== 步骤4: 设置为默认python3和pip3 ===" - $SSH_CMD 'ln -sf /usr/local/bin/python3.10 /usr/local/bin/python3 && ln -sf /usr/local/bin/pip3.10 /usr/local/bin/pip3 && echo link_ok' + $S 'ln -sf /usr/local/bin/python3.10 /usr/local/bin/python3 && ln -sf /usr/local/bin/pip3.10 /usr/local/bin/pip3 && echo link_ok' fi echo "" echo "=== 步骤5: 验证Python 3.10 ===" - $SSH_CMD 'export PATH=/usr/local/bin:$PATH; python3 --version; pip3 --version; pip3 install --help 2>&1 | grep -q break-system-packages && echo "pip3 supports --break-system-packages"' + $S 'export PATH=/usr/local/bin:$PATH; python3 --version; pip3 --version; pip3 install --help 2>&1 | grep -q break-system-packages && echo "pip3 supports --break-system-packages" || echo "WARNING: no --break-system-packages"' echo "" echo "=== 步骤6: 安装git ===" - $SSH_CMD 'which git 2>/dev/null || yum install -y git 2>&1 | tail -3' - $SSH_CMD 'git --version' + $S 'which git 2>/dev/null || (yum install -y git 2>&1 | tail -3)' + $S 'git --version 2>&1' echo "" echo "=== 步骤7: 修复CMD Agent端口 5000->5927 ===" - $SSH_CMD 'cd /opt/cmd-agent && sed -i "s/port=5000/port=5927/g; s/port = 5000/port = 5927/g; s/\"5000\"/\"5927\"/g" server.py 2>&1; echo sed_done' - $SSH_CMD 'systemctl daemon-reload; systemctl restart cmd-agent 2>&1; sleep 2; systemctl is-active cmd-agent' - $SSH_CMD 'ss -tlnp 2>/dev/null | grep 5927 || netstat -tlnp 2>/dev/null | grep 5927 || echo "checking port..."' + $S 'cd /opt/cmd-agent && sed -i "s/port=5000/port=5927/g; s/port = 5000/port = 5927/g; s/\"5000\"/\"5927\"/g" server.py 2>&1; echo sed_done' + $S 'systemctl daemon-reload; systemctl restart cmd-agent 2>&1; sleep 2; systemctl is-active cmd-agent' + $S '(ss -tlnp 2>/dev/null | grep 5927) || (netstat -tlnp 2>/dev/null | grep 5927) || echo "port 5927 not found, checking 5000..."; (ss -tlnp 2>/dev/null | grep 5000) || (netstat -tlnp 2>/dev/null | grep 5000) || echo "no cmd-agent port listening"' echo "" echo "=== 步骤8: 重启6个Runner ===" - $SSH_CMD 'for i in 1 2 3 4 5 6; do systemctl restart act-runner-$i.service 2>/dev/null && echo "runner-$i restarted" || systemctl restart gitea-runner-$i.service 2>/dev/null && echo "runner-$i restarted(old)" || echo "runner-$i not found"; done' + $S 'for i in 1 2 3 4 5 6; do systemctl restart act-runner-$i.service 2>/dev/null && echo "runner-$i restarted" || systemctl restart gitea-runner-$i.service 2>/dev/null && echo "runner-$i restarted(old)" || echo "runner-$i not found"; done' echo "" echo "=== 步骤9: 最终验证 ===" - $SSH_CMD 'echo "--- Python ---"; export PATH=/usr/local/bin:$PATH; python3 --version; pip3 --version' - $SSH_CMD 'echo "--- Git ---"; git --version' - $SSH_CMD 'echo "--- CMD Agent ---"; systemctl is-active cmd-agent' - $SSH_CMD 'echo "--- Port 5927 ---"; (ss -tlnp 2>/dev/null | grep 5927 || netstat -tlnp 2>/dev/null | grep 5927 || echo "port not found")' + $S 'echo "--- Python ---"; export PATH=/usr/local/bin:$PATH; python3 --version; pip3 --version' + $S 'echo "--- Git ---"; git --version 2>&1' + $S 'echo "--- CMD Agent ---"; systemctl is-active cmd-agent' + $S 'echo "--- Runners ---"; systemctl list-units "act-runner-*.service" --no-legend 2>/dev/null | head -6 || systemctl list-units "gitea-runner-*.service" --no-legend 2>/dev/null | head -6' echo "" echo "=== 全部完成 ==="