ksud: do not abort if backup failed (#1627)
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user