feat: erofs layers

This commit is contained in:
Mikaël Cluseau
2026-04-18 18:53:29 +02:00
parent 0c4f636477
commit 5c86af7614
2 changed files with 439 additions and 270 deletions

699
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -65,7 +65,7 @@ pub async fn bootstrap(cfg: Config) {
})
.await;
retry_or_ignore(async || apply::files(&sys_cfg.files, "/system").await).await;
retry_or_ignore(async || apply::files(&sys_cfg.files, "/system", false).await).await;
apply_groups(&sys_cfg.groups, "/system").await;
apply_users(&sys_cfg.users, "/system").await;
@@ -210,6 +210,12 @@ async fn mount_system(cfg: &dkl::Config, bs_dir: &str, verifier: &Verifier) {
})
.await;
let fstype = if src.get(1024..1028) == Some(&0xE0F5E1E2u32.to_le_bytes()) {
"erofs"
} else {
"squashfs"
};
let tgt = &format!("{mem_dir}/{layer}.fs");
retry(async || {
info!("copying layer {layer}");
@@ -222,7 +228,7 @@ async fn mount_system(cfg: &dkl::Config, bs_dir: &str, verifier: &Verifier) {
.await;
let layer_dir = &format!("{layers_dir}/{layer}");
mount(Some(tgt), layer_dir, "squashfs", None).await;
mount(Some(tgt), layer_dir, fstype, None).await;
if !lower_dir.is_empty() {
lower_dir.push(':');