# Distribution-style flat package (xar + bom + cpio, built on Linux) for # `startosinstall --installpackage`: installs the vmix agent LaunchDaemon and # marks Setup Assistant as done so the first boot lands on loginwindow. { pkgs, lib, ... }: { version ? "1.0" }: let id = "ch.vmix.agent"; # nixpkgs' bomutils aborts under _FORTIFY_SOURCE bomutils = pkgs.bomutils.overrideAttrs (_: { hardeningDisable = [ "fortify" ]; }); postinstall = pkgs.writeText "postinstall" '' #!/bin/sh # $3 = target volume T="$3" mkdir -p "$T/private/var/db" touch "$T/private/var/db/.AppleSetupDone" chown root:wheel "$T/private/var/db/.AppleSetupDone" chmod 755 "$T/Library/vmix/agent.sh" chown -R root:wheel "$T/Library/vmix" "$T/Library/LaunchDaemons/${id}.plist" exit 0 ''; in pkgs.runCommand "vmix-agent-${version}.pkg" { nativeBuildInputs = [ pkgs.xar bomutils pkgs.cpio pkgs.gzip ]; } '' mkdir -p root/Library/LaunchDaemons root/Library/vmix scripts flat/vmix-agent.pkg cp ${../guest/agent.sh} root/Library/vmix/agent.sh cp ${../guest/ch.vmix.agent.plist} root/Library/LaunchDaemons/${id}.plist chmod 755 root/Library/vmix/agent.sh chmod 644 root/Library/LaunchDaemons/${id}.plist cp ${postinstall} scripts/postinstall chmod 755 scripts/postinstall NFILES=$(find root | wc -l) KBYTES=$(du -sk root | cut -f1) (cd root && find . | cpio -o --format odc --owner 0:0 --quiet | gzip -c > ../flat/vmix-agent.pkg/Payload) (cd scripts && find . | cpio -o --format odc --owner 0:0 --quiet | gzip -c > ../flat/vmix-agent.pkg/Scripts) mkbom -u 0 -g 80 root flat/vmix-agent.pkg/Bom cat > flat/vmix-agent.pkg/PackageInfo < XML cat > flat/Distribution < vmix agent #vmix-agent.pkg XML sed -i 's/^ //' flat/vmix-agent.pkg/PackageInfo flat/Distribution (cd flat && xar --compression none -cf $out Distribution vmix-agent.pkg) xar -t -f $out ''