ksud: catch bootlog when post-fs-data
This commit is contained in:
@@ -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";
|
||||||
|
|||||||
@@ -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(())
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user