Skip to content

Symlink to PHP binary isn't created #2788

@assyrus-favolo

Description

@assyrus-favolo

What happened?

In a newly created environment if I add the PHP package via devbox add php, under .devbox/nix/profile/default/bin/ only composer is created pointing to /nix/store/m9bsyax4mk1y0sq08p47l5l6a050wm48-composer-2.9.5/bin, so if I try to run php I get:

Command 'php' not found, but can be installed with:
apt install php8.3-cli  # version 8.3.6-0ubuntu0.24.04.6, or
apt install php-cli     # version 2:8.2+93ubuntu1
apt install php8.2-cli  # version 8.2.12-1ubuntu2
Ask your administrator to install one of them.

Steps to reproduce

  1. Create empty directory: mkdir Test
  2. Enter it: cd Test
  3. Add PHP: devbox add php
  4. Enter the shell: devbox shell
  5. Run PHP: php

Command

add

devbox.json

{
  "$schema":  "https://raw.githubusercontent.com/jetify-com/devbox/0.16.0/.schema/devbox.schema.json",
  "packages": ["php@latest"],
  "shell": {
    "init_hook": [
      "echo 'Welcome to devbox!' > /dev/null"
    ],
    "scripts": {
      "test": [
        "echo \"Error: no test specified\" && exit 1"
      ]
    }
  }
}

Devbox version

0.16.0

Nix version

nix (Lix, like Nix) 2.94.0
System type: x86_64-linux
Additional system types: i686-linux, x86_64-v1-linux, x86_64-v2-linux, x86_64-v3-linux
Features: gc, signed-caches
System configuration file: /etc/nix/nix.conf
User configuration files: /home/myuser/.config/nix/nix.conf:/etc/xdg/xdg-ubuntu/nix/nix.conf:/etc/xdg/nix/nix.conf
Store directory: /nix/store
State directory: /nix/var/nix
Data directory: /nix/store/vr4a39d4bw01793jl4qap839rlvmc143-lix-2.94.0/share

What system does this bug occur on?

Linux (x86-64)

Debug logs

time=2026-02-25T13:57:16.673+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devconfig/config.go:126 msg="searching for config file (including parent directories)" path=.
time=2026-02-25T13:57:16.673+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devconfig/config.go:147 msg="trying config file" path=devbox.json
time=2026-02-25T13:57:16.673+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devconfig/config.go:134 msg="config file found" path=/home/myuser/Documents/Develop/Test/devbox.json dur=748.209µs
time=2026-02-25T13:57:16.677+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devconfig/config.go:126 msg="searching for config file (including parent directories)" path=.
time=2026-02-25T13:57:16.677+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devconfig/config.go:147 msg="trying config file" path=devbox.json
time=2026-02-25T13:57:16.677+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devconfig/config.go:134 msg="config file found" path=/home/myuser/Documents/Develop/Test/devbox.json dur=324.409µs
time=2026-02-25T13:57:16.678+01:00 level=DEBUG source=go.jetify.com/devbox/nix/nix.go:143 msg="nix command starting" cmd.args="nix --extra-experimental-features ca-derivations --option experimental-features 'nix-command flakes fetch-closure' --version --debug"
time=2026-02-25T13:57:16.731+01:00 level=DEBUG source=go.jetify.com/devbox/nix/nix.go:143 msg="nix command exited" cmd.args="nix --extra-experimental-features ca-derivations --option experimental-features 'nix-command flakes fetch-closure' --version --debug" cmd.path=/nix/var/nix/profiles/default/bin/nix cmd.pid=63892 cmd.code=0 cmd.dur=53.4833ms
time=2026-02-25T13:57:16.731+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devconfig/config.go:126 msg="searching for config file (including parent directories)" path=.
time=2026-02-25T13:57:16.731+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devconfig/config.go:147 msg="trying config file" path=devbox.json
time=2026-02-25T13:57:16.732+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devconfig/config.go:134 msg="config file found" path=/home/myuser/Documents/Develop/Test/devbox.json dur=135.487µs
time=2026-02-25T13:57:16.732+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devpkg/package.go:204 msg="package doesn't need patching" pkg=php mode=auto
time=2026-02-25T13:57:16.732+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devpkg/package.go:204 msg="package doesn't need patching" pkg=php mode=auto
Info: Adding package "php@latest" to devbox.json
time=2026-02-25T13:57:17.104+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devpkg/package.go:204 msg="package doesn't need patching" pkg=php mode=auto
time=2026-02-25T13:57:17.105+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devpkg/package.go:204 msg="package doesn't need patching" pkg="" mode=auto
time=2026-02-25T13:57:17.105+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devpkg/package.go:204 msg="package doesn't need patching" pkg="" mode=auto
time=2026-02-25T13:57:17.105+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devpkg/package.go:204 msg="package doesn't need patching" pkg="" mode=auto
time=2026-02-25T13:57:17.105+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devpkg/package.go:204 msg="package doesn't need patching" pkg="" mode=auto
time=2026-02-25T13:57:17.105+01:00 level=DEBUG source=go.jetify.com/devbox/internal/plugin/plugin.go:85 msg="creating files for package" pkg=php@latest
time=2026-02-25T13:57:17.105+01:00 level=DEBUG source=go.jetify.com/devbox/internal/plugin/plugin.go:128 msg="Creating file %q from contentPath: %q" /home/myuser/Documents/Develop/Test/.devbox/virtenv/php/process-compose.yaml=php/process-compose.yaml
time=2026-02-25T13:57:17.107+01:00 level=DEBUG source=go.jetify.com/devbox/internal/plugin/plugin.go:128 msg="Creating file %q from contentPath: %q" /home/myuser/Documents/Develop/Test/.devbox/virtenv/php/flake/flake.nix=php/flake.nix
time=2026-02-25T13:57:17.109+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devpkg/package.go:204 msg="package doesn't need patching" pkg="" mode=auto
time=2026-02-25T13:57:17.109+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devpkg/package.go:204 msg="package doesn't need patching" pkg="" mode=auto
time=2026-02-25T13:57:17.109+01:00 level=DEBUG source=go.jetify.com/devbox/internal/nix/store.go:40 msg="nix command starting" cmd.args="nix --extra-experimental-features ca-derivations --option experimental-features 'nix-command flakes fetch-closure' path-info 'path:/home/myuser/Documents/Develop/Test/.devbox/virtenv/php/flake#composer' --json --impure"
time=2026-02-25T13:57:18.953+01:00 level=DEBUG source=go.jetify.com/devbox/internal/nix/store.go:40 msg="nix command exited" cmd.args="nix --extra-experimental-features ca-derivations --option experimental-features 'nix-command flakes fetch-closure' path-info 'path:/home/myuser/Documents/Develop/Test/.devbox/virtenv/php/flake#composer' --json --impure" cmd.path=/nix/var/nix/profiles/default/bin/nix cmd.pid=63905 cmd.code=0 cmd.dur=1.843658556s
time=2026-02-25T13:57:18.953+01:00 level=DEBUG source=go.jetify.com/devbox/internal/nix/store.go:61 msg="nix command starting" cmd.args="nix --extra-experimental-features ca-derivations --option experimental-features 'nix-command flakes fetch-closure' path-info --offline --json /nix/store/m9bsyax4mk1y0sq08p47l5l6a050wm48-composer-2.9.5"
time=2026-02-25T13:57:19.009+01:00 level=DEBUG source=go.jetify.com/devbox/internal/nix/store.go:61 msg="nix command exited" cmd.args="nix --extra-experimental-features ca-derivations --option experimental-features 'nix-command flakes fetch-closure' path-info --offline --json /nix/store/m9bsyax4mk1y0sq08p47l5l6a050wm48-composer-2.9.5" cmd.path=/nix/var/nix/profiles/default/bin/nix cmd.pid=63943 cmd.code=0 cmd.dur=55.184485ms
time=2026-02-25T13:57:19.009+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devpkg/package.go:204 msg="package doesn't need patching" pkg="" mode=auto
time=2026-02-25T13:57:19.009+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devpkg/package.go:204 msg="package doesn't need patching" pkg="" mode=auto
time=2026-02-25T13:57:19.009+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devpkg/package.go:204 msg="package doesn't need patching" pkg="" mode=auto
time=2026-02-25T13:57:19.009+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devpkg/package.go:204 msg="package doesn't need patching" pkg="" mode=auto

