93 lines
2.7 KiB
Python
93 lines
2.7 KiB
Python
|
|
#!/usr/bin/env python3
|
||
|
|
"""Clean Bezalel Evennia setup - all-in-one script."""
|
||
|
|
import subprocess, os, sys, time
|
||
|
|
|
||
|
|
def ssh(cmd):
|
||
|
|
r = subprocess.run(['ssh', '-o', 'ConnectTimeout=5', '-o', 'StrictHostKeyChecking=no',
|
||
|
|
'root@104.131.15.18', cmd],
|
||
|
|
capture_output=True, text=True, timeout=60)
|
||
|
|
return r.stdout, r.stderr
|
||
|
|
|
||
|
|
def write_script(remote_path, content):
|
||
|
|
"""Write content to remote file via heredoc."""
|
||
|
|
import tempfile
|
||
|
|
with tempfile.NamedTemporaryFile(mode='w', suffix='.sh', delete=False) as f:
|
||
|
|
f.write(content)
|
||
|
|
tmppath = f.name
|
||
|
|
subprocess.run(['scp', tmppath, f'root@104.131.15.18:{remote_path}'],
|
||
|
|
capture_output=True, timeout=30)
|
||
|
|
os.unlink(tmppath)
|
||
|
|
|
||
|
|
# Script to fix Evennia on Bezalel
|
||
|
|
script = r'''#!/bin/bash
|
||
|
|
set -ex
|
||
|
|
|
||
|
|
cd /root/wizards/bezalel/evennia/bezalel_world
|
||
|
|
|
||
|
|
# Kill old processes
|
||
|
|
pkill -9 twistd 2>/dev/null || true
|
||
|
|
pkill -9 evennia 2>/dev/null || true
|
||
|
|
sleep 2
|
||
|
|
|
||
|
|
# Delete DB
|
||
|
|
rm -f server/evennia.db3
|
||
|
|
|
||
|
|
# Migrate
|
||
|
|
/root/wizards/bezalel/evennia/venv/bin/evennia migrate 2>&1 | tail -5
|
||
|
|
|
||
|
|
# Create superuser non-interactively
|
||
|
|
echo 'from evennia.accounts.accounts import AccountDB; AccountDB.objects.create_superuser("Timmy","timmy@tower.world","timmy123")' > /tmp/create_user.py
|
||
|
|
|
||
|
|
# Need to set DJANGO_SETTINGS_MODULE
|
||
|
|
export DJANGO_SETTINGS_MODULE=server.conf.settings
|
||
|
|
cd /root/wizards/bezalel/evennia/bezalel_world
|
||
|
|
/root/wizards/bezalel/evennia/venv/bin/python << PYEOF
|
||
|
|
import sys
|
||
|
|
sys.setrecursionlimit(5000)
|
||
|
|
import os
|
||
|
|
os.chdir("/root/wizards/bezalel/evennia/bezalel_world")
|
||
|
|
os.environ["DJANGO_SETTINGS_MODULE"] = "server.conf.settings"
|
||
|
|
import django
|
||
|
|
django.setup()
|
||
|
|
from evennia.accounts.accounts import AccountDB
|
||
|
|
try:
|
||
|
|
AccountDB.objects.create_superuser("Timmy", "timmy@tower.world", "timmy123")
|
||
|
|
print("Created superuser Timmy")
|
||
|
|
except Exception as e:
|
||
|
|
print(f"Warning: {e}")
|
||
|
|
PYEOF
|
||
|
|
|
||
|
|
# Start Evennia
|
||
|
|
/root/wizards/bezalel/evennia/venv/bin/evennia start
|
||
|
|
|
||
|
|
# Wait for startup
|
||
|
|
for i in $(seq 1 10); do
|
||
|
|
sleep 1
|
||
|
|
if ss -tlnp 2>/dev/null | grep -q "400[0-2]"; then
|
||
|
|
echo "Evennia is up after ${i}s"
|
||
|
|
break
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
|
||
|
|
# Final status check
|
||
|
|
echo "=== Ports ==="
|
||
|
|
ss -tlnp 2>/dev/null | grep -E "400[0-2]" || echo "No Evennia ports"
|
||
|
|
|
||
|
|
echo "=== Processes ==="
|
||
|
|
ps aux | grep [t]wistd | head -3 || echo "No twistd processes"
|
||
|
|
|
||
|
|
echo "=== DB exists ==="
|
||
|
|
ls -la server/evennia.db3 2>/dev/null || echo "No DB"
|
||
|
|
|
||
|
|
echo "DONE"
|
||
|
|
'''
|
||
|
|
|
||
|
|
write_script('/tmp/bez_final_setup.sh', script)
|
||
|
|
|
||
|
|
# Execute it
|
||
|
|
print("Executing final setup on Bezalel...")
|
||
|
|
stdout, stderr = ssh('bash /tmp/bez_final_setup.sh 2>&1')
|
||
|
|
print("STDOUT:", stdout[-3000:] if len(stdout) > 3000 else stdout)
|
||
|
|
if stderr:
|
||
|
|
print("STDERR:", stderr[-500:] if len(stderr) > 500 else stderr)
|