feat(nix): support upgrading Determinate Nix (#1366)
Co-authored-by: Gideon <87426140+GideonBear@users.noreply.github.com>
This commit is contained in:
@@ -26,7 +26,7 @@ use crate::{output_changed_message, HOME_DIR};
|
|||||||
|
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(target_os = "linux")]
|
||||||
use super::linux::Distribution;
|
use super::linux::Distribution;
|
||||||
use crate::error::SkipStep;
|
use crate::error::{SkipStep, StepFailed};
|
||||||
use crate::execution_context::ExecutionContext;
|
use crate::execution_context::ExecutionContext;
|
||||||
#[cfg(any(target_os = "linux", target_os = "macos"))]
|
#[cfg(any(target_os = "linux", target_os = "macos"))]
|
||||||
use crate::executor::Executor;
|
use crate::executor::Executor;
|
||||||
@@ -550,6 +550,38 @@ pub fn run_nix_self_upgrade(ctx: &ExecutionContext) -> Result<()> {
|
|||||||
|
|
||||||
print_separator(t!("Nix (self-upgrade)"));
|
print_separator(t!("Nix (self-upgrade)"));
|
||||||
|
|
||||||
|
let version_output = ctx.execute(&nix).arg("--version").output_checked_utf8()?;
|
||||||
|
let version = version_output
|
||||||
|
.stdout
|
||||||
|
.lines()
|
||||||
|
.next()
|
||||||
|
.ok_or_else(|| eyre!("`nix --version` output is empty"))?;
|
||||||
|
|
||||||
|
let is_determinate_nix = version.contains("Determinate Nix");
|
||||||
|
|
||||||
|
debug!(
|
||||||
|
output=%version_output,
|
||||||
|
?is_determinate_nix,
|
||||||
|
"`nix --version` output"
|
||||||
|
);
|
||||||
|
|
||||||
|
if is_determinate_nix {
|
||||||
|
let nixd = require("determinate-nixd");
|
||||||
|
let nixd = match nixd {
|
||||||
|
Err(_) => {
|
||||||
|
println!("Found Determinate Nix, but could not find determinate-nixd");
|
||||||
|
return Err(StepFailed.into());
|
||||||
|
}
|
||||||
|
Ok(nixd) => nixd,
|
||||||
|
};
|
||||||
|
|
||||||
|
let sudo = ctx.require_sudo()?;
|
||||||
|
return sudo
|
||||||
|
.execute_opts(ctx, nixd, SudoExecuteOpts::new().login_shell())?
|
||||||
|
.arg("upgrade")
|
||||||
|
.status_checked();
|
||||||
|
}
|
||||||
|
|
||||||
let multi_user = fs::metadata(&nix)?.uid() == 0;
|
let multi_user = fs::metadata(&nix)?.uid() == 0;
|
||||||
debug!("Multi user nix: {}", multi_user);
|
debug!("Multi user nix: {}", multi_user);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user