Commit graph

77 commits

Author SHA1 Message Date
Robert Hensing e0000983db
Merge pull request #279170 from SuperSandro2000/nixos-repl-lib
nixos-rebuild: add lib to repl to make debugging even easier
2024-01-19 12:29:04 +01:00
Robert Hensing d059ce52ce nixos-rebuild: Partially future-proof the repl test 2024-01-18 18:04:46 +01:00
Robert Hensing 71154a6e30 nixos-rebuild: Test the repl subcommand 2024-01-18 18:04:46 +01:00
Robert Hensing 8be52599b7 nixos-rebuild: Prefer the module lib when available
pkgs.lib and lib need not match, so prefer the one that the modules get.

For example:

```nix
nix-repl> :lf nixpkgs
nix-repl> (lib.nixosSystem { modules = [ ({ lib, ... }: assert lib?nixosSystem; { nixpkgs.hostPlatform = "x86_64-linux"; }) ]; }).pkgs.lib?nixosSystem
false
```

The code is backwards compatible, for the case where you evaluate a
config whose nixpkgs doesn't have the preceding commit yet.
2024-01-15 00:28:36 +01:00
Robert Hensing c8c3c5854e nixos-rebuild: Avoid empty command
"${a[@]}" => ok
"${foo:+a[@]}" => empty string when length is 0
2024-01-14 04:03:25 +01:00
Robert Hensing 472dfb3888 nixos-rebuild: Add tty only to "sudo-able" commands for target
This solves again the problem solved by 09fd207cb8.

To quote:

> We always want to use `ssh -t` to force PTY allocation as there may be
> interactive SSH prompts like trusting unknown hosts.

However, the creation of a pseudoterminal causes the remote stdout and stderr
to point to the same tty, resulting in a single stream in the ssh client,
which breaks other usages of ssh, such as `--build-host`.

Hence, this commit only sets the flag for invocations that need it -
or would need it if sudo were disabled. That should help with development
and gives a somewhat more consistent user experience.
2024-01-14 01:14:33 +01:00
Robert Hensing 99d3e0c168 Revert "nixos-rebuild: fix entering sudo password over SSH"
This reverts commit 09fd207cb8.

It caused a regression when using `--build-host` and flakes.
See https://github.com/NixOS/nixpkgs/pull/277642#issuecomment-1890783714
2024-01-14 00:48:53 +01:00
Michael Hoang cd61094234 nixos-rebuild: fix systemd-run hanging over SSH 2024-01-07 03:40:01 +11:00
Michael Hoang 09fd207cb8 nixos-rebuild: fix entering sudo password over SSH
We always want to use `ssh -t` to force PTY allocation as there may be
interactive SSH prompts like trusting unknown hosts.
2024-01-07 03:40:01 +11:00
Michael Hoang 5aad97fcff nixos-rebuild: only use sudo when necessary 2024-01-07 03:40:01 +11:00
Michael Hoang b09de27cd6 nixos-rebuild: add --target-host test 2024-01-07 03:40:01 +11:00
Sandro Jäckel 50d0eb6c9f
nixos-rebuild: add lib to repl to make debugging even easier 2024-01-06 15:34:45 +01:00
Linus Heckemann bb2a5d8706
Merge pull request #270212 from SuperSandro2000/nixos-rebuild-accept-flake-config
nixos-rebuild: passthru accept-flake-config
2023-12-14 14:39:07 +01:00
Robert Hensing 0e062cb692 nixos-rebuild: Add nixos-rebuild repl
Apologies to the non-flake users; your repl isn't quite as fancy,
but at least evaluates your config exactly as you would expect,
unlike flakes which are only evaluated impurely for now.
2023-12-10 06:36:02 +01:00
Sandro Jäckel 89ef7b76f3
nixos-rebuild: passthru accept-flake-config 2023-12-04 22:33:25 +01:00
Michael Lohmann 67c354b081 nixos-rebuild: remove manpage hint on feature that is not merged
This is a hint that mentions the feature #105910 but that is not yet
merged. This is very confusing and since it there is no progress with
that merge we should remove the reference
2023-11-27 12:35:40 +01:00
Samuel Dionne-Riel c95728ce72
Merge pull request #262684 from samueldr/feature/nixos-rebuild-completions
nixos-rebuild: Locally own the nixos-rebuild (bash) completions
2023-11-05 22:41:03 -05:00
Thiago Kenji Okada ccebc89954 nixos/tests: add nixos-rebuild-install-bootloader 2023-10-23 12:39:40 +01:00
Thiago Kenji Okada b269e6853e nixos-rebuild: fix --install-bootloader flag with systemd-run 2023-10-22 12:19:59 +01:00
Samuel Dionne-Riel a5e30e71b6 nixos-rebuild: Locally own the nixos-rebuild completion 2023-10-22 03:18:50 -04:00
Samuel Dionne-Riel 61d5040ef1 nixos-rebuild: Drop incorrectly implemented short args for build/target host
*Nobody* uses them, or else it'd have been fixed already.
2023-10-22 02:42:48 -04:00
Thiago Kenji Okada ecd89093e1 nixos-rebuild: run activation inside systemd-run
Right now, running `nixos-rebuild switch` in a remote system via SSH may
put the system in an unusable state by restarting services (e.g.:
network ones like systemd-networkd.service) during the update. This will
cause the SSH to lose access to the TTY, stopping the process entirely.

