Open ter0 opened 1 year ago
TL;DR: Erlang's JIT compilation, enabled on most systems by default, is broken on Sonoma (https://github.com/erlang/otp/issues/7687#issuecomment-1737184968). You need to use a RabbitMQ package built with an Erlang built with --disable-jit
. For example:
rabbitmq = {
enable = true;
package = let
erlang = pkgs.beam.interpreters.erlangR25.override {
configureFlags = ["--disable-jit"];
};
beamPackages = pkgs.beam.packagesWith erlang;
elixir = beamPackages.elixir;
in pkgs.rabbitmq-server.override {
inherit erlang elixir;
};
managementPlugin.enable = true;
};
Full investigation below.
I'm also experiencing this on macOS Sonoma
It definitely used to work a while ago, although I'm not sure what exactly has changed.
Same, my devenv definitely worked before. I think today is the first time I ran devenv up
since installing Sonoma, so that could be the culprit (somehow).
Interestingly I can get a similar Bus error: 10
when building RabbitMQ. If I override the RabbitMQ package with one built with Erlang 26:
rabbitmq = {
enable = true;
package = pkgs.rabbitmq-server.override { erlang = pkgs.beam.interpreters.erlangR25; };
};
I get these logs from the RabbitMQ build:
make[3]: Leaving directory '/private/tmp/nix-build-rabbitmq-server-3.12.0.drv-0/rabbitmq-server-3.12.0/deps/stdout_formatter'
GEN escript/rabbitmqctl
/nix/store/ag6lcqchlfb3nsn71slrdr9c60a4gf88-bash-5.2-p15/bin/bash: line 5: 62460 Done echo y
62461 Bus error: 10 | ERL_COMPILER_OPTIONS=deterministic mix make_all_in_src_archive
make[2]: *** [Makefile:102: escript/rabbitmqctl] Error 138
make[2]: Leaving directory '/private/tmp/nix-build-rabbitmq-server-3.12.0.drv-0/rabbitmq-server-3.12.0/deps/rabbitmq_cli'
make[1]: *** [../../erlang.mk:4512: deps] Error 2
make[1]: Leaving directory '/private/tmp/nix-build-rabbitmq-server-3.12.0.drv-0/rabbitmq-server-3.12.0/deps/rabbit'
make: *** [erlang.mk:4512: deps] Error 2
I get a successful build with Erlang 25 (which I think is the default version of Erlang in my pinned nixpkgs, so the one my rabbitmq-server used anyway). But I get the bus error when starting.
If I try to run the erl
executable my RabbitMQ runs I can reproduce the bus error.
$ /nix/store/5fhn6agp344p074jlvbixpa8faw1vdj3-erlang-25.3.2.2/bin/erl
fish: Job 1, '/nix/store/5fhn6agp344p074jlvbi…' terminated by signal SIGBUS (Misaligned address error)
This thread points to https://github.com/erlang/otp/issues/7687#issuecomment-1737184968 which suggests that JIT compilation isn't compatible with Sonoma.
Try using an Erlang built with --disable-jit
:
rabbitmq = {
enable = true;
package = pkgs.rabbitmq-server.override {
erlang = pkgs.erlang.override {
configureFlags = ["--disable-jit"];
};
};
};
This failed in the same way as the previous build. But I noticed what's failing is a mix
call, and presumably the elixir
package is using its own erlang
which still has JIT enabled.
Try using a custom Elixir as well.
rabbitmq = {
enable = true;
package = let
erlang = pkgs.beam.interpreters.erlangR25.override {
configureFlags = ["--disable-jit"];
};
beamPackages = pkgs.beam.packagesWith erlang;
elixir = beamPackages.elixir;
in pkgs.rabbitmq-server.override {
inherit erlang elixir;
};
managementPlugin.enable = true;
};
The RabbitMQ build succeeds and devenv up
works!
Should we add the package override when using Darwin in to erlang itself? Ideally this would even be fixed in https://github.com/NixOS/nixpkgs
Describe the bug Enabling the rabbitmq service and running
devenv up
throws an error.Running macOS Sonoma.
To reproduce Run
devenv init
, editdevenv.nix
to contain the following:Run
devenv up
:It definitely used to work a while ago, although I'm not sure what exactly has changed.
Version Running the latest
master
.