[arch-projects] [devtools] [PATCH] archbuild/makechrootpkg: Delete sub-subvolumes as well

Johannes Löthberg johannes at kyriasis.com
Sat Jan 28 22:47:44 UTC 2017


(Sidenote, seems this patch won't really work overall due to how 
btrfs-tools works.  Grr.)

On 28/01, Dave Reisner wrote:
>On Sat, Jan 28, 2017 at 06:18:29PM +0100, Johannes Löthberg via arch-projects wrote:
>> Some packages end up creating subvolumes through systemd-tmpfiles, (e.g.
>> systemd-nspawn,) so we need to delete those as well.
>>
>> Signed-off-by: Johannes Löthberg <johannes at kyriasis.com>
>> ---
>>  archbuild.in     | 10 +++++++++-
>>  makechrootpkg.in |  5 +++++
>>  2 files changed, 14 insertions(+), 1 deletion(-)
>>
>> diff --git a/archbuild.in b/archbuild.in
>> index 9c5d706..159602b 100644
>> --- a/archbuild.in
>> +++ b/archbuild.in
>> @@ -54,7 +54,15 @@ if ${clean_first} || [[ ! -d "${chroots}/${repo}-${arch}" ]]; then
>>  		lock 9 "$copy.lock" "Locking chroot copy '$copy'"
>>
>>  		if [[ "$(stat -f -c %T "${copy}")" == btrfs ]]; then
>> -			{ type -P btrfs && btrfs subvolume delete "${copy}"; } &>/dev/null
>> +			# Delete all subvolumes under the copy directory.  This is needed
>> +			# because some things, like systemd-nspawn, end up creating a btrfs
>> +			# subvolume through systemd-tmpfiles.
>> +			if type -P btrfs &>/dev/null; then
>> +				btrfs subvolume list --sort=-path -o "$copy" | \
>> +					sed 's|[^/]*||' | \
>> +					xargs btrfs subvolume delete &>/dev/null
>
>This isn't safe usage of xargs. You'd at least need to pass -d$'\n' in
>order to delimit by newline. Couldn't you instead do something like:
>
>  mapfile -t subvols < <(btrfs subvolume list ...)
>  btrfs subvolume delete "${subvol[@]}" "$copy"
>

Ah, I keep forgetting that mapfile isn't zsh specific, thanks.

>> +
>> +				btrfs subvolume delete "$copy" &>/dev/null
>> +			fi
>>  		fi
>>  		rm -rf --one-file-system "${copy}"
>>  	done
>> diff --git a/makechrootpkg.in b/makechrootpkg.in
>> index 284d444..b89f33e 100644
>> --- a/makechrootpkg.in
>> +++ b/makechrootpkg.in
>> @@ -91,6 +91,11 @@ create_chroot() {
>>  		stat_busy "Creating clean working copy [$copy]"
>>  		if [[ "$chroottype" == btrfs ]] && ! mountpoint -q "$copydir"; then
>>  			if [[ -d $copydir ]]; then
>> +				btrfs subvolume list --sort=-path -o "$copydir" | \
>> +					sed 's|[^/]*||' | \
>> +					xargs btrfs subvolume delete >/dev/null ||
>
>same here.
>
>> +						die "Unable to delete subvolumes under %s" "$copydir"
>> +
>>  				btrfs subvolume delete "$copydir" >/dev/null ||
>>  					die "Unable to delete subvolume %s" "$copydir"
>>  			fi
>> --
>> 2.11.0

-- 
Sincerely,
  Johannes Löthberg
  PGP Key ID: 0x50FB9B273A9D0BB5
  https://theos.kyriasis.com/~kyrias/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 1796 bytes
Desc: not available
URL: <https://lists.archlinux.org/pipermail/arch-projects/attachments/20170128/4a3e9d87/attachment.asc>


More information about the arch-projects mailing list