This commit wraps up the call to `switch-to-configuration` inside a
systemd-run call, making the switch resiliant against TTY loss, since it
will allocate its own TTY. For the user this should be entirely
transparent though, with the only visible change is that the
`switch-to-configuration` messages will be logged through journalctl
(e.g.: `journalctl -u nixos-rebuild-switch-to-configuration`).
2023-10-04 20:45:23 +01:00
Michael Lohmann cc625486c4 nixos-rebuild: Add list-generations
Add new command `nixos-rebuild list-generations`. It will show an output
like

```
$ nixos-rebuild list-generations
Generation      Build-date               NixOS version           Kernel  Configuration Revision                    Specialisations
52   (current)  Fri 2023-08-18 08:17:27  23.11.20230817.0f46300  6.4.10  448160aeccf6a7184bd8a84290d527819f1c552c  *
51              Mon 2023-08-07 17:56:41  23.11.20230807.31b1eed  6.4.8   99ef480007ca51e3d440aa4fa6558178d63f9c42  *
```

This also mentions the change in the upcoming release notes
2023-09-10 15:13:04 +02:00
Doron Behar 68e6cc5831 nixos-rebuild: Include manual page in the package 2023-08-12 12:52:46 +03:00
Ilan Joselevich fdf0c98ff4
nixos-rebuild: make --use-substitutes work with flakes 2023-07-08 00:11:51 +03:00
apfelkuchen06 619b142a7f nixos-rebuild: allow passing --log-format
This is benefitial when using nix-output-monitor.
2023-05-13 15:33:05 +02:00
Nick Cao 3cd694d1bd
Merge pull request #210382 from B4dM4n/nixos-rebuild-local
nixos-rebuild: Allow local builds when --target-host is used again
2023-01-23 16:37:41 +08:00
Patryk Wychowaniec 2c55eba8f4
nixos: add --specialisation to nixos-rebuild
This commit fixes a papercut in nixos-rebuild where people wanting to
switch to a specialisation (or test one) were forced to manually figure
out the specialisation's path and run its activation script - since now,
there's a dedicated option to do just that.

This is a backwards-compatible change which doesn't affect the existing
behavior, which - to be fair - might still be considered sus by some
people, the painful scenario here being:

- you boot into specialisation `foo`,
- you run `nixos-rebuild switch`,
- whoops, you're no longer at specialisation `foo`, but you're rather
  brought back to the base system.

(it's especially painful for cases where specialisation is used to load
extra drivers, e.g. Nvidia, since then launching `nixos-rebuild switch`,
while forgetting that you're inside a specialisation, can cause some
parts of your system to get accidentally unloaded.)

I've tried to mitigate that by improving specialisations so that they
create a dedicated file somewhere in `/run/current-system` containing
the specialisation's name (which `nixos-rebuild` could then use as the
default value for `--specialisation`), but I haven't been able to come
up with anything working (plus it would be a breaking change then).

