5.6 KiB
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:
podman --version
Initialize the machine (once):
podman machine init
podman machine start
If PowerShell blocks scripts, run this first:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
macOS
Install via Homebrew:
brew install podman
Initialize the machine (once):
podman machine init
podman machine start
Linux
Install from your package manager:
# 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
.\pod-start.ps1
macOS / Linux
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:
- Builds the container image from the Containerfile
- Creates a pod with shared networking and
/etc/hostsentries - Starts the license server container
- Starts the o11v4 app container
You can run the commands manually if you prefer:
# 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):
$p = "yourpassword"
[BitConverter]::ToString(
[Security.Cryptography.SHA256]::Create().ComputeHash(
[Text.Encoding]::UTF8.GetBytes($p)
)
).Replace("-","").ToLower()
macOS / Linux:
echo -n "yourpassword" | sha256sum | awk '{print $1}'
tmpfs sizes
Windows:
.\pod-start.ps1 -HlsSize 4g -DlSize 4g
macOS / Linux:
./pod-start.sh --hls-size 4g --dl-size 4g
6. Troubleshooting
"Cannot connect to Podman" (Windows / macOS):
podman machine start
o11v4 crashes:
podman logs -f o11v4-app
Can't reach localhost:8484:
podman pod ps # pod running?
podman port o11v4-pod # ports mapped?
License server issues:
podman exec licserver pm2 logs licserver --lines 50
podman exec o11v4-app cat /etc/hosts
Full reset (Windows):
.\pod-stop.ps1 -RemoveImage
.\pod-start.ps1
Full reset (macOS / Linux):
./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.