rpmClosureGenerator
pkgs.vmTools.rpmClosureGenerator
Docs pulled from | This Revision | 30 minutes ago
Generate a Nix expression containing fetchurl calls for the closure of a set of top-level RPM packages from the `primary.xml.gz' file of a Fedora or openSUSE distribution.
Noogle detected
Implementation
The following is the current implementation of this function.
rpmClosureGenerator =
{
name,
packagesLists,
urlPrefixes,
packages,
archs ? [ ],
}:
assert (builtins.length packagesLists) == (builtins.length urlPrefixes);
runCommand "${name}.nix"
{
nativeBuildInputs = [
buildPackages.perl
buildPackages.perlPackages.URI
buildPackages.perlPackages.XMLSimple
buildPackages.zstd
];
inherit archs;
}
''
${lib.concatImapStrings (i: pl: ''
echo "decompressing ${pl}..."
case ${pl} in
*.zst)
zstd -d < ${pl} > ./packages_${toString i}.xml
;;
*.xz | *.lzma)
xz -d < ${pl} > ./packages_${toString i}.xml
;;
*.bz2)
bunzip2 < ${pl} > ./packages_${toString i}.xml
;;
*.gz)
gunzip < ${pl} > ./packages_${toString i}.xml
;;
*)
cp ${pl} ./packages_${toString i}.xml
;;
esac
'') packagesLists}
perl -w ${rpm/rpm-closure.pl} \
${
lib.concatImapStrings (i: pl: "./packages_${toString i}.xml ${pl.snd} ") (
lib.zipLists packagesLists urlPrefixes
)
} \
${toString packages} > $out
'';