bashtop does not run without glibc installed in profile

OpenSubmitted by Lenny Händler.
Details
3 participants
  • Josselin Poiret
  • Lenny Händler
  • Maxime Devos
Owner
unassigned
Severity
normal
L
L
Lenny Händler wrote on 12 Nov 2021 23:55
(address . bug-guix@gnu.org)
0fe8420a-dae9-92e8-5dfb-b52260a7c669@lennyhaendler.com
the script needs both uname and locale. If glibc is not installed in
profile, it aborts. However glibc is not listed as a dependency. When I
install glibc it works.
J
J
Josselin Poiret wrote on 14 Nov 2021 15:01
[PATCH] gnu: bashtop: Add dependencies and wrap program with PATH
(name . Josselin Poiret)(address . dev@jpoiret.xyz)
20211114140137.13868-1-dev@jpoiret.xyz
You're right, none of the needed dependencies of bashtop were
actually present in the package definition. Here is a patch that
does work on my machine using `guix shell --pure bashtop -- bashtop`.

Best,
Josselin Poiret
-- >8 --

* gnu/packages/admin.scm (bashtop): Add dependencies, wrap the script
so that it can access the commands it needs.
---
gnu/packages/admin.scm | 27 +++++++++++++++++++++++----
1 file changed, 23 insertions(+), 4 deletions(-)

Toggle diff (48 lines)
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 2a7b0f310d..8f9125212c 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -71,6 +71,7 @@ (define-module (gnu packages admin)
   #:use-module (guix build-system python)
   #:use-module (guix build-system ruby)
   #:use-module (guix build-system trivial)
+  #:use-module (guix build-system copy)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
@@ -670,11 +671,29 @@ (define-public bashtop
               (sha256
                (base32
                 "07nlr6vmyb7yihaxj1fp424lmhwkdjl6mls92v90f6gsvikpa13v"))))
-    (build-system gnu-build-system)
+    (build-system copy-build-system)
     (arguments
-     '(#:make-flags (list (string-append "PREFIX=" %output))
-       #:tests? #f      ; bats test fails with loading load.bash
-       #:phases (modify-phases %standard-phases (delete 'configure))))
+     '(#:install-plan '(("./bashtop" "./bin/bashtop"))
+       #:phases (modify-phases %standard-phases
+		  (add-after 'install 'wrap
+	            (lambda* (#:key outputs #:allow-other-keys)
+		      (let ((paths (map (lambda (program)
+					  (dirname (which program)))
+					'("awk" "dd" "grep" "ip"
+					  "locale" "ps" "sed")))
+			    (bashtop (string-append (assoc-ref outputs
+							       "out")
+						    "/bin/bashtop")))
+			(wrap-program bashtop
+				      `("PATH" ":" = ,paths))))))))
+    (inputs
+     `(("coreutils" ,coreutils)
+       ("gawk" ,gawk)
+       ("glibc" ,glibc) ; for 'locale'
+       ("grep" ,grep)
+       ("iproute" ,iproute)
+       ("procps" ,procps)
+       ("sed" ,sed)))
     (home-page "https://github.com/aristocratos/bashtop")
     (synopsis "Linux/OSX/FreeBSD resource monitor")
     (description "Resource monitor that shows usage and stats for processor,
-- 
2.33.1
J
J
Josselin Poiret wrote on 14 Nov 2021 16:19
[PATCH v2] gnu: bashtop: Add dependencies and wrap program with PATH
(name . Josselin Poiret)(address . dev@jpoiret.xyz)
20211114151949.19754-1-dev@jpoiret.xyz
Sorry for the noise, but the patch I just sent wasn't up to
satisfaction: using `which` in the build phases breaks
cross-compilation, and the build-system change was a bit of an
unwarranted change.

Here's a modified patch!

Best,
Josselin Poiret
-- >8 --

* gnu/packages/admin.scm (bashtop): Add dependencies, wrap the script
so that it can access the commands it needs.
---
gnu/packages/admin.scm | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)

Toggle diff (37 lines)
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 2a7b0f310d..fe3987a9b8 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -674,7 +674,29 @@ (define-public bashtop
     (arguments
      '(#:make-flags (list (string-append "PREFIX=" %output))
        #:tests? #f      ; bats test fails with loading load.bash
-       #:phases (modify-phases %standard-phases (delete 'configure))))
+       #:phases (modify-phases %standard-phases
+                  (delete 'configure)
+		  (add-after 'install 'wrap
+	            (lambda* (#:key inputs outputs #:allow-other-keys)
+		      (let ((path (map (lambda (input)
+					 (string-append (assoc-ref inputs
+								   input)
+							"/bin"))
+				       '("coreutils" "gawk" "glibc" "grep"
+					 "iproute" "procps" "sed")))
+			    (bashtop (string-append (assoc-ref outputs
+							       "out")
+						    "/bin/bashtop")))
+			(wrap-program bashtop
+				      `("PATH" ":" = ,path))))))))
+    (inputs
+     `(("coreutils" ,coreutils)
+       ("gawk" ,gawk)
+       ("glibc" ,glibc) ; needed for the 'locale' binary
+       ("grep" ,grep)
+       ("iproute" ,iproute)
+       ("procps" ,procps)
+       ("sed" ,sed)))
     (home-page "https://github.com/aristocratos/bashtop")
     (synopsis "Linux/OSX/FreeBSD resource monitor")
     (description "Resource monitor that shows usage and stats for processor,
-- 
2.33.1
M
M
Maxime Devos wrote on 14 Nov 2021 22:33
66d97324a177c60a7b52b54e88a35945870d4ef8.camel@telenet.be
Josselin Poiret via Bug reports for GNU Guix schreef op zo 14-11-2021
om 15:19 [+0000]:
Toggle quote (2 lines)
> +                       (wrap-program bashtop

The input "bash-minimal" is missing. Adding that input is required
for cross-compilation (otherwise a native bash instead of a bash
for the target is used). It should be reported by guix lint.

Greetings,
Maxime.

--
not hacking on guix for a while, only occassionally looking at IRC logs
and bug reports. E-mails are unsigned until backup is located.
?