From a5dcd41e27c1330eb8333951938511c3a5e97f9c Mon Sep 17 00:00:00 2001 From: Josh Heinrichs Date: Tue, 23 Jul 2024 16:15:51 -0600 Subject: [PATCH] percona: fix references to utilities in scripts I encountered errors when attempting to run Vitess which calls out to mysqld_safe[1]. Several utilities are needed in order for it to run e.g. grep, sed, env, ps, date, hostname, etc. Additionally, if ps, kill, and grep aren't available to scripts/CMakeLists.txt, mysqld_start can end up getting generated with syntax errors as FIND_PROC will be substituted into the script template as an empty string[2][3]. The presence of systemd in percona-server_innovation seems to prevent mysqld_multi from being built on Linux so it gets patched conditionally. This same patch could be applied to MySQL if desired. [1]: https://github.com/vitessio/vitess/blob/v20.0.1/go/vt/mysqlctl/mysqld.go#L363-L369 [2]: https://github.com/percona/percona-server/blob/79c1086e8272ea96f162b25121b58e1b01ff853b/scripts/CMakeLists.txt#L255 [3]: https://github.com/percona/percona-server/blob/79c1086e8272ea96f162b25121b58e1b01ff853b/scripts/mysqld_safe.sh#L869 --- pkgs/servers/sql/percona-server/innovation.nix | 17 ++++++++++++++--- pkgs/servers/sql/percona-server/lts.nix | 16 +++++++++++++--- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/pkgs/servers/sql/percona-server/innovation.nix b/pkgs/servers/sql/percona-server/innovation.nix index d19c17554226..27272410033f 100644 --- a/pkgs/servers/sql/percona-server/innovation.nix +++ b/pkgs/servers/sql/percona-server/innovation.nix @@ -1,9 +1,10 @@ { lib, stdenv, fetchurl, bison, cmake, pkg-config , boost, icu, libedit, libevent, lz4, ncurses, openssl, perl, protobuf, re2, readline, zlib, zstd, libfido2 , numactl, cctools, CoreServices, developer_cmds, libtirpc, rpcsvc-proto, curl, DarwinTools, nixosTests +, coreutils, procps, gnused, gnugrep, hostname, makeWrapper , systemd # Percona-specific deps -, coreutils, cyrus_sasl, gnumake, openldap +, cyrus_sasl, gnumake, openldap # optional: different malloc implementations , withJemalloc ? false, withTcmalloc ? false, jemalloc, gperftools }: @@ -20,8 +21,11 @@ stdenv.mkDerivation (finalAttrs: { hash = "sha256-GeuifzqCkStmb4qYa8147XBHvMogYwfsn0FyHdO4WEg"; }; - nativeBuildInputs = [ bison cmake pkg-config ] - ++ lib.optionals (!stdenv.isDarwin) [ rpcsvc-proto ]; + nativeBuildInputs = [ + bison cmake pkg-config makeWrapper + # required for scripts/CMakeLists.txt + coreutils gnugrep procps + ] ++ lib.optionals (!stdenv.isDarwin) [ rpcsvc-proto ]; patches = [ ./no-force-outline-atomics.patch # Do not force compilers to turn on -moutline-atomics switch @@ -88,6 +92,13 @@ stdenv.mkDerivation (finalAttrs: { moveToOutput "lib/*.a" $static so=${stdenv.hostPlatform.extensions.sharedLibrary} ln -s libmysqlclient$so $out/lib/libmysqlclient_r$so + + wrapProgram $out/bin/mysqld_safe --prefix PATH : ${lib.makeBinPath [ coreutils procps gnugrep gnused hostname ]} + wrapProgram $out/bin/mysql_config --prefix PATH : ${lib.makeBinPath [ coreutils gnused ]} + wrapProgram $out/bin/ps_mysqld_helper --prefix PATH : ${lib.makeBinPath [ coreutils gnugrep ]} + wrapProgram $out/bin/ps-admin --prefix PATH : ${lib.makeBinPath [ coreutils gnugrep ]} + '' + lib.optionalString stdenv.isDarwin '' + wrapProgram $out/bin/mysqld_multi --prefix PATH : ${lib.makeBinPath [ coreutils gnugrep ]} ''; passthru = { diff --git a/pkgs/servers/sql/percona-server/lts.nix b/pkgs/servers/sql/percona-server/lts.nix index 4531a2db7b7a..19e81654dd7b 100644 --- a/pkgs/servers/sql/percona-server/lts.nix +++ b/pkgs/servers/sql/percona-server/lts.nix @@ -1,8 +1,9 @@ { lib, stdenv, fetchurl, bison, cmake, pkg-config , boost, icu, libedit, libevent, lz4, ncurses, openssl, perl, protobuf, re2, readline, zlib, zstd, libfido2 , numactl, cctools, CoreServices, developer_cmds, libtirpc, rpcsvc-proto, curl, DarwinTools, nixosTests +, coreutils, procps, gnused, gnugrep, hostname, makeWrapper # Percona-specific deps -, coreutils, cyrus_sasl, gnumake, openldap +, cyrus_sasl, gnumake, openldap }: stdenv.mkDerivation (finalAttrs: { @@ -14,8 +15,11 @@ stdenv.mkDerivation (finalAttrs: { hash = "sha256-iktEvZz3mjjmJ16PX51OjSwwiFS3H9W/XRco//Q6aEQ="; }; - nativeBuildInputs = [ bison cmake pkg-config ] - ++ lib.optionals (!stdenv.isDarwin) [ rpcsvc-proto ]; + nativeBuildInputs = [ + bison cmake pkg-config makeWrapper + # required for scripts/CMakeLists.txt + coreutils gnugrep procps + ] ++ lib.optionals (!stdenv.isDarwin) [ rpcsvc-proto ]; patches = [ ./no-force-outline-atomics.patch # Do not force compilers to turn on -moutline-atomics switch @@ -73,6 +77,12 @@ stdenv.mkDerivation (finalAttrs: { moveToOutput "lib/*.a" $static so=${stdenv.hostPlatform.extensions.sharedLibrary} ln -s libmysqlclient$so $out/lib/libmysqlclient_r$so + + wrapProgram $out/bin/mysqld_safe --prefix PATH : ${lib.makeBinPath [ coreutils procps gnugrep gnused hostname ]} + wrapProgram $out/bin/mysql_config --prefix PATH : ${lib.makeBinPath [ coreutils gnused ]} + wrapProgram $out/bin/ps_mysqld_helper --prefix PATH : ${lib.makeBinPath [ coreutils gnugrep ]} + wrapProgram $out/bin/ps-admin --prefix PATH : ${lib.makeBinPath [ coreutils gnugrep ]} + wrapProgram $out/bin/mysqld_multi --prefix PATH : ${lib.makeBinPath [ coreutils gnugrep ]} ''; passthru = {