Skip to content

Troubleshooting

The failure modes we know about, with the fix for each. If yours is not here, check the issue queue.

The browser warns about the site's certificate

DDEV's HTTPS certificates come from mkcert, and mkcert -install (a one-time step) is what makes your browser trust them. The installer only installs DDEV when ddev is missing, and it is DDEV's install script that sets up mkcert. So on a machine where DDEV was already installed some other way (apt, brew, an old manual install), mkcert may never have been set up.

Fix:

mkcert -install

If mkcert itself is missing, install it first (brew install mkcert on macOS; on Linux it ships next to ddev when DDEV's install script is used, or take it from https://github.com/FiloSottile/mkcert/releases). On Linux, browser trust additionally needs certutil:

sudo apt install libnss3-tools    # Ubuntu/Debian
sudo dnf install nss-tools        # Fedora/RHEL

Then run mkcert -install again and restart the browser.

Docker is installed but the build fails immediately

The Docker daemon has to be running. On macOS, start Docker Desktop (or OrbStack/Colima) and wait until it reports ready. On Linux:

sudo systemctl start docker

Add your user to the docker group if docker ps needs sudo: sudo usermod -aG docker $USER, then log out and back in.

drupalaibp: command not found after installing

install adds ~/.local/bin to your PATH via your shell rc file, but a shell that was already open does not see it. Restart the shell or source the rc file it names in its output.

macOS: the installer stops at "bash 4 required" or Homebrew

macOS ships bash 3.2, so the installer bootstraps a newer bash via Homebrew before doing anything else. That step needs your password (Homebrew's installer uses sudo) and can take a few minutes on a machine without Homebrew. If it fails, install Homebrew manually from https://brew.sh, run brew install bash, and start the one-liner again. The system bash at /bin/bash is never touched.

"holds several configs" error in an unattended run

A .drupalaibp/ directory with more than one *.json needs to be told which config to build from. Interactively you get a menu; with --yolo (or no terminal) the installer dies and names the choices. Pass --config <name> (the file's basename without .json).

Management mode refuses --yolo

Running the installer inside an existing DDEV project opens the management menu, which is interactive by design. Run it without --yolo there.

Disk space

A build pulls Docker images and a full Composer project; expect several gigabytes. When space runs out mid-build, clean up and re-run:

docker system prune        # unused images/containers
ddev clean --all           # DDEV's own caches and leftovers

The denylist step warns about jq

The denylist writers edit the agents' JSON settings with jq, using the host's jq or, when that is missing, jq inside the web container. The DDEV web image ships jq, so this only fails when the container is not running at that point. Re-run the installer inside the project (management mode) to write the denylist again.

The one-liner runs an older version than the repo

That is by design: the published script updates only when a release tag is cut, so the one-liner always serves the latest release. Run the current development state with:

bash <(curl -fsSL https://git.drupalcode.org/project/one_line_installer/-/raw/2.0.x/drupalaibp)