diff --git a/checks/installation/flake-module.nix b/checks/installation/flake-module.nix index ce0dbacb0..f48c4e040 100644 --- a/checks/installation/flake-module.nix +++ b/checks/installation/flake-module.nix @@ -7,8 +7,8 @@ { clan.machines.test-install-machine = { clan.core.networking.targetHost = "test-install-machine"; - fileSystems."/".device = lib.mkDefault "/dev/vdb"; - boot.loader.grub.device = lib.mkDefault "/dev/vdb"; + fileSystems."/".device = lib.mkDefault "/dev/vda"; + boot.loader.grub.device = lib.mkDefault "/dev/vda"; imports = [ self.nixosModules.test-install-machine ]; }; @@ -22,7 +22,7 @@ (modulesPath + "/profiles/qemu-guest.nix") ../lib/minify.nix ]; - clan.single-disk.device = "/dev/vdb"; + clan.single-disk.device = "/dev/vda"; environment.etc."install-successful".text = "ok"; @@ -47,7 +47,6 @@ pkgs.nixos-anywhere ] ++ builtins.map (i: i.outPath) (builtins.attrValues self.inputs); closureInfo = pkgs.closureInfo { rootPaths = dependencies; }; - qemu-common = import "${inputs.nixpkgs}/nixos/lib/qemu-common.nix" { inherit lib pkgs; }; in { # On aarch64-linux, hangs on reboot with after installation: @@ -64,22 +63,41 @@ name = "test-installation"; nodes.target = { services.openssh.enable = true; - users.users.root.openssh.authorizedKeys.keyFiles = [ ../lib/ssh/pubkey ]; - system.nixos.variant_id = "installer"; - environment.systemPackages = [ pkgs.nixos-facter ]; - virtualisation.emptyDiskImages = [ 4096 ]; - nix.settings = { - substituters = lib.mkForce [ ]; - hashed-mirrors = null; - connect-timeout = lib.mkForce 3; - flake-registry = pkgs.writeText "flake-registry" ''{"flakes":[],"version":2}''; - experimental-features = [ - "nix-command" - "flakes" - ]; - }; - system.extraDependencies = dependencies; + virtualisation.diskImage = "./target.qcow2"; + virtualisation.useBootLoader = true; + + # virtualisation.fileSystems."/" = { + # device = "/dev/disk/by-label/this-is-not-real-and-will-never-be-used"; + # fsType = "ext4"; + # }; }; + nodes.installer = + { modulesPath, ... }: + { + imports = [ + (modulesPath + "/../tests/common/auto-format-root-device.nix") + ]; + services.openssh.enable = true; + users.users.root.openssh.authorizedKeys.keyFiles = [ ../lib/ssh/pubkey ]; + system.nixos.variant_id = "installer"; + environment.systemPackages = [ pkgs.nixos-facter ]; + virtualisation.emptyDiskImages = [ 512 ]; + virtualisation.diskSize = 8 * 1024; + virtualisation.rootDevice = "/dev/vdb"; + # both installer and target need to use the same diskImage + virtualisation.diskImage = "./target.qcow2"; + nix.settings = { + substituters = lib.mkForce [ ]; + hashed-mirrors = null; + connect-timeout = lib.mkForce 3; + flake-registry = pkgs.writeText "flake-registry" ''{"flakes":[],"version":2}''; + experimental-features = [ + "nix-command" + "flakes" + ]; + }; + system.extraDependencies = dependencies; + }; nodes.client = { environment.systemPackages = [ self.packages.${pkgs.system}.clan-cli @@ -100,36 +118,28 @@ }; testScript = '' - def create_test_machine(oldmachine=None, args={}): # taken from - startCommand = "${qemu-common.qemuBinary pkgs.qemu_test}" - startCommand += " -cpu max -m 1024 -virtfs local,path=/nix/store,security_model=none,mount_tag=nix-store" - startCommand += f' -drive file={oldmachine.state_dir}/empty0.qcow2,id=drive1,if=none,index=1,werror=report' - startCommand += ' -device virtio-blk-pci,drive=drive1' - machine = create_machine({ - "startCommand": startCommand, - } | args) - driver.machines.append(machine) - return machine - - start_all() + client.start() + installer.start() client.succeed("${pkgs.coreutils}/bin/install -Dm 600 ${../lib/ssh/privkey} /root/.ssh/id_ed25519") - client.wait_until_succeeds("timeout 2 ssh -o StrictHostKeyChecking=accept-new -v root@target hostname") + client.wait_until_succeeds("timeout 2 ssh -o StrictHostKeyChecking=accept-new -v root@installer hostname") client.succeed("cp -r ${../..} test-flake && chmod -R +w test-flake") client.fail("test -f test-flake/machines/test-install-machine/hardware-configuration.nix") - client.succeed("clan machines update-hardware-config --flake test-flake test-install-machine root@target>&2") + client.succeed("clan machines update-hardware-config --flake test-flake test-install-machine root@installer >&2") client.succeed("test -f test-flake/machines/test-install-machine/hardware-configuration.nix") - client.succeed("clan machines update-hardware-config --backend nixos-facter --flake test-flake test-install-machine root@target>&2") + client.succeed("clan machines update-hardware-config --backend nixos-facter --flake test-flake test-install-machine root@installer>&2") client.succeed("test -f test-flake/machines/test-install-machine/facter.json") - client.succeed("clan machines install --debug --flake ${../..} --yes test-install-machine --target-host root@target >&2") + client.succeed("clan machines install --debug --flake ${../..} --yes test-install-machine --target-host root@installer >&2") try: - target.shutdown() + installer.shutdown() except BrokenPipeError: # qemu has already exited pass - new_machine = create_test_machine(oldmachine=target, args={ "name": "new_machine" }) - assert(new_machine.succeed("cat /etc/install-successful").strip() == "ok") + target.state_dir = installer.state_dir + target.start() + target.wait_for_unit("multi-user.target") + assert(target.succeed("cat /etc/install-successful").strip() == "ok") ''; } { inherit pkgs self; }; };