Files
xiaoxia-saas/.gitea/workflows/fix-python310.yml
T
Workflow config file is invalid. Please check your config file: model.ReadWorkflow: yaml: line 157: could not find expected ':'
xiaoxia 9ec08972c1
Check New Server Env / check (push) Successful in 3s
Downgrade New Runners to v0.2.6 / downgrade (push) Failing after 39s
v2: adaptive python3.10 install (local or ssh)
2026-07-13 19:08:35 +08:00

163 lines
7.0 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: Fix Python 3.10 on New Server
on:
workflow_dispatch:
jobs:
install-python310:
runs-on: runtime-builder:host
steps:
- name: Detect environment and install Python 3.10
run: |
set -e
PY_VER=$(python3 -c 'import sys; print("%d.%d" % sys.version_info[:2])' 2>/dev/null || echo "0.0")
echo "Current Python version: $PY_VER"
NEW_SERVER="172.30.18.199"
install_python() {
echo "=== Installing Python 3.10.14 ==="
# 安装编译依赖(CentOS用yumUbuntu用apt
if command -v yum &> /dev/null; then
echo "Detected CentOS, using yum..."
yum install -y gcc openssl-devel bzip2-devel libffi-devel zlib-devel wget make readline-devel sqlite-devel 2>&1 | tail -5
elif command -v apt-get &> /dev/null; then
echo "Detected Ubuntu, using apt..."
apt-get update -qq && apt-get install -y build-essential zlib1g-dev libffi-dev libssl-dev wget 2>&1 | tail -5
fi
# 下载源码
cd /tmp
if [ ! -f Python-3.10.14.tgz ]; then
echo "Downloading Python 3.10.14..."
wget -q https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz
fi
# 编译安装
echo "Extracting..."
tar xzf Python-3.10.14.tgz
cd Python-3.10.14
echo "Configuring..."
./configure --prefix=/usr/local/python310 --enable-optimizations --with-ensurepip=install 2>&1 | tail -3
echo "Compiling (this takes 5-10 min)..."
make -j$(nproc) 2>&1 | tail -5
echo "Installing..."
make install 2>&1 | tail -5
# 替换默认python3
echo "Setting as default python3..."
if [ -f /usr/bin/python3 ]; then
mv /usr/bin/python3 /usr/bin/python3.bak 2>/dev/null || true
fi
if [ -f /usr/bin/pip3 ]; then
mv /usr/bin/pip3 /usr/bin/pip3.bak 2>/dev/null || true
fi
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 "=== Python 3.10 installation complete ==="
python3 --version
pip3 --version
}
# 判断是否在新服务器上(Python 3.6 = CentOS新服务器)
if [ "$PY_VER" = "3.6" ]; then
echo "Running on new server (Python 3.6), installing locally..."
install_python
echo "=== Fixing CMD Agent port (5000 -> 5927) ==="
if [ -f /opt/cmd-agent/server.py ]; then
sed -i 's/port=5000/port=5927/g; s/port = 5000/port = 5927/g' /opt/cmd-agent/server.py 2>/dev/null || true
# 直接替换所有5000为5927(只在app.run那行)
sed -i 's/app.run(host=.0.0.0.*, port=5000/&\n# fixed port/' /opt/cmd-agent/server.py 2>/dev/null || true
systemctl restart cmd-agent
sleep 2
systemctl status cmd-agent --no-pager | head -5
ss -tlnp | grep 5927 || echo "port 5927 not found"
fi
echo "=== Restarting all 6 runners ==="
for i in 1 2 3 4 5 6; do
systemctl restart act-runner-$i
echo "act-runner-$i restarted"
done
sleep 3
systemctl list-units 'act-runner-*' --no-legend
else
echo "Running on old server (Python $PY_VER), installing via SSH to new server..."
# 准备SSH密钥
mkdir -p /root/.ssh
echo "$SSH_PRIVATE_KEY" > /root/.ssh/new_server_ed25519
chmod 600 /root/.ssh/new_server_ed25519
echo "Testing SSH connection..."
ssh -i /root/.ssh/new_server_ed25519 -o StrictHostKeyChecking=no -o ConnectTimeout=10 root@$NEW_SERVER "echo SSH_OK && python3 --version"
# 把安装脚本传过去并执行
echo "Transferring and executing install script..."
ssh -i /root/.ssh/new_server_ed25519 -o StrictHostKeyChecking=no root@$NEW_SERVER 'bash -s' << 'INSTALL_SCRIPT'
set -e
echo "=== Installing build dependencies ==="
yum install -y gcc openssl-devel bzip2-devel libffi-devel zlib-devel wget make readline-devel sqlite-devel 2>&1 | tail -5
echo "=== Downloading Python 3.10.14 ==="
cd /tmp
if [ ! -f Python-3.10.14.tgz ]; then
wget -q https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz
fi
ls -lh Python-3.10.14.tgz
echo "=== Compiling 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 -5
echo "=== Setting as default ==="
mv /usr/bin/python3 /usr/bin/python3.bak 2>/dev/null || true
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 "=== Verification ==="
python3 --version
pip3 --version
pip3 install --help 2>&1 | grep -q "break-system" && echo "break-system-packages: SUPPORTED" || echo "WARNING: break-system not supported"
echo "=== Fix CMD Agent port ==="
if [ -f /opt/cmd-agent/server.py ]; then
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 on port 5927" || echo "CMD Agent port check failed"
fi
echo "=== Restart all runners ==="
for i in 1 2 3 4 5 6; do
systemctl restart act-runner-$i
done
sleep 3
systemctl list-units 'act-runner-*' --no-legend
echo "=== DONE ==="
INSTALL_SCRIPT
fi
echo "=== All done ==="
env:
SSH_PRIVATE_KEY: ${{ secrets.NEW_SERVER_SSH_KEY }}