mirror of
https://git.launchpad.net/ubuntu-dev-tools
synced 2025-06-08 22:41:30 +00:00
mk-sbuild: add support for zfs-snapshot schroots
Creating datasets with mountpoint=legacy is necessary because the schroot helper scripts expect it. This will make zfs-snapshot schroots behave more like lvm-snapshot schroots and less like btrfs-snapshot schroots (e.g. the source schroot is not permanently mounted/visible). Switching mount "style" requires changes in at least the /etc/schroot/setup.d/05zfs and 10mount scripts. LP: #1945349
This commit is contained in:
parent
9360b17bcb
commit
fec7a72ef7
38
mk-sbuild
38
mk-sbuild
@ -26,7 +26,7 @@
|
|||||||
# ##################################################################
|
# ##################################################################
|
||||||
#
|
#
|
||||||
# This script creates chroots designed to be used in a snapshot mode
|
# This script creates chroots designed to be used in a snapshot mode
|
||||||
# (with LVM, btrfs, overlay, overlay or aufs) with schroot and sbuild.
|
# (with LVM, btrfs, zfs, overlay, overlay or aufs) with schroot and sbuild.
|
||||||
# Much love to "man sbuild-setup", https://wiki.ubuntu.com/PbuilderHowto,
|
# Much love to "man sbuild-setup", https://wiki.ubuntu.com/PbuilderHowto,
|
||||||
# and https://help.ubuntu.com/community/SbuildLVMHowto.
|
# and https://help.ubuntu.com/community/SbuildLVMHowto.
|
||||||
#
|
#
|
||||||
@ -51,6 +51,7 @@ function usage()
|
|||||||
echo " --name=NAME Base name for the schroot (arch is appended)"
|
echo " --name=NAME Base name for the schroot (arch is appended)"
|
||||||
echo " --personality=PERSONALITY What personality to use (defaults to match --arch)"
|
echo " --personality=PERSONALITY What personality to use (defaults to match --arch)"
|
||||||
echo " --vg=VG use LVM snapshots, with group VG"
|
echo " --vg=VG use LVM snapshots, with group VG"
|
||||||
|
echo " --zfs-dataset=DATASET use ZFS snapshots, with parent dataset DATASET"
|
||||||
echo " --debug Turn on script debugging"
|
echo " --debug Turn on script debugging"
|
||||||
echo " --skip-updates Do not include -updates pocket in sources.list"
|
echo " --skip-updates Do not include -updates pocket in sources.list"
|
||||||
echo " --skip-security Do not include -security pocket in sources.list"
|
echo " --skip-security Do not include -security pocket in sources.list"
|
||||||
@ -76,8 +77,9 @@ function usage()
|
|||||||
echo " (defaults to determining from release name)"
|
echo " (defaults to determining from release name)"
|
||||||
echo " --target=ARCH Target architecture for cross-building"
|
echo " --target=ARCH Target architecture for cross-building"
|
||||||
echo " --type=SCHROOT_TYPE Define the schroot type:"
|
echo " --type=SCHROOT_TYPE Define the schroot type:"
|
||||||
echo " 'directory'(default), 'file', or 'btrfs-snapshot'"
|
echo " 'directory' (default), 'file', or 'btrfs-snapshot'."
|
||||||
echo " 'lvm-snapshot' is selected via --vg"
|
echo " 'lvm-snapshot' is selected via --vg"
|
||||||
|
echo " 'zfs-snapshot' is selected via --zfs-dataset"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Configuration (via ~/.mk-sbuild.rc)"
|
echo "Configuration (via ~/.mk-sbuild.rc)"
|
||||||
echo " LV_SIZE Size of source LVs (default ${LV_SIZE})"
|
echo " LV_SIZE Size of source LVs (default ${LV_SIZE})"
|
||||||
@ -136,6 +138,7 @@ supported_options=(
|
|||||||
personality:
|
personality:
|
||||||
distro:
|
distro:
|
||||||
vg:
|
vg:
|
||||||
|
zfs-dataset:
|
||||||
type:
|
type:
|
||||||
target:
|
target:
|
||||||
ccache-dir:
|
ccache-dir:
|
||||||
@ -244,6 +247,10 @@ while :; do
|
|||||||
VG="$2"
|
VG="$2"
|
||||||
shift 2
|
shift 2
|
||||||
;;
|
;;
|
||||||
|
--zfs-dataset)
|
||||||
|
ZFS_PARENT_DATASET="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
--type)
|
--type)
|
||||||
SCHROOT_TYPE="$2"
|
SCHROOT_TYPE="$2"
|
||||||
shift 2
|
shift 2
|
||||||
@ -505,6 +512,9 @@ if [ -z "$SCHROOT_TYPE" ]; then
|
|||||||
# To build the LV, we need to know which volume group to use
|
# To build the LV, we need to know which volume group to use
|
||||||
if [ -n "$VG" ]; then
|
if [ -n "$VG" ]; then
|
||||||
SCHROOT_TYPE="lvm-snapshot"
|
SCHROOT_TYPE="lvm-snapshot"
|
||||||
|
# To build the ZFS dataset, we need to know which parent to use
|
||||||
|
elif [ -n "$ZFS_PARENT_DATASET" ]; then
|
||||||
|
SCHROOT_TYPE="zfs-snapshot"
|
||||||
else
|
else
|
||||||
SCHROOT_TYPE="directory"
|
SCHROOT_TYPE="directory"
|
||||||
fi
|
fi
|
||||||
@ -551,7 +561,7 @@ case "$SCHROOT_TYPE" in
|
|||||||
# Set up some variables for use in the paths and names
|
# Set up some variables for use in the paths and names
|
||||||
CHROOT_PATH="${SOURCE_CHROOTS_TGZ}/${CHROOT_NAME}.tgz"
|
CHROOT_PATH="${SOURCE_CHROOTS_TGZ}/${CHROOT_NAME}.tgz"
|
||||||
;;
|
;;
|
||||||
"btrfs-snapshot")
|
"btrfs-snapshot" | "zfs-snapshot")
|
||||||
if [ ! -d "${SOURCE_CHROOTS_DIR}" ]; then
|
if [ ! -d "${SOURCE_CHROOTS_DIR}" ]; then
|
||||||
sudo mkdir -p "${SOURCE_CHROOTS_DIR}"
|
sudo mkdir -p "${SOURCE_CHROOTS_DIR}"
|
||||||
fi
|
fi
|
||||||
@ -757,6 +767,19 @@ case "$SCHROOT_TYPE" in
|
|||||||
fi
|
fi
|
||||||
sudo btrfs subvolume create "${MNT}"
|
sudo btrfs subvolume create "${MNT}"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
"zfs-snapshot")
|
||||||
|
ZFS_DATASET="${ZFS_PARENT_DATASET}/${CHROOT_NAME}"
|
||||||
|
if sudo zfs list "${ZFS_DATASET}" >/dev/null 2>&1; then
|
||||||
|
echo "E: ZFS dataset ${ZFS_DATASET} already exists; aborting" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
sudo zfs create -p -o mountpoint=legacy "${ZFS_DATASET}"
|
||||||
|
|
||||||
|
# Mount
|
||||||
|
MNT=`mktemp -d -t schroot-XXXXXX`
|
||||||
|
sudo mount -t zfs "${ZFS_DATASET}" "${MNT}"
|
||||||
|
;;
|
||||||
"file")
|
"file")
|
||||||
MNT=`mktemp -d -t schroot-XXXXXX`
|
MNT=`mktemp -d -t schroot-XXXXXX`
|
||||||
esac
|
esac
|
||||||
@ -909,6 +932,12 @@ btrfs-source-subvolume=CHROOT_PATH
|
|||||||
btrfs-snapshot-directory=CHROOT_SNAPSHOT_DIR
|
btrfs-snapshot-directory=CHROOT_SNAPSHOT_DIR
|
||||||
EOM
|
EOM
|
||||||
;;
|
;;
|
||||||
|
zfs-snapshot)
|
||||||
|
cat >> "${TEMP_SCHROOTCONF}" <<EOM
|
||||||
|
zfs-dataset=ZFS_DATASET
|
||||||
|
EOM
|
||||||
|
;;
|
||||||
|
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
if [ ! -z "$personality" ]; then
|
if [ ! -z "$personality" ]; then
|
||||||
@ -925,6 +954,7 @@ sed -e "s|CHROOT_NAME|$CHROOT_NAME|g" \
|
|||||||
-e "s|SNAPSHOT_SIZE|$SNAPSHOT_SIZE|g" \
|
-e "s|SNAPSHOT_SIZE|$SNAPSHOT_SIZE|g" \
|
||||||
-e "s|SCHROOT_TYPE|$SCHROOT_TYPE|g" \
|
-e "s|SCHROOT_TYPE|$SCHROOT_TYPE|g" \
|
||||||
-e "s|CHROOT_SNAPSHOT_DIR|$CHROOT_SNAPSHOT_DIR|g" \
|
-e "s|CHROOT_SNAPSHOT_DIR|$CHROOT_SNAPSHOT_DIR|g" \
|
||||||
|
-e "s|ZFS_DATASET|$ZFS_DATASET|g" \
|
||||||
"$TEMP_SCHROOTCONF" \
|
"$TEMP_SCHROOTCONF" \
|
||||||
| sudo tee "/etc/schroot/chroot.d/sbuild-$CHROOT_NAME" > /dev/null
|
| sudo tee "/etc/schroot/chroot.d/sbuild-$CHROOT_NAME" > /dev/null
|
||||||
rm -f "$TEMP_SCHROOTCONF"
|
rm -f "$TEMP_SCHROOTCONF"
|
||||||
@ -999,7 +1029,7 @@ EOM
|
|||||||
sudo chmod a+x "$MNT"/finish.sh
|
sudo chmod a+x "$MNT"/finish.sh
|
||||||
|
|
||||||
case "$SCHROOT_TYPE" in
|
case "$SCHROOT_TYPE" in
|
||||||
"lvm-snapshot")
|
"lvm-snapshot"|"zfs-snapshot")
|
||||||
sudo umount "$MNT"
|
sudo umount "$MNT"
|
||||||
rmdir "$MNT"
|
rmdir "$MNT"
|
||||||
;;
|
;;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user