freebsd-dev/usr.sbin/makefs/Makefile
Mark Johnston 240afd8c1f makefs: Add ZFS support
This allows one to take a staged directory tree and create a file
consisting of a ZFS pool with one or more datasets that contain the
contents of the directory tree.  This is useful for creating virtual
machine images without using the kernel to create a pool; "zpool create"
requires root privileges and currently is not permitted in jails.
makefs -t zfs also provides reproducible images by using a fixed seed
for pseudo-random number generation, used for generating GUIDs and hash
salts.  makefs -t zfs requires relatively little by way of machine
resources.

The "zpool_reguid" rc.conf setting can be used to ask a FreeBSD guest to
generate a unique pool GUID upon first boot.

A small number of pool and dataset properties are supported.  The pool
is backed by a single disk vdev.  Data is always checksummed using
Fletcher-4, no redundant copies are made, and no compression is used.
The manual page documents supported pool and filesystem properties.

The implementation uses a few pieces of ZFS support from with the boot
loader, especially definitions for various on-disk structures, but is
otherwise standalone and in particular doesn't depend on OpenZFS.

This feature should be treated as experimental for now, i.e., important
data shouldn't be trusted to a makefs-created pool, and the command-line
interface is subject to change.

Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D35248
2022-08-05 13:42:29 -04:00

54 lines
852 B
Makefile

# $FreeBSD$
SRCDIR:=${.PARSEDIR:tA}
.include <src.opts.mk>
PROG= makefs
CFLAGS+=-I${SRCDIR}
SRCS= cd9660.c \
ffs.c \
makefs.c \
msdos.c \
mtree.c \
walk.c
MAN= makefs.8
NO_WCAST_ALIGN=
CSTD= c11
.if ${MK_ZFS} != "no"
SRCS+= zfs.c
CFLAGS+=-I${SRCDIR}/zfs \
-I${SRCTOP}/stand/libsa \
-I${SRCTOP}/sys/cddl/boot
CFLAGS+= -DHAVE_ZFS
.include "${SRCDIR}/zfs/Makefile.inc"
.endif
.include "${SRCDIR}/cd9660/Makefile.inc"
.include "${SRCDIR}/ffs/Makefile.inc"
.include "${SRCDIR}/msdos/Makefile.inc"
CFLAGS+=-DHAVE_STRUCT_STAT_ST_FLAGS=1
.PATH: ${SRCTOP}/contrib/mtree
CFLAGS+=-I${SRCTOP}/contrib/mtree
SRCS+= getid.c misc.c spec.c
.PATH: ${SRCTOP}/contrib/mknod
CFLAGS+=-I${SRCTOP}/contrib/mknod
SRCS+= pack_dev.c
CFLAGS+= -I${SRCTOP}/lib/libnetbsd
LIBADD= netbsd util sbuf
HAS_TESTS=
SUBDIR.${MK_TESTS}+= tests
.include <bsd.prog.mk>