diff --git a/scripts/install_python310.sh b/scripts/install_python310.sh new file mode 100644 index 000000000..eb8ae6435 --- /dev/null +++ b/scripts/install_python310.sh @@ -0,0 +1,84 @@ +#!/bin/bash +# 安装Python 3.10.14到CentOS服务器 +# 如果本地是Python 3.6就在本地装;否则通过SSH装到新服务器 +set -e + +NEW_SERVER="172.30.18.199" +SSH_KEY="/root/.ssh/new_server_ed25519" + +PY_VER=$(python3 -c 'import sys; print("%d.%d" % sys.version_info[:2])' 2>/dev/null || echo "0.0") +echo "Current Python: $PY_VER" + +do_install() { + echo "=== Install build deps ===" + if command -v yum &>/dev/null; then + yum install -y gcc openssl-devel bzip2-devel libffi-devel zlib-devel wget make readline-devel sqlite-devel 2>&1 | tail -3 + elif command -v apt-get &>/dev/null; then + apt-get update -qq && apt-get install -y build-essential zlib1g-dev libffi-dev libssl-dev wget 2>&1 | tail -3 + fi + + echo "=== Download Python 3.10.14 ===" + cd /tmp + [ -f Python-3.10.14.tgz ] || wget -q https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz + + echo "=== Compile ===" + [ -d Python-3.10.14 ] || tar xzf Python-3.10.14.tgz + cd Python-3.10.14 + ./configure --prefix=/usr/local/python310 --with-ensurepip=install 2>&1 | tail -3 + make -j$(nproc) 2>&1 | tail -10 + make install 2>&1 | tail -3 + + echo "=== Set as default ===" + [ -f /usr/bin/python3 ] && mv /usr/bin/python3 /usr/bin/python3.bak 2>/dev/null || true + [ -f /usr/bin/pip3 ] && mv /usr/bin/pip3 /usr/bin/pip3.bak 2>/dev/null || true + ln -sf /usr/local/python310/bin/python3.10 /usr/bin/python3 + ln -sf /usr/local/python310/bin/pip3.10 /usr/bin/pip3 + ln -sf /usr/local/python310/bin/python3.10 /usr/local/bin/python3 + ln -sf /usr/local/python310/bin/pip3.10 /usr/local/bin/pip3 + + echo "=== Verify ===" + python3 --version + pip3 --version + pip3 install --help 2>&1 | grep -q "break-system" && echo "break-system-packages: OK" || echo "WARN: no break-system" +} + +fix_cmd_agent_port() { + echo "=== Fix CMD Agent port 5000->5927 ===" + [ -f /opt/cmd-agent/server.py ] || { echo "CMD Agent not found"; return 0; } + sed -i 's/port=5000/port=5927/g' /opt/cmd-agent/server.py + sed -i 's/port = 5000/port = 5927/g' /opt/cmd-agent/server.py + systemctl restart cmd-agent + sleep 2 + ss -tlnp | grep 5927 && echo "CMD Agent: OK on 5927" || echo "CMD Agent: port check failed" +} + +restart_runners() { + echo "=== Restart 6 runners ===" + for i in 1 2 3 4 5 6; do + systemctl restart act-runner-$i && echo "runner-$i restarted" + done + sleep 3 + systemctl list-units 'act-runner-*' --no-legend +} + +if [ "$PY_VER" = "3.6" ]; then + echo "On new server, installing locally..." + do_install + fix_cmd_agent_port + restart_runners +else + echo "On old server, installing via SSH to $NEW_SERVER..." + + mkdir -p /root/.ssh + [ -f "$SSH_KEY" ] || { echo "SSH key not found at $SSH_KEY"; exit 1; } + chmod 600 "$SSH_KEY" + + # 测试连接 + ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no -o ConnectTimeout=10 root@$NEW_SERVER "echo SSH_OK" + + # 传脚本并执行 + scp -i "$SSH_KEY" -o StrictHostKeyChecking=no "$0" root@$NEW_SERVER:/tmp/install_python310.sh + ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no root@$NEW_SERVER "bash /tmp/install_python310.sh" +fi + +echo "=== ALL DONE ==="