fillDiskWithRPMs
pkgs.vmTools.fillDiskWithRPMs
Docs pulled from | This Revision | 10 minutes ago
Create a filesystem image of the specified size and fill it with a set of RPM packages.
Noogle detected
Implementation
The following is the current implementation of this function.
fillDiskWithRPMs =
{
size ? 4096,
rpms,
name,
fullName,
preInstall ? "",
postInstall ? "",
runScripts ? true,
createRootFS ? defaultCreateRootFS,
QEMU_OPTS ? "",
memSize ? 512,
unifiedSystemDir ? false,
}:
runInLinuxVM (
stdenv.mkDerivation {
inherit
name
preInstall
postInstall
rpms
QEMU_OPTS
memSize
;
preVM = createEmptyImage { inherit size fullName; };
buildCommand = ''
${createRootFS}
chroot=$(type -tP chroot)
# Make the Nix store available in /mnt, because that's where the RPMs live.
mkdir -p /mnt${storeDir}
${util-linux}/bin/mount -o bind ${storeDir} /mnt${storeDir}
# Some programs may require devices in /dev to be available (e.g. /dev/random)
${util-linux}/bin/mount -o bind /dev /mnt/dev
# Newer distributions like Fedora 18 require /lib etc. to be
# symlinked to /usr.
${lib.optionalString unifiedSystemDir ''
mkdir -p /mnt/usr/bin /mnt/usr/sbin /mnt/usr/lib /mnt/usr/lib64
ln -s /usr/bin /mnt/bin
ln -s /usr/sbin /mnt/sbin
ln -s /usr/lib /mnt/lib
ln -s /usr/lib64 /mnt/lib64
${util-linux}/bin/mount -t proc none /mnt/proc
''}
echo "unpacking RPMs..."
set +o pipefail
for i in $rpms; do
echo "$i..."
${rpm}/bin/rpm2cpio "$i" | chroot /mnt ${cpio}/bin/cpio -i --make-directories --unconditional
done
eval "$preInstall"
echo "initialising RPM DB..."
PATH=/usr/bin:/bin:/usr/sbin:/sbin $chroot /mnt \
ldconfig -v || true
PATH=/usr/bin:/bin:/usr/sbin:/sbin $chroot /mnt \
rpm --initdb
${util-linux}/bin/mount -o bind /tmp /mnt/tmp
echo "installing RPMs..."
PATH=/usr/bin:/bin:/usr/sbin:/sbin $chroot /mnt \
rpm -iv --nosignature ${lib.optionalString (!runScripts) "--noscripts"} $rpms
echo "running post-install script..."
eval "$postInstall"
rm /mnt/.debug
${util-linux}/bin/umount /mnt${storeDir} /mnt/tmp /mnt/dev ${lib.optionalString unifiedSystemDir "/mnt/proc"}
${util-linux}/bin/umount /mnt
'';
passthru = { inherit fullName; };
}
);