ksud: fix module installation failed when size < 1M

This commit is contained in:
tiann
2023-02-01 19:30:39 +08:00
parent 681c4a3f0d
commit 417ff8a6c5

View File

@@ -122,7 +122,7 @@ fn grow_image_size(img: &str, extra_size: u64) -> Result<()> {
"- Target image size: {}", "- Target image size: {}",
humansize::format_size(target_size, humansize::DECIMAL) humansize::format_size(target_size, humansize::DECIMAL)
); );
let target_size = target_size / 1024 + 1; let target_size = target_size / 1024 + 1024;
let result = Command::new("resize2fs") let result = Command::new("resize2fs")
.args([img, &format!("{target_size}K")]) .args([img, &format!("{target_size}K")])
@@ -327,7 +327,7 @@ pub fn load_system_prop() -> Result<()> {
Ok(()) Ok(())
} }
pub fn install_module(zip: String) -> Result<()> { fn do_install_module(zip: String) -> Result<()> {
ensure_boot_completed()?; ensure_boot_completed()?;
// print banner // print banner
@@ -435,7 +435,6 @@ pub fn install_module(zip: String) -> Result<()> {
setsyscon(module_update_tmp_dir)?; setsyscon(module_update_tmp_dir)?;
let result = {
let module_dir = format!("{module_update_tmp_dir}/{module_id}"); let module_dir = format!("{module_update_tmp_dir}/{module_id}");
ensure_clean_dir(&module_dir)?; ensure_clean_dir(&module_dir)?;
info!("module dir: {}", module_dir); info!("module dir: {}", module_dir);
@@ -454,17 +453,13 @@ pub fn install_module(zip: String) -> Result<()> {
restore_syscon(path)?; restore_syscon(path)?;
} }
exec_install_script(&zip) exec_install_script(&zip)?;
};
// umount the modules_update.img // umount the modules_update.img
let _ = mount::umount_dir(module_update_tmp_dir); mount::umount_dir(module_update_tmp_dir)?;
// remove modules_update dir, ignore the error // remove modules_update dir, ignore the error
let _ = remove_dir_all(module_update_tmp_dir); remove_dir_all(module_update_tmp_dir)?;
// return if exec script failed
result.with_context(|| format!("Failed to execute install script for {module_id}"))?;
// all done, rename the tmp image to modules_update.img // all done, rename the tmp image to modules_update.img
if std::fs::rename(tmp_module_img, defs::MODULE_UPDATE_IMG).is_err() { if std::fs::rename(tmp_module_img, defs::MODULE_UPDATE_IMG).is_err() {
@@ -476,6 +471,17 @@ pub fn install_module(zip: String) -> Result<()> {
Ok(()) Ok(())
} }
pub fn install_module(zip: String) -> Result<()> {
let result = do_install_module(zip);
if result.is_err() {
// error happened, do some cleanup!
let _ = std::fs::remove_file(defs::MODULE_UPDATE_TMP_IMG);
let _ = mount::umount_dir(defs::MODULE_UPDATE_TMP_DIR);
let _ = std::fs::remove_dir_all(defs::MODULE_UPDATE_TMP_DIR);
}
result
}
fn do_module_update<F>(update_dir: &str, id: &str, func: F) -> Result<()> fn do_module_update<F>(update_dir: &str, id: &str, func: F) -> Result<()>
where where
F: Fn(&str, &str) -> Result<()>, F: Fn(&str, &str) -> Result<()>,