Bug#833525: debootstrap: Deleted my entire /home partition using "mostly harmless" debootstrap --print-debs option
Hi,
On Fri, 05 Aug 2016 17:15:29 +0200
Johannes Schauer <josch@debian.org> wrote:
> if I understand correctly, the problem is two-fold:
>
> - debootstrap removes everything in a directory even if there was stuff in it
> beforehand (this should not happen)
>
> - debootstrap removes recursively across filesystem boundaries (how was this
> not noticed earlier?)
>
> The following patch should fix this:
Unfortunately, this patch would break behavior of --make-tarball option,
after creating tarball it cleans $TARGET but this patch prevent it even if
$TARGET doesn't exist before command runs.
Here's revised patch attached.
--
Regards,
Hideki Yamane henrich @ debian.org/iijmio-mail.jp
>From bcca7322c029a2d51c2adf738bf02cb54415685d Mon Sep 17 00:00:00 2001
From: Hideki Yamane <henrich@debian.org>
Date: Tue, 13 Mar 2018 20:39:05 +0900
Subject: [PATCH] prevent removal when print-deb option was specified and its
directory doesn't empty
Based on patch by Johannes Schauer <josch@debian.org>
Closes: #833525
---
debootstrap | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/debootstrap b/debootstrap
index 0160afa..6300517 100755
--- a/debootstrap
+++ b/debootstrap
@@ -422,6 +422,13 @@ fi
###########################################################################
+TARGET_EMPTY=true
+if [ -e "$TARGET"/* ]; then
+ TARGET_EMPTY=false
+fi
+
+###########################################################################
+
if in_path dpkg && \
dpkg --print-architecture >/dev/null 2>&1; then
HOST_ARCH=`/usr/bin/dpkg --print-architecture`
@@ -701,8 +708,13 @@ if am_doing_phase second_stage; then
fi
if am_doing_phase kill_target; then
- if [ "$KEEP_DEBOOTSTRAP_DIR" != true ]; then
- info KILLTARGET "Deleting target directory"
- rm -rf "$TARGET"
+ if [ "$KEEP_DEBOOTSTRAP_DIR" = true ]; then
+ true
+ # prevent removal when print-deb option was specified and its directory doesn't empty
+ elif [ "$PRINT_DEBS" = true ] && [ "$TARGET_EMPTY" != true ]; then
+ true
+ else
+ info KILLTARGET "Deleting target directory"
+ rm -rf --one-file-system "$TARGET"
fi
fi
--
2.16.2
Reply to: