# SPDX-License-Identifier: MIT # SPDX-FileCopyrightText: 2021-2022 Alyssa Ross { pkgs ? import {} }: pkgs.pkgsStatic.callPackage ( { lib, stdenv, runCommand, writeReferencesToFile, s6-rc, tar2ext4 , busybox, cloud-hypervisor, cryptsetup, execline, jq, kmod, mdevd, s6 , s6-portable-utils, socat, util-linuxMinimal, xorg }: let inherit (lib) cleanSource cleanSourceWith concatMapStringsSep; start-vm = import ../start-vm { pkgs = pkgs.pkgsStatic; }; pkgsGui = pkgs.pkgsMusl.extend (final: super: { systemd = final.libudev-zero; }); foot = pkgsGui.foot.override { allowPgo = false; }; packages = [ cloud-hypervisor execline jq kmod mdevd s6 s6-portable-utils s6-rc socat start-vm (cryptsetup.override { programs = { cryptsetup = false; cryptsetup-reencrypt = false; integritysetup = false; }; }) (busybox.override { extraConfig = '' CONFIG_DEPMOD n CONFIG_FINDFS n CONFIG_INIT n CONFIG_INSMOD n CONFIG_LSMOD n CONFIG_MODINFO n CONFIG_MODPROBE n CONFIG_RMMOD n ''; }) ] ++ (with pkgsGui; [ foot westonLite ]); kernel = pkgs.linux_latest.override { structuredExtraConfig = with lib.kernel; { VIRTIO = yes; VIRTIO_PCI = yes; VIRTIO_BLK = yes; EXT4_FS = yes; MODPROBE_PATH = freeform "/sbin/modprobe"; }; }; packagesSysroot = runCommand "packages-sysroot" { nativeBuildInputs = [ xorg.lndir ]; } '' mkdir -p $out/usr/bin ln -s ${concatMapStringsSep " " (p: "${p}/bin/*") packages} $out/usr/bin for pkg in ${lib.escapeShellArgs [ pkgsGui.mesa.drivers pkgsGui.dejavu_fonts ]}; do lndir -silent "$pkg" "$out/usr" done ln -s ${kernel}/lib $out/lib # TODO: this is a hack and we should just build the util-linux # programs we want. # https://lore.kernel.org/util-linux/87zgrl6ufb.fsf@alyssa.is/ ln -s ${util-linuxMinimal}/bin/{findfs,lsblk} $out/usr/bin ''; packagesTar = runCommand "packages.tar" {} '' cd ${packagesSysroot} tar -cf $out --sort=name --mtime=@0 --verbatim-files-from \ -T ${writeReferencesToFile packagesSysroot} . ''; in stdenv.mkDerivation { name = "spectrum-rootfs"; src = cleanSourceWith { filter = name: _type: name != "${toString ./.}/build"; src = cleanSource ./.; }; nativeBuildInputs = [ s6-rc tar2ext4 ]; MODULES_ALIAS = "${kernel}/lib/modules/${kernel.modDirVersion}/modules.alias"; MODULES_ORDER = "${kernel}/lib/modules/${kernel.modDirVersion}/modules.order"; PACKAGES_TAR = packagesTar; postPatch = '' mkdir $NIX_BUILD_TOP/empty substituteInPlace Makefile --replace /var/empty $NIX_BUILD_TOP/empty ''; installPhase = '' cp build/rootfs.ext4 $out ''; enableParallelBuilding = true; passthru = { inherit kernel; }; meta = with lib; { license = licenses.eupl12; platforms = platforms.linux; }; } ) {}