diff options
| author | Emīls Piņķis <emils@mullvad.net> | 2022-10-28 15:00:33 +0200 |
|---|---|---|
| committer | Emīls Piņķis <emils@mullvad.net> | 2022-10-28 15:00:33 +0200 |
| commit | 20d563284f5edc5634e10ec648de1c79b5bd9ddd (patch) | |
| tree | 4af057049b66e1f1b1a783640ee4ef0560043e10 | |
| parent | 72c198d1c25443fe168f2ac460d0835193dad3dd (diff) | |
| parent | 085ada662cdcd37213ad52693cb55a37e5aed7bf (diff) | |
| download | mullvadvpn-20d563284f5edc5634e10ec648de1c79b5bd9ddd.tar.xz mullvadvpn-20d563284f5edc5634e10ec648de1c79b5bd9ddd.zip | |
Merge branch 'linux-fix-early-boot-logging'
| -rw-r--r-- | CHANGELOG.md | 3 | ||||
| -rw-r--r-- | mullvad-daemon/src/main.rs | 56 |
2 files changed, 36 insertions, 23 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e28424d9a..3a4c0c82cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,9 @@ Line wrap the file at 100 chars. Th #### macOS - Fix fish shell completions when installed via Homebrew on Apple Silicon Macs. +#### Linux +- Remove last filesystem dependency of early boot blocking unit. + ### Changed - Update Electron from 19.0.13 to 21.1.1. diff --git a/mullvad-daemon/src/main.rs b/mullvad-daemon/src/main.rs index d47d6563da..c37e5f0bf4 100644 --- a/mullvad-daemon/src/main.rs +++ b/mullvad-daemon/src/main.rs @@ -23,7 +23,7 @@ const EARLY_BOOT_LOG_FILENAME: &str = "early-boot-fw.log"; fn main() { let config = cli::get_config(); - let log_dir = init_logging(config).unwrap_or_else(|error| { + let log_dir = init_daemon_logging(config).unwrap_or_else(|error| { eprintln!("{}", error); std::process::exit(1) }); @@ -46,33 +46,17 @@ fn main() { std::process::exit(exit_code); } -fn init_logging(config: &cli::Config) -> Result<Option<PathBuf>, String> { - let log_dir = get_log_dir(config)?; - let log_path = |filename| log_dir.as_ref().map(|dir| dir.join(filename)); - - let initialize_logging = |log_file: Option<PathBuf>| -> Result<_, String> { - logging::init_logger( - config.log_level, - log_file.as_ref(), - config.log_stdout_timestamps, - ) - .map_err(|e| e.display_chain_with_msg("Unable to initialize logger"))?; - log_panics::init(); - exception_logging::enable(); - version::log_version(); - Ok(()) - }; - +fn init_daemon_logging(config: &cli::Config) -> Result<Option<PathBuf>, String> { #[cfg(target_os = "linux")] if config.initialize_firewall_and_exit { - if initialize_logging(log_path(EARLY_BOOT_LOG_FILENAME)).is_err() { - let _ = initialize_logging(None); - } - + init_early_boot_logging(config); return Ok(None); } - initialize_logging(log_path(DAEMON_LOG_FILENAME))?; + let log_dir = get_log_dir(config)?; + let log_path = |filename| log_dir.as_ref().map(|dir| dir.join(filename)); + + init_logger(config, log_path(DAEMON_LOG_FILENAME))?; if let Some(ref log_dir) = log_dir { log::info!("Logging to {}", log_dir.display()); @@ -80,6 +64,32 @@ fn init_logging(config: &cli::Config) -> Result<Option<PathBuf>, String> { Ok(log_dir) } +#[cfg(target_os = "linux")] +fn init_early_boot_logging(config: &cli::Config) { + // If it's possible to log to the filesystem - attempt to do so, but failing that mustn't stop + // the daemon from starting here. + if let Ok(Some(log_dir)) = get_log_dir(config) { + if init_logger(config, Some(log_dir.join(EARLY_BOOT_LOG_FILENAME))).is_ok() { + return; + } + } + + let _ = init_logger(config, None); +} + +fn init_logger(config: &cli::Config, log_file: Option<PathBuf>) -> Result<(), String> { + logging::init_logger( + config.log_level, + log_file.as_ref(), + config.log_stdout_timestamps, + ) + .map_err(|e| e.display_chain_with_msg("Unable to initialize logger"))?; + log_panics::init(); + exception_logging::enable(); + version::log_version(); + Ok(()) +} + fn get_log_dir(config: &cli::Config) -> Result<Option<PathBuf>, String> { if config.log_to_file { Ok(Some(mullvad_paths::log_dir().map_err(|e| { |
