summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorEmīls Piņķis <emils@mullvad.net>2022-10-28 15:00:33 +0200
committerEmīls Piņķis <emils@mullvad.net>2022-10-28 15:00:33 +0200
commit20d563284f5edc5634e10ec648de1c79b5bd9ddd (patch)
tree4af057049b66e1f1b1a783640ee4ef0560043e10
parent72c198d1c25443fe168f2ac460d0835193dad3dd (diff)
parent085ada662cdcd37213ad52693cb55a37e5aed7bf (diff)
downloadmullvadvpn-20d563284f5edc5634e10ec648de1c79b5bd9ddd.tar.xz
mullvadvpn-20d563284f5edc5634e10ec648de1c79b5bd9ddd.zip
Merge branch 'linux-fix-early-boot-logging'
-rw-r--r--CHANGELOG.md3
-rw-r--r--mullvad-daemon/src/main.rs56
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| {