[pve-devel] [PATCH proxmox-backup-restore-image 1/5] build initramfs: usr-merge initramfs
Stoiko Ivanov
s.ivanov at proxmox.com
Mon Jun 2 11:47:51 CEST 2025
usr-merged systems are default since bookworm [0].
the proxmox-restore-daemon otoh uses absolute paths to execute
commands inside the initramfs, without having a PATH set (which would
be used by Command::new (and execvpe(2) to resolve a relative
command).
merging all directories as on regular debian system ensures that the
restore-daemon does not need adapations based on the paths used in
upstream (and our) debian packages.
Found while looking through potential pitfalls due to ZFS usrmerge.
The change to the dpkg-deb invocation is based on what a quick look
through dpkg-sources [1] say dpkg does to unpack archives, as
`dpkg-deb -x` removed the symlinks to create a directory.
[0] https://wiki.debian.org/UsrMerge
[1] https://salsa.debian.org/dpkg-team/dpkg/-/blob/main/src/main/unpack.c?ref_type=heads#L1544
Signed-off-by: Stoiko Ivanov <s.ivanov at proxmox.com>
---
src/build_initramfs.sh | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/build_initramfs.sh b/src/build_initramfs.sh
index 1ed0177..52a50c3 100755
--- a/src/build_initramfs.sh
+++ b/src/build_initramfs.sh
@@ -15,7 +15,12 @@ if [ -d pkgs ]; then
NO_DOWNLOAD="1"
fi
cd "$BUILDDIR"
-mkdir "$ROOT"
+mkdir -p "$ROOT/usr"
+
+for dir in "bin" "sbin" "lib" "lib32" "lib64" ; do
+ mkdir "$ROOT/usr/$dir"
+ ln -sr "$ROOT/usr/$dir" "$ROOT/$dir"
+done
# adds necessary packages to initramfs build root folder
add_pkgs() {
@@ -44,7 +49,7 @@ add_pkgs() {
fi
if [ -z "$DOWNLOAD_ONLY" ]; then
for deb in pkgs/$debdir/*.deb; do
- dpkg-deb -x "$deb" "$ROOT"
+ dpkg-deb --fsys-tarfile "$deb" |tar -C "$ROOT" --keep-directory-symlink -x
done
fi
}
--
2.39.5
More information about the pve-devel
mailing list