Commit graph

90 commits

Author SHA1 Message Date
Victor Engmark e9d4990ab1
nixos-container: Conform to ShellCheck 2025-10-09 18:18:44 +02:00
Maximilian Bosch a6b0564b7d
nixos/filesystems: fix special file-systems for systemd-nspawn (#345899) 2025-10-03 19:33:31 +00:00
h7x4 3f78de8457
nixos/nixos-containers: use types.port 2025-09-22 16:33:03 +02:00
Maximilian Bosch a532cb052e
nixos/containers: add boot.isNspawnContainer option
There are a bunch of components such as incus or LXC that also use
`boot.isContainer`, so we'd have to differentiate between "OS container"
and "actually nspawn".

This became necessary for the file-systems part where nspawn takes care
of setting up special filesystems like `/proc`, `/dev` etc., but others
don't.

To allow for a `boot.isContainer` being less overloaded, this introduces
`boot.isNspawnContainer` that is exclusively used for nspawn-specific
things. When `true`, `boot.isContainer = true;` is implied.
2025-09-21 13:26:23 +02:00
Emily 7c4b56bd12
nixos/nixos-containers: actually eliminate costs if no containers are used (#427001) 2025-08-25 19:53:32 +01:00
dish 970dcca69c
treewide: Fix links in module documentation 2025-08-25 12:55:11 -04:00
zimward 29be71ca49
nixos/nixos-containers: actually eliminate costs if no containers are used 2025-08-24 22:16:29 +02:00
Wolfgang Walther 5a0711127c
treewide: run nixfmt 1.0.0 2025-07-24 13:55:40 +02:00
Gwendolyn Kornak b5b04bb146 nixos/nixos-containers: add flake to container start script
Integrated the flake container setup into the spawn script for systemd-nspawn.
The trickiest part of this was ensuring the underlying per-container is built.
With the .conf file created, running `nixos-container update` creates all the necessary per-container structure.
We call this command at start to ensure the structure is created only if the per-container system isnt there.
Note: This also means the flake gets updated to branch HEAD when the container is started for the first time.
2025-07-05 17:22:15 -07:00
Gwendolyn Kornak 9a3173dacd nixos/nixos-containers: add flake option
While the nixos-container command allows for the creation of containers pointing to a flake, the declarative module doesn't have this option.
Adds the flake option for nixos-container declarative approach. Creates the /etc/nixos-container .conf file similar to how the command preforms it.
2025-07-05 17:21:37 -07:00
John Titor c87464cb0c
Revert "treewide: migrate nixos modules to networking.hosts"
This reverts commit cd64f1bd87.
2025-06-09 00:10:05 +05:30
John Titor cd64f1bd87 treewide: migrate nixos modules to networking.hosts
Signed-off-by: John Titor <50095635+JohnRTitor@users.noreply.github.com>
2025-06-07 23:09:46 +05:30
Louis Opter 9d3a171dbf nixos/containers: fix shell error when privateUsers=no
Details in #387773.
2025-04-05 00:36:42 +00:00
Silvan Mosberger 374e6bcc40 treewide: Format all Nix files
Format all Nix files using the officially approved formatter,
making the CI check introduced in the previous commit succeed:

  nix-build ci -A fmt.check

This is the next step of the of the [implementation](https://github.com/NixOS/nixfmt/issues/153)
of the accepted [RFC 166](https://github.com/NixOS/rfcs/pull/166).

This commit will lead to merge conflicts for a number of PRs,
up to an estimated ~1100 (~33%) among the PRs with activity in the past 2
months, but that should be lower than what it would be without the previous
[partial treewide format](https://github.com/NixOS/nixpkgs/pull/322537).

Merge conflicts caused by this commit can now automatically be resolved while rebasing using the
[auto-rebase script](8616af08d9/maintainers/scripts/auto-rebase).

If you run into any problems regarding any of this, please reach out to the
[formatting team](https://nixos.org/community/teams/formatting/) by
pinging @NixOS/nix-formatting.
2025-04-01 20:10:43 +02:00
Kevin Boulain c2d4e8f4cb nixos/nixos-containers: user options take precedence over module ones
I think this is the norm in NixOS modules. This allows to start a
container with '--volatile=overlay --link-journal=host' in order to
persist logs across runs of a container running with a temporary root.
While '--ephemeral' omits '--link-journal=try-guest', it's not possible
to run an ephemeral container when linking the journal:
https://github.com/systemd/systemd/issues/1666
2025-03-09 11:08:56 +01:00
Ramses 51e84098b5
nixos-container: avoid subshell when testing $PRIVATE_USERS (#383056) 2025-02-19 10:46:48 +01:00
Jean-Baptiste Giraudeau 57c96ff6ef
nixos-container: avoid subshell when testing $PRIVATE_USERS
So that the script is not rejected by https://www.shellcheck.net/wiki/SC2235
 under `systemd.enableStrictShellChecks = true;`
2025-02-18 09:41:55 +01:00
Sandro 86f9eeb816
nixos-container: add support for --private-users (#362210) 2025-02-18 00:09:56 +01:00
Christian Kögler bbd8de2fdd
nixos-container: do not touch os-release if it is a symlink (#353366) 2025-02-16 07:43:34 +01:00
Jean-Baptiste Giraudeau c8f83ec641
nixos-container: add support for --private-users
imply bind mounts with idmap option when user namespacing is enabled,
 so that /nix/store and friends are correctly own by root user.
2025-02-12 14:28:57 +01:00
Robert Hensing 0b47fba230 Revert "nixos/nixpkgs: make config.nixpkgs.{localSystem,crossSystem,buildPlatform,hostPlatform} write only"
This reverts commit 0a19371146.
2025-02-05 14:29:18 +01:00
Wolfgang Walther 0a19371146
nixos/nixpkgs: make config.nixpkgs.{localSystem,crossSystem,buildPlatform,hostPlatform} write only
The description for options.nixpkgs.system already hints at this:

  Neither ${opt.system} nor any other option in nixpkgs.* is meant
  to be read by modules and configurations.
  Use pkgs.stdenv.hostPlatform instead.

We can support this goal by not elaborating the systems anymore, forcing
users to go via pkgs.stdenv.

This will prevent problems when making the top-level package sets
composable in the next commit. For this to work, you should pass a fully
elaborated system to nixpkgs' localSystem or crossSystem options.
2025-02-01 12:04:59 +01:00
Peder Bergebakken Sundt 953f72e76e nixos/*: tag manpage references 2025-01-27 02:47:01 +01:00
Nico Felbinger e65d6fba75
nixos-containers: add networkNamespace option 2024-12-23 00:18:02 +01:00
Paul Grandperrin 853d34898d
nixos-containers: fix enableTun option
When using private users, `mknod /dev/net/tun` is run from the guest and therefor needs the `m` modifier.
2024-11-19 14:43:02 +01:00
taku0 a009d2b73f nixos-container: do not touch os-release if it is a symlink
`/etc/os-release` of NixOS containers, which are
`/var/lib/nixos-containers/*/etc/os-release` on the host, are usually
symlinks to the absolute path `/etc/static/os-release` but it doesn't
exist in non-NixOS host.  Since `startScript` is evaluated by the host
system, both `[ -e "$root/etc/os-release" ]` and
`touch "$root/etc/os-release"` fail, so that the container fails to
start on the second boot (on the first boot, the symlink doesn't exist,
so the command succeeds).

This commit avoids `touch "$root/etc/os-release"` if
`$root/etc/os-release` is a symlink, so imperative NixOS containers are
usable on non-NixOS host.
2024-11-03 22:02:50 +09:00
r-vdp cc28f2bef5
nixos/containers: Fix shellcheck issues 2024-10-03 17:57:41 +02:00
K900 307dda84c0 nixos/nixos-containers: partially revert aa4570ca05
Word splitting is actually intentional here, as both of those variables
can (and often do) contain multiple flags.
2024-09-27 10:00:58 +03:00
r-vdp aa4570ca05
nixos/nixos-containers: fix shellcheck errors in systemd scripts 2024-09-26 21:54:07 +02:00
Gabriella Gonzalez 79e5dbb262 Restore check for container not defining nixpkgs.hostPlatform option 2024-08-18 17:00:16 -07:00
Gabriella Gonzalez 0600255046 Use host.pkgs.stdenv.hostPlatform 2024-08-18 16:49:57 -07:00
Gabriella Gonzalez de83fcb2df containers.*.config: reuse host nixpkgs.pkgs if defined
The minimum reproduction for the problem I'm trying to solve is that
the following NixOS test with a trivial NixOS container:

```
{ inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/24.05";

    flake-utils.url = "github:numtide/flake-utils/v1.0.0";
  };

  outputs = { flake-utils, nixpkgs, self, ... }:
    flake-utils.lib.eachDefaultSystem (system: {
      checks.default = nixpkgs.legacyPackages."${system}".nixosTest {
        name = "test";

        nodes.machine.containers.tutorial.config = { };

        testScript = "";
      };
    });
}
```

… fails with the following error message:

```
error: Neither nodes.machine.nixpkgs.hostPlatform nor the legacy option nodes.machine.nixpkgs.system has been set.
You can set nodes.machine.nixpkgs.hostPlatform in hardware-configuration.nix by re-running
a recent version of nixos-generate-config.
The option nodes.machine.nixpkgs.system is still fully supported for NixOS 22.05 interoperability,
but will be deprecated in the future, so we recommend to set nodes.machine.nixpkgs.hostPlatform.
```

The root of the problem appears to be that in
`nixos/modules/virtualisation/nixos-containers.nix` there is support
for deriving the guest's `nixpkgs.hostPlatform` or
`nixpkgs.localSystem` from the corresponding host's values, but this
doesn't work if the host sets `nixpkgs.pkgs` instead of one of those
values.  In fact, this is what happens when using `pkgs.nixosTest`
(which sets `nixpkgs.pkgs` in
`pkgs/build-support/testers/default.nix`).

The solution I went with was to forward the `nixpkgs.pkgs` setting from
the host to the guest, but only if it is defined (matching the same
treatment as `nixpkgs.hostPlatform` and `nixpkgs.localSystem`.
2024-08-18 11:32:46 -07:00
Sohalt c11439943d
nixos/containers: add wants and after dependency for network interfaces (#153234)
Co-authored-by: Franz Pletz <fpletz@fnordicwalking.de>
2024-07-22 01:22:19 +02:00
stuebinm 6afb255d97 nixos: remove all uses of lib.mdDoc
these changes were generated with nixq 0.0.2, by running

  nixq ">> lib.mdDoc[remove] Argument[keep]" --batchmode nixos/**.nix
  nixq ">> mdDoc[remove] Argument[keep]" --batchmode nixos/**.nix
  nixq ">> Inherit >> mdDoc[remove]" --batchmode nixos/**.nix

two mentions of the mdDoc function remain in nixos/, both of which
are inside of comments.

Since lib.mdDoc is already defined as just id, this commit is a no-op as
far as Nix (and the built manual) is concerned.
2024-04-13 10:07:35 -07:00
Kira Bruneau f0034ee975
Merge pull request #297517 from kira-bruneau/nixos-containers
nixos/nixos-containers: require mounts for bind mount host paths
2024-04-06 18:07:45 -04:00
Kira Bruneau 7f3643bef6 nixos/nixos-containers: require mounts for bind mount host paths
Fixes starting containers before bind mount host paths are mounted
2024-04-04 19:48:15 -04:00
Florian Klink 39ebd395cc
Merge pull request #224666 from grindhold/container_underscores
check nixos-container names for underscores
2024-03-20 11:41:34 +02:00
emilylange 1c404d2584
nixos/containers: warn if containers are used but disabled
This is a follow-up to 8dfe8e447e.
2023-11-25 20:01:42 +01:00
K900 6f06066e94 nixos/containers: use latest stateVersion as example
Hopefully this way we don't confuse people into thinking you have to set it to 21.05.
2023-10-27 12:56:12 +03:00
grindhold 108a6f181a nixos/containers: check nixos-container names for underscores 2023-10-22 09:45:41 +02:00
Donovan Glover fd7daf9fc4
nixos/nixos-containers: add restartIfChanged option
This commit makes auto-restarting declarative containers optional.

This is useful when you don't want changes to your config to automatically
restart the container and thus stop any applications running inside it.
2023-10-11 21:53:42 -04:00
Felix Buehler 6672dde558 treewide: use optionalAttrs instead of 'else {}' 2023-06-25 11:01:34 -03:00
Fabian Möller c51fe112cc
treewide: pass system argument to eval-config.nix
Calling `eval-config.nix` without a `system` from a Nix flake fails with
`error: attribute 'currentSystem' missing` since #230523. Setting
`system = null` removes the use of `currentSystem` and instead uses the
value from the `nixpkgs` module.
2023-05-12 14:56:23 +02:00
Felix Buehler 327b0cff7a treewide: use more lib.optionalString 2023-04-07 13:38:33 +02:00
Yureka c683aaaa1d
nixos/nixos-containers: add specialArgs option (#216677) 2023-02-19 21:25:04 +01:00
adisbladis 841bcc7a24
Merge pull request #185129 from Munksgaard/fix-nixos-container
nixos-containers: Make sure same version of nixos-container is used
2022-11-17 22:13:44 +13:00
Eelco Dolstra 0a00b332cd
Merge pull request #198526 from farnoy/nixos-container-unified-cgroups
[nixos-container] Make nixos containers use unified cgroupsv2
2022-11-10 13:37:43 +01:00
Jakub Okoński 12508ac79a nixos-container: force systemd-nspawn to use unified cgroups hierarchy 2022-11-06 17:12:02 +01:00
Robert Hensing 8837a5d68e
Merge pull request #195681 from maifel-maifel/mr-containers-hostPlatform
nixos/containers: now uses nixpkgs.hostPlatform
2022-10-27 17:52:45 +02:00
digital f4ccaa51e0 nixos/containers: support nixpkgs.hostPlatform
Use hostPlatform if both the host and the containers nixpkgs supports
hostPlatform, otherwise fall back to localSystem. This preseves backwards
compatibility.
2022-10-18 19:15:26 +02:00