diff --git a/src/steps/os/linux.rs b/src/steps/os/linux.rs index f1acebad..f8202282 100644 --- a/src/steps/os/linux.rs +++ b/src/steps/os/linux.rs @@ -1,6 +1,6 @@ use crate::error::{SkipStep, TopgradeError}; use crate::execution_context::ExecutionContext; -use crate::executor::{ExecutorExitStatus, RunType}; +use crate::executor::{CommandExt, ExecutorExitStatus, RunType}; use crate::terminal::{print_separator, print_warning}; use crate::utils::{require, require_option, which, PathExt}; use anyhow::Result; @@ -10,6 +10,7 @@ use serde::Deserialize; use std::env::var_os; use std::ffi::OsString; use std::path::{Path, PathBuf}; +use std::process::Command; use walkdir::WalkDir; static OS_RELEASE_PATH: &str = "/etc/os-release"; @@ -107,6 +108,12 @@ impl Distribution { } } +fn is_wsl() -> Result { + let output = Command::new("uname").arg("-r").check_output()?; + debug!("Uname output: {}", output); + Ok(output.contains("microsoft")) +} + pub fn show_pacnew() { let mut iter = WalkDir::new("/etc") .into_iter() @@ -429,6 +436,10 @@ pub fn run_needrestart(sudo: Option<&PathBuf>, run_type: RunType) -> Result<()> pub fn run_fwupdmgr(run_type: RunType) -> Result<()> { let fwupdmgr = require("fwupdmgr")?; + if is_wsl()? { + return Err(SkipStep.into()); + } + print_separator("Firmware upgrades"); for argument in vec!["refresh", "get-updates"].into_iter() {