~ruther/guix-local

422ffb690ee0169b83ad3564d628f8cc054b5ff1 — Ludovic Courtès 1 year, 9 months ago 3f800ef
gnu: slurm: Add patch for a useful fallback shell for ‘salloc’.

* gnu/packages/patches/slurm-23-salloc-fallback-shell.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/parallel.scm (slurm): Use it.
(slurm-22.05, slurm-21.08, slurm-20.11, slurm-20.02)
(slurm-19.05, slurm-18.08): Drop it.

Change-Id: I1498e8d21d631c988edf75a8bcc8d2ae5f244b7a
M gnu/local.mk => gnu/local.mk +1 -0
@@ 2084,6 2084,7 @@ dist_patch_DATA =						\
  %D%/packages/patches/slim-config.patch			\
  %D%/packages/patches/slim-login.patch				\
  %D%/packages/patches/slim-display.patch			\
  %D%/packages/patches/slurm-23-salloc-fallback-shell.patch	\
  %D%/packages/patches/stex-copy-from-immutable-store.patch	\
  %D%/packages/patches/sysdig-shared-falcosecurity-libs.patch	\
  %D%/packages/patches/syslinux-gcc10.patch			\

M gnu/packages/parallel.scm => gnu/packages/parallel.scm +9 -1
@@ 9,7 9,7 @@
;;; Copyright © 2017, 2018 Rutger Helling <rhelling@mykolab.com>
;;; Copyright © 2018–2022 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
;;; Copyright © 2019-2023 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2019-2024 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020 Roel Janssen <roel@gnu.org>
;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
;;; Copyright © 2024 Zheng Junjie <873216071@qq.com>


@@ 195,6 195,8 @@ when jobs finish.")
              (sha256
               (base32
                "08rz3r1rlnb3pmfdnbh542gm44ja0fdy8rkj4vm4lclc48cvqp2a"))
              (patches
               (search-patches "slurm-23-salloc-fallback-shell.patch"))
              (modules '((guix build utils)))
              (snippet
               '(begin


@@ 292,6 294,7 @@ by managing a queue of pending work.")
              (uri (string-append
                    "https://download.schedmd.com/slurm/slurm-"
                    version ".tar.bz2"))
              (patches '())                       ;drop 'salloc' patch
              (sha256
               (base32
                "0f3hhlki8g7slllsnyj1qikbsvr62i0hig85lcdcfnmsagzlhbyi"))))))


@@ 306,6 309,7 @@ by managing a queue of pending work.")
              (uri (string-append
                    "https://download.schedmd.com/slurm/slurm-"
                    version ".tar.bz2"))
              (patches '())                       ;drop 'salloc' patch
              (sha256
               (base32
                "1sjln54idc9rhg8f2nvm38sgs6fncncyzslas8ixy65pqz2hphbf"))))))


@@ 320,6 324,7 @@ by managing a queue of pending work.")
              (uri (string-append
                    "https://download.schedmd.com/slurm/slurm-"
                    version ".tar.bz2"))
              (patches '())                       ;drop 'salloc' patch
              (sha256
               (base32
                "0xq2d6dm285y541dyg1h66z7svsisrq8c81ag0f601xz1cn3mq9m"))))))


@@ 334,6 339,7 @@ by managing a queue of pending work.")
              (uri (string-append
                    "https://download.schedmd.com/slurm/slurm-"
                    version ".tar.bz2"))
              (patches '())                       ;drop 'salloc' patch
              (sha256
               (base32
                "0qj4blfymrd2ry2qmb58l3jbr4jwygc3adcfw7my27rippcijlyc"))))


@@ 353,6 359,7 @@ by managing a queue of pending work.")
              (uri (string-append
                    "https://download.schedmd.com/slurm/slurm-"
                    version ".tar.bz2"))
              (patches '())                       ;drop 'salloc' patch
              (sha256
               (base32
                "10c9j4a9a6d4ibpf75006mn03p8xgpaprc247x2idakysjf2fw43"))))))


@@ 368,6 375,7 @@ by managing a queue of pending work.")
        (uri (string-append
               "https://download.schedmd.com/slurm/slurm-"
               version ".tar.bz2"))
        (patches '())                             ;drop 'salloc' patch
        (sha256
         (base32
          "1bgrpz75m7l4xhirsd0fvnkzlkrl8v2qpmjcz60barc5qm2kn457"))))))

A gnu/packages/patches/slurm-23-salloc-fallback-shell.patch => gnu/packages/patches/slurm-23-salloc-fallback-shell.patch +39 -0
@@ 0,0 1,39 @@
Have 'salloc' use $SHELL or /bin/sh as the fallback shell.

This is useful in situations where glibc’s Name Service Switch (NSS) is
dysfunctional (with ‘getpwuid’ returning NULL), which can happen when
/etc/nsswitch.conf specifies plugins that fail to be loaded in user code, for
instance because user code is linked against an incompatible libc.

Similar patch submitted upstream: https://bugs.schedmd.com/show_bug.cgi?id=19896

diff --git a/src/salloc/opt.c b/src/salloc/opt.c
index ffff7c8..74563ad 100644
--- a/src/salloc/opt.c
+++ b/src/salloc/opt.c
@@ -329,6 +329,7 @@ static void _opt_args(int argc, char **argv, int het_job_offset)
  * NOTE: This function is NOT reentrant (see getpwuid_r if needed) */
 static char *_get_shell(void)
 {
+	char *shell;
 	struct passwd *pw_ent_ptr;
 
 	if (opt.uid == SLURM_AUTH_NOBODY)
@@ -336,11 +337,13 @@ static char *_get_shell(void)
 	else
 		pw_ent_ptr = getpwuid(opt.uid);
 
-	if (!pw_ent_ptr) {
-		pw_ent_ptr = getpwnam("nobody");
-		warning("no user information for user %u", opt.uid);
+	if (pw_ent_ptr) {
+		shell = pw_ent_ptr->pw_shell;
+	} else {
+		shell = getenv("SHELL") ?: "/bin/sh";
+		warning("no user information for user %u, using '%s' as the shell", opt.uid, shell);
 	}
-	return pw_ent_ptr->pw_shell;
+	return shell;
 }
 
 static void _salloc_default_command(int *argcp, char **argvp[])