All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- πΊ Homebrew package manager integration: New init service for Homebrew installation
- Added
INSTALL_HOMEBREWENV to enable Homebrew installation (non-root, per-user) - Installs Homebrew to
$HOME/.linuxbrew/with automatic PATH setup in.bashrc - Requires dependencies: build-essential, procps, curl, file, git
- Non-interactive installation using official Homebrew install script
- Added
- π€ OpenClaw AI Gateway integration: New dedicated init and svc components
- Added
INSTALL_OPENCLAWENV to enable OpenClaw installation via npm - Added
OPENCLAW_PORT,OPENCLAW_BIND,OPENCLAW_TOKEN,OPENCLAW_PASSWORD,OPENCLAW_VERBOSEconfiguration options - Added
init-devcoder-openclawservice for installing openclaw@latest globally - Added
svc-devcoder-openclawservice for running the OpenClaw gateway - OpenClaw automatically detects NVM Node.js installations across versions
- Automatic cleanup of broken OpenClaw installations before reinstall
openclaw@latestis now filtered fromINSTALL_NPM_PACKAGESto prevent conflicts
- Added
- π§ NVM PATH detection: Fixed openclaw binary not found issue
- Services now dynamically detect NVM Node.js version directories
- Falls back to
/config/.nvmwhen user home .nvm doesn't exist - Uses PUID/PGID to correctly identify target user instead of CUSTOM_USER
- π Documentation: Updated CLAUDE.md and README.md with OpenClaw configuration
- π Documentation: Complete ENV variable reference in README.md
- Added "Other ENV Defaults" section with all system and service variables
- Documented PUID/PGID, ROOT_PASSWORD, ABC_PASSWORD, S6_MERMAID
- Added service-specific sections for SSHD, NGROK, SYNCTHING, RustDesk
- Clarified all timeout and configuration values
- π§ RustDesk installation: Fixed dpkg skip-if-same-version issue
- Added
-Eflag todpkg -icommand to skip reinstallation of same version - Reduces "dpkg installation failed" errors during container restarts
- Added
- π¦ Node.js dependencies: Updated NodeSource repository setup for improved key management
- β¬οΈ Node.js default version: Bumped NODEJS_MOD_VERSION from 16 to 24
- Fixes deprecated SHA1 signing key issues with Node.js 16.x
- Uses new NodeSource GPG key format
- Maintains compatibility with current npm packages
- π SSHD initialization: Improved SSH key handling with ABC_PASSWORD support
- π Logging consistency: Standardized logging output across all init scripts
- Added emoji indicators for better log readability (
βΆοΈ , βΎ, π¦,β οΈ ) - Improved start/skip messaging for all installer modules
- Added emoji indicators for better log readability (
- ποΈ Removed .env.example: Deleted obsolete example file in favor of inline documentation
- π NodeSource keys: Updated to new GPG key format after 2026-02-01 deprecation
- π SSHD key generation: Fixed incorrect logic in SSH host key generation
- Removed unnecessary
rm -f /etc/ssh/ssh_host_*that was deleting existing keys - Now properly preserves existing SSH keys between container restarts
ssh-keygen -Aonly generates missing keys, no interactive prompts- Fixes "Overwrite (y/n)?" prompt that blocked container startup
- Removed unnecessary
- π Security scan workflow: Fixed Trivy/Grype scanning wrong image tag
- Added
VERSION_NO_Voutput to strip 'v' prefix from Git tags - Scanners now use correct Docker tags (e.g.,
0.6.15instead ofv0.6.15) - Fixes "MANIFEST_UNKNOWN" error in security scans
- Added
- π Documentation: Complete guide for Docker tagging and versioning best practices
- Added comprehensive "Version Prefix (v) Best Practices" section
- Documented Git tags (with
v) vs Docker tags (withoutv) conventions - Updated workflow examples to match current implementation
- π§ Workflows: Updated documentation to reflect actual workflow implementation
- Added
workflow_dispatchtrigger documentation - Documented
environment: produsage - Clarified
valueparameter requirement fordocker/metadata-action
- Added
- π SSHD PermitRootLogin: New
SSHD_PERMITROOTLOGINenv var to allow root SSH login- Default:
false(root login disabled) - Set to
trueto enablePermitRootLogin yesin sshd_config - Works together with
SSHD_PORTandROOT_PASSWORDconfiguration
- Default:
- π ROOT_PASSWORD support: New
ROOT_PASSWORDenv var to set root user password- Only sets password when variable is defined and not empty
- Useful in combination with
SSHD_PERMITROOTLOGIN=true
- π₯οΈ RustDesk support: New s6-overlay service for RustDesk remote desktop application
- Configurable via
RUSTDESK_INSTALLenv var (default: false) - Two installation methods:
proot: PRoot-based installation (isolated environment)systemortrue: System package installation via .deb file
- Supports x86_64, aarch64 (ARM64), and armv7 architectures
- Automatic dependency installation via gstreamer1.0-pipewire
- Downloads latest version from GitHub releases
- Configurable via
- π docker-compose.yaml: Improved volume mount comments with clearer SUGGEST/EXAMPLE prefixes
- π Projects directory: Added
/mnt/data:/projectsvolume mapping as example for project workspace
- π workflow-analysis.txt: Added GitHub Actions workflow analysis document with trigger and job information
- π workflow_run trigger: Added
workflow_runtrigger tobuild-and-push.ymlto properly chain workflows - π·οΈ Dynamic tag detection: Added
get_tagstep that determines tag from bothworkflow_runandpush: tagsevents - π Complete guide: Updated
/tmp/complete-guide-en.mdwith comprehensive documentation of the new workflow architecture
- π§ GitHub Actions automation: Fixed critical issue where
build-and-push.ymlwasn't triggering when tags were created bydetect-release.yml- Root cause: GitHub Actions doesn't trigger
on: push: tags:when tags are created by other workflows (security feature to prevent infinite loops) - Solution: Implemented
workflow_runtrigger that reacts to completion ofdetect-release.ymlworkflow - Fallback: Kept
push: tagstrigger for manual tag creation workflows
- Root cause: GitHub Actions doesn't trigger
- π build-and-push.yml: Updated all references from
${{ github.ref_name }}to${{ steps.get_tag.outputs.REF_NAME }} - π Documentation: Enhanced troubleshooting section with workflow_run-specific issues and solutions
- Dual trigger system: Workflow now supports both automated (via detect-release) and manual tag creation
- Tag fetching logic: When triggered by
workflow_run, workflow fetches the most recent tag usinggit ls-remote - Backward compatible: Manual tag pushes still work via fallback
push: tagstrigger
- π code-server symlink: Added
/usr/bin/code-serversymlink pointing to/usr/bin/codiumfor compatibility - π Chrome directory: Created
/opt/google/chromedirectory structure for compatibility - π Chrome symlink: Added symlink from
/usr/bin/chromiumto/opt/google/chrome/chromefor tools expecting Google Chrome
- π Core dumps: Added
core.*pattern to.gitignoreto exclude core dump files - π§ VSCodium wrapper: Simplified codium launcher - removed duplicate root/user logic, added automatic
$HOMEdirectory change when launched without arguments - π₯οΈ Openbox menu: Removed
--password-store="gnome-libsecret"flag from VSCodium menu entry (moved to wrapper) - π SSHD service: Changed from oneshot to longrunning service - now properly keeps SSHD running in foreground
- βοΈ Syncthing default: Changed
SYNCTHING_ENABLEDdefault fromtruetofalse(users must explicitly enable) - π§ Dockerfile: Added symlinks for code-server and Chrome during build
- π code-server wrapper: Removed duplicate
/usr/bin/code-serverscript (now symlinked to codium wrapper)
- π SSHD startup: Fixed SSHD service to properly run as longrunning process instead of oneshot initialization
- π S6_MERMAID: New environment variable to enable Mermaid dependency diagram generation (default: false)
- π .env.example: Added missing environment variables (SYNCTHING_ENABLED, S6_MERMAID)
- π svc-s6-tree: Service now respects S6_MERMAID environment variable (previously always ran)
- π§ init-chown-config: New s6-overlay service for proper ownership management of /config directory based on PUID/PGID environment variables
- π Syncthing dependency tracking: Added
upfile to ensure proper initialization order for Syncthing service
- π VSCodium desktop entry: Fixed incorrect Exec path in
/usr/share/applications/codium.desktopfrom/usr/share/codium/codiumto/usr/bin/codiumfor proper application launching
- βοΈ Syncthing default: Changed
SYNCTHING_ENABLEDdefault fromtruetofalse- users must explicitly enable Syncthing
- π Syncthing: Full file synchronization service with s6-overlay integration
- Configurable via
SYNCTHING_ENABLEDenv var (default: true) - GUI password protection via
SYNCTHING_PASSWORD - Configurable home/data directories via
SYNCTHING_HOME/SYNCTHING_DATA - GUI accessible on port 8384
- Automatic setup with official Syncthing repository
- Configurable via
- π SciTE: Lightweight text editor added to base image
- π¦ xz-utils: Compression utilities added to base image
- π Trivy/Grype scanners: Corrected scanner configuration with proper
scan-type: 'image'for Trivy and string format forseverity-cutoffin Grype - π VSCodium data directory: Changed user data directory from
/configto$HOME/.codiumfor better compatibility
- β
GitHub Actions: Added
prodenvironment to all deployment workflows for proper environment variables/secrets access and deployment tracking - π Added
.claudeto.gitignore
- π Security scanning: Trivy + Grype vulnerability scanners before image publishing
- π SARIF reports: Security findings automatically uploaded to GitHub Security tab
- ποΈ Multi-platform support: Now builds for both linux/amd64 AND linux/arm64 (Apple Silicon, AWS Graviton, Azure ARM)
- π SBOM generation: Software Bill of Materials included in every image
- π Provenance attestation: Image provenance metadata for supply chain security
- β±οΈ Timeout protection: All jobs now have proper timeouts (2h for build, 15m for scans)
- π¨ Improved Docker Buildx setup (removed silent error handling)
- β Enhanced job summaries with platform info and security scan results
- π¦ Added
security-events: writepermission for vulnerability reporting
- π Removed
continue-on-error: truefrom Buildx setup (errors now properly fail the build)
- β¨ Initial DevCoder container setup with full VSCodium IDE
- π³ LinuxServer.io base image with s6-overlay for reliable service management
- π Python 3 environment with pandas for data science
- π οΈ Essential development tools pre-installed: git, gdb, htop, mc, nano, terminator, tint2, rofi
- π§ VSCode extensions bundled out-of-the-box:
- vscode-icons-team.vscode-icons (File icons π¨)
- ms-azuretools.vscode-docker (Docker support π³)
- ms-python.python + ms-python.vscode-pylance (Python IntelliSense π)
- ms-python.flake8 + ms-python.pylint (Python linting π)
- ms-pyright.pyright (Type checking π)
- redhat.vscode-yaml (YAML support π)
- ms-azuretools.vscode-containers (Container support π¦)
- kilocode.kilo-code (AI coding assistant π€)
- anthropic.claude-code (Claude Code integration π§ )
- mermaidchart.vscode-mermaid-chart (Diagram support π)
- π Docker-in-Docker support via LinuxServer mods (for containerized development)
- π SSH server support (optional, configurable via SSHD_PORT)
- πΎ Persistent volumes for /config and /root directories
- π Keyring support with IPC_LOCK capability
- π Web-based IDE accessible via HTTPS on port 3001
- π¦ NPM global package support with @anthropic-ai/claude-code
- π₯ Health check endpoint for container monitoring
- π¨ Refactored Docker image structure with proper s6-overlay services
- βοΈ Improved build process with conditional chmod operations
- π Added comprehensive environment variable configuration via .env
- ποΈ Enhanced docker-compose with extensive documentation of available mods
- β Fixed 'run' files being ignored in src/ directory (now properly tracked)
- β Added conditional checks before chmod operations in Dockerfile to prevent build failures
- β Corrected permissions for s6-overlay service scripts
- π Initial project commit
- π Basic docker-compose configuration skeleton