feat(tools): docker autoinstall checks with docker info now and calls rootless setup helper after install
Some checks failed
Run Check Script / check (pull_request) Failing after 13m35s
Some checks failed
Run Check Script / check (pull_request) Failing after 13m35s
This commit is contained in:
@@ -87,28 +87,27 @@ impl Docker {
|
||||
PathBuf::from("docker")
|
||||
}
|
||||
|
||||
/// Checks if docker is installed and available in the PATH
|
||||
/// Checks if Docker is installed and the daemon is responsive.
|
||||
pub fn is_installed(&self) -> bool {
|
||||
let bin_path = self.get_bin_path();
|
||||
trace!("Checking if Docker is installed at: {:?}", bin_path);
|
||||
trace!("Checking if Docker is installed and responsive");
|
||||
|
||||
std::process::Command::new(&bin_path)
|
||||
.arg("--version")
|
||||
self.command()
|
||||
.arg("info")
|
||||
.output()
|
||||
.map(|output| {
|
||||
if output.status.success() {
|
||||
trace!("Docker version check successful");
|
||||
trace!("Docker daemon is responsive");
|
||||
true
|
||||
} else {
|
||||
trace!(
|
||||
"Docker version check failed with status: {:?}",
|
||||
"Docker daemon check failed with status: {:?}",
|
||||
output.status
|
||||
);
|
||||
false
|
||||
}
|
||||
})
|
||||
.map_err(|e| {
|
||||
trace!("Failed to execute Docker version check: {}", e);
|
||||
trace!("Failed to execute Docker daemon check: {}", e);
|
||||
e
|
||||
})
|
||||
.unwrap_or(false)
|
||||
@@ -183,6 +182,32 @@ impl Docker {
|
||||
if status.success() {
|
||||
info!("{} installed successfully", variant);
|
||||
if variant == DockerVariant::Rootless {
|
||||
info!("Running rootless setup tool to install dependencies and start service...");
|
||||
let mut setup_cmd = std::process::Command::new("sh");
|
||||
|
||||
// Set PATH to include ~/bin where the script was likely installed
|
||||
if let Ok(home) = std::env::var("HOME") {
|
||||
let bin_path = format!("{}/bin", home);
|
||||
if let Ok(current_path) = std::env::var("PATH") {
|
||||
setup_cmd.env("PATH", format!("{}:{}", bin_path, current_path));
|
||||
}
|
||||
setup_cmd.arg(format!("{}/bin/dockerd-rootless-setuptool.sh", home));
|
||||
} else {
|
||||
setup_cmd.arg("dockerd-rootless-setuptool.sh");
|
||||
}
|
||||
|
||||
setup_cmd.arg("install");
|
||||
|
||||
debug!("Executing rootless setup command: {:?}", setup_cmd);
|
||||
let setup_status = setup_cmd.status().map_err(|e| {
|
||||
error!("Failed to execute rootless setup tool: {}", e);
|
||||
format!("Failed to execute rootless setup tool: {}", e)
|
||||
})?;
|
||||
|
||||
if !setup_status.success() {
|
||||
warn!("Rootless setup tool finished with non-zero exit code. You may need to install 'uidmap' or start the service manually.");
|
||||
}
|
||||
|
||||
warn!("Please follow the instructions above to finish rootless setup (environment variables).");
|
||||
}
|
||||
|
||||
@@ -192,9 +217,10 @@ impl Docker {
|
||||
Ok(())
|
||||
} else {
|
||||
error!(
|
||||
"{} installation script failed with exit code: {:?}",
|
||||
"{} installation script failed with exit code: {:?} \n\nOutput:\n{:?}",
|
||||
variant,
|
||||
status.code()
|
||||
status.code(),
|
||||
cmd.output(),
|
||||
);
|
||||
Err(format!("{} installation script failed", variant))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user