Unverified Commit 0f363a1c authored by r-vdp's avatar r-vdp
Browse files

nixos: replace container activation scripts

docker: move /init symlink creation from activationScript to installBootLoader,
which is the mechanism switch-to-configuration already uses for this purpose.

lxc: remove redundant activation script.
The installBootLoader hook was already handling /sbin/init.

incus: replace activationScript with a oneshot systemd service that uses
ConditionPathExists to create /etc/nixos/configuration.nix only on first
boot.

See: https://github.com/NixOS/nixpkgs/issues/475305
parent 5448eaf6
Loading
Loading
Loading
Loading
+14 −8
Original line number Diff line number Diff line
@@ -13,18 +13,24 @@
    ];
  };

  # copy the config for nixos-rebuild
  system.activationScripts.config =
  # Create a default configuration.nix on first boot so nixos-rebuild works
  # out of the box.
  systemd.services.incus-create-nixos-config =
    let
      config = pkgs.replaceVars ./incus-container-image-inner.nix {
      configFile = pkgs.replaceVars ./incus-container-image-inner.nix {
        stateVersion = lib.trivial.release;
      };
    in
    ''
      if [ ! -e /etc/nixos/configuration.nix ]; then
        install -m 0644 -D ${config} /etc/nixos/configuration.nix
      fi
    '';
    {
      description = "Create default NixOS configuration for Incus";
      wantedBy = [ "multi-user.target" ];
      unitConfig.ConditionPathExists = "!/etc/nixos/configuration.nix";
      serviceConfig = {
        Type = "oneshot";
        RemainAfterExit = true;
        ExecStart = "${pkgs.coreutils}/bin/install -m 0644 -D ${configFile} /etc/nixos/configuration.nix";
      };
    };

  networking = {
    dhcpcd.enable = false;
+14 −8
Original line number Diff line number Diff line
@@ -13,18 +13,24 @@
    ];
  };

  # copy the config for nixos-rebuild
  system.activationScripts.config =
  # Create a default configuration.nix on first boot so nixos-rebuild works
  # out of the box.
  systemd.services.incus-create-nixos-config =
    let
      config = pkgs.replaceVars ./incus-virtual-machine-image-inner.nix {
      configFile = pkgs.replaceVars ./incus-virtual-machine-image-inner.nix {
        stateVersion = lib.trivial.release;
      };
    in
    ''
      if [ ! -e /etc/nixos/configuration.nix ]; then
        install -m 0644 -D ${config} /etc/nixos/configuration.nix
      fi
    '';
    {
      description = "Create default NixOS configuration for Incus";
      wantedBy = [ "multi-user.target" ];
      unitConfig.ConditionPathExists = "!/etc/nixos/configuration.nix";
      serviceConfig = {
        Type = "oneshot";
        RemainAfterExit = true;
        ExecStart = "${pkgs.coreutils}/bin/install -m 0644 -D ${configFile} /etc/nixos/configuration.nix";
      };
    };

  # Network
  networking = {
+4 −3
Original line number Diff line number Diff line
@@ -57,8 +57,9 @@ in
    ${config.nix.package.out}/bin/nix-env -p /nix/var/nix/profiles/system --set /run/current-system
  '';

  # Install new init script
  system.activationScripts.installInitScript = ''
    ln -fs $systemConfig/init /init
  # Update /init symlink when switching configurations so the container
  # boots the new system on restart.
  system.build.installBootLoader = pkgs.writeShellScript "install-docker-init" ''
    ${pkgs.coreutils}/bin/ln -fs "$1/init" /init
  '';
}
+0 −3
Original line number Diff line number Diff line
@@ -119,8 +119,5 @@

      systemd.packages = [ pkgs.distrobuilder.generator ];

      system.activationScripts.installInitScript = lib.mkForce ''
        ln -fs $systemConfig/init /sbin/init
      '';
    };
}