Package: schroot
Version: 1.6.10-12
Severity: minor
File: /etc/schroot/setup.d/05zfs
Tags: patch

Dear maintainer,

thank you for enabling ZFS usage.

Please consider the following patch to make clone removal a little more
robust:

| diff --git a/schroot/setup.d/05zfs b/schroot/setup.d/05zfs
| index 6ecc0196..785aee5f 100755
| --- a/schroot/setup.d/05zfs
| +++ b/schroot/setup.d/05zfs
| @@ -49,10 +49,10 @@ if [ "$CHROOT_TYPE" = "zfs-snapshot" ] && [ -n 
"$CHROOT_ZFS_CLONE_NAME" ]; then
|          if zfs list "$CHROOT_ZFS_CLONE_NAME" >/dev/null 2>&1
|          then
|              if [ "$VERBOSE" = "verbose" ]; then
| -                zfs destroy "$CHROOT_ZFS_CLONE_NAME"
| +                zfs destroy -r "$CHROOT_ZFS_CLONE_NAME"
|                  zfs destroy "$CHROOT_ZFS_SNAPSHOT_NAME"
|              else
| -                zfs destroy "$CHROOT_ZFS_CLONE_NAME" > /dev/null
| +                zfs destroy -r "$CHROOT_ZFS_CLONE_NAME" > /dev/null
|                  zfs destroy "$CHROOT_ZFS_SNAPSHOT_NAME" > /dev/null
|              fi
|          else

I.e. recursively destroy all children of that clone via the "-r" option.
Otherwise I can all too easily happen that such children exist in the
form of snapshots, e.g. when using zfsnap or any such tool that might
automatically create a snapshot of a ZFS dataset while it is in use.

For illustration, let's consider the following sequence of actions:

1. a user enters a ZFS-based chroot via
   $ schroot -c unstable-amd64-sbuild
2. schroot creates a snapshot of the base dataset and then a clone of
   that snapshot, e.g.
   $ zfs list -t all
   [...]
   
zfspool/SYSTEM/srv/chroot/unstable-amd64-sbuild@unstable-amd64-sbuild-44e762df-cab6-4cf3-99dd-15f0fd018d18
                         0B      -      359M  -
   
zfspool/SYSTEM/srv/chroot/unstable-amd64-sbuild/schroot-unstable-amd64-sbuild-44e762df-cab6-4cf3-99dd-15f0fd018d18
                 8K  62.2G      359M  legacy
3. some tool - here done manually - creates a snapshot of that clone
   $ sudo zfs snapshot 
zfspool/SYSTEM/srv/chroot/unstable-amd64-sbuild/schroot-unstable-amd64-sbuild-44e762df-cab6-4cf3-99dd-15f0fd018d18@test
4. the user exits their schroot session and schroot complains
   E: 05zfs: cannot destroy 
'zfspool/SYSTEM/srv/chroot/unstable-amd64-sbuild/schroot-unstable-amd64-sbuild-44e762df-cab6-4cf3-99dd-15f0fd018d18':
 filesystem has children
   E: 05zfs: use '-r' to destroy the following datasets:
   E: 05zfs: 
zfspool/SYSTEM/srv/chroot/unstable-amd64-sbuild/schroot-unstable-amd64-sbuild-44e762df-cab6-4cf3-99dd-15f0fd018d18@test
   E: unstable-amd64-sbuild-44e762df-cab6-4cf3-99dd-15f0fd018d18: Chroot setup 
failed: stage=setup-stop
5. $CHROOT_ZFS_CLONE_NAME and $CHROOT_ZFS_SNAPSHOT_NAME must be cleaned
   up manually

Cheers,
Flo

Attachment: signature.asc
Description: PGP signature

Reply via email to