Manager Install
Manager installation
Purpose
Install and start the Manager control plane after the edition-specific admission path (Community source build or Enterprise verified-release + database installer) has produced a binary and a schema.
This page does not replace Community source install or Database preparation. Detailed Enterprise verified-release admission is provided separately to Enterprise customers.
Audience
Linux administrators who will run zwall-manager.service or bin/manager.
Edition
Follow Community or Enterprise below. Do not mix path prefixes.
Status
SUPPORTED for the unit/flags documented here. Secret custody is implemented but not certified. Cluster is not a public HA install.
Prerequisites
- PostgreSQL reachable with the Manager
database.*settings (example namezwall_centralized_security, port5432,ssl_mode: require) - Schema admitted (
-migrateor Enterprisescripts/setup.sh --manager-database-only) - TLS cert/key if
server.tls.enabled: true(example/etc/ssl/certs/manager.crt,/etc/ssl/private/manager.key) - Web artifacts at
web.static_dir(example/opt/zcs/web) if the console will be served - Enterprise: locked
zwall-managerruntime identity (nologin, home/nonexistent) already established by the config installer
Required permissions
Root to install units and credentials. The service itself runs as zwall-manager on Enterprise (not root).
Dependencies
PostgreSQL. The Manager does not use SQLite as production storage.
Configuration
Enterprise unit deploy/manager-systemd/zwall-manager.service:
Scroll sideways to see the full table. Use the arrow keys when focused.
| Item | Value |
|---|---|
| Unit | zwall-manager.service |
| User/Group | zwall-manager |
| ExecStart | /opt/zwall-manager/bin/zwall-manager -config /etc/zwall-manager/manager.yml |
| EnvironmentFile | -/etc/zwall-manager/manager-nonsecret.env |
| After | network-online.target postgresql.service |
| Restart | on-failure, RestartSec=5 |
| TimeoutStartSec | 60 |
| TimeoutStopSec | 30 |
| ExecReload | /bin/kill -HUP $MAINPID |
| Hardening | NoNewPrivileges, PrivateTmp, ProtectSystem=strict, ProtectHome, empty CapabilityBoundingSet |
| State | WorkingDirectory=/var/lib/zwall-manager |
| Logs | ReadWritePaths include /var/log/zwall-manager /run/zwall-manager |
Community README uses /etc/zcs/manager.yml and default -config configs/manager.yaml. The Enterprise database installer example also names --manager-config /etc/zcs/manager.yml while this unit uses /etc/zwall-manager/manager.yml. Treat that mismatch as a known path-prefix inconsistency; follow the unit you actually install.
YAML secrets on Enterprise production stay empty: database.password, auth.jwt_secret, auth.default_admin.password. Listen example: 8443 TLS. zwallctl unconfigured default is http://localhost:8080 — set --manager-url.
Procedure — Community
- Build per Community source install.
- Create PostgreSQL role/database (Database preparation).
- Copy
configs/manager.example.ymlto the runtime path. - Set database, TLS, CORS origins.
- Migrate, then start:
./bin/manager -config /etc/zcs/manager.yml -migrate
./bin/manager -config /etc/zcs/manager.ymlGuided script sudo ./scripts/setup.sh can write systemd units zwall-manager and zwall-agent. Choose only one exclusive migrate flag at a time.
Procedure — Enterprise
- Complete verified-release schema admission (release verify →
-preflight-migrate→-migrate→-check-schema). Those installer steps are provided separately to Enterprise customers. - Place production secrets via systemd credentials, not YAML. Customer path:
sudo bash scripts/setup.sh --manager-secret-custody freshmigrate and rotate are the other actions. Secret custody is implemented but a certified claim is not currently published. Do not call this certified. zwallctl secret-rotate on Enterprise defers here.
- Optional runtime validation without starting listeners:
sudo -u zwall-manager /opt/zwall-manager/bin/zwall-manager \
-config /etc/zwall-manager/manager.yml -validate-runtimeDo not combine -validate-runtime with -migrate.
- Enable the Manager unit:
sudo systemctl enable --now zwall-manager
sudo systemctl status zwall-managersystemctl reload zwall-manager sends HUP (note: request reload, not certified live-apply of every key).
Procedure — flags you may run before start
Scroll sideways to see the full table. Use the arrow keys when focused.
| Flag | When |
|---|---|
-preflight-migrate | validate pending plan without apply |
-migrate (-init-db deprecated alias) | apply then exit |
-check-schema | validate recorded checksums without apply |
-migration-exec-preflight | Enterprise installer executable/config check; prints MIGRATION_EXEC_COMPATIBLE |
-validate-runtime | Enterprise credentials/schema/KEK/license without listeners |
-version / -build-info-json | identity |
-help | help |
Choose only one exclusive mode.
Verification
See First verification.
systemctl is-active zwall-manager→activeGET /health/live→aliveGET /health/ready→readyanddatabase: ok/loginworks with the initial admin credential from the secret contractzwallctl login --manager-url https://manager.example.com:8443 --username admin
Expected result
Manager serving API and console, schema migrated, default admin present, no packet enforcement on this host.
Failure modes
Scroll sideways to see the full table. Use the arrow keys when focused.
| Symptom | Action |
|---|---|
| Exclusive-flag fatal | run one of migrate/preflight/check-schema/validate-runtime |
| JWT secret required | Enterprise credential missing; YAML must stay empty |
| ready database unavailable | PostgreSQL, ssl_mode, database_password |
/login 404 | web.enabled / web.static_dir |
| CLI hits :8080 | port mismatch; set --manager-url |
Troubleshooting
Manager unavailable, Health, journalctl -u zwall-manager.
Security considerations
Empty capabilities, non-root user, secrets not in YAML on Enterprise. Do not enable cluster as a customer HA install.
Limitations
Unresolved: path prefixes, port mismatch, backup contract, cluster HA, secret custody.