Skip to content

Release Notes - Version 0.1.3

Released: 2026-02-17

🔧 Bug Fixes

  • DevContainer issues:
  • Docker buildx tagging: Pre-built image approach with simple tag (bess-rcu-dev:arm64)
  • .venv permission errors: Removed anonymous volume mount (Docker creates volumes as root → bind mount allows container-managed ownership)
  • Missing coreutils: Added package for VS Code essential utilities
  • Pre-commit hooks: Removed install (git hooks fail in bind-mounted .git from Windows)
  • python3-can conflict: Removed system package (installed via pip to avoid dpkg configuration errors)
  • ARM64 exec format error: Build script now automatically registers QEMU emulation using multiarch/qemu-user-static (more reliable than tonistiigi/binfmt), includes verification step to ensure ARM64 emulation actually works before building
  • Missing unzip for fpm: Added unzip package (required by fpm to extract Python wheels when building .deb packages)
  • py3compile SIGSEGV under QEMU: Both DevContainer and Dockerfile.test-arm64 now handle py3compile segfault (exit code -11) gracefully by catching installation failures, forcing dpkg reconfiguration, and verifying Python installation
  • Release workflow:
  • Merge command: Fixed syntax -X theirs (was --strategy-option=theirs CHANGELOG.md)
  • Empty section headers: Content check AFTER blank stripping prevents empty ### Deprecated
  • awk syntax error: Consistent 2-space indentation in YAML multiline (bash parser compatibility)
  • Debian package build:
  • Added --no-auto-depends flag (skip Python metadata parsing, explicit dependencies)
  • Removed --config-files and --deb-default (files don't exist at build time)
  • Output paths: output/deb/ directory for package, checksums, artifacts
  • Version-agnostic Dockerfile: Wildcard bess-rcu_*_arm64.deb (was hardcoded 0.1.2)
  • Previous errors resolved: ModuleNotFoundError, JSON::ParserError, Invalid package configuration, file not found

🗑️ Removed

  • DevContainer non-root user approach: Removed ndrs-admin user setup after extensive testing revealed Docker Desktop Windows nosuid limitation cannot be worked around with configuration changes
  • Package testing workarounds: Removed test-deb-in-devcontainer.ps1 script and PACKAGE_TESTING.md documentation (root user makes these unnecessary)

🎉 What's New

  • Native CLI command (bess-rcu) for system management and monitoring:
  • Entry point via pyproject.toml [project.scripts], CLI wrapper at /usr/local/bin/bess-rcu
  • Three invocation methods: bess-rcu, uv run bess-rcu, python -m bess_rcu
  • Subcommands: status (system health), config (validation), run (main entry)
  • Global options: --help, --version, --config FILE
  • CLI and package management documentation:
  • CLI commands reference (04.cli-commands.md) with examples and troubleshooting
  • Package management guide (02.package-management.md) - 856 lines covering installation, updates, lifecycle scripts, troubleshooting
  • Debian package build infrastructure:
  • Docker-based workflow: Dockerfile.build (Ubuntu 22.04, fpm, uv), Dockerfile.test-arm64 (ARM64 test container)
  • Automated scripts: build-package.sh, health-check.sh, test-local.ps1 (interactive/build-only modes)
  • Comprehensive documentation: Local testing guide (738 lines), Docker README (339 lines), deployment overview
  • Package components for production:
  • bess-rcu.service - systemd unit with restart policies
  • Lifecycle scripts: postinst (115 lines - service setup, CLI wrapper), prerm (31 lines), postrm (50 lines - purge support)
  • Environment config: bess-rcu.default
  • GitHub Actions CI/CD: build-debian-package.yml - Automated .deb building, ARM64 QEMU testing, GitHub Release integration, workflow sequencing (runs after Release workflow)
  • PowerShell validation: 21.validate-deployment-files.ps1 - 87 checks across systemd, bash, Docker, CI/CD, documentation
  • ARM64 DevContainer:
  • Production-matching environment (Debian 12, Python 3.11, ARM64 via QEMU)
  • Pre-built image with build-image.ps1 (fast/cleanup/clean build modes)
  • Root user for pragmatic development (allows dpkg, apt-get without permission issues)
  • Package building support: Includes fpm (Effing Package Manager), Ruby, build-essential for creating .deb packages directly in DevContainer
  • VS Code integration (Python, Pylance, Black, Ruff, TOML)
  • Setup guide (05.devcontainer-setup.md) - 500+ lines
  • Common bash aliases (ll, la, l) for better user experience
  • Organized package output: output/deb/ directory structure
  • Interactive ARM64 testing: Python dependencies via pip, full CLI support, container-aware systemd checks

✨ Improvements

  • Postinst script: Dynamically creates /usr/local/bin/bess-rcu wrapper, sets permissions, adds CLI usage instructions
  • Documentation restructured:
  • Deployment README: template format, directory structure, "What Goes Where" table, workflow diagram
  • Getting Started & Main README: comprehensive links to pre-commit hooks, CLI commands, DevContainer setup
  • Package output location: Moved to output/deb/ (from project root), updated all build scripts and workflows
  • Build workflow sequencing: workflow_run trigger (runs AFTER Release workflow), adds packages to existing GitHub Release
  • GitHub Release body formatting: Enhanced markdown with proper headers (###), code blocks, table layout for better readability
  • ARM64 testing: Requires buildx for --platform linux/arm64 (QEMU alone can't override amd64)
  • Package dependencies: Disabled auto-generation (--no-auto-depends flag), explicit --depends declarations
  • Dockerfile.test-arm64: Wildcard pattern for version-agnostic builds (bess-rcu_*_arm64.deb)
  • DevContainer configuration:
  • Removed .venv volume mount (bind mount sufficient, avoids root ownership issues)
  • Added UV_LINK_MODE=copy to suppress hardlink warning (expected on cross-filesystem mounts)
  • Switched to root user: Pragmatic solution for Docker Desktop Windows (nosuid on bind mounts prevents sudo from working)
  • Removed unnecessary complexity: --security-opt=apparmor=unconfined (doesn't fix nosuid limitation), explicit SHELL environment variable
  • Simplified Dockerfile: Removed user creation, sudo group setup, and user-specific configuration
  • DevContainer documentation: Updated setup guide to explain .venv management workflow (manual cleanup when switching between Windows and Linux environments), documented UV hardlink warning as normal behavior
  • DevContainer ARM64 QEMU stability:
  • Added terminal.integrated.inheritEnv: false to prevent VS Code server segfault when reading shell environment
  • Added updateContentCommand to ensure uv sync runs on every container start (fallback if postCreateCommand fails)
  • Added bash aliases (ll, la, l) for convenience
  • Fixed py3compile BrokenPipeError: Split Python installation into separate RUN step with PYTHONDONTWRITEBYTECODE=1 during apt-get only (prevents QEMU timing issues)
  • Release preparation: Updates both pyproject.toml and uv.lock for version consistency

  • Update release workflow and add Debian package support (#57)


Full Changelog: View on GitHub