All notable changes to this project will be documented in this file.
scripts/link_opt_to_repo.sh: backup and symlinkdeploy/files into/opt/azazel/configto keep runtime config synced with the repository.systemd/link-opt.service: oneshot systemd unit to run the linking script at boot.scripts/prevent_installer_overwrite.sh: helper used by installers to detect repo-managed symlinked config files and avoid overwriting them.
- Prevent dockerd startup failure caused by installers writing an explicit
runcruntime entry into/etc/docker/daemon.json. Installers now avoid overwriting repo-manageddaemon.json.
- Removed obsolete top-level
version:key fromdeploy/docker-compose.yml.
- Backups of any replaced files are stored as
/opt/azazel/config/<name>.bak.<timestamp>on the host.
- Display: clear and force a full E-Paper refresh when the active WAN interface changes (e.g. eth0 -> wlan1) to avoid ghosting and show the updated interface/IP immediately. (commit 478b8ee)
- Status collection: prefer kernel default route when runtime WAN state is missing and provide a
wan_state_pathinjection point for testing/overrides. - Renderer: improve network line formatting by removing the redundant "WAN" prefix and suppressing non-actionable "[WAN] unknown" messages; reserve footer area to prevent text overlap.
- Backwards-compatible
StatusCollectorinitialization handling inepd_daemon— older installs without the newwan_state_pathparameter are tolerated.
- These are backward-compatible improvements (minor release). See commit 478b8ee for details and files changed:
azazel_edge/core/display/status_collector.py,epd_daemon.py,renderer.py.- Suricata integration for network threat detection
- AI-based threat evaluation pipeline and scoring
- Basic TUI and CLI utilities for status and control
- Initial installer and documentation to deploy core services
-
Dynamic WAN selection and runtime orchestration via
azctl wan-manager:- Evaluates candidate uplink interfaces and selects the healthiest WAN at boot and runtime.
- Writes health snapshots to
runtime/wan_state.json(production path/var/run/azazel/wan_state.json); path can be overridden withAZAZEL_WAN_STATE_PATH. - Candidate precedence: explicit CLI
--candidate→AZAZEL_WAN_CANDIDATESenv var (comma-separated) →configs/network/azazel.yaml(interfaces.external/interfaces.wan) → safe fallbacks. - On WAN change, the manager reapplies traffic control (
bin/azazel-traffic-init.sh), refreshes NAT, and restarts dependent services (Suricata,azctl-unified).
-
Universal runtime interface resolution for consumers:
- CLI/TUI, scripts, and services now prefer explicit CLI args → environment variables (
AZAZEL_WAN_IF/AZAZEL_LAN_IF) → WAN manager state → configuration values → final fallback. - Added
AZAZEL_WAN_CANDIDATESandAZAZEL_WAN_STATE_PATHenvironment variables for operational control and testing.
- CLI/TUI, scripts, and services now prefer explicit CLI args → environment variables (
- Scripts and documentation updated to use parameterized interface references (
${AZAZEL_WAN_IF:-<fallback>}and${AZAZEL_LAN_IF:-<fallback>}) in help text and examples. Where safe, runtime resolution now uses the WAN manager helper instead of hard-coded interface names.
- Backwards-compatible: explicit CLI flags and environment variables still override runtime selection. Existing deployments should continue to work; review scripts that assume literal interface names before automating deployment.
- Tests and shell syntax checks were run after edits; no regressions detected in the unit test suite.
- QoS features are opt-in via systemd service enablement.
- All changes maintain backward compatibility with existing configurations.
- Internal Network QoS Control: Comprehensive privilege-based traffic shaping and security enforcement for LAN devices.
- Mark-based traffic classification (premium, standard, best_effort, restricted) using nftables.
- HTB (Hierarchical Token Bucket) traffic shaping with configurable per-class rate/ceil limits.
- Three security modes:
none(marking only),verify(MAC verification with drop),lock(verify + static ARP). - CSV-based privileged host registry (
configs/network/privileged.csv) for IP/MAC whitelist management. - Dynamic priority daemon (
services/azazel_priorityd.py) with score-based class adjustment. - Interactive TUI management tool (
bin/azazel-qos-menu.sh) for privileged host operations. - New scripts:
bin/azazel-traffic-init.sh,bin/azazel-qos-apply.shwith DRY_RUN mode for safe testing. - systemd units:
azazel-traffic-init.service,azazel-qos-apply.service,azazel-priorityd.service. - Python module:
azazel_edge/core/network/internal_control.py(InternalControlManager skeleton).
- Extended
configs/network/azazel.yamlwith QoS configuration keys (mark_map, classes, thresholds, dynamic_bias). - Documentation:
docs/INTERNAL_NETWORK_CONTROL.md(architecture),docs/QOS_TESTING.md(testing guide with DRY_RUN results).
- QoS scripts support DRY_RUN mode (print commands without execution, no root required).
- All QoS scripts are idempotent (safe to re-run).
- Dynamic WAN selection:
wan-managernow determines the active WAN interface at runtime and writes runtime/wan_state.json. Consumers (CLI, TUI, scripts) will use that selection by default when--wan-ifis omitted. Environment variablesAZAZEL_WAN_IFandAZAZEL_LAN_IFmay be used to override defaults where needed.
- MAC address verification prevents ARP spoofing for privileged devices.
- Static ARP entries in
lockmode provide additional anti-spoofing protection. - Gradual rollout path (none → verify → lock) allows safe deployment testing.
- Syntax validation: All scripts pass
bash -nchecks. - Python imports: All modules verified.
- Logic verification: Score-to-class mapping validated.
- DRY_RUN tests: Command generation confirmed for all modes (verify, lock).
- Minor version bump (2.1.0 → 2.2.0) adds significant new QoS feature without breaking existing functionality.
- Optional E-Paper integration into
install_azazel_complete.shvia--enable-epd,--epd-emulate, and--epd-forceflags. - Emulation support for E-Paper (no hardware required) using
EPD_OPTS=--emulateand new systemd unit option passthrough. - Documentation updates (EN/JA) reflecting integrated E-Paper flow and hardware-absent usage.
- Deprecation stubs for legacy scripts:
install_epd.sh, wireless setup scripts, and Ollama split scripts. - Unified wireless script
setup_wireless.shand unified Ollama scriptsetup_ollama_unified.sh(created earlier, documented here). - Integration reports and AI verification docs (Enhanced AI, Wireless, Ollama, Suricata) for transparency and reproducibility.
systemd/azazel-epd.servicenow supports extra daemon options viaEPD_OPTSenvironment variable.- Installer step numbering adjusted to include optional E-Paper integration block.
- README files updated to recommend new flags instead of deprecated standalone scripts.
- Standalone
scripts/install_epd.sh(now emits deprecation notice and exits). - Legacy wireless scripts:
setup_wlan0_ap.sh,setup_suricata_wlan1.sh. - Legacy Ollama scripts:
setup_ollama.sh,setup_ollama_model.sh.
- Minor version bump (2.0.0 → 2.1.0) because changes add optional features without breaking existing workflows.
- Future removal of deprecated stubs planned for a subsequent minor or major release (target: ≥2.2.0).
- Prior stable baseline with Suricata integration, AI threat evaluation pipeline, and initial E-Paper support (manual setup).
-- Semantic versioning: MAJOR.MINOR.PATCH. Deprecations queued for removal after at least one minor release grace period.
- Nginx reverse proxy configuration and setup scripts to front-end Mattermost and other services.
- Mattermost full-reset script and Docker/Postgres integration for easy environment refresh.
- Configuration schema updates to support external interfaces and updated defaults in
azazel.yaml. - Suricata can monitor multiple interfaces (wlan1 and eth0) for broader visibility.
- Documentation updates (EN/JA) covering Nginx setup and network configuration notes.
- Adjusted Nginx recommended headers and client/body limits.
- Cleaned up legacy service files and removed deprecated references.
- Version bump to 1.5.0; this release focuses on deployability and documentation improvements.
- Initial public baseline of Azazel-Edge with core features: