Merge pull request #258571 from thiagokokada/nixos-rebuild-system-run
nixos-rebuild: run activation inside systemd-run
This commit is contained in:
commit
57a3c03486
3 changed files with 45 additions and 5 deletions
|
@ -217,6 +217,8 @@
|
|||
|
||||
- `fileSystems.<name>.autoResize` now uses `systemd-growfs` to resize the file system online in stage 2. This means that `f2fs` and `ext2` can no longer be auto resized, while `xfs` and `btrfs` now can be.
|
||||
|
||||
- `nixos-rebuild {switch,boot,test,dry-activate}` now runs the system activation inside `systemd-run`, creating an ephemeral systemd service and protecting the system switch against issues like network disconnections during remote (e.g. SSH) sessions. This has the side effect of running the switch in an isolated environment, that could possible break post-switch scripts that depends on things like environment variables being set. If you want to opt-out from this behavior for now, you may set the `NIXOS_SWITCH_USE_DIRTY_ENV` environment variable before running `nixos-rebuild`. However, keep in mind that this option will be removed in the future.
|
||||
|
||||
- The `services.vaultwarden.config` option default value was changed to make Vaultwarden only listen on localhost, following the [secure defaults for most NixOS services](https://github.com/NixOS/nixpkgs/issues/100192).
|
||||
|
||||
- `services.lemmy.settings.federation` was removed in 0.17.0 and no longer has any effect. To enable federation, the hostname must be set in the configuration file and then federation must be enabled in the admin web UI. See the [release notes](https://github.com/LemmyNet/lemmy/blob/c32585b03429f0f76d1e4ff738786321a0a9df98/RELEASES.md#upgrade-instructions) for more details.
|
||||
|
|
|
@ -421,6 +421,14 @@ nixpkgs=./my-nixpkgs
|
|||
Additional options to be passed to
|
||||
.Ic ssh
|
||||
on the command line.
|
||||
.Ed
|
||||
.
|
||||
.It Ev NIXOS_SWITCH_USE_DIRTY_ENV
|
||||
Expose the the current environment variables to post activation scripts. Will
|
||||
skip usage of
|
||||
.Ic systemd-run
|
||||
during system activation. Possibly dangerous, specially in remote environments
|
||||
(e.g.: via SSH). Will be removed in the future.
|
||||
.El
|
||||
.
|
||||
.
|
||||
|
|
|
@ -653,18 +653,48 @@ fi
|
|||
# If we're not just building, then make the new configuration the boot
|
||||
# default and/or activate it now.
|
||||
if [[ "$action" = switch || "$action" = boot || "$action" = test || "$action" = dry-activate ]]; then
|
||||
if [[ -z "$specialisation" ]]; then
|
||||
cmd="$pathToConfig/bin/switch-to-configuration"
|
||||
# Using systemd-run here to protect against PTY failures/network
|
||||
# disconnections during rebuild.
|
||||
# See: https://github.com/NixOS/nixpkgs/issues/39118
|
||||
cmd=(
|
||||
"systemd-run"
|
||||
"-E" "LOCALE_ARCHIVE" # Will be set to new value early in switch-to-configuration script, but interpreter starts out with old value
|
||||
"--collect"
|
||||
"--no-ask-password"
|
||||
"--pty"
|
||||
"--quiet"
|
||||
"--same-dir"
|
||||
"--service-type=exec"
|
||||
"--unit=nixos-rebuild-switch-to-configuration"
|
||||
"--wait"
|
||||
)
|
||||
# Check if we have a working systemd-run. In chroot environments we may have
|
||||
# a non-working systemd, so we fallback to not using systemd-run.
|
||||
# You may also want to explicitly set NIXOS_SWITCH_USE_DIRTY_ENV environment
|
||||
# variable, since systemd-run runs inside an isolated environment and
|
||||
# this may break some post-switch scripts. However keep in mind that this
|
||||
# may be dangerous in remote access (e.g. SSH).
|
||||
if [[ -n "$NIXOS_SWITCH_USE_DIRTY_ENV" ]]; then
|
||||
log "warning: skipping systemd-run since NIXOS_SWITCH_USE_DIRTY_ENV is set. This environment variable will be ignored in the future"
|
||||
cmd=()
|
||||
elif ! targetHostCmd "${cmd[@]}" true &>/dev/null; then
|
||||
logVerbose "Skipping systemd-run to switch configuration since it is not working in target host."
|
||||
cmd=("env" "-i" "LOCALE_ARCHIVE=$LOCALE_ARCHIVE")
|
||||
else
|
||||
cmd="$pathToConfig/specialisation/$specialisation/bin/switch-to-configuration"
|
||||
logVerbose "Using systemd-run to switch configuration."
|
||||
fi
|
||||
if [[ -z "$specialisation" ]]; then
|
||||
cmd+=("$pathToConfig/bin/switch-to-configuration")
|
||||
else
|
||||
cmd+=("$pathToConfig/specialisation/$specialisation/bin/switch-to-configuration")
|
||||
|
||||
if [[ ! -f "$cmd" ]]; then
|
||||
if [[ ! -f "${cmd[-1]}" ]]; then
|
||||
log "error: specialisation not found: $specialisation"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if ! targetHostCmd "$cmd" "$action"; then
|
||||
if ! targetHostCmd "${cmd[@]}" "$action"; then
|
||||
log "warning: error(s) occurred while switching to the new configuration"
|
||||
exit 1
|
||||
fi
|
||||
|
|
Loading…
Reference in a new issue