diff --git a/nixos/modules/services/amqp/rabbitmq.nix b/nixos/modules/services/amqp/rabbitmq.nix index 697732426cc..35fb49f709a 100644 --- a/nixos/modules/services/amqp/rabbitmq.nix +++ b/nixos/modules/services/amqp/rabbitmq.nix @@ -165,7 +165,10 @@ in { after = [ "network.target" "epmd.socket" ]; wants = [ "network.target" "epmd.socket" ]; - path = [ cfg.package pkgs.procps ]; + path = [ + cfg.package + pkgs.coreutils # mkdir/chown/chmod for preStart + ]; environment = { RABBITMQ_MNESIA_BASE = "${cfg.dataDir}/mnesia"; diff --git a/pkgs/servers/amqp/rabbitmq-server/default.nix b/pkgs/servers/amqp/rabbitmq-server/default.nix index f1838f2a2cb..868fd3a6d56 100644 --- a/pkgs/servers/amqp/rabbitmq-server/default.nix +++ b/pkgs/servers/amqp/rabbitmq-server/default.nix @@ -1,5 +1,6 @@ { stdenv, fetchurl, erlang, elixir, python, libxml2, libxslt, xmlto , docbook_xml_dtd_45, docbook_xsl, zip, unzip, rsync, getconf, socat +, procps, coreutils, gnused, systemd, glibcLocales , AppKit, Carbon, Cocoa }: @@ -15,7 +16,7 @@ stdenv.mkDerivation rec { }; buildInputs = - [ erlang elixir python libxml2 libxslt xmlto docbook_xml_dtd_45 docbook_xsl zip unzip rsync ] + [ erlang elixir python libxml2 libxslt xmlto docbook_xml_dtd_45 docbook_xsl zip unzip rsync glibcLocales ] ++ stdenv.lib.optionals stdenv.isDarwin [ AppKit Carbon Cocoa ]; outputs = [ "out" "man" "doc" ]; @@ -23,15 +24,31 @@ stdenv.mkDerivation rec { installFlags = [ "PREFIX=$(out)" "RMQ_ERLAPP_DIR=$(out)" ]; installTargets = [ "install" "install-man" ]; - runtimePath = stdenv.lib.makeBinPath [getconf erlang socat]; - postInstall = '' - echo 'PATH=${runtimePath}:''${PATH:+:}$PATH' >> $out/sbin/rabbitmq-env + preBuild = '' + export LANG=C.UTF-8 # fix elixir locale warning + ''; - # we know exactly where rabbitmq is gonna be, - # so we patch that into the env-script - substituteInPlace $out/sbin/rabbitmq-env \ - --replace 'RABBITMQ_SCRIPTS_DIR=`dirname $SCRIPT_PATH`' \ - "RABBITMQ_SCRIPTS_DIR=$out/sbin" + runtimePath = stdenv.lib.makeBinPath [ + erlang + getconf # for getting memory limits + socat systemd procps # for systemd unit activation check + gnused coreutils # used by helper scripts + ]; + postInstall = '' + # rabbitmq-env calls to sed/coreutils, so provide everything early + sed -i $out/sbin/rabbitmq-env -e '2s|^|PATH=${runtimePath}\''${PATH:+:}\$PATH/\n|' + + # rabbitmq-server script uses `dirname` to get hold of a + # rabbitmq-env, so let's provide this file directly. After that + # point everything is OK - the PATH above will kick in + substituteInPlace $out/sbin/rabbitmq-server \ + --replace '`dirname $0`/rabbitmq-env' \ + "$out/sbin/rabbitmq-env" + + # We know exactly where rabbitmq is gonna be, so we patch that into the env-script. + # By doing it early we make sure that auto-detection for this will + # never be executed (somewhere below in the script). + sed -i $out/sbin/rabbitmq-env -e "2s|^|RABBITMQ_SCRIPTS_DIR=$out/sbin\n|" # there’s a few stray files that belong into share mkdir -p $doc/share/doc/rabbitmq-server