diff options
author | Alyssa Ross <hi@alyssa.is> | 2021-10-19 14:40:23 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2022-01-07 10:22:32 +0000 |
commit | cc62bcb55359ba8c5e0fe3a48e778444c89060d8 (patch) | |
tree | ca0e21d44eaf8837b687395e614445f7761d7bbd /nixpkgs/pkgs/build-support/vm | |
parent | d6625e8d25efd829c3cfa227d025ca4e606ae4b7 (diff) | |
parent | a323570a264da96a0b0bcc1c9aa017794acdc752 (diff) | |
download | nixlib-cc62bcb55359ba8c5e0fe3a48e778444c89060d8.tar nixlib-cc62bcb55359ba8c5e0fe3a48e778444c89060d8.tar.gz nixlib-cc62bcb55359ba8c5e0fe3a48e778444c89060d8.tar.bz2 nixlib-cc62bcb55359ba8c5e0fe3a48e778444c89060d8.tar.lz nixlib-cc62bcb55359ba8c5e0fe3a48e778444c89060d8.tar.xz nixlib-cc62bcb55359ba8c5e0fe3a48e778444c89060d8.tar.zst nixlib-cc62bcb55359ba8c5e0fe3a48e778444c89060d8.zip |
Merge commit 'a323570a264da96a0b0bcc1c9aa017794acdc752'
Diffstat (limited to 'nixpkgs/pkgs/build-support/vm')
-rw-r--r-- | nixpkgs/pkgs/build-support/vm/default.nix | 52 |
1 files changed, 32 insertions, 20 deletions
diff --git a/nixpkgs/pkgs/build-support/vm/default.nix b/nixpkgs/pkgs/build-support/vm/default.nix index 1a07e1c11591..d2aeb784e7fd 100644 --- a/nixpkgs/pkgs/build-support/vm/default.nix +++ b/nixpkgs/pkgs/build-support/vm/default.nix @@ -8,14 +8,17 @@ ++ pkgs.lib.optional (pkgs.stdenv.isi686 || pkgs.stdenv.isx86_64) "rtc_cmos" }: -with pkgs; -with import ../../../nixos/lib/qemu-flags.nix { inherit pkgs; }; - +let + inherit (pkgs) bash bashInteractive busybox cpio coreutils e2fsprogs fetchurl kmod rpm + stdenv util-linux + buildPackages writeScript writeText runCommand; +in rec { + qemu-common = import ../../../nixos/lib/qemu-common.nix { inherit lib pkgs; }; qemu = buildPackages.qemu_kvm; - modulesClosure = makeModulesClosure { + modulesClosure = pkgs.makeModulesClosure { inherit kernel rootModules; firmware = kernel; }; @@ -137,7 +140,7 @@ rec { ''; - initrd = makeInitrd { + initrd = pkgs.makeInitrd { contents = [ { object = stage1Init; symlink = "/init"; @@ -152,7 +155,7 @@ rec { # Set the system time from the hardware clock. Works around an # apparent KVM > 1.5.2 bug. - ${pkgs.util-linux}/bin/hwclock -s + ${util-linux}/bin/hwclock -s export NIX_STORE=${storeDir} export NIX_BUILD_TOP=/tmp @@ -192,13 +195,13 @@ rec { export PATH=/bin:/usr/bin:${coreutils}/bin echo "Starting interactive shell..." echo "(To run the original builder: \$origBuilder \$origArgs)" - exec ${busybox}/bin/setsid ${bashInteractive}/bin/bash < /dev/${qemuSerialDevice} &> /dev/${qemuSerialDevice} + exec ${busybox}/bin/setsid ${bashInteractive}/bin/bash < /dev/${qemu-common.qemuSerialDevice} &> /dev/${qemu-common.qemuSerialDevice} fi ''; qemuCommandLinux = '' - ${qemuBinary qemu} \ + ${qemu-common.qemuBinary qemu} \ -nographic -no-reboot \ -device virtio-rng-pci \ -virtfs local,path=${storeDir},security_model=none,mount_tag=store \ @@ -206,7 +209,7 @@ rec { ''${diskImage:+-drive file=$diskImage,if=virtio,cache=unsafe,werror=report} \ -kernel ${kernel}/${img} \ -initrd ${initrd}/initrd \ - -append "console=${qemuSerialDevice} panic=1 command=${stage2Init} out=$out mountDisk=$mountDisk loglevel=4" \ + -append "console=${qemu-common.qemuSerialDevice} panic=1 command=${stage2Init} out=$out mountDisk=$mountDisk loglevel=4" \ $QEMU_OPTS ''; @@ -257,14 +260,23 @@ rec { eval "$postVM" ''; - - createEmptyImage = {size, fullName}: '' - mkdir $out - diskImage=$out/disk-image.qcow2 + /* + A bash script fragment that produces a disk image at `destination`. + */ + createEmptyImage = { + # Disk image size in MiB + size, + # Name that will be written to ${destination}/nix-support/full-name + fullName, + # Where to write the image files, defaulting to $out + destination ? "$out" + }: '' + mkdir -p ${destination} + diskImage=${destination}/disk-image.qcow2 ${qemu}/bin/qemu-img create -f qcow2 $diskImage "${toString size}M" - mkdir $out/nix-support - echo "${fullName}" > $out/nix-support/full-name + mkdir ${destination}/nix-support + echo "${fullName}" > ${destination}/nix-support/full-name ''; @@ -315,7 +327,7 @@ rec { extractFs = {file, fs ? null} : - with pkgs; runInLinuxVM ( + runInLinuxVM ( stdenv.mkDerivation { name = "extract-file"; buildInputs = [ util-linux ]; @@ -340,10 +352,10 @@ rec { extractMTDfs = {file, fs ? null} : - with pkgs; runInLinuxVM ( + runInLinuxVM ( stdenv.mkDerivation { name = "extract-file-mtd"; - buildInputs = [ util-linux mtdutils ]; + buildInputs = [ pkgs.util-linux pkgs.mtdutils ]; buildCommand = '' ln -s ${kernel}/lib /lib ${kmod}/bin/modprobe mtd @@ -494,7 +506,7 @@ rec { tarball must contain an RPM specfile. */ buildRPM = attrs: runInLinuxImage (stdenv.mkDerivation ({ - prePhases = [ prepareImagePhase sysInfoPhase ]; + prePhases = [ pkgs.prepareImagePhase pkgs.sysInfoPhase ]; dontUnpack = true; dontConfigure = true; @@ -575,7 +587,7 @@ rec { buildCommand = '' ${createRootFS} - PATH=$PATH:${lib.makeBinPath [ dpkg dpkg glibc xz ]} + PATH=$PATH:${lib.makeBinPath [ pkgs.dpkg pkgs.glibc pkgs.xz ]} # Unpack the .debs. We do this to prevent pre-install scripts # (which have lots of circular dependencies) from barfing. |