Closes https://github.com/NixOS/nixpkgs/issues/174065
2023-01-15 18:16:49 +01:00
Fabian Möller cc4de1aa3a
nixos-rebuild: Allow local builds when --target-host is used again
This is a followup of #148921, to allow local builds when
`--target-host` is used again. It also documents the change in
behavior, regarding the specialty of the `localhost` value.

By removing the special handling of an empty `buildHost` and non empty
`targetHost`, this change also slightly alters the behavior of
`nixos-rebuild`.

Originally by specifying `--target-host target --build-host ""`, the
now removed special case would transform those arguments to
`--target-host target --build-host target`.
Now the empty `--build-host` would result in a local build.
2023-01-13 10:16:46 +01:00
Victor Engmark cbd1dc1e72 nixos-rebuild: Treat any build/target host as non-local
Closes #148918.
2023-01-01 00:28:02 -05:00
K900 28dae620b2 nixos-rebuild: always set flakeFlags
Otherwise a rebuild can fail when a flake is autodetected
in /etc/nixos/flake.nix and the system doesn't have flakes
globally enabled.
2022-07-29 10:05:18 +03:00
Marco Rebhan 0a71372a90
nixos-rebuild: Don't create out-link in PWD with test/dry-activate 2022-07-18 16:03:04 +02:00
Klemens Nanni 7a0549387b nixos-rebuild: Accept only one argument
Multiple arguments make no sense but they are accepted, the last one
winning.

Found editing a previous run from shell history and adding a command
rather than replacing it;  observe in verbose mode:

```
$ nixos-rebuild dry-run -v
building the system configuration...
Building in legacy (non-flake) mode.
No --build-host given, running nix-build locally
$ nix-build <nixpkgs/nixos> -A system -k -I nixpkgs=/home/kn/src/nixpkgs -v --dry-run
...
```

```
$ nixos-rebuild dry-run build -v
building Nix...
$ nix-instantiate <nixpkgs/nixos> --add-root /tmp/nixos-rebuild.jgEYqZ/nix.drv --indirect -A config.nix.package.out -I nixpkgs=/home/kn/src/nixpkgs -v
...
```

nixos-rebuild(8) already bails out on zero arguments, so do the same
when passing a second one.
2022-06-23 21:39:13 +04:00
Silvan Mosberger 204366af6d
Merge pull request #153981 from Enzime/nixos-rebuild-flake-reexec
nixos-rebuild: Reexec when using flakes
2022-03-25 18:16:22 +01:00
Profpatsch a701c09286 nixos-rebuild: use log instead of echo, always print to stderr
Introduces a `log()` function, similar to `logVerbose()`, to replace
usage of `echo` for logging.
2022-03-23 11:49:59 +01:00
Sandro 46ddd465b9
Merge pull request #165302 from Profpatsch/nixos-rebuild-meta 2022-03-23 03:36:18 +01:00
Michal Sojka 611e9302f9 nixos-rebuild: add --no-flake switch
When a NixOS system uses flakes, i.e., /etc/nixos/flake.nix exists, it
is impossible to use nixos-rebuild to build a pre-flake
configuration.nix. Of course, one can directly use nix command to
build the configuration, but not everybody remembers the correct nix
options to do that.

With the new option, it is possible to build a pre-flake configuration
with command like this:

    nixos-rebuild build-vm -I nixos-config=./vm.nix --no-flake

The option might be useful for people following older pre-flake
tutorials on a flake-based system.
2022-03-22 19:03:10 +01:00
Profpatsch c7172046c7 nixos-rebuild: add meta & add Profpatsch as maintainer 2022-03-22 18:35:33 +01:00
Maëlys Bras de fer 488869f602 nixos-rebuild: support --quiet, --print-build-logs
--quiet decreases the logging verbosity level (inverse of -v)
--print-build-logs prints build logs on stderr (same as -L)
Also reordered and grouped some options for consistency
2022-03-22 18:24:27 +01:00
Michael Hoang c1bc8de9e3 nixos-rebuild: Reexec when using flakes 2022-03-22 07:28:15 +11:00
Profpatsch 5679b2b698 nixos-rebuild: add installer test to passthru.tests
When something changes in nixos-rebuild, we must make sure the
installers still work, otherwise it might break existing setups.

