diff --git a/release/Makefile b/release/Makefile --- a/release/Makefile +++ b/release/Makefile @@ -7,13 +7,15 @@ # memstick: Builds memory stick image (memstick.img) # mini-memstick: Builds minimal memory stick image (mini-memstick.img) # ftp: Sets up FTP distribution area (ftp) -# release: Invokes real-release, vm-release, and cloudware-release targets +# release: Invokes real-release, vm-release, cloudware-release, and mfsbsd-release targets # real-release: Build all media and FTP distribution area # vm-release: Build all virtual machine image targets # cloudware-release: Build all cloud hosting provider targets -# install: Invokes the release-install and vm-install targets +# mfsbsd-release: Build all mfsBSD image targets +# install: Invokes the release-install, vm-install, and mfsbsd-install targets # release-install: Copies all release installation media into ${DESTDIR} # vm-install: Copies all virtual machine images into ${DESTDIR} +# mfsbsd-install: Copies all mfsBSD images into ${DESTDIR} # # Variables affecting the build process: # WORLDDIR: location of src tree -- must have built world and default kernel @@ -30,6 +32,7 @@ # WITH_COMPRESSED_VMIMAGES: if set, compress virtual machine disk images # with xz(1) (extremely time consuming) # WITH_CLOUDWARE: if set, build cloud hosting disk images with the release +# WITH_MFSBSD: if set, build mfsBSD images with the release # TARGET/TARGET_ARCH: architecture of built release # @@ -113,7 +116,7 @@ beforeclean: chflags -R noschg . .include -clean: beforeclean +clean: beforeclean mfsbsd-clean base.txz: mkdir -p ${DISTDIR} @@ -312,7 +315,7 @@ mkdir -p ftp cp *.txz MANIFEST ftp -release: real-release vm-release cloudware-release +release: real-release vm-release cloudware-release mfsbsd-release ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} release-done true @@ -323,7 +326,7 @@ ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} obj ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${RELEASE_TARGETS} -install: release-install vm-install +install: release-install vm-install mfsbsd-install release-install: .if defined(DESTDIR) && !empty(DESTDIR) @@ -343,3 +346,4 @@ .include "${.CURDIR}/Makefile.inc1" .include "${.CURDIR}/Makefile.vm" +.include "${.CURDIR}/Makefile.mfsbsd" diff --git a/release/Makefile.mfsbsd b/release/Makefile.mfsbsd new file mode 100644 --- /dev/null +++ b/release/Makefile.mfsbsd @@ -0,0 +1,122 @@ +# +# $FreeBSD$ +# +# +# Makefile for building mfsBSD images. +# + +MFSBSD_TYPES?= mfsbsd-se +MFSBSD_FORMATS?= img iso +MFSBSD-SEIMG_DESC= Special edition mfsBSD .img file including base.txz and kernel.txz +MFSBSD-SEISO_DESC= Special edition mfsBSD .iso file including base.txz and kernel.txz + +# +# Paths +# +MFSBSD_DIR?= ${WORLDDIR}/contrib/mfsbsd +MFSBSD_SRCDIR?= /usr/src +MFSBSD_TMPDIR?= ${.OBJDIR}/../contrib/mfsbsd_tmp +MFSBSD_WRKDIR?= ${MFSBSD_TMPDIR}/work +MFSBSD_DISTDIR!= make -C ${MFSBSD_DIR} -V _DESTDIR WRKDIR=${MFSBSD_WRKDIR} +MFSBSD_ROOTDIR!= make -C ${MFSBSD_DIR} -V _ROOTDIR WRKDIR=${MFSBSD_WRKDIR} +MFSBSD_MKINCLUDEDIR?= /usr/share/mk + +# +# Build defaults +# +MFSBSD_JOBS!= sysctl -n hw.ncpu +MFSBSD_KERNCONF?= GENERIC +MFSBSD_PKGSTATIC?= /usr/local/sbin/pkg-static + +.if defined(WITH_MFSBSD) && !empty(WITH_MFSBSD) +CLEANDIRS+= ${MFSBSD_TMPDIR} +. for TYPE in ${MFSBSD_TYPES} +. for FORMAT in ${MFSBSD_FORMATS} +CLEANFILES+= ${TYPE}.${FORMAT} +. endfor +. endfor +.endif + +mfsbsd-base: mfsbsd-image + +mfsbsd-image: +.if defined(WITH_MFSBSD) && !empty(WITH_MFSBSD) +. for TYPE in ${MFSBSD_TYPES} +. for FORMAT in ${MFSBSD_FORMATS} + ${IMAKE} ${.MAKEFLAGS} -C ${.CURDIR} ${TYPE}.${FORMAT} +. endfor +. endfor +.endif + +mfsbsd-se.img: mfsbsd-before-build mfsbsd-build mfsbsd-build-install + cd ${MFSBSD_TMPDIR} && ${IMAKE} -m ${MFSBSD_MKINCLUDEDIR} \ + ${.MAKEFLAGS} MAKEJOBS=${MFSBSD_JOBS} WRKDIR=${MFSBSD_WRKDIR} \ + SE=1 IMAGE=${.TARGET} BASE=${.OBJDIR} image + install -m 0644 ${MFSBSD_TMPDIR}/${.TARGET} . + +mfsbsd-se.iso: mfsbsd-before-build mfsbsd-build mfsbsd-build-install + cd ${MFSBSD_TMPDIR} && ${IMAKE} -m ${MFSBSD_MKINCLUDEDIR} \ + ${.MAKEFLAGS} MAKEJOBS=${MFSBSD_JOBS} WRKDIR=${MFSBSD_WRKDIR} \ + SE=1 ISOIMAGE=${.TARGET} BASE=${.OBJDIR} iso + install -m 0644 ${MFSBSD_TMPDIR}/${.TARGET} . + +mfsbsd-before-build: ${MFSBSD_WRKDIR}/.tmp_done +${MFSBSD_WRKDIR}/.tmp_done: +# Copy mfsBSD source files to the temporary folder. This is necessary to +# prevent mfsBSD build process from writing to the src contrib directory. + mkdir -p ${MFSBSD_WRKDIR} + cp -rpf ${MFSBSD_DIR}/. ${MFSBSD_TMPDIR}/ + touch ${MFSBSD_WRKDIR}/.tmp_done +.if !exists(${MFSBSD_PKGSTATIC}) +# If pkg-static is not present at the device, mfsBSD build process +# cannot proceed further. Thus, creating .packages_done bypasses +# that specific part of the build process that requires pkg-static. + touch ${MFSBSD_WRKDIR}/.packages_done +.endif + +mfsbsd-build: ${MFSBSD_WRKDIR}/.build_done +${MFSBSD_WRKDIR}/.build_done: + cd ${MFSBSD_SRCDIR} && ${IMAKE} \ + ${.MAKEFLAGS} -j${MFSBSD_JOBS} buildworld buildkernel + touch ${MFSBSD_WRKDIR}/.build_done + +mfsbsd-build-install: ${MFSBSD_WRKDIR}/.install_done +${MFSBSD_WRKDIR}/.install_done: + ${IMAKE} ${.MAKEFLAGS} -C ${.CURDIR} obj bootonly + cd ${MFSBSD_TMPDIR} && ${IMAKE} \ + ${.MAKEFLAGS} MAKEJOBS=${MFSBSD_JOBS} WRKDIR=${MFSBSD_WRKDIR} \ + KERNCONF=${MFSBSD_KERNCONF} \ + SE=1 BASE=${.OBJDIR} install + +list-mfsbsd: + @${ECHO} + @${ECHO} "Supported mfsBSD image targets:" +.for TYPE in ${MFSBSD_TYPES} +. for FORMAT in ${MFSBSD_FORMATS} + @${ECHO} " ${TYPE}.${FORMAT}: ${${TYPE:tu}${FORMAT:tu}_DESC}" +. endfor +.endfor + +mfsbsd-install: +.if defined(WITH_MFSBSD) && !empty(WITH_MFSBSD) + mkdir -p ${DESTDIR}/mfsbsdimages +. for TYPE in ${MFSBSD_TYPES} +. for FORMAT in ${MFSBSD_FORMATS} + install -m 0644 ${TYPE}.${FORMAT} \ + ${DESTDIR}/mfsbsdimages/${OSRELEASE}-${TYPE}.${FORMAT} +. endfor +. endfor + cd ${DESTDIR}/mfsbsdimages && sha512 ${OSRELEASE}* > \ + ${DESTDIR}/mfsbsdimages/CHECKSUM.SHA512 + cd ${DESTDIR}/mfsbsdimages && sha256 ${OSRELEASE}* > \ + ${DESTDIR}/mfsbsdimages/CHECKSUM.SHA256 +.endif + +mfsbsd-release: +.if defined(WITH_MFSBSD) && !empty(WITH_MFSBSD) + ${IMAKE} -C ${.CURDIR} ${.MAKEFLAGS} mfsbsd-image +.endif + +mfsbsd-clean: + cd ${MFSBSD_DIR} && env MAKEOBJDIR=${MFSBSD_TMPDIR} \ + ${IMAKE} ${.MAKEFLAGS} WRKDIR=${MFSBSD_WRKDIR} clean-all diff --git a/release/release.conf.sample b/release/release.conf.sample --- a/release/release.conf.sample +++ b/release/release.conf.sample @@ -114,3 +114,10 @@ ## If WITH_CLOUDWARE is set to a non-empty value, this is a list of providers ## to create disk images. #CLOUDWARE="EC2 GCE OCI VAGRANT-VIRTUALBOX VAGRANT-VMWARE" + +## Set to a non-empty value to build mfsBSD images as part of the release build. +#WITH_MFSBSD= + +## If WITH_MFSBSD is set to a non-empty value, this is a list of mfsBSD +## image formats to create. +#MFSBSD_FORMATS="img iso" diff --git a/release/release.sh b/release/release.sh --- a/release/release.sh +++ b/release/release.sh @@ -118,6 +118,9 @@ # cloud providers as part of the release. WITH_CLOUDWARE= + # Set to non-empty value to build mfsBSD images as part of the release. + WITH_MFSBSD= + return 0 } # env_setup() @@ -193,7 +196,8 @@ RELEASE_RMAKEFLAGS="${ARCH_FLAGS} \ KERNCONF=\"${KERNEL}\" ${CONF_FILES} ${SRCPORTS} \ WITH_DVD=${WITH_DVD} WITH_VMIMAGES=${WITH_VMIMAGES} \ - WITH_CLOUDWARE=${WITH_CLOUDWARE} XZ_THREADS=${XZ_THREADS}" + WITH_CLOUDWARE=${WITH_CLOUDWARE} WITH_MFSBSD=${WITH_MFSBSD} \ + XZ_THREADS=${XZ_THREADS}" return 0 } # env_check()