Makefile.bootcd revision 1.31
11.31Smartin# $NetBSD: Makefile.bootcd,v 1.31 2015/05/27 15:17:59 martin Exp $ 21.1Shubertf# 31.1Shubertf# Makefile snipped to create a CD/DVD ISO 41.1Shubertf# 51.1Shubertf 61.1Shubertf# XXX TODO: 71.1Shubertf# 1) merge with src/distrib/cdrom 81.1Shubertf# 2) teach makefs to add data from more than 1 directory (see below) 91.1Shubertf 101.1Shubertf# 111.1Shubertf# Required variables: 121.1Shubertf# CDBASE Basename of the iso 131.1Shubertf# 141.1Shubertf# Optional variables: 151.1Shubertf# CDRELEASE Set to 'true' to include $RELEASEDIR/$MACHINE on the CD 161.7Shubertf# CDRELEASE_NOISOS Excludes installation/cdrom directory if set 171.9Schristos# CDSOURCE Set to 'true' to include $RELEASEDIR/source on the CD 181.13Ssborrill# CDEXTRA Set to a list of files or directories containing extra 191.13Ssborrill# stuff to put on CD (set by build.sh -C flag) 201.13Ssborrill# CDBUILDEXTRA Set to a list of files or directories containing extra 211.13Ssborrill# stuff to put on CD (use in Makefiles) 221.13Ssborrill# CDEXTRA_SKIP A list of file exclusion paths to exclude when copying 231.13Ssborrill# directories of extra stuff in CDEXTRA AND CDBUILDEXTRA 241.1Shubertf# BOOT Defaults to $DESTDIR/usr/mdec/boot 251.1Shubertf# BOOTXX_CD9660 Defaults to $DESTDIR/usr/mdec/bootxx_cd9660 261.1Shubertf# CDBOOTOPTIONS Options for installboot, eg -o console=com0,speed=9600 271.8Sbouyer# CDMAKEFSOPTIONS Options for makefs, eg bootimage=i386;bootxx,no-emul-boot 281.25Smartin# CDMAKEFSEXTRAOPTS additional options for makefs, e.g. -F specfile 291.1Shubertf# CDROMS_RELEASEDIR Where to install ${CDBASE}.iso 301.8Sbouyer# CDINSTKERNEL instkernel directory (relative to ${.CURDIR}) 311.8Sbouyer# CDKERNELS couples of the form: 321.8Sbouyer# source name_on_cd 331.15Sad# CDRUNTIME files/directories to copy from $DESTDIR onto the CD 341.28Smartin# CD_SETS sets to be extracted onto the CD 351.28Smartin# SETS_DIR where the CD_SETS are found (default provided) 361.12Ssborrill# source kernels are copied from ${CDINSTKERNEL} (or its obj dir) 371.12Ssborrill# note that as of yet, bootxx_cd9660 can't load kernel names of more than 381.12Ssborrill# 8 chars (though they can be in a sub-directory meaning the pathname is 391.12Ssborrill# longer than 8 chars) 401.1Shubertf# 411.1Shubertf 421.1ShubertfBOOT?= ${DESTDIR}/usr/mdec/boot 431.1ShubertfBOOTXX_CD9660?= ${DESTDIR}/usr/mdec/bootxx_cd9660 441.1ShubertfCDRELEASE?= false 451.9SchristosCDSOURCE?= false 461.8Sbouyer.if ${CDRELEASE} == false 471.8SbouyerCDROMS_RELEASEDIR?= ${MACHINE}/installation/cdrom 481.8Sbouyer.else 491.20SrizCDROMS_RELEASEDIR?= images 501.8Sbouyer.endif 511.7Shubertf.if defined(CDRELEASE_NOISOS) 521.7ShubertfCDRELEASE_EXCLUDE= -s ',./installation/cdrom.*,,gp' 531.7Shubertf.endif 541.19Stsutsui.if !defined(CDRELEASE_LIVEIMAGE) 551.19StsutsuiCDRELEASE_EXCLUDE+= -s ',./installation/liveimage.*,,gp' 561.19Stsutsui.endif 571.19Stsutsui.if !defined(CDRELEASE_INSTALLIMAGE) 581.19StsutsuiCDRELEASE_EXCLUDE+= -s ',./installation/installimage.*,,gp' 591.19Stsutsui.endif 601.1Shubertf 611.28SmartinSETS_DIR?= ${RELEASEDIR}/${RELEASEMACHINEDIR}/binary/sets 621.28Smartin 631.8Sbouyer.include <bsd.own.mk> # For PRINTOBJDIR 641.8Sbouyer.include <bsd.kernobj.mk> # For KERNSRCDIR 651.8Sbouyer 661.18SjmcneillDISTRIBVER!= ${HOST_SH} ${KERNSRCDIR}/conf/osrelease.sh 671.8SbouyerDISTRIBREV!= ${HOST_SH} ${KERNSRCDIR}/conf/osrelease.sh -s 681.28SmartinCUROBJDIR!= cd ${.CURDIR} && ${PRINTOBJDIR} 691.8SbouyerISO_VOLID!= echo NETBSD_${DISTRIBREV} | tr a-z A-Z 701.8SbouyerPUBLISHER?= The_NetBSD_Project 711.8Sbouyer.if defined(CDMAKEFSOPTIONS) 721.22Schristos_CDMAKEFSOPTIONS= rockridge,label=${ISO_VOLID},publisher=${PUBLISHER},${CDMAKEFSOPTIONS} 731.8Sbouyer.else 741.22Schristos_CDMAKEFSOPTIONS= rockridge,label=${ISO_VOLID},publisher=${PUBLISHER} 751.8Sbouyer.endif 761.8Sbouyer 771.28Smartin.if ${MKUNPRIVED} == "no" 781.28SmartinCD_METALOG.unpriv= 791.31Smartinmtunpriv= 801.28Smartin.else 811.28SmartinCD_METALOG.unpriv=-M ${METALOG}.sanitised 821.29Smartinmtunpriv="-U" 831.28Smartin.endif 841.28Smartin 851.1Shubertf# Stuff that should come from elsewhere - XXX where? - HF 861.1ShubertfCP?= cp 871.1ShubertfRM?= rm 881.1ShubertfMKDIR?= mkdir -p 891.1ShubertfCHMOD?= chmod 901.17SchristosECHO?= echo 911.1Shubertf 921.18Sjmcneill.if ${CDRELEASE} == false 931.18SjmcneillCDIMAGE= ${CDBASE}.iso 941.18Sjmcneill.else 951.18SjmcneillCDIMAGE= NetBSD-${DISTRIBVER}-${CDBASE:S/cd$//}.iso 961.18Sjmcneill.endif 971.28SmartinWORKSPEC= fs.spec 981.1Shubertf 991.18SjmcneillCLEANFILES+= ${CDIMAGE} 1001.8SbouyerCLEANFILES+= bootxx.${MACHINE} 1011.28SmartinCLEANFILES+= ${WORKSPEC} 1021.1Shubertf 1031.28SmartinCDSETSENV= DESTDIR=${DESTDIR:Q} \ 1041.28Smartin MACHINE=${MACHINE:Q} \ 1051.28Smartin MACHINE_ARCH=${MACHINE_ARCH:Q} \ 1061.28Smartin AWK=${TOOL_AWK:Q} \ 1071.28Smartin CKSUM=${TOOL_CKSUM:Q} \ 1081.28Smartin DB=${TOOL_DB:Q} \ 1091.28Smartin HOST_SH=${HOST_SH:Q} \ 1101.28Smartin MAKE=${MAKE:Q} \ 1111.28Smartin MKTEMP=${TOOL_MKTEMP:Q} \ 1121.28Smartin MTREE=${TOOL_MTREE:Q} \ 1131.28Smartin PAX=${TOOL_PAX:Q} \ 1141.28Smartin COMPRESS_PROGRAM=${COMPRESS_PROGRAM:Q} \ 1151.28Smartin GZIP=${GZIP_FLAGS:Q} \ 1161.28Smartin PKG_CREATE=${TOOL_PKG_CREATE:Q} \ 1171.28Smartin SED=${TOOL_SED:Q} \ 1181.28Smartin TSORT=${TSORT:Q} \ 1191.28Smartin MKRUMP=no \ 1201.28Smartin MKCOMPAT=no \ 1211.28Smartin MKDEBUG=no \ 1221.28Smartin MKDEBUGLIB=no 1231.28Smartin 1241.28SmartinCDSETSCMD= cd ${NETBSDSRCDIR}/distrib/sets && \ 1251.28Smartin ${CDSETSENV} \ 1261.28Smartin ${HOST_SH} 1271.1Shubertf 1281.1Shubertf.include "${NETBSDSRCDIR}/distrib/common/Makefile.distrib" 1291.1Shubertf 1301.8Sbouyer.if defined(CDINSTKERNEL) 1311.8Sbouyer_INSTKERNELNOBJDIR!= cd ${.CURDIR}/${CDINSTKERNEL} && ${PRINTOBJDIR} 1321.8Sbouyer.endif 1331.8Sbouyer.if exists(${DESTDIR}/usr/mdec/bootxx_cd9660) 1341.8Sbouyer.if exists(${DESTDIR}/usr/mdec/boot.${MACHINE}) 1351.8SbouyerBOOT2=boot.${MACHINE} 1361.8Sbouyer.else 1371.8SbouyerBOOT2=boot 1381.8Sbouyer.endif 1391.8Sbouyer.endif 1401.1Shubertf 1411.1Shubertfprepare: 1421.28Smartin ${MKDIR} "${CUROBJDIR}/cdrom" 1431.8Sbouyer.if defined(CDKERNELS) 1441.8Sbouyer.for kernel target in ${CDKERNELS} 1451.8Sbouyer ${CP} ${_INSTKERNELNOBJDIR}/${kernel} cdrom/${target} 1461.8Sbouyer.endfor 1471.8Sbouyer.if exists(${DESTDIR}/usr/mdec/bootxx_cd9660) 1481.8Sbouyer ${RM} -f cdrom/${BOOT2} 1491.8Sbouyer ${CP} ${DESTDIR}/usr/mdec/${BOOT2} cdrom/${BOOT2} 1501.8Sbouyer ${RM} -f bootxx.${MACHINE} 1511.8Sbouyer ${CP} ${DESTDIR}/usr/mdec/bootxx_cd9660 bootxx.${MACHINE} 1521.8Sbouyer ${CHMOD} +w bootxx.${MACHINE} 1531.8Sbouyer.if defined(CDBOOTOPTIONS) 1541.8Sbouyer ${TOOL_INSTALLBOOT} -m${MACHINE} -e ${CDBOOTOPTIONS} bootxx.${MACHINE} 1551.8Sbouyer.endif 1561.8Sbouyer.endif 1571.8Sbouyer.endif 1581.1Shubertf 1591.24Sdsl.if ${MAKEVERBOSE} >= 2 1601.24SdslPAX_v?= -v 1611.24Sdsl.else 1621.24SdslPAX_v?= 1631.24Sdsl.endif 1641.24Sdsl 1651.1Shubertf# Copy $RELEASEDIR/${MACHINE} in the CDROM dir 1661.1Shubertf# 1671.1Shubertf# XXX This could be done a lot easier if makefs(8) could 1681.1Shubertf# XXX include more than one directory on the image - HF 1691.1Shubertf# 1701.1Shubertfcopy-releasedir: 1711.18Sjmcneill ${RM} -f ${RELEASEDIR}/${CDROMS_RELEASEDIR}/${CDIMAGE} 1721.9Schristos if ${CDRELEASE}; then \ 1731.28Smartin if [ ! -d ${RELEASEDIR}/${RELEASEMACHINEDIR} ]; then \ 1741.14Smatt echo "Missing ${RELEASEDIR}/${RELEASEMACHINEDIR}, aborting"; \ 1751.9Schristos exit 1; \ 1761.9Schristos fi; \ 1771.28Smartin ${MKDIR} "${CUROBJDIR}/cdrom/${MACHINE}"; \ 1781.28Smartin release_destdir="${CUROBJDIR}/cdrom/${MACHINE}"; \ 1791.15Sad cd ${RELEASEDIR}/${RELEASEMACHINEDIR}; \ 1801.9Schristos echo Copying $$(pwd) to $$release_destdir ...; \ 1811.7Shubertf ${TOOL_PAX} \ 1821.24Sdsl -rw -pe ${PAX_v} \ 1831.7Shubertf ${CDRELEASE_EXCLUDE} \ 1841.9Schristos . $$release_destdir; \ 1851.28Smartin cd "${CUROBJDIR}"; \ 1861.9Schristos fi 1871.9Schristos if ${CDSOURCE}; then \ 1881.9Schristos if [ ! -d ${RELEASEDIR}/source ]; then \ 1891.9Schristos echo "Missing ${RELEASEDIR}/source, aborting"; \ 1901.9Schristos exit 1; \ 1911.9Schristos fi; \ 1921.28Smartin ${MKDIR} "${CUROBJDIR}/cdrom/source"; \ 1931.28Smartin release_destdir="${CUROBJDIR}/cdrom/source"; \ 1941.9Schristos cd ${RELEASEDIR}/source; \ 1951.9Schristos echo Copying $$(pwd) to $$release_destdir ...; \ 1961.9Schristos ${TOOL_PAX} \ 1971.24Sdsl -rw -pe ${PAX_v} \ 1981.9Schristos . $$release_destdir; \ 1991.28Smartin cd "${CUROBJDIR}"; \ 2001.1Shubertf fi 2011.28Smartin if [ "X${CDRUNTIME}" != "X" ]; then \ 2021.15Sad release_destdir=$${curdir}/cdrom; \ 2031.15Sad cd $$release_destdir; \ 2041.15Sad cd ${DESTDIR}; \ 2051.15Sad for cde in ${CDRUNTIME}; \ 2061.15Sad do \ 2071.24Sdsl ${TOOL_PAX} -rw -pp ${PAX_v} $${cde} $$release_destdir;\ 2081.15Sad done; \ 2091.28Smartin cd "${CUROBJDIR}"; \ 2101.15Sad fi 2111.13Ssborrill if [ "X${CDEXTRA}${CDBUILDEXTRA}" != "X" ]; then \ 2121.13Ssborrill skipflag=""; \ 2131.16Shubertf cdextra_skip="${CDEXTRA_SKIP}"; \ 2141.16Shubertf if [ "X$${cdextra_skip}" != "X" ]; then \ 2151.13Ssborrill rm -f cdskip; \ 2161.16Shubertf for skip in $${cdextra_skip}; \ 2171.13Ssborrill do \ 2181.13Ssborrill echo $${skip} >> cdskip; \ 2191.13Ssborrill done; \ 2201.28Smartin skipflag="-X ${CUROBJDIR:Q}/cdskip"; \ 2211.13Ssborrill fi; \ 2221.16Shubertf cdextra="${CDEXTRA}"; \ 2231.16Shubertf cdbuildextra="${CDBUILDEXTRA}"; \ 2241.16Shubertf for cde in $${cdextra} $${cdbuildextra}; \ 2251.13Ssborrill do \ 2261.28Smartin release_destdir="${CUROBJDIR}/cdrom"; \ 2271.13Ssborrill if [ -f $${cde} ]; then \ 2281.13Ssborrill echo Copying $${cde} to $$release_destdir ...; \ 2291.13Ssborrill ${CP} $${cde} $${release_destdir}; \ 2301.13Ssborrill elif [ -d $${cde} ]; then \ 2311.13Ssborrill cd $${cde}; \ 2321.13Ssborrill echo Copying $$(pwd) to $$release_destdir ...; \ 2331.13Ssborrill ${TOOL_MTREE} -c $${skipflag} | \ 2341.24Sdsl ${TOOL_PAX} -rw -pe ${PAX_v} -M \ 2351.13Ssborrill $$release_destdir; \ 2361.13Ssborrill else \ 2371.13Ssborrill echo "Missing $${cde}, aborting"; \ 2381.13Ssborrill exit 1; \ 2391.13Ssborrill fi; \ 2401.28Smartin cd "${CUROBJDIR}"; \ 2411.13Ssborrill done; \ 2421.11Sjnemeth fi 2431.28Smartin.if !empty(CD_SETS) 2441.28Smartin ${MKDIR} "${CUROBJDIR}/cdrom/etc/mtree" 2451.28Smartin.for set in ${CD_SETS} 2461.28Smartin if [ -f ${CUROBJDIR:Q}/cdrom/etc/mtree/set.${set} ]; then \ 2471.28Smartin ${CHMOD} +w ${CUROBJDIR:Q}/cdrom/etc/mtree/set.${set}; \ 2481.28Smartin fi; \ 2491.28Smartin ${CDSETSCMD} ./maketars -i "${CUROBJDIR}/cdrom" \ 2501.29Smartin ${CD_METALOG.unpriv} ${mtunpriv} -N ${NETBSDSRCDIR}/etc \ 2511.28Smartin -F "${CUROBJDIR}/cdrom/etc/mtree" \ 2521.28Smartin -d "${DESTDIR:S,^$,/,}" ${set} 2531.28Smartin.endfor 2541.28Smartin if [ -d "${CUROBJDIR}/cdrom/var/spool/ftp/hidden" ]; then \ 2551.28Smartin ${CHMOD} +r "${CUROBJDIR}/cdrom/var/spool/ftp/hidden"; \ 2561.28Smartin fi 2571.28Smartin.endif 2581.1Shubertf 2591.1Shubertfimage: 2601.28Smartin @echo Preparing spec files for makefs... 2611.28Smartin ${RM} -f ${WORKSPEC} 2621.31Smartin if [ -d cdrom/etc/mtree ]; then \ 2631.31Smartin cat cdrom/etc/mtree/* | \ 2641.31Smartin ${TOOL_SED} -e 's/ size=[0-9]*//' \ 2651.31Smartin -e '/^\.\/etc\/gettytab/d' > ${WORKSPEC}; \ 2661.31Smartin fi 2671.31Smartin if [ -r cdrom/dev/MAKEDEV ]; then \ 2681.31Smartin ${HOST_SH} cdrom/dev/MAKEDEV -s all | \ 2691.31Smartin ${TOOL_SED} -e '/^\. type=dir/d' \ 2701.31Smartin -e 's,^\.,./dev,' >> ${WORKSPEC}; \ 2711.31Smartin fi 2721.28Smartin.if defined(SPEC_IN) 2731.28Smartin cat ${SPEC_IN} >> ${WORKSPEC} 2741.28Smartin.endif 2751.28Smartin.if defined(SECONDARY_BOOT) 2761.28Smartin echo "./${SECONDARY_BOOT} type=file uname=root gname=wheel mode=0444" \ 2771.28Smartin >> ${WORKSPEC} 2781.28Smartin.endif 2791.28Smartin.if defined(SPEC_EXTRA) 2801.28Smartin cat ${SPEC_EXTRA} >> ${WORKSPEC} 2811.28Smartin.endif 2821.31Smartin if [ -s ${WORKSPEC} ]; then specarg="-F ${WORKSPEC}"; fi; \ 2831.31Smartin ${TOOL_MAKEFS} -N ${NETBSDSRCDIR}/etc -t cd9660 $${specarg} \ 2841.31Smartin ${CDMAKEFSEXTRAOPTS} -o ${_CDMAKEFSOPTIONS:Q} ${CDIMAGE} cdrom 2851.8Sbouyer 2861.8Sbouyer.if ${CDRELEASE} == false 2871.15Sadrelease: prepare .WAIT prepare_md_post .WAIT copy-releasedir .WAIT image_md_pre .WAIT image .WAIT image_md_post 2881.8Sbouyer ${MKDIR} ${RELEASEDIR}/${CDROMS_RELEASEDIR} 2891.18Sjmcneill ${RELEASE_INSTALL} ${CDIMAGE} ${RELEASEDIR}/${CDROMS_RELEASEDIR} 2901.1Shubertf 2911.8Sbouyeriso_image: 2921.8Sbouyer.else 2931.1Shubertfrelease: 2941.8Sbouyer 2951.15Sadiso_image: prepare .WAIT prepare_md_post .WAIT copy-releasedir .WAIT image_md_pre .WAIT image .WAIT image_md_post 2961.8Sbouyer ${MKDIR} ${RELEASEDIR}/${CDROMS_RELEASEDIR} 2971.18Sjmcneill ${RELEASE_INSTALL} ${CDIMAGE} ${RELEASEDIR}/${CDROMS_RELEASEDIR} 2981.8Sbouyer.endif 2991.1Shubertf 3001.1Shubertfclean: 3011.28Smartin @if [ -d cdrom/var/spool/ftp/hidden ]; then \ 3021.28Smartin ${CHMOD} +r cdrom/var/spool/ftp/hidden; \ 3031.28Smartin fi # XXX 3041.1Shubertf ${RM} -fr cdrom 3051.1Shubertf 3061.8Sbouyerprepare_md_post: .PHONY 3071.8Sbouyerimage_md_post: .PHONY 3081.15Sadimage_md_pre: .PHONY 3091.8Sbouyer 3101.1Shubertf.include <bsd.prog.mk> 311