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 <johan...@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"

> +
> +                             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

Reply via email to