about summary refs log tree commit diff
path: root/nixpkgs/pkgs/servers/sql/mariadb/default.nix
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2023-06-16 06:56:35 +0000
committerAlyssa Ross <hi@alyssa.is>2023-06-16 06:56:35 +0000
commit99fcaeccb89621dd492203ce1f2d551c06f228ed (patch)
tree41cb730ae07383004789779b0f6e11cb3f4642a3 /nixpkgs/pkgs/servers/sql/mariadb/default.nix
parent59c5f5ac8682acc13bb22bc29c7cf02f7d75f01f (diff)
parent75a5ebf473cd60148ba9aec0d219f72e5cf52519 (diff)
downloadnixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.tar
nixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.tar.gz
nixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.tar.bz2
nixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.tar.lz
nixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.tar.xz
nixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.tar.zst
nixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.zip
Merge branch 'nixos-unstable' of https://github.com/NixOS/nixpkgs
Conflicts:
	nixpkgs/nixos/modules/config/console.nix
	nixpkgs/nixos/modules/services/mail/mailman.nix
	nixpkgs/nixos/modules/services/mail/public-inbox.nix
	nixpkgs/nixos/modules/services/mail/rss2email.nix
	nixpkgs/nixos/modules/services/networking/ssh/sshd.nix
	nixpkgs/pkgs/applications/networking/instant-messengers/dino/default.nix
	nixpkgs/pkgs/applications/networking/irc/weechat/default.nix
	nixpkgs/pkgs/applications/window-managers/sway/default.nix
	nixpkgs/pkgs/build-support/go/module.nix
	nixpkgs/pkgs/build-support/rust/build-rust-package/default.nix
	nixpkgs/pkgs/development/interpreters/python/default.nix
	nixpkgs/pkgs/development/node-packages/overrides.nix
	nixpkgs/pkgs/development/tools/b4/default.nix
	nixpkgs/pkgs/servers/dict/dictd-db.nix
	nixpkgs/pkgs/servers/mail/public-inbox/default.nix
	nixpkgs/pkgs/tools/security/pinentry/default.nix
	nixpkgs/pkgs/tools/text/unoconv/default.nix
	nixpkgs/pkgs/top-level/all-packages.nix
Diffstat (limited to 'nixpkgs/pkgs/servers/sql/mariadb/default.nix')
-rw-r--r--nixpkgs/pkgs/servers/sql/mariadb/default.nix548
1 files changed, 285 insertions, 263 deletions
diff --git a/nixpkgs/pkgs/servers/sql/mariadb/default.nix b/nixpkgs/pkgs/servers/sql/mariadb/default.nix
index 706188b40305..ee118b89b4ab 100644
--- a/nixpkgs/pkgs/servers/sql/mariadb/default.nix
+++ b/nixpkgs/pkgs/servers/sql/mariadb/default.nix
@@ -1,264 +1,286 @@
-{ lib, stdenv, fetchurl, nixosTests, buildPackages
-# Native buildInputs components
-, bison, boost, cmake, fixDarwinDylibNames, flex, makeWrapper, pkg-config
-# Common components
-, curl, libiconv, ncurses, openssl, pcre, pcre2
-, libkrb5, libaio, liburing, systemd
-, CoreServices, cctools, perl
-, jemalloc, less, libedit
-# Server components
-, bzip2, lz4, lzo, snappy, xz, zlib, zstd
-, cracklib, judy, libevent, libxml2
-, linux-pam, numactl, pmdk
-, fmt_8
-, withStorageMroonga ? true, kytea, libsodium, msgpack, zeromq
-, withStorageRocks ? true
-}:
-
 let
