ksud: do not abort if backup failed (#1627)

This commit is contained in:
5ec1cff
2024-04-14 15:55:47 +08:00
committed by GitHub
parent 488564fe76
commit 50387a9d3d

View File

@@ -366,8 +366,7 @@ fn do_patch(
println!("- Adding KernelSU LKM"); println!("- Adding KernelSU LKM");
let is_kernelsu_patched = is_kernelsu_patched(&magiskboot, workding_dir.path())?; let is_kernelsu_patched = is_kernelsu_patched(&magiskboot, workding_dir.path())?;
#[cfg(target_os = "android")] let mut need_backup = false;
let mut backup = None;
if !is_kernelsu_patched { if !is_kernelsu_patched {
// kernelsu.ko is not exist, backup init if necessary // kernelsu.ko is not exist, backup init if necessary
let status = do_cpio_cmd(&magiskboot, workding_dir.path(), "exists init"); let status = do_cpio_cmd(&magiskboot, workding_dir.path(), "exists init");
@@ -375,35 +374,7 @@ fn do_patch(
do_cpio_cmd(&magiskboot, workding_dir.path(), "mv init init.real")?; do_cpio_cmd(&magiskboot, workding_dir.path(), "mv init init.real")?;
} }
#[cfg(target_os = "android")] need_backup = flash;
if flash {
println!("- Backup stock boot image");
// magiskboot cpio ramdisk.cpio 'add 0755 orig.ksu'
let output = Command::new(&magiskboot)
.current_dir(workding_dir.path())
.arg("sha1")
.arg(&bootimage)
.output()?;
ensure!(
output.status.success(),
"Cannot calculate sha1 of original boot!"
);
let output = String::from_utf8(output.stdout)?;
let output = output.trim();
let output = format!("{KSU_BACKUP_FILE_PREFIX}{output}");
let target = format!("{KSU_BACKUP_DIR}/{output}");
std::fs::copy(&bootimage, &target).with_context(|| format!("backup to {target}"))?;
std::fs::write(workding_dir.path().join("orig.ksu"), output.as_bytes())
.context("write sha1")?;
do_cpio_cmd(
&magiskboot,
workding_dir.path(),
"add 0755 orig.ksu orig.ksu",
)?;
println!("- Stock image has been backup to");
println!("- {target}");
backup = Some(output);
}
} }
do_cpio_cmd(&magiskboot, workding_dir.path(), "add 0755 init init")?; do_cpio_cmd(&magiskboot, workding_dir.path(), "add 0755 init init")?;
@@ -451,23 +422,55 @@ fn do_patch(
} }
#[cfg(target_os = "android")] #[cfg(target_os = "android")]
if let Some(backup) = backup { if need_backup {
println!("- Clean up backup"); let do_backup = move || -> Result<()> {
if let Ok(dir) = std::fs::read_dir("/data") { println!("- Backup stock boot image");
for entry in dir.flatten() { // magiskboot cpio ramdisk.cpio 'add 0755 orig.ksu'
let path = entry.path(); let output = Command::new(&magiskboot)
if path.is_file() { .current_dir(workding_dir.path())
if let Some(name) = path.file_name() { .arg("sha1")
let name = name.to_string_lossy().to_string(); .arg(&bootimage)
if name != backup .output()?;
&& name.starts_with(KSU_BACKUP_FILE_PREFIX) ensure!(
&& std::fs::remove_file(path).is_ok() output.status.success(),
{ "Cannot calculate sha1 of original boot!"
println!("- removed {name}"); );
let output = String::from_utf8(output.stdout)?;
let output = output.trim();
let backup_name = format!("{KSU_BACKUP_FILE_PREFIX}{output}");
let target = format!("{KSU_BACKUP_DIR}/{backup_name}");
std::fs::copy(&bootimage, &target).with_context(|| format!("backup to {target}"))?;
std::fs::write(workding_dir.path().join("orig.ksu"), backup_name.as_bytes())
.context("write sha1")?;
do_cpio_cmd(
&magiskboot,
workding_dir.path(),
"add 0755 orig.ksu orig.ksu",
)?;
println!("- Stock image has been backup to");
println!("- {target}");
println!("- Clean up backup");
if let Ok(dir) = std::fs::read_dir("/data") {
for entry in dir.flatten() {
let path = entry.path();
if path.is_file() {
if let Some(name) = path.file_name() {
let name = name.to_string_lossy().to_string();
if name != backup_name
&& name.starts_with(KSU_BACKUP_FILE_PREFIX)
&& std::fs::remove_file(path).is_ok()
{
println!("- removed {name}");
}
} }
} }
} }
} }
Ok(())
};
if let Err(e) = do_backup() {
println!("- Warning: backup failed");
println!("- {:?}", e);
} }
} }