[PATCH] gnu: slurm: Add patch for a useful fallback shell for ‘salloc’.

  • Done
  • quality assurance status badge
Details
One participant
  • Ludovic Courtès
Owner
unassigned
Submitted by
Ludovic Courtès
Severity
normal
L
L
Ludovic Courtès wrote on 16 May 16:02 +0200
[PATCH] gnu: slurm: Add patch for a useful fallback shell for ‘salloc’.
(address . guix-patches@gnu.org)(name . Ludovic Courtès)(address . ludovic.courtes@inria.fr)
987a8b33c90625d264e3c87633d0362d47de7337.1715867979.git.ludo@gnu.org
From: Ludovic Courtès <ludovic.courtes@inria.fr>

* 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
---
gnu/local.mk | 1 +
gnu/packages/parallel.scm | 10 ++++-
.../slurm-23-salloc-fallback-shell.patch | 39 +++++++++++++++++++
3 files changed, 49 insertions(+), 1 deletion(-)
create mode 100644 gnu/packages/patches/slurm-23-salloc-fallback-shell.patch

Hello!

This change is useful for those of us using SLURM on foreign distros,
which is probably 99% of HPC supercomputers.

On those machines, sometimes nscd is running but has ‘passwd’ database
caching disabled; sometimes it’s just not running. In both cases,
getpwduid(3) would return NULL, and without this patch, ‘salloc’ would
fall back to (typically) /sbin/nologin as the shell. This patch provides
a more useful fallback.

Note that the patch targets slurm@23 only because (1) that’s what I need,
and (2) it doesn’t apply to other versions, and I thought we could port
it there if/when there is a need.

Thoughts?

Ludo’.

Toggle diff (131 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 439fe587b02..5264134c390 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -2067,6 +2067,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/syslinux-gcc10.patch \
%D%/packages/patches/syslinux-strip-gnu-property.patch \
diff --git a/gnu/packages/parallel.scm b/gnu/packages/parallel.scm
index 11199594f1e..b4ecfefddcf 100644
--- a/gnu/packages/parallel.scm
+++ b/gnu/packages/parallel.scm
@@ -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 @@ (define-public slurm
(sha256
(base32
"08rz3r1rlnb3pmfdnbh542gm44ja0fdy8rkj4vm4lclc48cvqp2a"))
+ (patches
+ (search-patches "slurm-23-salloc-fallback-shell.patch"))
(modules '((guix build utils)))
(snippet
'(begin
@@ -292,6 +294,7 @@ (define-public slurm-22.05
(uri (string-append
"https://download.schedmd.com/slurm/slurm-"
version ".tar.bz2"))
+ (patches '()) ;drop 'salloc' patch
(sha256
(base32
"0f3hhlki8g7slllsnyj1qikbsvr62i0hig85lcdcfnmsagzlhbyi"))))))
@@ -306,6 +309,7 @@ (define-public slurm-21.08
(uri (string-append
"https://download.schedmd.com/slurm/slurm-"
version ".tar.bz2"))
+ (patches '()) ;drop 'salloc' patch
(sha256
(base32
"1sjln54idc9rhg8f2nvm38sgs6fncncyzslas8ixy65pqz2hphbf"))))))
@@ -320,6 +324,7 @@ (define-public slurm-20.11
(uri (string-append
"https://download.schedmd.com/slurm/slurm-"
version ".tar.bz2"))
+ (patches '()) ;drop 'salloc' patch
(sha256
(base32
"0xq2d6dm285y541dyg1h66z7svsisrq8c81ag0f601xz1cn3mq9m"))))))
@@ -334,6 +339,7 @@ (define-public slurm-20.02
(uri (string-append
"https://download.schedmd.com/slurm/slurm-"
version ".tar.bz2"))
+ (patches '()) ;drop 'salloc' patch
(sha256
(base32
"0qj4blfymrd2ry2qmb58l3jbr4jwygc3adcfw7my27rippcijlyc"))))
@@ -353,6 +359,7 @@ (define-public slurm-19.05
(uri (string-append
"https://download.schedmd.com/slurm/slurm-"
version ".tar.bz2"))
+ (patches '()) ;drop 'salloc' patch
(sha256
(base32
"10c9j4a9a6d4ibpf75006mn03p8xgpaprc247x2idakysjf2fw43"))))))
@@ -368,6 +375,7 @@ (define-public slurm-18.08
(uri (string-append
"https://download.schedmd.com/slurm/slurm-"
version ".tar.bz2"))
+ (patches '()) ;drop 'salloc' patch
(sha256
(base32
"1bgrpz75m7l4xhirsd0fvnkzlkrl8v2qpmjcz60barc5qm2kn457"))))))
diff --git a/gnu/packages/patches/slurm-23-salloc-fallback-shell.patch b/gnu/packages/patches/slurm-23-salloc-fallback-shell.patch
new file mode 100644
index 00000000000..53605bf3aed
--- /dev/null
+++ b/gnu/packages/patches/slurm-23-salloc-fallback-shell.patch
@@ -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[])

base-commit: 58be9a79e2862d5fa9842d73f498ce2e5442b9ce
--
2.41.0
L
L
Ludovic Courtès wrote on 31 May 13:59 +0200
Re: [bug#70983] [PATCH] gnu: slurm: Add patch for a useful fallback shell for ‘salloc’.
(address . 70983-done@debbugs.gnu.org)
87r0diry4a.fsf@gnu.org
Hi,

Ludovic Courtès <ludo@gnu.org> skribis:

Toggle quote (10 lines)
> From: Ludovic Courtès <ludovic.courtes@inria.fr>
>
> * 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

Pushed as 422ffb690ee0169b83ad3564d628f8cc054b5ff1.

Ludo’.
Closed
?
Your comment

This issue is archived.

To comment on this conversation send an email to 70983@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 70983
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch