Repair /nix removal test (#320)
* Repair /nix removal test * Iron out the logic better * Repair nix flake check * Remove extra sandbox=false flag * Add ubuntu 16.04 test
This commit is contained in:
parent
32dca2e846
commit
e0080d1262
|
@ -11,14 +11,42 @@ let
|
||||||
check = ''
|
check = ''
|
||||||
set -ex
|
set -ex
|
||||||
|
|
||||||
|
dir /nix
|
||||||
|
dir /nix/store
|
||||||
|
|
||||||
|
ls -lah /nix/var/nix/profiles/per-user
|
||||||
|
ls -lah /nix/var/nix/daemon-socket
|
||||||
|
|
||||||
if systemctl is-active nix-daemon.socket; then
|
if systemctl is-active nix-daemon.socket; then
|
||||||
echo "nix-daemon.socket was active"
|
echo "nix-daemon.socket was active"
|
||||||
else
|
else
|
||||||
echo "nix-daemon.socket was not active, should be"
|
echo "nix-daemon.socket was not active, should be"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
if systemctl is-failed nix-daemon.socket; then
|
||||||
|
echo "nix-daemon.socket is failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if systemctl is-failed nix-daemon.service; then
|
||||||
|
echo "nix-daemon.service is failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if !(sudo systemctl start nix-daemon.service); then
|
||||||
|
echo "nix-daemon.service failed to start"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if !(sudo systemctl stop nix-daemon.service); then
|
||||||
|
echo "nix-daemon.service failed to stop"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
sudo -i nix store ping --store daemon
|
||||||
|
nix store ping --store daemon
|
||||||
|
|
||||||
|
sudo -i nix-env --version
|
||||||
nix-env --version
|
nix-env --version
|
||||||
|
sudo -i nix --extra-experimental-features nix-command store ping
|
||||||
nix --extra-experimental-features nix-command store ping
|
nix --extra-experimental-features nix-command store ping
|
||||||
|
|
||||||
out=$(nix-build --no-substitute -E 'derivation { name = "foo"; system = "x86_64-linux"; builder = "/bin/sh"; args = ["-c" "echo foobar > $out"]; }')
|
out=$(nix-build --no-substitute -E 'derivation { name = "foo"; system = "x86_64-linux"; builder = "/bin/sh"; args = ["-c" "echo foobar > $out"]; }')
|
||||||
|
@ -75,16 +103,16 @@ let
|
||||||
install = install-default.install;
|
install = install-default.install;
|
||||||
check = install-default.check;
|
check = install-default.check;
|
||||||
};
|
};
|
||||||
# install-preexisting-self-broken-no-nix-path = {
|
install-preexisting-self-broken-no-nix-path = {
|
||||||
# preinstall = ''
|
preinstall = ''
|
||||||
# NIX_PATH=$(readlink -f nix.tar.xz)
|
NIX_PATH=$(readlink -f nix.tar.xz)
|
||||||
# RUST_BACKTRACE="full" ./nix-installer install --nix-package-url "file://$NIX_PATH" --no-confirm
|
RUST_BACKTRACE="full" ./nix-installer install --nix-package-url "file://$NIX_PATH" --no-confirm
|
||||||
# sudo mv /nix/receipt.json /nix/old-receipt.json
|
sudo mv /nix/receipt.json /nix/old-receipt.json
|
||||||
# sudo rm -rf /nix/
|
sudo rm -rf /nix/
|
||||||
# '';
|
'';
|
||||||
# install = install-default.install;
|
install = install-default.install;
|
||||||
# check = install-default.check;
|
check = install-default.check;
|
||||||
# };
|
};
|
||||||
install-preexisting-self-broken-missing-users = {
|
install-preexisting-self-broken-missing-users = {
|
||||||
preinstall = ''
|
preinstall = ''
|
||||||
NIX_PATH=$(readlink -f nix.tar.xz)
|
NIX_PATH=$(readlink -f nix.tar.xz)
|
||||||
|
@ -367,10 +395,10 @@ vm-tests // rec {
|
||||||
name = "all";
|
name = "all";
|
||||||
constituents = pkgs.lib.mapAttrsToList (name: value: value."x86_64-linux".install-preexisting-self-working) vm-tests;
|
constituents = pkgs.lib.mapAttrsToList (name: value: value."x86_64-linux".install-preexisting-self-working) vm-tests;
|
||||||
});
|
});
|
||||||
# all."x86_64-linux".install-preexisting-self-broken-no-nix-path = (with (forSystem "x86_64-linux" ({ system, pkgs, ... }: pkgs)); pkgs.releaseTools.aggregate {
|
all."x86_64-linux".install-preexisting-self-broken-no-nix-path = (with (forSystem "x86_64-linux" ({ system, pkgs, ... }: pkgs)); pkgs.releaseTools.aggregate {
|
||||||
# name = "all";
|
name = "all";
|
||||||
# constituents = pkgs.lib.mapAttrsToList (name: value: value."x86_64-linux".install-preexisting-self-broken-no-nix-path) vm-tests;
|
constituents = pkgs.lib.mapAttrsToList (name: value: value."x86_64-linux".install-preexisting-self-broken-no-nix-path) vm-tests;
|
||||||
# });
|
});
|
||||||
all."x86_64-linux".install-preexisting-self-broken-missing-users = (with (forSystem "x86_64-linux" ({ system, pkgs, ... }: pkgs)); pkgs.releaseTools.aggregate {
|
all."x86_64-linux".install-preexisting-self-broken-missing-users = (with (forSystem "x86_64-linux" ({ system, pkgs, ... }: pkgs)); pkgs.releaseTools.aggregate {
|
||||||
name = "all";
|
name = "all";
|
||||||
constituents = pkgs.lib.mapAttrsToList (name: value: value."x86_64-linux".install-preexisting-self-broken-missing-users) vm-tests;
|
constituents = pkgs.lib.mapAttrsToList (name: value: value."x86_64-linux".install-preexisting-self-broken-missing-users) vm-tests;
|
||||||
|
@ -398,7 +426,7 @@ vm-tests // rec {
|
||||||
all."x86_64-linux".install-no-start-daemon
|
all."x86_64-linux".install-no-start-daemon
|
||||||
all."x86_64-linux".install-daemonless
|
all."x86_64-linux".install-daemonless
|
||||||
all."x86_64-linux".install-preexisting-self-working
|
all."x86_64-linux".install-preexisting-self-working
|
||||||
# all."x86_64-linux".install-preexisting-self-broken-no-nix-path
|
all."x86_64-linux".install-preexisting-self-broken-no-nix-path
|
||||||
all."x86_64-linux".install-preexisting-self-broken-missing-users
|
all."x86_64-linux".install-preexisting-self-broken-missing-users
|
||||||
all."x86_64-linux".install-preexisting-self-broken-missing-users-and-group
|
all."x86_64-linux".install-preexisting-self-broken-missing-users-and-group
|
||||||
all."x86_64-linux".install-preexisting-self-broken-daemon-disabled
|
all."x86_64-linux".install-preexisting-self-broken-daemon-disabled
|
||||||
|
|
|
@ -184,6 +184,28 @@ impl Action for ConfigureInitService {
|
||||||
},
|
},
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(target_os = "linux")]
|
||||||
InitSystem::Systemd => {
|
InitSystem::Systemd => {
|
||||||
|
execute_command(
|
||||||
|
Command::new("systemctl")
|
||||||
|
.process_group(0)
|
||||||
|
.arg("daemon-reload")
|
||||||
|
.stdin(std::process::Stdio::null()),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
// The goal state is the `socket` enabled and active, the service not enabled and stopped (it activates via socket activation)
|
||||||
|
let socket_was_active = if is_enabled("nix-daemon.socket").await? {
|
||||||
|
disable("nix-daemon.socket", true).await?;
|
||||||
|
true
|
||||||
|
} else if is_active("nix-daemon.socket").await? {
|
||||||
|
stop("nix-daemon.socket").await?;
|
||||||
|
false
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
};
|
||||||
|
if is_enabled("nix-daemon.service").await? {
|
||||||
|
let now = is_active("nix-daemon.socket").await?;
|
||||||
|
disable("nix-daemon.service", now).await?;
|
||||||
|
};
|
||||||
|
|
||||||
tracing::trace!(src = TMPFILES_SRC, dest = TMPFILES_DEST, "Symlinking");
|
tracing::trace!(src = TMPFILES_SRC, dest = TMPFILES_DEST, "Symlinking");
|
||||||
if !Path::new(TMPFILES_DEST).exists() {
|
if !Path::new(TMPFILES_DEST).exists() {
|
||||||
tokio::fs::symlink(TMPFILES_SRC, TMPFILES_DEST)
|
tokio::fs::symlink(TMPFILES_SRC, TMPFILES_DEST)
|
||||||
|
@ -210,48 +232,39 @@ impl Action for ConfigureInitService {
|
||||||
// cli, interactively ask for permission to remove the file
|
// cli, interactively ask for permission to remove the file
|
||||||
|
|
||||||
Self::check_if_systemd_unit_exists(SERVICE_SRC, SERVICE_DEST).await?;
|
Self::check_if_systemd_unit_exists(SERVICE_SRC, SERVICE_DEST).await?;
|
||||||
if !Path::new(SERVICE_DEST).exists() {
|
tokio::fs::symlink(SERVICE_SRC, SERVICE_DEST)
|
||||||
tokio::fs::symlink(SERVICE_SRC, SERVICE_DEST)
|
.await
|
||||||
.await
|
.map_err(|e| {
|
||||||
.map_err(|e| {
|
ActionError::Symlink(
|
||||||
ActionError::Symlink(
|
PathBuf::from(SERVICE_SRC),
|
||||||
PathBuf::from(SERVICE_SRC),
|
PathBuf::from(SERVICE_DEST),
|
||||||
PathBuf::from(SERVICE_DEST),
|
e,
|
||||||
e,
|
)
|
||||||
)
|
})?;
|
||||||
})?;
|
|
||||||
}
|
|
||||||
|
|
||||||
Self::check_if_systemd_unit_exists(SOCKET_SRC, SOCKET_DEST).await?;
|
Self::check_if_systemd_unit_exists(SOCKET_SRC, SOCKET_DEST).await?;
|
||||||
if !Path::new(SOCKET_DEST).exists() {
|
tokio::fs::symlink(SOCKET_SRC, SOCKET_DEST)
|
||||||
tokio::fs::symlink(SOCKET_SRC, SOCKET_DEST)
|
.await
|
||||||
.await
|
.map_err(|e| {
|
||||||
.map_err(|e| {
|
ActionError::Symlink(
|
||||||
ActionError::Symlink(
|
PathBuf::from(SOCKET_SRC),
|
||||||
PathBuf::from(SOCKET_SRC),
|
PathBuf::from(SOCKET_DEST),
|
||||||
PathBuf::from(SOCKET_DEST),
|
e,
|
||||||
e,
|
)
|
||||||
)
|
})?;
|
||||||
})?;
|
|
||||||
}
|
|
||||||
|
|
||||||
if *start_daemon {
|
execute_command(
|
||||||
execute_command(
|
Command::new("systemctl")
|
||||||
Command::new("systemctl")
|
.process_group(0)
|
||||||
.process_group(0)
|
.arg("daemon-reload")
|
||||||
.arg("daemon-reload")
|
.stdin(std::process::Stdio::null()),
|
||||||
.stdin(std::process::Stdio::null()),
|
)
|
||||||
)
|
.await?;
|
||||||
.await?;
|
|
||||||
|
|
||||||
execute_command(
|
if *start_daemon || socket_was_active {
|
||||||
Command::new("systemctl")
|
enable(SOCKET_SRC, true).await?;
|
||||||
.process_group(0)
|
} else {
|
||||||
.arg("enable")
|
enable(SOCKET_SRC, false).await?;
|
||||||
.arg("--now")
|
|
||||||
.arg(SOCKET_SRC),
|
|
||||||
)
|
|
||||||
.await?;
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
#[cfg(not(target_os = "macos"))]
|
#[cfg(not(target_os = "macos"))]
|
||||||
|
@ -389,6 +402,57 @@ pub enum ConfigureNixDaemonServiceError {
|
||||||
InitNotSupported,
|
InitNotSupported,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(target_os = "linux")]
|
||||||
|
async fn stop(unit: &str) -> Result<(), ActionError> {
|
||||||
|
let mut command = Command::new("systemctl");
|
||||||
|
command.arg("stop");
|
||||||
|
command.arg(unit);
|
||||||
|
let output = command
|
||||||
|
.output()
|
||||||
|
.await
|
||||||
|
.map_err(|e| ActionError::command(&command, e))?;
|
||||||
|
match output.status.success() {
|
||||||
|
true => Ok(()),
|
||||||
|
false => Err(ActionError::command_output(&command, output)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(target_os = "linux")]
|
||||||
|
async fn enable(unit: &str, now: bool) -> Result<(), ActionError> {
|
||||||
|
let mut command = Command::new("systemctl");
|
||||||
|
command.arg("enable");
|
||||||
|
command.arg(unit);
|
||||||
|
if now {
|
||||||
|
command.arg("--now");
|
||||||
|
}
|
||||||
|
let output = command
|
||||||
|
.output()
|
||||||
|
.await
|
||||||
|
.map_err(|e| ActionError::command(&command, e))?;
|
||||||
|
match output.status.success() {
|
||||||
|
true => Ok(()),
|
||||||
|
false => Err(ActionError::command_output(&command, output)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(target_os = "linux")]
|
||||||
|
async fn disable(unit: &str, now: bool) -> Result<(), ActionError> {
|
||||||
|
let mut command = Command::new("systemctl");
|
||||||
|
command.arg("disable");
|
||||||
|
command.arg(unit);
|
||||||
|
if now {
|
||||||
|
command.arg("--now");
|
||||||
|
}
|
||||||
|
let output = command
|
||||||
|
.output()
|
||||||
|
.await
|
||||||
|
.map_err(|e| ActionError::command(&command, e))?;
|
||||||
|
match output.status.success() {
|
||||||
|
true => Ok(()),
|
||||||
|
false => Err(ActionError::command_output(&command, output)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(target_os = "linux")]
|
||||||
async fn is_active(unit: &str) -> Result<bool, ActionError> {
|
async fn is_active(unit: &str) -> Result<bool, ActionError> {
|
||||||
let mut command = Command::new("systemctl");
|
let mut command = Command::new("systemctl");
|
||||||
|
|
Loading…
Reference in a new issue