# o11v4 — Podman Setup Two containers in one pod. Podman handles everything. --- ## 1. Install Podman ### Windows Download and install from https://podman.io/ Close and reopen your terminal, then verify: ```powershell podman --version ``` Initialize the machine (once): ```powershell podman machine init podman machine start ``` If PowerShell blocks scripts, run this first: ```powershell Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser ``` ### macOS Install via Homebrew: ```bash brew install podman ``` Initialize the machine (once): ```bash podman machine init podman machine start ``` ### Linux Install from your package manager: ```bash # Debian / Ubuntu sudo apt install -y podman # Fedora sudo dnf install -y podman # Arch sudo pacman -S podman ``` No machine init needed — Podman runs natively on Linux. --- ## 2. Build & Run ### Windows ```powershell .\pod-start.ps1 ``` ### macOS / Linux ```bash chmod +x pod-start.sh pod-stop.sh ./pod-start.sh ``` Open `http://localhost:8484` — login: `admin` / `admin` --- ## 3. What the Script Does The start script performs these steps: 1. Builds the container image from the Containerfile 2. Creates a pod with shared networking and `/etc/hosts` entries 3. Starts the license server container 4. Starts the o11v4 app container You can run the commands manually if you prefer: ```bash # 1. Build the image podman build -t o11v4 . # 2. Create the pod podman pod create --name o11v4-pod \ --add-host "lic.cryptolive.one:127.0.0.1" \ --add-host "lic.bitmaster.cc:127.0.0.1" \ -p 8484:8484 -p 8080:80 -p 8443:443 -p 5454:5454 # 3. Run the license server container podman run -d --pod o11v4-pod --name licserver \ -e SERVER_IP=127.0.0.1 o11v4 /entrypoint-licserver.sh # 4. Run the app container podman run -d --pod o11v4-pod --name o11v4-app \ -e SERVER_IP=127.0.0.1 \ --tmpfs /home/o11/hls:size=2g,mode=1777 \ --tmpfs /home/o11/dl:size=2g,mode=1777 \ o11v4 /entrypoint-app.sh ``` --- ## 4. Managing the Pod ### Windows | Action | Command | |--------|---------| | Start | `.\pod-start.ps1` | | Stop | `.\pod-stop.ps1` | | Full rebuild | `.\pod-stop.ps1 -RemoveImage` then `.\pod-start.ps1` | ### macOS / Linux | Action | Command | |--------|---------| | Start | `./pod-start.sh` | | Stop | `./pod-stop.sh` | | Full rebuild | `./pod-stop.sh --remove-image` then `./pod-start.sh` | ### Common Commands (all platforms) | Action | Command | |--------|---------| | Pod status | `podman pod ps` | | All containers | `podman ps --pod` | | Restart pod | `podman pod restart o11v4-pod` | | App logs | `podman logs -f o11v4-app` | | Licserver logs | `podman logs -f licserver` | | Shell into app | `podman exec -it o11v4-app bash` | | Shell into licserver | `podman exec -it licserver bash` | --- ## 5. Configuration ### o11.cfg (optional, edit before building) You can change the admin password by generating a SHA-256 hash and putting it in the `Password` field in `o11.cfg`. **Windows (PowerShell):** ```powershell $p = "yourpassword" [BitConverter]::ToString( [Security.Cryptography.SHA256]::Create().ComputeHash( [Text.Encoding]::UTF8.GetBytes($p) ) ).Replace("-","").ToLower() ``` **macOS / Linux:** ```bash echo -n "yourpassword" | sha256sum | awk '{print $1}' ``` ### tmpfs sizes **Windows:** ```powershell .\pod-start.ps1 -HlsSize 4g -DlSize 4g ``` **macOS / Linux:** ```bash ./pod-start.sh --hls-size 4g --dl-size 4g ``` --- ## 6. Troubleshooting **"Cannot connect to Podman" (Windows / macOS):** ```bash podman machine start ``` **o11v4 crashes:** ```bash podman logs -f o11v4-app ``` **Can't reach localhost:8484:** ```bash podman pod ps # pod running? podman port o11v4-pod # ports mapped? ``` **License server issues:** ```bash podman exec licserver pm2 logs licserver --lines 50 podman exec o11v4-app cat /etc/hosts ``` **Full reset (Windows):** ```powershell .\pod-stop.ps1 -RemoveImage .\pod-start.ps1 ``` **Full reset (macOS / Linux):** ```bash ./pod-stop.sh --remove-image ./pod-start.sh ``` --- ## 7. How It Works ``` o11v4-pod (shared network namespace) ┌──────────────────────────────────────────────────┐ │ │ │ licserver container o11v4-app container │ │ ┌──────────────┐ ┌──────────────────┐ │ │ │ server.js │ │ o11v4 binary │ │ │ │ PM2 │◄────────│ watchdog loop │ │ │ │ :80 :443 │ license │ :8484 main app │ │ │ │ :5454 │ check │ FFmpeg │ │ │ │ lic.cr │ via │ tmpfs: hls/, dl/ │ │ │ └──────────────┘ localhost└──────────────────┘ │ │ │ │ /etc/hosts: │ │ 127.0.0.1 lic.cryptolive.one │ │ 127.0.0.1 lic.bitmaster.cc │ └──────────────────────────────────────────────────┘ │ └── localhost:8484 → your browser ``` Both containers share `localhost`. The pod's `--add-host` entries redirect licensing domains to `127.0.0.1`, so o11v4's license check hits the licserver container. The licserver serves `lic.cr` and the check passes.