Skip to content

[Bug]: osmosisd init ignores --home flag when creating .env file #9442

@danbryan

Description

@danbryan

What happened?

The osmosisd init command has a hardcoded behavior that always tries to create a .env file in ~/.osmosisd (the DefaultNodeHome), even when a different home directory is specified with the --home flag. This causes initialization to fail in containerized environments with read-only root filesystems.

Current Behavior

When running osmosisd init with a custom home directory:

osmosisd init mynode --home /custom/path

The init process:

  1. Correctly uses /custom/path for most initialization
  2. BUT still tries to create /home/user/.osmosisd/.env due to the CreateEnvFile function

Expected Behavior

The CreateEnvFile function should respect the --home flag and create the .env file in the specified home directory, not in the hardcoded DefaultNodeHome.

Root Cause

In cmd/osmosisd/cmd/init.go, the CreateEnvFile function (lines 247-282) uses app.DefaultNodeHome which is hardcoded to ~/.osmosisd:

func CreateEnvFile(cmd *cobra.Command) error {
    // Check if .env file was created in /.osmosisd
    envPath := filepath.Join(app.DefaultNodeHome, ".env")  // <-- This ignores --home flag
    // ...
}

Impact

This issue prevents Osmosis from running in:

  • Kubernetes environments using operators (like cosmos-operator)
  • Containers with read-only root filesystems
  • Any environment where the default home directory is not writable

Proposed Solution

The CreateEnvFile function should use the home directory from the command context instead of the hardcoded DefaultNodeHome:

func CreateEnvFile(cmd *cobra.Command) error {
    clientCtx := client.GetClientContextFromCmd(cmd)
    envPath := filepath.Join(clientCtx.HomeDir, ".env")  // Use the actual home dir
    // ...
}

Workaround

Currently, operators must create a writable volume at ~/.osmosisd just for the init process, even though all actual chain data is stored elsewhere.

Environment

  • Osmosis version: v29.0.0 (still present in latest)
  • OS: Linux containers
  • Context: Running in Kubernetes with cosmos-operator

Additional Context

Other Cosmos SDK chains (Cosmos Hub, Noble, Penumbra, etc.) don't have this issue because they don't have this CreateEnvFile function that writes to a hardcoded location.

Osmosis Version

v29.0.0

How to reproduce?

osmosisd init mynode --home /custom/path

you will see it will try to write data outside of --home

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    Needs Triage 🔍

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions