Skip to content

Commit

Permalink
rabbitmq: make all dependencies explicit
Browse files Browse the repository at this point in the history
Some things were provided by default, some by systemd unit and some
were just miraculously working. This turns them into explicit
dependencies of the package itself, making everything properly
overrideable.

+ providing glibcLocales fixes elixir compile warnings

+ providing systemd dependency allows rabbit to use systemctl for unit
  activation check instead of falling back to sleep. This was seen as
  a warning during startup.
  • Loading branch information
binarin authored and Profpatsch committed Jan 19, 2020
1 parent e0ae847 commit ed16f83
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 9 deletions.
5 changes: 4 additions & 1 deletion nixos/modules/services/amqp/rabbitmq.nix
Expand Up @@ -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";
Expand Down
33 changes: 25 additions & 8 deletions 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
}:

Expand All @@ -15,23 +16,39 @@ 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" ];

installFlags = [ "PREFIX=$(out)" "RMQ_ERLAPP_DIR=$(out)" ];
installTargets = [ "install" "install-man" ];

runtimePath = stdenv.lib.makeBinPath [getconf erlang socat];
preBuild = ''
export LANG=C.UTF-8 # fix elixir locale warning
'';

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 = ''
echo 'PATH=${runtimePath}:''${PATH:+:}$PATH' >> $out/sbin/rabbitmq-env
# 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
substituteInPlace $out/sbin/rabbitmq-env \
--replace 'RABBITMQ_SCRIPTS_DIR=`dirname $SCRIPT_PATH`' \
"RABBITMQ_SCRIPTS_DIR=$out/sbin"
# 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
Expand Down

0 comments on commit ed16f83

Please sign in to comment.