image: Option to set compatibility property for zpool
einsibjarni opened this issue · 3 comments
Prerequisites
- Have you checked for an existing issue describing your idea?
What is your proposal?
Add an option to set the compatibility property of zpool that poudriere image creates, i.e. compatibility="openzfs-2.1-freebsd"
What is the existing behavior, if any?
When running on FreeBSD 14+, if you try to create a FreeBSD 13.2-RELEASE image with zfs+gpt, it's unbootable since it enables features that the 13.2 bootloader doesn't support and no way to configure the features that are enabled (that I know of)
What is the motivation / use case for the change?
To create bootable zfs+gpt images for FreeBSD 13.2 on 14+
It's likely this problem will pop up again when new features are added to OpenZFS and merged in new major versions of FreeBSD
One possibility is to adapt the current script to use makefs -t zfs
:
makefs -t zfs -s ${IMAGESIZE} \
-o poolname="$ZFSPOOLNAME" -o bootfs=${zroot}/${ZFS_BEROOT_NAME}/${ZFS_BOOTFS_NAME} -o rootpath=/ \
-o fs=${zroot}\;mountpoint=none \
-o fs=${zroot}/${ZFS_BEROOT_NAME}\;mountpoint=none \
-o fs=${zroot}/${ZFS_BEROOT_NAME}/${ZFS_BOOTFS_NAME}\;mountpoint=/ \
-o fs=${zroot}/home\;mountpoint=/home \
-o fs=${zroot}/tmp\;mountpoint=/tmp\;exec=on\;setuid=off \
-o fs=${zroot}/usr\;mountpoint=/usr\;canmount=off \
-o fs=${zroot}/usr/ports\;setuid=off \
-o fs=${zroot}/usr/src \
-o fs=${zroot}/usr/obj \
-o fs=${zroot}/var\;mountpoint=/var\;canmount=off \
-o fs=${zroot}/var/audit\;setuid=off\;exec=off \
-o fs=${zroot}/var/crash\;setuid=off\;exec=off \
-o fs=${zroot}/var/log\;setuid=off\;exec=off \
-o fs=${zroot}/var/mail\;atime=on \
-o fs=${zroot}/var/tmp\;setuid=off \
${WRKDIR}/raw.img ${WRKDIR}/world # XXX adapt
One possibility is to adapt the current script to use
makefs -t zfs
:
Would that work, even if poudriere runs 14.0, but the image created is 13.2? Is -o bootfs=${zroot}/${ZFS_BEROOT_NAME}/${ZFS_BOOTFS_NAME}
the secret sauce?
We'll see... makefs
has a few drawbacks:
- Support for some characters in the pool name (I may have a fix for this one)
- Need to run
service zpoolreguid onestart
to reguid the pool - Need to run
service zpoolupgrade onestart
to upgrade the pool features
The last two can also be seen as a feature.
In the meantime, I would prefer to keep using a custom pre-script that passes the compatibility option when creating the zpool (I think this is what you have been doing).
I would argue against adding too many options to the vanilla poudriere-image. Although, in this is case it is a valid argument, chances are, if you are going to do something more advanced with poudriere-image, you'll likely need a custom pre-script (-B
flag) anyway.