build-support/make-initrd: Don't derive derivation name from file name

not all valid file names are valid derivation names. This can cause
troubles when, for example, trying to place systemd template unit
files, which contain an '@' in their name,  in an initrd.

Fixes #53987
This commit is contained in:
Arian van Putten 2019-01-15 17:09:17 +01:00
parent 2669633053
commit b086b342bb

View File

@ -16,10 +16,16 @@
, name ? "initrd"
, compressor ? "gzip -9n"
, prepend ? []
, lib
}:
let
# !!! Move this into a public lib function, it is probably useful for others
toValidStoreName = x: with builtins;
lib.concatStringsSep "-" (filter (x: !(isList x)) (split "[^a-zA-Z0-9_=.?-]+" x));
stdenv.mkDerivation rec {
in stdenv.mkDerivation rec {
inherit name;
builder = ./make-initrd.sh;
makeUInitrd = stdenv.hostPlatform.platform.kernelTarget == "uImage";
@ -36,8 +42,12 @@ stdenv.mkDerivation rec {
# Note: we don't use closureInfo yet, as that won't build with nix-1.x.
# See #36268.
exportReferencesGraph =
map (x: [("closure-" + baseNameOf x.symlink) x.object]) contents;
lib.zipListsWith
(x: i: [("closure-${toValidStoreName (baseNameOf x.symlink)}-${toString i}") x.object])
contents
(lib.range 0 (lib.length contents - 1));
pathsFromGraph = ./paths-from-graph.pl;
inherit compressor prepend;
}