/lib/partman/finish.d/10clear_partitions is in ubiquity 2.10.16.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | #! /bin/sh
# Remove critical files to ensure we don't end up with a mixed system.
. /lib/partman/lib/base.sh
failed () {
db_progress STOP
db_input critical partman-target/clear_partitions_failed || true
db_go || true
exit 1
}
count=0
partitions=$(
for dev in $DEVICES/*; do
[ -d "$dev" ] || continue
cd $dev
open_dialog PARTITIONS
while { read_line num id size type fs path name; [ "$id" ]; }; do
[ -f "$id/method" ] || continue
[ -f "$id/use_filesystem" ] || continue
[ -f "$id/mountpoint" ] || continue
[ "$fs" != free ] || continue
[ -f "$id/format" ] && continue
[ -f "$id/formatted" ] && continue
count=$(($count + 1))
mp="$(cat "$id/mountpoint")"
echo "$mp,$path"
done
close_dialog
done | sort
)
[ -n "$partitions" ] || exit 0
echo "Considering $partitions." | tr '\n' ' ' | logger -t clear_partitions
tmp="/mnt/tmpmount"
mkdir -p "$tmp"
template=partman-target/clear_partitions_progress
db_progress START 0 $count ubiquity/install/title
db_progress INFO $template
to_delete=""
for part in $partitions; do
mp="${part%,*}"
path="${part#*,}"
if [ "$mp" = "/" ]; then
mount $path $tmp 3>&- || failed
for x in bin dev etc lib lib32 lib64 proc sbin sys; do
[ -e "$tmp/$x" ] && (rm -rf "$tmp/$x" &&
logger -t clear_partitions "Removing $x from / ($path)." ||
failed)
done
for x in "$tmp/usr/"* "$tmp/var/"*; do
case "$x" in
$tmp/usr/local|$tmp/usr/src|$tmp/var/local)
continue
;;
esac
[ -e "$x" ] && (rm -rf "$x" &&
logger -t clear_partitions "Removing ${x#$tmp/} from / ($path)." ||
failed)
done
for x in $tmp/initrd* $tmp/vmlinuz*; do
[ -e "$x" ] && (rm -rf "$x" || failed)
done
# /home could be a symlink.
[ -f "$tmp/home" ] && (rm "$tmp/home" || failed)
# / could have the wrong owner.
chown root:root $tmp
# Preserve the UID, if possible.
db_get passwd/username || true
username="$RET"
if [ -n "$username" ] && [ -d "$tmp/home/$username" ]; then
uid="$(stat -c %u "$tmp/home/$username")"
if [ -n "$uid" ] && [ "$uid" != 0 ]; then
db_set passwd/user-uid "$uid" || true
fi
fi
# Nothing should have anything in $tmp open at this point,
# but apparently something does:
# https://bugs.launchpad.net/bugs/946663
umount -l $tmp
elif [ "$mp" = "/home" ]; then
mount $path $tmp 3>&- || failed
# Preserve the UID, if possible.
db_get passwd/username || true
username="$RET"
if [ -n "$username" ] && [ -d "$tmp/$username" ]; then
uid="$(stat -c %u "$tmp/$username")"
if [ -n "$uid" ] && [ "$uid" != 0 ]; then
db_set passwd/user-uid "$uid" || true
fi
fi
# Nothing should have anything in $tmp open at this point,
# but apparently something does:
# https://bugs.launchpad.net/bugs/946663
umount -l $tmp
else
case "$mp" in
/usr/local|/usr/local/*|/var/local|/var/local/*|/usr/src|/usr/src/*)
logger -t clear_partitions "Skipping $mp ($path)."
continue
;;
esac
for x in bin dev etc lib lib32 lib64 proc sbin usr var sys; do
if echo "$mp" | egrep -q "^/$x(\$|/)"; then
mount $path $tmp 3>&- || failed
logger -t clear_partitions "Removing everything from $mp ($path)."
rm -rf $tmp/* || failed
# Nothing should have anything in $tmp open
# at this point, but apparently something
# does:
# https://bugs.launchpad.net/bugs/946663
umount -l $tmp
break
fi
done
fi
db_progress STEP 1
done
db_progress STOP
rmdir $tmp
exit 0
|