abiosoft/colima · error

error preparing vmnet: %w

Error message

error preparing vmnet: %w

What it means

processManager.init creates the per-profile daemon directory (process.Dir() = <profile ConfigDir>/daemon, e.g. ~/.colima/_default/daemon) via fsutil.MkdirAll(..., 0755). Despite the 'vmnet' wording (leftover from a comment about network dependencies), this is plain directory creation for all daemon files. The error wraps whatever filesystem failure MkdirAll hit (a *fs.PathError: permission denied, read-only filesystem, no space left on device).

Source

Thrown at daemon/daemon.go:68

	host environment.HostActions
}

func (l processManager) Dependency(ctx context.Context, conf config.Config, name string) (deps process.Dependency, root bool) {
	processes := processesFromConfig(conf)

	for _, p := range processes {
		if p.Name() == name {
			return process.Dependencies(p)
		}
	}

	return process.Dependencies()
}

func (l processManager) init() error {
	// dependencies for network
	if err := fsutil.MkdirAll(process.Dir(), 0755); err != nil {
		return fmt.Errorf("error preparing vmnet: %w", err)
	}
	return nil
}

func (l processManager) Running(ctx context.Context, conf config.Config) (s Status, err error) {
	err = l.host.RunQuiet(osutil.Executable(), "daemon", "status", config.CurrentProfile().ShortName)
	if err != nil {
		return
	}
	s.Running = true

	ctx = context.WithValue(ctx, process.CtxKeyDaemon(), s.Running)

	for _, p := range processesFromConfig(conf) {
		pErr := p.Alive(ctx)
		s.Processes = append(s.Processes, processStatus{
			Name:    p.Name(),
			Running: pErr == nil,

View on GitHub (pinned to c3a5f9184d)

Solutions

  1. reproduce the real errno manually: mkdir -p ~/.colima/_default/daemon (or $COLIMA_HOME equivalent) and read the OS error
  2. fix ownership: sudo chown -R $(whoami) ~/.colima
  3. verify HOME/COLIMA_HOME point to a writable path for the invoking user
  4. check disk space and read-only mounts: df -h ~

Example fix

// before
$ colima start --mount-inotify
error preparing vmnet: mkdir /Users/me/.colima/_default/daemon: permission denied

// after (root-owned dir from a previous sudo run)
$ sudo chown -R $(whoami) ~/.colima
$ colima start --mount-inotify   # succeeds
Defensive patterns

Strategy: try-catch

Validate before calling

dir := filepath.Join(config.CurrentProfile().ConfigDir(), "daemon")
if err := fsutil.MkdirAll(dir, 0755); err != nil {
    return fmt.Errorf("daemon dir not preparable, fix before start: %w", err)
}
// also probe writability, not just existence
probe := filepath.Join(dir, ".probe")
if err := os.WriteFile(probe, nil, 0600); err != nil {
    return fmt.Errorf("daemon dir not writable: %w", err)
}
_ = os.Remove(probe)

Try / catch

if err := manager.Start(ctx, conf); err != nil {
    var perr *fs.PathError
    if errors.As(err, &perr) {
        // perr.Path names the exact directory; check os.Stat(perr.Path) ownership/perms
        log.Printf("daemon dir %s failed: %v — chown or free space", perr.Path, perr.Err)
    }
}

Prevention

When it happens

Trigger: MkdirAll on ~/.colima/<profile>/daemon fails: a root-owned file or directory inside the path left by earlier sudo usage; $HOME or COLIMA_HOME unwritable; disk full; profile config dir replaced by a regular file.

Common situations: running colima once with sudo leaves ~/.colima entries owned by root; corporate machines with managed/read-only home directories; COLIMA_HOME exported to a protected location; a '~/.colima/_default' regular file blocking the dir.

Related errors


AI-assisted analysis of abiosoft/colima@c3a5f9184d (2026-08-15). Data as JSON: /api/errors/34162c68fe8f775d. Report an issue: GitHub.