ksud: catch bootlog when post-fs-data

This commit is contained in:
tiann
2023-04-15 17:38:49 +08:00
parent c969ff4011
commit 71216b1458
2 changed files with 43 additions and 0 deletions

View File

@@ -3,6 +3,7 @@ use const_format::concatcp;
pub const ADB_DIR: &str = "/data/adb/"; pub const ADB_DIR: &str = "/data/adb/";
pub const WORKING_DIR: &str = concatcp!(ADB_DIR, "ksu/"); pub const WORKING_DIR: &str = concatcp!(ADB_DIR, "ksu/");
pub const BINARY_DIR: &str = concatcp!(WORKING_DIR, "bin/"); pub const BINARY_DIR: &str = concatcp!(WORKING_DIR, "bin/");
pub const LOG_DIR: &str = concatcp!(WORKING_DIR, "log/");
pub const KSURC_PATH: &str = concatcp!(WORKING_DIR, ".ksurc"); pub const KSURC_PATH: &str = concatcp!(WORKING_DIR, ".ksurc");
pub const KSU_OVERLAY_SOURCE: &str = "KSU"; pub const KSU_OVERLAY_SOURCE: &str = "KSU";

View File

@@ -86,6 +86,9 @@ pub fn mount_systemlessly(module_dir: &str) -> Result<()> {
pub fn on_post_data_fs() -> Result<()> { pub fn on_post_data_fs() -> Result<()> {
crate::ksu::report_post_fs_data(); crate::ksu::report_post_fs_data();
#[cfg(unix)]
let _ = catch_bootlog();
if utils::has_magisk() { if utils::has_magisk() {
warn!("Magisk detected, skip post-fs-data!"); warn!("Magisk detected, skip post-fs-data!");
return Ok(()); return Ok(());
@@ -235,3 +238,42 @@ fn link_ksud_to_bin() -> Result<()> {
} }
Ok(()) Ok(())
} }
#[cfg(unix)]
fn catch_bootlog() -> Result<()> {
use std::os::unix::process::CommandExt;
use std::process::Stdio;
let logdir = Path::new(defs::LOG_DIR);
utils::ensure_dir_exists(logdir)?;
let bootlog = logdir.join("boot.log");
let oldbootlog = logdir.join("boot.old.log");
if bootlog.exists() {
std::fs::rename(&bootlog, &oldbootlog)?;
}
let bootlog = std::fs::File::create(bootlog)?;
// timeout -s 9 30s logcat > boot.log
let result = unsafe {
std::process::Command::new("timeout")
.process_group(0)
.pre_exec(|| {
utils::switch_cgroups();
Ok(())
})
.arg("-s")
.arg("9")
.arg("30s")
.arg("logcat")
.stdout(Stdio::from(bootlog))
.spawn()
};
if let Err(e) = result {
warn!("Failed to start logcat: {:#}", e);
}
Ok(())
}