The installer tests check whether nixos-rebuild works, so they are a
good lithmus test.
2022-03-19 15:13:50 +01:00
Profpatsch cb7bc7c60f nixos-rebuild: Print commands as they are run on verbose flag
nixos-rebuild would forward all verbose flags to nix, but not actually
increase its own verbosity.
Which would make it hard to see what’s going on without resorting to
tools like strace or adding `set -x` to the script.

We add a simple exec wrapper around the most “interesting” commands,
that is nix tool invocations. If any verbosity flag is given, it will
set the verbosity flag of the nixos-rebuild script all commands
wrapped into `runCmd` will start logging their invocation.

This is done via a `logVerbose` function, which can also be used to
print logging messages when in verbose mode, to aid debugging why
nixos-rebuild does what it does. A few messages are added, but
potentially we could log a lot more details.

Now, testing all of the changed code paths turns out to be rather
hard, so I am unsure how to verify that for all changed commands
behaviour stays indeed the same.
2022-03-19 15:13:50 +01:00
Charlotte Van Petegem a2c0cb0db7 nixos-rebuild: Don't pass --impure to realization when building flake remotely and impurely
It doesn't work and it's not required for building.
2022-02-11 14:20:42 +01:00
K900 dd37d07ccf nixos-rebuild: also forward the long version of -L
Mostly for more readability in shell scripts.
2022-02-08 11:56:35 -08:00
Thiago Kenji Okada c75bc3abc7 nixos-rebuild: remove jq
Was only used in the code removed in commit
c274d045ac.
2022-01-04 20:02:47 -03:00
Thiago Kenji Okada c274d045ac nixos-rebuild: do not resolve flake path
The removed lines converted the flake path passed by the command line
from `/some/path` to `git+file:///some/path`.

This technically shouldn't cause any issues, however running
`nixos-rebuild switch` inside a directory `/nix/store` will cause the
switch to fail and leave a partially construct generation (see issue #144811
for details).

By itself this shouldn't be too much of an issue, however thanks to
another issue in `systemd-boot-builder.py` this can leave the system
in a broken state for those using `boot.loader.systemd-boot` (AFAIK the
default), where future `nixos-rebuild switch` will fail
(see issue #93694 for details).

The issue can be fixed by running
`nix-env -p /nix/var/nix/profiles/system --delete-generations old`,
however this makes newbies very confused and it is showing in our
support threads in Matrix and Discourse (see
https://discourse.nixos.org/t/need-help-on-failure-of-building-my-configuration/16842).

Keep in mind this is a workaround. The actual issue seems to be in nix
itself (see: https://github.com/NixOS/nix/issues/5510).

See also #150065 for an alternative fix that caused other issues.

Kudos for @figsoda for figuring out this fix.
2022-01-04 18:31:08 -03:00
Thiago Kenji Okada e6ca3fc976 Revert "nixos-rebuild: switch to tmpDir during rebuilds"
This seems to break
`boot.kernelPackages = config.boot.zfs.package.latestCompatibleLinuxPackages`
causing it to use `linuxPackages`.
2021-12-16 14:47:07 -03:00
Thiago Kenji Okada f88bd76fcd nixos-rebuild: switch to tmpDir during rebuilds
This is a workaround for issue #144811 until this issue is either fixed
on nix itself.
2021-12-10 10:50:46 -03:00
Victor Engmark 82b9b42682
Fix some nixos-rebuild lints (#147449) 2021-11-29 05:48:23 +02:00
Anund bc5a610cb7 nixos-rebuild: fix --install-bootloader
nixos-rebuild relies on setting an environment variable to change
behaviour during nixos-rebuild boot/switch between calling update or
install via systemd bootctl. Adding sudo -- as a prefix to various exec
calls does not preserve the environment breaking this mechanism.

This is a some what ugly fix that works.

Closes https://github.com/NixOS/nixpkgs/pull/144429
2021-11-17 09:28:05 +02:00