Archipelago — open-source initial import
This commit is contained in:
@@ -0,0 +1,195 @@
|
||||
# Live Server to ISO Build Integration Guide
|
||||
|
||||
This document explains how to keep the ISO build synchronized with the live development server.
|
||||
|
||||
## Development Workflow
|
||||
|
||||
### 1. Develop and Test on Live Server
|
||||
|
||||
```bash
|
||||
# Make changes locally
|
||||
vim core/archipelago/src/...
|
||||
|
||||
# Deploy to live server for testing
|
||||
./scripts/deploy-to-target.sh --live
|
||||
|
||||
# Test at http://192.168.1.228
|
||||
# Check logs: ssh archipelago@192.168.1.228 'sudo journalctl -u archipelago -f'
|
||||
```
|
||||
|
||||
### 2. Capture System Changes
|
||||
|
||||
When you make system-level changes on the live server (nginx config, systemd service, etc.):
|
||||
|
||||
```bash
|
||||
cd image-recipe
|
||||
./sync-from-live.sh
|
||||
```
|
||||
|
||||
This automatically captures:
|
||||
- `/etc/systemd/system/archipelago.service` → `configs/archipelago.service`
|
||||
- `/etc/nginx/sites-available/archipelago` → `configs/nginx-archipelago.conf`
|
||||
- `/etc/logrotate.d/archipelago` → `configs/logrotate.conf`
|
||||
|
||||
### 3. Build New ISO
|
||||
|
||||
```bash
|
||||
# Build backend and frontend
|
||||
./scripts/build-backend.sh
|
||||
./scripts/build-frontend.sh
|
||||
|
||||
# Build ISO with latest changes
|
||||
./build-debian-iso.sh
|
||||
|
||||
# Test in QEMU
|
||||
./test-iso-qemu.sh
|
||||
```
|
||||
|
||||
### 4. Verify Integration
|
||||
|
||||
The ISO build script should:
|
||||
1. Copy `configs/archipelago.service` to `/etc/systemd/system/`
|
||||
2. Copy `configs/nginx-archipelago.conf` to `/etc/nginx/sites-available/archipelago`
|
||||
3. Create symlink: `/etc/nginx/sites-enabled/archipelago`
|
||||
4. Enable the service: `systemctl enable archipelago`
|
||||
5. Install backend to `/usr/local/bin/archipelago`
|
||||
6. Install frontend to `/opt/archipelago/web-ui/`
|
||||
|
||||
## Critical Configuration Settings
|
||||
|
||||
### Backend Service (archipelago.service)
|
||||
|
||||
**Must-have settings**:
|
||||
```ini
|
||||
[Service]
|
||||
User=root # Required for root Podman access
|
||||
Environment="ARCHIPELAGO_BIND=127.0.0.1:5678" # Backend API port
|
||||
Environment="ARCHIPELAGO_DEV_MODE=true" # Enable container auto-detection
|
||||
```
|
||||
|
||||
**Why root?**: The backend must run as root to access containers started with `sudo podman`. Containers in root Podman context are invisible to rootless Podman.
|
||||
|
||||
### Nginx Configuration (nginx-archipelago.conf)
|
||||
|
||||
**Must-have proxies**:
|
||||
```nginx
|
||||
location /rpc/ {
|
||||
proxy_pass http://127.0.0.1:5678; # Backend RPC endpoint
|
||||
}
|
||||
|
||||
location /ws {
|
||||
proxy_pass http://127.0.0.1:5678; # WebSocket for real-time updates
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
}
|
||||
```
|
||||
|
||||
## File Paths Reference
|
||||
|
||||
### Build Artifacts
|
||||
- `build/backend/archipelago` - Compiled Rust backend
|
||||
- `build/frontend/` - Built Vue.js frontend
|
||||
- `configs/` - System configuration files
|
||||
- `results/` - Built ISO images
|
||||
|
||||
### Live Server Paths
|
||||
- `/usr/local/bin/archipelago` - Backend binary
|
||||
- `/opt/archipelago/web-ui/` - Frontend files
|
||||
- `/etc/systemd/system/archipelago.service` - Service definition
|
||||
- `/etc/nginx/sites-available/archipelago` - Nginx config
|
||||
- `/var/lib/archipelago/` - Application data
|
||||
|
||||
### ISO Installation Paths
|
||||
Same as live server (above) - the ISO must replicate the exact file structure.
|
||||
|
||||
## Container Management
|
||||
|
||||
### Root vs Rootless Podman
|
||||
|
||||
**Current approach**: Root Podman
|
||||
- Containers started with: `sudo podman run ...`
|
||||
- Backend runs as: `root` user (in systemd)
|
||||
- Container detection: Works automatically in dev mode
|
||||
|
||||
**Why not rootless?**
|
||||
- Would require `User=archipelago` in systemd service
|
||||
- All containers must be started as `archipelago` user
|
||||
- More complex permission management
|
||||
|
||||
### Container Detection
|
||||
|
||||
The backend automatically detects running containers when:
|
||||
1. `ARCHIPELAGO_DEV_MODE=true` is set
|
||||
2. Backend runs with same privileges as container runtime
|
||||
3. Containers exist in accessible Podman context
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Issue: Containers not detected in ISO
|
||||
|
||||
**Cause**: Backend not running as root, or dev mode disabled
|
||||
|
||||
**Fix**:
|
||||
1. Check `configs/archipelago.service` has `User=root`
|
||||
2. Check `Environment="ARCHIPELAGO_DEV_MODE=true"` is set
|
||||
3. Rebuild ISO and test
|
||||
|
||||
### Issue: UI not loading
|
||||
|
||||
**Cause**: Nginx config not copied or frontend files missing
|
||||
|
||||
**Fix**:
|
||||
1. Verify `configs/nginx-archipelago.conf` exists
|
||||
2. Check frontend built to `build/frontend/`
|
||||
3. Verify ISO build script copies these files
|
||||
|
||||
### Issue: Backend won't start
|
||||
|
||||
**Cause**: Binary permissions or missing dependencies
|
||||
|
||||
**Fix**:
|
||||
1. Check backend binary is executable: `chmod +x /usr/local/bin/archipelago`
|
||||
2. Check dependencies installed (Podman, nginx)
|
||||
3. Review systemd logs: `journalctl -u archipelago`
|
||||
|
||||
## Testing Checklist
|
||||
|
||||
Before releasing an ISO, verify:
|
||||
|
||||
- [ ] Boot ISO in QEMU
|
||||
- [ ] Systemd service starts: `systemctl status archipelago`
|
||||
- [ ] Backend responds: `curl http://localhost:5678/health`
|
||||
- [ ] UI accessible: Open browser to `http://localhost`
|
||||
- [ ] Container detection: `sudo podman run -d --name test nginx` → Shows in UI
|
||||
- [ ] RPC works: Test login and API calls
|
||||
- [ ] WebSocket connects: Check browser console
|
||||
|
||||
## Automated Build Pipeline (Future)
|
||||
|
||||
To automate this workflow:
|
||||
|
||||
1. **CI/CD Integration**
|
||||
- Trigger on main branch commits
|
||||
- Run `sync-from-live.sh` with credentials
|
||||
- Build backend and frontend
|
||||
- Build ISO
|
||||
- Upload to releases
|
||||
|
||||
2. **Version Management**
|
||||
- Tag releases with semantic versions
|
||||
- Include git commit hash in ISO metadata
|
||||
- Track which configs were included
|
||||
|
||||
3. **Testing Automation**
|
||||
- Boot ISO in headless QEMU
|
||||
- Run API tests
|
||||
- Verify container detection
|
||||
- Generate test report
|
||||
|
||||
## Resources
|
||||
|
||||
- Development Workflow Rules: `.cursor/rules/Development-Workflow.mdc`
|
||||
- Build Checklist: `ISO-BUILD-CHECKLIST.md`
|
||||
- Architecture Docs: `.cursor/rules/Architecture.mdc`
|
||||
- Deployment Scripts: `scripts/deploy-to-target.sh`
|
||||
Reference in New Issue
Block a user