-
-libExt = stdenv.hostPlatform.extensions.sharedLibrary;
-
-mytopEnv = buildPackages.perl.withPackages (p: with p; [ DBDmysql DBI TermReadKey ]);
-
-mariadbPackage = packageSettings: (server packageSettings) // {
-  client = client packageSettings; # MariaDB Client
-  server = server packageSettings; # MariaDB Server
-};
-
-commonOptions = packageSettings: rec { # attributes common to both builds
-  inherit (packageSettings) version;
-
-  src = fetchurl {
-    url = "https://downloads.mariadb.com/MariaDB/mariadb-${version}/source/mariadb-${version}.tar.gz";
-    inherit (packageSettings) hash;
-  };
-
-  nativeBuildInputs = [ cmake pkg-config ]
-    ++ lib.optional stdenv.hostPlatform.isDarwin fixDarwinDylibNames
-    ++ lib.optional (!stdenv.hostPlatform.isDarwin) makeWrapper;
-
-  buildInputs = [
-    curl libiconv ncurses openssl zlib
-  ] ++ (packageSettings.extraBuildInputs or [])
-    ++ lib.optionals stdenv.hostPlatform.isLinux ([ libkrb5 systemd ]
-    ++ (if (lib.versionOlder version "10.6") then [ libaio ] else [ liburing ]))
-    ++ lib.optionals stdenv.hostPlatform.isDarwin [ CoreServices cctools perl libedit ]
-    ++ lib.optional (!stdenv.hostPlatform.isDarwin) [ jemalloc ]
-    ++ (if (lib.versionOlder version "10.5") then [ pcre ] else [ pcre2 ]);
-
-  prePatch = ''
-    sed -i 's,[^"]*/var/log,/var/log,g' storage/mroonga/vendor/groonga/CMakeLists.txt
-  '';
-
-  patches = [
-    ./patch/cmake-includedir.patch
-  ]
-  # Fixes a build issue as documented on
-  # https://jira.mariadb.org/browse/MDEV-26769?focusedCommentId=206073&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-206073
-  ++ lib.optional (!stdenv.hostPlatform.isLinux && lib.versionAtLeast version "10.6") ./patch/macos-MDEV-26769-regression-fix.patch;
-
-  cmakeFlags = [
-    "-DBUILD_CONFIG=mysql_release"
-    "-DMANUFACTURER=nixos.org"
-    "-DDEFAULT_CHARSET=utf8mb4"
-    "-DDEFAULT_COLLATION=utf8mb4_unicode_ci"
-    "-DSECURITY_HARDENED=ON"
-
-    "-DINSTALL_UNIX_ADDRDIR=/run/mysqld/mysqld.sock"
-    "-DINSTALL_BINDIR=bin"
-    "-DINSTALL_DOCDIR=share/doc/mysql"
-    "-DINSTALL_DOCREADMEDIR=share/doc/mysql"
-    "-DINSTALL_INCLUDEDIR=include/mysql"
-    "-DINSTALL_LIBDIR=lib"
-    "-DINSTALL_PLUGINDIR=lib/mysql/plugin"
-    "-DINSTALL_INFODIR=share/mysql/docs"
-    "-DINSTALL_MANDIR=share/man"
-    "-DINSTALL_MYSQLSHAREDIR=share/mysql"
-    "-DINSTALL_SCRIPTDIR=bin"
-    "-DINSTALL_SUPPORTFILESDIR=share/doc/mysql"
-    "-DINSTALL_MYSQLTESTDIR=OFF"
-    "-DINSTALL_SQLBENCHDIR=OFF"
-    "-DINSTALL_PAMDIR=share/pam/lib/security"
-    "-DINSTALL_PAMDATADIR=share/pam/etc/security"
-
-    "-DWITH_ZLIB=system"
-    "-DWITH_SSL=system"
-    "-DWITH_PCRE=system"
-    "-DWITH_SAFEMALLOC=OFF"
-    "-DWITH_UNIT_TESTS=OFF"
-    "-DEMBEDDED_LIBRARY=OFF"
-  ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
-    # On Darwin without sandbox, CMake will find the system java and attempt to build with java support, but
-    # then it will fail during the actual build. Let's just disable the flag explicitly until someone decides
-    # to pass in java explicitly.
-    "-DCONNECT_WITH_JDBC=OFF"
-    "-DCURSES_LIBRARY=${ncurses.out}/lib/libncurses.dylib"
-  ];
-
-  postInstall = ''
-    # Remove Development components. Need to use libmysqlclient.
-    rm "$out"/lib/mysql/plugin/daemon_example.ini
-    rm "$out"/lib/{libmariadbclient.a,libmysqlclient.a,libmysqlclient_r.a,libmysqlservices.a}
-    rm -f "$out"/bin/{mariadb-config,mariadb_config,mysql_config}
-    rm -r $out/include
-    rm -r $out/lib/pkgconfig
-  '';
-
-  # perlPackages.DBDmysql is broken on darwin
-  postFixup = lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
-    wrapProgram $out/bin/mytop --set PATH ${lib.makeBinPath [ less ncurses ]}
-  '';
-
-  passthru.tests = let
-    testVersion = "mariadb_${builtins.replaceStrings ["."] [""] (lib.versions.majorMinor (packageSettings.version))}";
-  in {
-    mariadb-galera-rsync = nixosTests.mariadb-galera.${testVersion};
-    mysql = nixosTests.mysql.${testVersion};
-    mysql-autobackup = nixosTests.mysql-autobackup.${testVersion};
-    mysql-backup = nixosTests.mysql-backup.${testVersion};
-    mysql-replication = nixosTests.mysql-replication.${testVersion};
-  };
-
-  meta = with lib; {
-    description = "An enhanced, drop-in replacement for MySQL";
-    homepage    = "https://mariadb.org/";
-    license     = licenses.gpl2;
-    maintainers = with maintainers; [ thoughtpolice ajs124 das_j ];
-    platforms   = platforms.all;
-  };
-};
-
-client = packageSettings: let
-  common = commonOptions packageSettings;
-
-in stdenv.mkDerivation (common // {
-  pname = "mariadb-client";
-
-  outputs = [ "out" "man" ];
-
-  patches = common.patches ++ [
-    ./patch/cmake-plugin-includedir.patch
-  ];
-
-  cmakeFlags = common.cmakeFlags ++ [
-    "-DPLUGIN_AUTH_PAM=NO"
-    "-DWITHOUT_SERVER=ON"
-    "-DWITH_WSREP=OFF"
-    "-DINSTALL_MYSQLSHAREDIR=share/mysql-client"
-  ];
-
-  postInstall = common.postInstall + ''
-    rm "$out"/bin/{mariadb-test,mysqltest}
-    libmysqlclient_path=$(readlink -f $out/lib/libmysqlclient${libExt})
-    rm "$out"/lib/{libmariadb${libExt},libmysqlclient${libExt},libmysqlclient_r${libExt}}
-    mv "$libmysqlclient_path" "$out"/lib/libmysqlclient${libExt}
-    ln -sv libmysqlclient${libExt} "$out"/lib/libmysqlclient_r${libExt}
-  '';
-});
-
-server = packageSettings: let
-  common = commonOptions packageSettings;
-
-in stdenv.mkDerivation (common // {
-  pname = "mariadb-server";
-
-  outputs = [ "out" "man" ];
-
-  nativeBuildInputs = common.nativeBuildInputs ++ [ bison boost.dev flex ];
-
-  buildInputs = common.buildInputs ++ [
-    bzip2 lz4 lzo snappy xz zstd
-    cracklib judy libevent libxml2
-  ] ++ lib.optional (stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isAarch32) numactl
-    ++ lib.optionals stdenv.hostPlatform.isLinux [ linux-pam ]
-    ++ lib.optional (stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isx86_64) pmdk.dev
-    ++ lib.optional (!stdenv.hostPlatform.isDarwin) mytopEnv
-    ++ lib.optionals withStorageMroonga [ kytea libsodium msgpack zeromq ]
-    ++ lib.optionals (lib.versionAtLeast common.version "10.7") [ fmt_8 ];
-
-  patches = common.patches;
-
-  postPatch = ''
-    substituteInPlace scripts/galera_new_cluster.sh \
-      --replace ":-mariadb" ":-mysql"
-  '';
-
-  cmakeFlags = common.cmakeFlags ++ [
-    "-DMYSQL_DATADIR=/var/lib/mysql"
-    "-DENABLED_LOCAL_INFILE=OFF"
-    "-DWITH_READLINE=ON"
-    "-DWITH_EXTRA_CHARSETS=all"
-    "-DWITH_EMBEDDED_SERVER=OFF"
-    "-DWITH_UNIT_TESTS=OFF"
-    "-DWITH_WSREP=ON"
-    "-DWITH_INNODB_DISALLOW_WRITES=ON"
-    "-DWITHOUT_EXAMPLE=1"
-    "-DWITHOUT_FEDERATED=1"
-    "-DWITHOUT_TOKUDB=1"
-  ] ++ lib.optional (stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isAarch32) [
-    "-DWITH_NUMA=ON"
-  ] ++ lib.optional (!withStorageMroonga) [
-    "-DWITHOUT_MROONGA=1"
-  ] ++ lib.optional (!withStorageRocks) [
-    "-DWITHOUT_ROCKSDB=1"
-  ] ++ lib.optional (!stdenv.hostPlatform.isDarwin && withStorageRocks) [
-    "-DWITH_ROCKSDB_JEMALLOC=ON"
-  ] ++ lib.optional (!stdenv.hostPlatform.isDarwin) [
-    "-DWITH_JEMALLOC=yes"
-  ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
-    "-DPLUGIN_AUTH_PAM=NO"
-    "-DPLUGIN_AUTH_PAM_V1=NO"
-    "-DWITHOUT_OQGRAPH=1"
-    "-DWITHOUT_PLUGIN_S3=1"
-  ] ++ lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
-    # revisit this if nixpkgs supports any architecture whose stack grows upwards
-    "-DSTACK_DIRECTION=-1"
-    "-DCMAKE_CROSSCOMPILING_EMULATOR=${stdenv.hostPlatform.emulator buildPackages}"
-  ];
-
-  preConfigure = lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
-    patchShebangs scripts/mytop.sh
-  '';
-
-  postInstall = common.postInstall + ''
-    rm -r "$out"/share/aclocal
-    chmod +x "$out"/bin/wsrep_sst_common
-    rm -f "$out"/bin/{mariadb-client-test,mariadb-test,mysql_client_test,mysqltest}
-  '' + lib.optionalString withStorageMroonga ''
-    mv "$out"/share/{groonga,groonga-normalizer-mysql} "$out"/share/doc/mysql
-  '' + lib.optionalString (!stdenv.hostPlatform.isDarwin && lib.versionAtLeast common.version "10.4") ''
-    mv "$out"/OFF/suite/plugins/pam/pam_mariadb_mtr.so "$out"/share/pam/lib/security
-    mv "$out"/OFF/suite/plugins/pam/mariadb_mtr "$out"/share/pam/etc/security
-    rm -r "$out"/OFF
-  '';
-
-  CXXFLAGS = lib.optionalString stdenv.hostPlatform.isi686 "-fpermissive";
-});
-in {
-  mariadb_104 = mariadbPackage {
-    # Supported until 2024-06-18
-    version = "10.4.26";
-    hash = "sha256-cVrH4jr8O4pVnGzJmM2xlz2Q9iGyvddgPixuU4YLLd8=";
-  };
-  mariadb_105 = mariadbPackage {
-    # Supported until 2025-06-24
-    version = "10.5.17";
-    hash = "sha256-hJyEC3b0hWUDtD7zqEH8lx6LUYjI3zaQkTv1aZaRt2E=";
-  };
-  mariadb_106 = mariadbPackage {
-    # Supported until 2026-07
-    version = "10.6.9";
-    hash = "sha256-N5Wfi1+8ZNlOGA3NiuW9+v1AYgOgf0j3vs1rinYzdEw=";
-  };
-  mariadb_107 = mariadbPackage {
-    # Supported until 2023-02. TODO: remove ahead of 22.11 release.
-    version = "10.7.5";
-    hash = "sha256-f/OkzNoe7S8aZBO4DE7WjMqRFzD1Aaaf1/STo0oJVLo=";
-  };
-  mariadb_108 = mariadbPackage {
-    # Supported until 2023-05
-    version = "10.8.4";
-    hash = "sha256-ZexgyjZYjs0RzYw/wM414dYDAp4SN4z4i6qGX9CJEWY=";
-  };
-}
+  # shared across all versions
+  generic =
+    { version, hash
+    , lib, stdenv, fetchurl, nixosTests, buildPackages
+    # Native buildInputs components
+    , bison, boost, cmake, fixDarwinDylibNames, flex, makeWrapper, pkg-config
+    # Common components
+    , curl, libiconv, ncurses, openssl, openssl_1_1, pcre, pcre2
+    , libkrb5, libaio, liburing, systemd
+    , CoreServices, cctools, perl
+    , jemalloc, less, libedit
+    # Server components
+    , bzip2, lz4, lzo, snappy, xz, zlib, zstd
+    , cracklib, judy, libevent, libxml2
+    , linux-pam, numactl
+    , fmt_8
+    , withStorageMroonga ? true, kytea, libsodium, msgpack, zeromq
+    , withStorageRocks ? true
+    , withEmbedded ? false
+    , withNuma ? false
+    }:
+
+  let
+    isCross = stdenv.buildPlatform != stdenv.hostPlatform;
+
+    libExt = stdenv.hostPlatform.extensions.sharedLibrary;
+
+    mytopEnv = buildPackages.perl.withPackages (p: with p; [ DBDmysql DBI TermReadKey ]);
+
+    common = rec { # attributes common to both builds
+      inherit version;
+
+      src = fetchurl {
+        url = "https://downloads.mariadb.com/MariaDB/mariadb-${version}/source/mariadb-${version}.tar.gz";
+        inherit hash;
+      };
+
+      outputs = [ "out" "man" ];
+
+      nativeBuildInputs = [ cmake pkg-config ]
+        ++ lib.optional stdenv.hostPlatform.isDarwin fixDarwinDylibNames
+        ++ lib.optional (!stdenv.hostPlatform.isDarwin) makeWrapper;
+
+      buildInputs = [
+        libiconv ncurses zlib
+      ] ++ lib.optionals stdenv.hostPlatform.isLinux ([ libkrb5 systemd ]
+        ++ (if (lib.versionOlder version "10.6") then [ libaio ] else [ liburing ]))
+        ++ lib.optionals stdenv.hostPlatform.isDarwin [ CoreServices cctools perl libedit ]
+        ++ lib.optionals (!stdenv.hostPlatform.isDarwin) [ jemalloc ]
+        ++ (if (lib.versionOlder version "10.5") then [ pcre ] else [ pcre2 ])
+        ++ (if (lib.versionOlder version "10.5")
+            then [ openssl_1_1 (curl.override { openssl = openssl_1_1; }) ]
+            else [ openssl curl ]);
+
+      prePatch = ''
+        sed -i 's,[^"]*/var/log,/var/log,g' storage/mroonga/vendor/groonga/CMakeLists.txt
+      '';
+
+      patches = [
+        ./patch/cmake-includedir.patch
+      ]
+        # Fixes a build issue as documented on
+        # https://jira.mariadb.org/browse/MDEV-26769?focusedCommentId=206073&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-206073
+        ++ lib.optional (!stdenv.hostPlatform.isLinux && lib.versionAtLeast version "10.6") ./patch/macos-MDEV-26769-regression-fix.patch;
+
+      cmakeFlags = [
+        "-DBUILD_CONFIG=mysql_release"
+        "-DMANUFACTURER=nixos.org"
+        "-DDEFAULT_CHARSET=utf8mb4"
+        "-DDEFAULT_COLLATION=utf8mb4_unicode_ci"
+        "-DSECURITY_HARDENED=ON"
+
+        "-DINSTALL_UNIX_ADDRDIR=/run/mysqld/mysqld.sock"
+        "-DINSTALL_BINDIR=bin"
+        "-DINSTALL_DOCDIR=share/doc/mysql"
+        "-DINSTALL_DOCREADMEDIR=share/doc/mysql"
+        "-DINSTALL_INCLUDEDIR=include/mysql"
+        "-DINSTALL_LIBDIR=lib"
+        "-DINSTALL_PLUGINDIR=lib/mysql/plugin"
+        "-DINSTALL_INFODIR=share/mysql/docs"
+        "-DINSTALL_MANDIR=share/man"
+        "-DINSTALL_MYSQLSHAREDIR=share/mysql"
+        "-DINSTALL_SCRIPTDIR=bin"
+        "-DINSTALL_SUPPORTFILESDIR=share/doc/mysql"
+        "-DINSTALL_MYSQLTESTDIR=OFF"
+        "-DINSTALL_SQLBENCHDIR=OFF"
+        "-DINSTALL_PAMDIR=share/pam/lib/security"
+        "-DINSTALL_PAMDATADIR=share/pam/etc/security"
+
+        "-DWITH_ZLIB=system"
+        "-DWITH_SSL=system"
+        "-DWITH_PCRE=system"
+        "-DWITH_SAFEMALLOC=OFF"
+        "-DWITH_UNIT_TESTS=OFF"
+        "-DEMBEDDED_LIBRARY=OFF"
+      ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
+        # On Darwin without sandbox, CMake will find the system java and attempt to build with java support, but
+        # then it will fail during the actual build. Let's just disable the flag explicitly until someone decides
+        # to pass in java explicitly.
+        "-DCONNECT_WITH_JDBC=OFF"
+        "-DCURSES_LIBRARY=${ncurses.out}/lib/libncurses.dylib"
+      ] ++ lib.optionals (stdenv.hostPlatform.isDarwin && lib.versionAtLeast version "10.6") [
+        # workaround for https://jira.mariadb.org/browse/MDEV-29925
+        "-Dhave_C__Wl___as_needed="
+      ] ++ lib.optionals isCross [
+        # revisit this if nixpkgs supports any architecture whose stack grows upwards
+        "-DSTACK_DIRECTION=-1"
+        "-DCMAKE_CROSSCOMPILING_EMULATOR=${stdenv.hostPlatform.emulator buildPackages}"
+      ];
+
+      postInstall = lib.optionalString (!withEmbedded) ''
+        # Remove Development components. Need to use libmysqlclient.
+        rm "$out"/lib/mysql/plugin/daemon_example.ini
+        rm "$out"/lib/{libmariadb.a,libmariadbclient.a,libmysqlclient.a,libmysqlclient_r.a,libmysqlservices.a}
+        rm -f "$out"/bin/{mariadb-config,mariadb_config,mysql_config}
+        rm -r $out/include
+        rm -r $out/lib/pkgconfig
+      '';
+
+      # perlPackages.DBDmysql is broken on darwin
+      postFixup = lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
+        wrapProgram $out/bin/mytop --set PATH ${lib.makeBinPath [ less ncurses ]}
+      '';
+
+      passthru.tests = let
+        testVersion = "mariadb_${builtins.replaceStrings ["."] [""] (lib.versions.majorMinor version)}";
+      in {
+        mariadb-galera-rsync = nixosTests.mariadb-galera.${testVersion};
+        mysql = nixosTests.mysql.${testVersion};
+        mysql-autobackup = nixosTests.mysql-autobackup.${testVersion};
+        mysql-backup = nixosTests.mysql-backup.${testVersion};
+        mysql-replication = nixosTests.mysql-replication.${testVersion};
+      };
+
+      meta = with lib; {
+        description = "An enhanced, drop-in replacement for MySQL";
+        homepage    = "https://mariadb.org/";
+        license     = licenses.gpl2;
+        maintainers = with maintainers; [ thoughtpolice ajs124 das_j ];
+        platforms   = platforms.all;
+      };
+    };
+
+    client = stdenv.mkDerivation (common // {
+      pname = "mariadb-client";
+
+      patches = common.patches ++ [
+        ./patch/cmake-plugin-includedir.patch
+      ];
+
+      cmakeFlags = common.cmakeFlags ++ [
+        "-DPLUGIN_AUTH_PAM=NO"
+        "-DWITHOUT_SERVER=ON"
+        "-DWITH_WSREP=OFF"
+        "-DINSTALL_MYSQLSHAREDIR=share/mysql-client"
+      ];
+
+      postInstall = common.postInstall + ''
+        rm "$out"/bin/{mariadb-test,mysqltest}
+        libmysqlclient_path=$(readlink -f $out/lib/libmysqlclient${libExt})
+        rm "$out"/lib/{libmariadb${libExt},libmysqlclient${libExt},libmysqlclient_r${libExt}}
+        mv "$libmysqlclient_path" "$out"/lib/libmysqlclient${libExt}
+        ln -sv libmysqlclient${libExt} "$out"/lib/libmysqlclient_r${libExt}
+      '';
+    });
+
+    server = stdenv.mkDerivation (common // {
+      pname = "mariadb-server";
+
+      nativeBuildInputs = common.nativeBuildInputs ++ [ bison boost.dev flex ];
+
+      buildInputs = common.buildInputs ++ [
+        bzip2 lz4 lzo snappy xz zstd
+        cracklib judy libevent libxml2
+      ] ++ lib.optional withNuma numactl
+        ++ lib.optionals stdenv.hostPlatform.isLinux [ linux-pam ]
+        ++ lib.optional (!stdenv.hostPlatform.isDarwin) mytopEnv
+        ++ lib.optionals withStorageMroonga [ kytea libsodium msgpack zeromq ]
+        ++ lib.optionals (lib.versionAtLeast common.version "10.7") [ fmt_8 ];
+
+      propagatedBuildInputs = lib.optional withNuma numactl;
+
+      postPatch = ''
+        substituteInPlace scripts/galera_new_cluster.sh \
+          --replace ":-mariadb" ":-mysql"
+      '';
+
+      cmakeFlags = common.cmakeFlags ++ [
+        "-DMYSQL_DATADIR=/var/lib/mysql"
+        "-DENABLED_LOCAL_INFILE=OFF"
+        "-DWITH_READLINE=ON"
+        "-DWITH_EXTRA_CHARSETS=all"
+        "-DWITH_EMBEDDED_SERVER=${if withEmbedded then "ON" else "OFF"}"
+        "-DWITH_UNIT_TESTS=OFF"
+        "-DWITH_WSREP=ON"
+        "-DWITH_INNODB_DISALLOW_WRITES=ON"
+        "-DWITHOUT_EXAMPLE=1"
+        "-DWITHOUT_FEDERATED=1"
+        "-DWITHOUT_TOKUDB=1"
+      ] ++ lib.optionals withNuma [
+        "-DWITH_NUMA=ON"
+      ] ++ lib.optionals (!withStorageMroonga) [
+        "-DWITHOUT_MROONGA=1"
+      ] ++ lib.optionals (!withStorageRocks) [
+        "-DWITHOUT_ROCKSDB=1"
+      ] ++ lib.optionals (!stdenv.hostPlatform.isDarwin && withStorageRocks) [
+        "-DWITH_ROCKSDB_JEMALLOC=ON"
+      ] ++ lib.optionals (!stdenv.hostPlatform.isDarwin) [
+        "-DWITH_JEMALLOC=yes"
+      ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
+        "-DPLUGIN_AUTH_PAM=NO"
+        "-DPLUGIN_AUTH_PAM_V1=NO"
+        "-DWITHOUT_OQGRAPH=1"
+        "-DWITHOUT_PLUGIN_S3=1"
+      ];
+
+      preConfigure = lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
+        patchShebangs scripts/mytop.sh
+      '';
+
+      postInstall = common.postInstall + ''
+        rm -r "$out"/share/aclocal
+        chmod +x "$out"/bin/wsrep_sst_common
+        rm -f "$out"/bin/{mariadb-client-test,mariadb-test,mysql_client_test,mysqltest}
+      '' + lib.optionalString withStorageMroonga ''
+        mv "$out"/share/{groonga,groonga-normalizer-mysql} "$out"/share/doc/mysql
+      '' + lib.optionalString (!stdenv.hostPlatform.isDarwin && lib.versionAtLeast common.version "10.4") ''
+        mv "$out"/OFF/suite/plugins/pam/pam_mariadb_mtr.so "$out"/share/pam/lib/security
+        mv "$out"/OFF/suite/plugins/pam/mariadb_mtr "$out"/share/pam/etc/security
+        rm -r "$out"/OFF
+      '';
+
+      CXXFLAGS = lib.optionalString stdenv.hostPlatform.isi686 "-fpermissive";
+      NIX_LDFLAGS = lib.optionalString stdenv.hostPlatform.isRiscV "-latomic";
+    });
+  in
+    server // {
+      inherit client server;
+    };
+in
+  self: {
+    # see https://mariadb.org/about/#maintenance-policy for EOLs
+    mariadb_104 = self.callPackage generic {
+      # Supported until 2024-06-18
+      version = "10.4.29";
+      hash = "sha256-Wy0zh5LnnmjWpUXisVYDu792GMc55fgg9XsdayIJITA=";
+      inherit (self.darwin) cctools;
+      inherit (self.darwin.apple_sdk.frameworks) CoreServices;
+    };
+    mariadb_105 = self.callPackage generic {
+      # Supported until 2025-06-24
+      version = "10.5.20";
+      hash = "sha256-sY+Q8NAR74e71VmtBDLN4Qfs21jqKCcQg7SJvf0e79s=";
+      inherit (self.darwin) cctools;
+      inherit (self.darwin.apple_sdk.frameworks) CoreServices;
+    };
+    mariadb_106 = self.callPackage generic {
+      # Supported until 2026-07-06
+      version = "10.6.13";
+      hash = "sha256-8IXzec9Z7S02VkT8XNhVj4gqiG7JZAcNZaKFMN27dbo=";
+      inherit (self.darwin) cctools;
+      inherit (self.darwin.apple_sdk.frameworks) CoreServices;
+    };
+    mariadb_1010 = self.callPackage generic {
+      # Supported until 2023-11-17. TODO: remove ahead of 23.11 branchoff
+      version = "10.10.4";
+      hash = "sha256-IX2Z47Ami5MizyicGEMnqHiYs/aGvS6eS5JpXqYRixk=";
+      inherit (self.darwin) cctools;
+      inherit (self.darwin.apple_sdk.frameworks) CoreServices;
+    };
+    mariadb_1011 = self.callPackage generic {
+      # Supported until 2028-02-16
+      version = "10.11.3";
+      hash = "sha256-sGWw8ypun9R55Wb9ZnFFA3mIbY3aLZp++TCvHlwmwMc=";
+      inherit (self.darwin) cctools;
+      inherit (self.darwin.apple_sdk.frameworks) CoreServices;
+    };
+    mariadb_110 = self.callPackage generic {
+      # Supported until 2024-06-07
+      version = "11.0.2";
+      hash = "sha256-PHFXbK0OpBaIInDjg/lMyJaTt/vM4fpPMG/j6THkZK4=";
+      inherit (self.darwin) cctools;
+      inherit (self.darwin.apple_sdk.frameworks) CoreServices;
+    };
+  }