From 6a8d8babce9d1d42374dce74ff0cc4b9975aff46 Mon Sep 17 00:00:00 2001 From: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com> Date: Fri, 16 Aug 2024 13:40:10 -0600 Subject: [PATCH] fix uid mapping in squashfs's made from tarballs (#2710) --- build/dpkg-deps/depends | 1 + core/startos/src/s9pk/v2/pack.rs | 20 +++++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/build/dpkg-deps/depends b/build/dpkg-deps/depends index 3ccaee4d6..cd29714b2 100644 --- a/build/dpkg-deps/depends +++ b/build/dpkg-deps/depends @@ -47,6 +47,7 @@ smartmontools socat sqlite3 squashfs-tools +squashfs-tools-ng sudo systemd systemd-resolved diff --git a/core/startos/src/s9pk/v2/pack.rs b/core/startos/src/s9pk/v2/pack.rs index 06a47b9d0..aa0fd39f2 100644 --- a/core/startos/src/s9pk/v2/pack.rs +++ b/core/startos/src/s9pk/v2/pack.rs @@ -60,14 +60,20 @@ impl SqfsDir { .get_or_try_init(|| async move { let guid = Guid::new(); let path = self.tmpdir.join(guid.as_ref()).with_extension("squashfs"); - let mut cmd = Command::new("mksquashfs"); if self.path.extension().and_then(|s| s.to_str()) == Some("tar") { - cmd.arg("-tar"); + Command::new("tar2sqfs") + .arg(&path) + .input(Some(&mut open_file(&self.path).await?)) + .invoke(ErrorKind::Filesystem) + .await?; + } else { + Command::new("mksquashfs") + .arg(&self.path) + .arg(&path) + .invoke(ErrorKind::Filesystem) + .await?; } - cmd.arg(&self.path) - .arg(&path) - .invoke(ErrorKind::Filesystem) - .await?; + Ok(MultiCursorFile::from( open_file(&path) .await @@ -507,7 +513,7 @@ impl ImageSource { Command::new(CONTAINER_TOOL) .arg("export") .arg(container.trim()) - .pipe(Command::new("mksquashfs").arg("-").arg(&dest).arg("-tar")) + .pipe(Command::new("tar2sqfs").arg(&dest)) .capture(false) .invoke(ErrorKind::Docker) .await?;