Merge pull request 'Merge dev in testing: Anpassung Fallback auf dokcer-compose und Fehlerbehanldung bei sudo-Ausführung verbessert' (#8) from dev into testing
Testing Build, Publish & Preview Release / Build, Publish Packages (Testing) & Create Preview Release (push) Successful in 56s
Testing Build, Publish & Preview Release / Build, Publish Packages (Testing) & Create Preview Release (push) Successful in 56s
Reviewed-on: #8
This commit was merged in pull request #8.
This commit is contained in:
+10
-2
@@ -1,6 +1,7 @@
|
||||
use crate::log::{LogLevel, log};
|
||||
use std::env;
|
||||
use std::os::unix::process::CommandExt;
|
||||
use std::process::Command;
|
||||
use std::process::{Command, exit};
|
||||
|
||||
/// Prüft, ob das Programm mit Root-/Administrator-Rechten ausgeführt wird.
|
||||
///
|
||||
@@ -11,10 +12,17 @@ use std::process::Command;
|
||||
pub fn is_run_as_root() -> bool {
|
||||
unsafe { libc::geteuid() == 0 }
|
||||
}
|
||||
|
||||
/// Startet das Programm mit Root-Rechten über `sudo` neu.
|
||||
///
|
||||
/// Diese Funktion versucht das Programm mit erhöhten Rechten neu zu starten.
|
||||
pub fn run_as_root() {
|
||||
let commandline_args: Vec<String> = env::args().collect();
|
||||
let _output = Command::new("sudo").args(&commandline_args).exec(); // Bye bye never returns
|
||||
let err = Command::new("sudo").args(&commandline_args).exec();
|
||||
log(
|
||||
"auth",
|
||||
&format!("Fehler beim Ausführen von 'sudo': {}", err),
|
||||
LogLevel::Error,
|
||||
);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
+22
-4
@@ -93,7 +93,7 @@ fn run_docker_command(args: &[&str]) -> std::io::Result<Output> {
|
||||
}
|
||||
|
||||
/// Führt einen Docker-Compose-Befehl im angegebenen Verzeichnis aus.
|
||||
/// Versucht zuerst `docker compose` und fällt bei Bedarf auf `docker-compose` zurück.
|
||||
/// Versucht zuerst `docker compose` und fällt bei Nichtverfügbarkeit auf `docker-compose` zurück.
|
||||
pub fn run_compose_command(dir: &Path, args: &[&str]) -> std::io::Result<Output> {
|
||||
let mut compose_args = vec!["compose"];
|
||||
compose_args.extend_from_slice(args);
|
||||
@@ -104,14 +104,32 @@ pub fn run_compose_command(dir: &Path, args: &[&str]) -> std::io::Result<Output>
|
||||
.output();
|
||||
|
||||
match output {
|
||||
Ok(out) if out.status.success() => Ok(out),
|
||||
_ => {
|
||||
// Fallback auf docker-compose (v1)
|
||||
Ok(out) => {
|
||||
let stderr = String::from_utf8_lossy(&out.stderr);
|
||||
let is_unavailable = !out.status.success()
|
||||
&& (stderr.contains("is not a docker command")
|
||||
|| stderr.contains("unknown command \"compose\"")
|
||||
|| stderr.contains("unknown command: compose"));
|
||||
|
||||
if is_unavailable {
|
||||
if let Ok(fallback_out) = Command::new("docker-compose")
|
||||
.current_dir(dir)
|
||||
.args(args)
|
||||
.output()
|
||||
{
|
||||
return Ok(fallback_out);
|
||||
}
|
||||
}
|
||||
Ok(out)
|
||||
}
|
||||
Err(err) if err.kind() == std::io::ErrorKind::NotFound => {
|
||||
// docker-Binary nicht gefunden, versuche docker-compose
|
||||
Command::new("docker-compose")
|
||||
.current_dir(dir)
|
||||
.args(args)
|
||||
.output()
|
||||
}
|
||||
Err(err) => Err(err),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user