Skip to content

Admin UI toggles fail with [Errno 30] Read-only file system: '/app/config.toml' on the shipped compose.yaml #196

Open

Description

@dkpnw

What happened?

In the standalone admin UI, saving Allow new app logins, onboarding, and first-time vacuum connections returns HTTP 500 with [Errno 30] Read-only file system: '/app/config.toml'. The setting does not change.

I expected the toggle to persist, or at least to see a clear message that config.toml is read-only and needs to be edited on the host.

Cause

  • The toggle calls set_new_connections_enabled (standalone_admin.py L369-L376) → _rewrite_admin_bool_setting, which ends in config_path.write_text(...) (server.py L1522-L1575).
  • The shipped compose file mounts ./config.toml:/app/config.toml:ro (compose.yaml L12).
  • set_protocol_auth_enabled (L378-L386) goes through the same write path.

Home Assistant add-on

There the file is writable, but ha_addon.py regenerates /data/config.toml from options and forces both values to true (L248-L251). As far as I can tell, a UI change is lost on the next add-on restart. I haven't tested this.

Related PR #176

PR #176 keeps the :ro mount and adds config generated from environment variables (ROBOROCK_SERVER_NEW_CONNECTIONS_ENABLED). If that config is regenerated on each start, the same persistence question applies there.

Workaround

Set [admin] new_connections_enabled in config.toml on the host and recreate the container.

Possible fix

Store admin toggles in a small writable state file under data/runtime/ that overrides [admin]. That keeps config.toml read-only and works for compose, the add-on and #176.

The minimal alternative is to catch OSError and return a 409 with a clear message.

Happy to open a PR for either.

Steps to reproduce

  1. Deploy with the shipped compose.yaml, using the config.toml created by configure.
  2. Open the admin UI and toggle Allow new app logins, onboarding, and first-time vacuum connections.
  3. Save. The response is 500 with [Errno 30] Read-only file system: '/app/config.toml'.

Vacuum model

Not model-specific (seen with Roborock S8 MaxV Ultra)

Server / image version

main @ d40d67d, Docker Compose (+ compose.turn.yaml)

Relevant logs

{"error": "[Errno 30] Read-only file system: '/app/config.toml'"}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions