From a60226b1ef9a261fe630d5f3003a181227da9321 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 17 Nov 2025 13:21:03 +0100 Subject: [PATCH] Create DEV_MODE.md --- docs/DEV_MODE.md | 485 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 485 insertions(+) create mode 100644 docs/DEV_MODE.md diff --git a/docs/DEV_MODE.md b/docs/DEV_MODE.md new file mode 100644 index 000000000..f3f49c37e --- /dev/null +++ b/docs/DEV_MODE.md @@ -0,0 +1,485 @@ +# Dev Mode - Debugging & Development Guide + +Development modes provide powerful debugging and testing capabilities for container creation and installation processes. + +## Quick Start + +```bash +# Single mode +export dev_mode="motd" +bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/ct/wallabag.sh)" + +# Multiple modes (comma-separated) +export dev_mode="motd,keep,trace" +bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/ct/wallabag.sh)" + +# Combine with verbose output +export var_verbose="yes" +export dev_mode="pause,logs" +bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/ct/wallabag.sh)" +``` + +## Available Modes + +### 1. **motd** - Early SSH/MOTD Setup +Sets up SSH access and MOTD **before** the main application installation. + +**Use Case**: +- Quick access to container for manual debugging +- Continue installation manually if something goes wrong +- Verify container networking before main install + +**Behavior**: +``` +✔ Container created +✔ Network configured +[DEV] Setting up MOTD and SSH before installation +✔ [DEV] MOTD/SSH ready - container accessible +# Container is now accessible via SSH while installation proceeds +``` + +**Combined with**: `keep`, `breakpoint`, `logs` + +--- + +### 2. **keep** - Preserve Container on Failure +Never delete the container when installation fails. Skips cleanup prompt. + +**Use Case**: +- Repeated tests of the same installation +- Debugging failed installations +- Manual fix attempts + +**Behavior**: +``` +✖ Installation failed in container 107 (exit code: 1) +✔ Container creation log: /tmp/create-lxc-107-abc12345.log +✔ Installation log: /tmp/install-lxc-107-abc12345.log + +🔧 [DEV] Keep mode active - container 107 preserved +root@proxmox:~# +``` + +**Container remains**: `pct enter 107` to access and debug + +**Combined with**: `motd`, `trace`, `logs` + +--- + +### 3. **trace** - Bash Command Tracing +Enables `set -x` for complete command-line tracing. Shows every command before execution. + +**Use Case**: +- Deep debugging of installation logic +- Understanding script flow +- Identifying where errors occur exactly + +**Behavior**: +``` ++(/opt/wallabag/bin/console): /opt/wallabag/bin/console cache:warmup ++(/opt/wallabag/bin/console): env APP_ENV=prod /opt/wallabag/bin/console cache:warmup ++(/opt/wallabag/bin/console): [[ -d /opt/wallabag/app/cache ]] ++(/opt/wallabag/bin/console): rm -rf /opt/wallabag/app/cache/* +``` + +**⚠️ Warning**: Exposes passwords and secrets in log output! Only use in isolated environments. + +**Log Output**: All trace output saved to logs (see `logs` mode) + +**Combined with**: `keep`, `pause`, `logs` + +--- + +### 4. **pause** - Step-by-Step Execution +Pauses after each major step (`msg_info`). Requires manual Enter press to continue. + +**Use Case**: +- Inspect container state between steps +- Understand what each step does +- Identify which step causes problems + +**Behavior**: +``` +⏳ Setting up Container OS +[PAUSE] Press Enter to continue... +⏳ Updating Container OS +[PAUSE] Press Enter to continue... +⏳ Installing Dependencies +[PAUSE] Press Enter to continue... +``` + +**Between pauses**: You can open another terminal and inspect the container +```bash +# In another terminal while paused +pct enter 107 +root@container:~# df -h # Check disk usage +root@container:~# ps aux # Check running processes +``` + +**Combined with**: `motd`, `keep`, `logs` + +--- + +### 5. **breakpoint** - Interactive Shell on Error +Opens interactive shell inside the container when an error occurs instead of cleanup prompt. + +**Use Case**: +- Live debugging in the actual container +- Manual command testing +- Inspect container state at point of failure + +**Behavior**: +``` +✖ Installation failed in container 107 (exit code: 1) +✔ Container creation log: /tmp/create-lxc-107-abc12345.log +✔ Installation log: /tmp/install-lxc-107-abc12345.log + +🐛 [DEV] Breakpoint mode - opening shell in container 107 +Type 'exit' to return to host +root@wallabag:~# + +# Now you can debug: +root@wallabag:~# tail -f /root/.install-abc12345.log +root@wallabag:~# mysql -u root -p$PASSWORD wallabag +root@wallabag:~# apt-get install -y strace +root@wallabag:~# exit + +Container 107 still running. Remove now? (y/N): n +🔧 Container 107 kept for debugging +``` + +**Combined with**: `keep`, `logs`, `trace` + +--- + +### 6. **logs** - Persistent Logging +Saves all logs to `/var/log/community-scripts/` with timestamps. Logs persist even on successful installation. + +**Use Case**: +- Post-mortem analysis +- Performance analysis +- Automated testing with log collection +- CI/CD integration + +**Behavior**: +``` +Logs location: /var/log/community-scripts/ + +create-lxc-abc12345-20251117_143022.log (host-side creation) +install-abc12345-20251117_143022.log (container-side installation) +``` + +**Access logs**: +```bash +# View creation log +tail -f /var/log/community-scripts/create-lxc-*.log + +# Search for errors +grep ERROR /var/log/community-scripts/*.log + +# Analyze performance +grep "msg_info\|msg_ok" /var/log/community-scripts/create-*.log +``` + +**With trace mode**: Creates detailed trace of all commands +```bash +grep "^+" /var/log/community-scripts/install-*.log +``` + +**Combined with**: All other modes (recommended for CI/CD) + +--- + +### 7. **dryrun** - Simulation Mode +Shows all commands that would be executed without actually running them. + +**Use Case**: +- Test script logic without making changes +- Verify command syntax +- Understand what will happen +- Pre-flight checks + +**Behavior**: +``` +[DRYRUN] apt-get update +[DRYRUN] apt-get install -y curl +[DRYRUN] mkdir -p /opt/wallabag +[DRYRUN] cd /opt/wallabag +[DRYRUN] git clone https://github.com/wallabag/wallabag.git . +``` + +**No actual changes made**: Container/system remains unchanged + +**Combined with**: `trace` (shows dryrun trace), `logs` (shows what would run) + +--- + +## Mode Combinations + +### Development Workflow +```bash +# First test: See what would happen +export dev_mode="dryrun,logs" +bash -c "$(curl ...)" + +# Then test with tracing and pauses +export dev_mode="pause,trace,logs" +bash -c "$(curl ...)" + +# Finally full debug with early SSH access +export dev_mode="motd,keep,breakpoint,logs" +bash -c "$(curl ...)" +``` + +### CI/CD Integration +```bash +# Automated testing with full logging +export dev_mode="logs" +export var_verbose="yes" +bash -c "$(curl ...)" + +# Capture logs for analysis +tar czf installation-logs-$(date +%s).tar.gz /var/log/community-scripts/ +``` + +### Production-like Testing +```bash +# Keep containers for manual verification +export dev_mode="keep,logs" +for i in {1..5}; do + bash -c "$(curl ...)" +done + +# Inspect all created containers +pct list +pct enter 100 +``` + +### Live Debugging +```bash +# SSH in early, step through installation, debug on error +export dev_mode="motd,pause,breakpoint,keep" +bash -c "$(curl ...)" +``` + +--- + +## Environment Variables Reference + +### Dev Mode Variables +- `dev_mode` (string): Comma-separated list of modes + - Format: `"motd,keep,trace"` + - Default: Empty (no dev modes) + +### Output Control +- `var_verbose="yes"`: Show all command output (disables silent mode) + - Pairs well with: `trace`, `pause`, `logs` + +### Examples with vars +```bash +# Maximum verbosity and debugging +export var_verbose="yes" +export dev_mode="motd,trace,pause,logs" +bash -c "$(curl ...)" + +# Silent debug (logs only) +export dev_mode="keep,logs" +bash -c "$(curl ...)" + +# Interactive debugging +export var_verbose="yes" +export dev_mode="motd,breakpoint" +bash -c "$(curl ...)" +``` + +--- + +## Troubleshooting with Dev Mode + +### "Installation failed at step X" +```bash +export dev_mode="pause,logs" +# Step through until the failure point +# Check container state between pauses +pct enter 107 +``` + +### "Password/credentials not working" +```bash +export dev_mode="motd,keep,trace" +# With trace mode, see exact password handling (be careful with logs!) +# Use motd to SSH in and test manually +ssh root@container-ip +``` + +### "Permission denied errors" +```bash +export dev_mode="breakpoint,keep" +# Get shell at failure point +# Check file permissions, user context, SELinux status +ls -la /path/to/file +whoami +``` + +### "Networking issues" +```bash +export dev_mode="motd" +# SSH in with motd mode before main install +ssh root@container-ip +ping 8.8.8.8 +nslookup example.com +``` + +### "Need to manually complete installation" +```bash +export dev_mode="motd,keep" +# Container accessible via SSH while installation runs +# After failure, SSH in and manually continue +ssh root@container-ip +# ... manual commands ... +exit +# Then use 'keep' mode to preserve container for inspection +``` + +--- + +## Log Files Locations + +### Default (without `logs` mode) +- Host creation: `/tmp/create-lxc-.log` +- Container install: Copied to `/tmp/install-lxc--.log` on failure + +### With `logs` mode +- Host creation: `/var/log/community-scripts/create-lxc--.log` +- Container install: `/var/log/community-scripts/install--.log` + +### View logs +```bash +# Tail in real-time +tail -f /var/log/community-scripts/*.log + +# Search for errors +grep -r "exit code [1-9]" /var/log/community-scripts/ + +# Filter by session +grep "ed563b19" /var/log/community-scripts/*.log +``` + +--- + +## Best Practices + +### ✅ DO +- Use `logs` mode for CI/CD and automated testing +- Use `motd` for early SSH access during long installations +- Use `pause` when learning the installation flow +- Use `trace` when debugging logic issues (watch for secrets!) +- Combine modes for comprehensive debugging +- Archive logs after successful tests + +### ❌ DON'T +- Use `trace` in production or with untrusted networks (exposes secrets) +- Leave `keep` mode enabled for unattended scripts (containers accumulate) +- Use `dryrun` and expect actual changes +- Commit `dev_mode` exports to production deployment scripts +- Use `breakpoint` in non-interactive environments (will hang) + +--- + +## Examples + +### Example 1: Debug a Failed Installation +```bash +# Initial test to see the failure +export dev_mode="keep,logs" +bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/ct/wallabag.sh)" + +# Container 107 kept, check logs +tail /var/log/community-scripts/install-*.log + +# SSH in to debug +pct enter 107 +root@wallabag:~# cat /root/.install-*.log | tail -100 +root@wallabag:~# apt-get update # Retry the failing command +root@wallabag:~# exit + +# Re-run with manual step-through +export dev_mode="motd,pause,keep" +bash -c "$(curl ...)" +``` + +### Example 2: Verify Installation Steps +```bash +export dev_mode="pause,logs" +export var_verbose="yes" +bash -c "$(curl ...)" + +# Press Enter through each step +# Monitor container in another terminal +# pct enter 107 +# Review logs in real-time +``` + +### Example 3: CI/CD Pipeline Integration +```bash +#!/bin/bash +export dev_mode="logs" +export var_verbose="no" + +for app in wallabag nextcloud wordpress; do + echo "Testing $app installation..." + APP="$app" bash -c "$(curl ...)" || { + echo "FAILED: $app" + tar czf logs-$app.tar.gz /var/log/community-scripts/ + exit 1 + } + echo "SUCCESS: $app" +done + +echo "All installations successful" +tar czf all-logs.tar.gz /var/log/community-scripts/ +``` + +--- + +## Advanced Usage + +### Custom Log Analysis +```bash +# Extract all errors +grep "ERROR\|exit code [1-9]" /var/log/community-scripts/*.log + +# Performance timeline +grep "^$(date +%Y-%m-%d)" /var/log/community-scripts/*.log | grep "msg_" + +# Memory usage during install +grep "free\|available" /var/log/community-scripts/*.log +``` + +### Integration with External Tools +```bash +# Send logs to Elasticsearch +curl -X POST "localhost:9200/installation-logs/_doc" \ + -H 'Content-Type: application/json' \ + -d @/var/log/community-scripts/install-*.log + +# Archive for compliance +tar czf installation-records-$(date +%Y%m).tar.gz \ + /var/log/community-scripts/ +gpg --encrypt installation-records-*.tar.gz +``` + +--- + +## Support & Issues + +When reporting installation issues, always include: +```bash +# Collect all relevant information +export dev_mode="logs" +# Run the failing installation +# Then provide: +tar czf debug-logs.tar.gz /var/log/community-scripts/ +``` + +Include the `debug-logs.tar.gz` when reporting issues for better diagnostics.