mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-24 21:38:07 -05:00
pack: Clarify the /bin/sh requirement for Singularity.
* guix/scripts/pack.scm (squashfs-image)[symlinks*]: New variable. [build]: Use it instead of SYMLINKS. (guix-pack): Emit a warning and a hint when "bash" and "bash-minimal" are missing and PACK-FORMAT is 'squashfs. * doc/guix.texi (Invoking guix pack): Document the /bin/sh requirement for Singularity.
This commit is contained in:
parent
fc81316384
commit
dc995fcd5a
2 changed files with 36 additions and 2 deletions
|
@ -5053,7 +5053,7 @@ Yet another option is to produce a SquashFS image with the following
|
|||
command:
|
||||
|
||||
@example
|
||||
guix pack -f squashfs guile emacs geiser
|
||||
guix pack -f squashfs bash guile emacs geiser
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
|
@ -5088,6 +5088,21 @@ package names passed on the command line or in the manifest file.
|
|||
This produces a SquashFS image containing all the specified binaries and
|
||||
symlinks, as well as empty mount points for virtual file systems like
|
||||
procfs.
|
||||
|
||||
@quotation Note
|
||||
Singularity @emph{requires} you to provide @file{/bin/sh} in the image.
|
||||
For that reason, @command{guix pack -f squashfs} always implies @code{-S
|
||||
/bin=bin}. Thus, your @command{guix pack} invocation must always start
|
||||
with something like:
|
||||
|
||||
@example
|
||||
guix pack -f squashfs bash @dots{}
|
||||
@end example
|
||||
|
||||
If you forget the @code{bash} (or similar) package, @command{singularity
|
||||
run} and @command{singularity exec} will fail with an unhelpful ``no
|
||||
such file or directory'' message.
|
||||
@end quotation
|
||||
@end table
|
||||
|
||||
@cindex relocatable binaries
|
||||
|
|
|
@ -334,6 +334,16 @@ (define database
|
|||
(define environment
|
||||
(singularity-environment-file profile))
|
||||
|
||||
(define symlinks*
|
||||
;; Singularity requires /bin (specifically /bin/sh), so ensure that
|
||||
;; symlink is created.
|
||||
(if (find (match-lambda
|
||||
(("/bin" . _) #t)
|
||||
(_ #f))
|
||||
symlinks)
|
||||
symlinks
|
||||
`(("/bin" -> "bin") ,@symlinks)))
|
||||
|
||||
(define build
|
||||
(with-imported-modules (source-module-closure
|
||||
'((guix build utils)
|
||||
|
@ -407,7 +417,7 @@ (define entry-point #$entry-point)
|
|||
"s" "777" "0" "0"
|
||||
(relative-file-name (dirname source)
|
||||
target)))))))
|
||||
'#$symlinks)
|
||||
'#$symlinks*)
|
||||
|
||||
"-p" "/.singularity.d d 555 0 0"
|
||||
|
||||
|
@ -1049,9 +1059,18 @@ (define properties
|
|||
(entry-point (assoc-ref opts 'entry-point))
|
||||
(profile-name (assoc-ref opts 'profile-name))
|
||||
(gc-root (assoc-ref opts 'gc-root)))
|
||||
(define (lookup-package package)
|
||||
(manifest-lookup manifest (manifest-pattern (name package))))
|
||||
|
||||
(when (null? (manifest-entries manifest))
|
||||
(warning (G_ "no packages specified; building an empty pack~%")))
|
||||
|
||||
(when (and (eq? pack-format 'squashfs)
|
||||
(not (any lookup-package '("bash" "bash-minimal"))))
|
||||
(warning (G_ "Singularity requires you to provide a shell~%"))
|
||||
(display-hint (G_ "Add @code{bash} or @code{bash-minimal} \
|
||||
to your package list.")))
|
||||
|
||||
(run-with-store store
|
||||
(mlet* %store-monad ((profile (profile-derivation
|
||||
manifest
|
||||
|
|
Loading…
Reference in a new issue