From 93216cddf60bafa359c4fb1b57017cb10bbde9ff Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Wed, 7 Feb 2018 16:39:17 -0500 Subject: avoid cutesy tar --to-command; instead extract to tempdir --- src/selfstrap | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/selfstrap b/src/selfstrap index 265fa25..72fda34 100755 --- a/src/selfstrap +++ b/src/selfstrap @@ -226,25 +226,28 @@ dpkg_unpack() PKG=${PKG%%_*} PKG=$PKG$multiarch - # TODO: always set status=installed if there is no preinst or postinst script + extract_tmp_ci "$deb" + install_metadata_from_tmp_ci # uses TARGET PKG SET_STATUS + remove_tmp_ci - command=$(cat <<'EOF' -set -e -if [ "$SET_STATUS" -a "$TAR_FILENAME" = ./control ]; then - (sed "/^Package:/a Status: install ok $SET_STATUS"; echo) >> "$TARGET"/var/lib/dpkg/status -else - f=$TARGET/var/lib/dpkg/info/$PKG.${TAR_FILENAME#./} - cat > "$f" - chmod $TAR_MODE "$f" -fi -EOF -) - (export PKG TARGET SET_STATUS; dpkg --ctrl-tarfile "$deb" | tar -x --to-command "$command") || die 'tar' dpkg --fsys-tarfile "$deb" | (cd "$TARGET" && tar -xv) | sed 's?^\.??; s?^/$?/.?; s?/$??' > "$TARGET/var/lib/dpkg/info/$PKG.list" } +install_metadata_from_tmp_ci() # uses TARGET PKG SET_STATUS +{ + (cd "$TARGET"/var/lib/dpkg/tmp.ci || die "cannot cd to /var/lib/dpkg/tmp.ci" +# PKG=$(sed -n 's/^Package: *//p' control) + for f in *; do + [ "$f" = postinst ] && SET_STATUS=${SET_STATUS:+installed} || true + [ "$f" = control ] || mv "$f" "$TARGET"/var/lib/dpkg/info/"$PKG"."$f" + done + if [ "$SET_STATUS" -a -e control ]; then + (sed "/^Package:/a Status: install ok $SET_STATUS"; echo) < control >> "$TARGET"/var/lib/dpkg/status + fi) +} + verbosely() { if [ "$VERBOSE" ]; then -- cgit v1.2.3