php NOTES:
PHP is compiled with default extensions. If you would like to use non-default extensions you can add them with devbox add php81Extensions.{extension} . For example, for the memcache extension you can do `devbox add php81Extensions.memcached`.

Services:
* php-fpm

Use `devbox services start|stop [service]` to interact with services

This plugin creates the following helper files:
* /home/myuser/Documents/Develop/Test/devbox.d/php/php-fpm.conf
* /home/myuser/Documents/Develop/Test/devbox.d/php/php.ini
* /home/myuser/Documents/Develop/Test/.devbox/virtenv/php/process-compose.yaml
* /home/myuser/Documents/Develop/Test/.devbox/virtenv/php/flake/flake.nix

This plugin sets the following environment variables:
* PHPFPM_ERROR_LOG_FILE=/home/myuser/Documents/Develop/Test/.devbox/virtenv/php/php-fpm.log
* PHPFPM_PID_FILE=/home/myuser/Documents/Develop/Test/.devbox/virtenv/php/php-fpm.pid
* PHPFPM_PORT=8082
* PHPRC=/home/myuser/Documents/Develop/Test/devbox.d/php

To show this information, run `devbox info php`


time=2026-02-25T13:57:19.011+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devconfig/config.go:126 msg="searching for config file (including parent directories)" path=.
time=2026-02-25T13:57:19.011+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devconfig/config.go:147 msg="trying config file" path=devbox.json
time=2026-02-25T13:57:19.011+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devconfig/config.go:134 msg="config file found" path=/home/myuser/Documents/Develop/Test/devbox.json dur=111.571µs
time=2026-02-25T13:57:19.011+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devpkg/package.go:204 msg="package doesn't need patching" pkg=php mode=auto
time=2026-02-25T13:57:19.011+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devpkg/package.go:204 msg="package doesn't need patching" pkg="" mode=auto
time=2026-02-25T13:57:19.011+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devpkg/package.go:204 msg="package doesn't need patching" pkg="" mode=auto
time=2026-02-25T13:57:19.011+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devpkg/package.go:204 msg="package doesn't need patching" pkg="" mode=auto
time=2026-02-25T13:57:19.011+01:00 level=DEBUG source=go.jetify.com/devbox/internal/devpkg/package.go:204 msg="package doesn't need patching" pkg="" mode=auto

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingtriageIssue needs triage

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions