3 # Makefile for building releases and release media.
6 # cdrom: Builds release CD-ROM media (disc1.iso)
7 # dvdrom: Builds release DVD-ROM media (dvd1.iso)
8 # memstick: Builds memory stick image (memstick.img)
9 # mini-memstick: Builds minimal memory stick image (mini-memstick.img)
10 # ftp: Sets up FTP distribution area (ftp)
11 # release: Invokes real-release, vm-release, and cloudware-release targets
12 # real-release: Build all media and FTP distribution area
13 # vm-release: Build all virtual machine image targets
14 # cloudware-release: Build all cloud hosting provider targets
15 # install: Invokes the release-install and vm-install targets
16 # release-install: Copies all release installation media into ${DESTDIR}
17 # vm-install: Copies all virtual machine images into ${DESTDIR}
19 # Variables affecting the build process:
20 # WORLDDIR: location of src tree -- must have built world and default kernel
21 # (by default, the directory above this one)
22 # PORTSDIR: location of ports tree to distribute (default: /usr/ports)
23 # DOCDIR: location of doc tree (default: /usr/doc)
24 # XTRADIR: xtra-bits-dir argument for <arch>/mkisoimages.sh
25 # NOPKG: if set, do not distribute third-party packages
26 # NOPORTS: if set, do not distribute ports tree
27 # NOSRC: if set, do not distribute source tree
28 # NODOC: if set, do not generate release documentation
29 # WITH_DVD: if set, generate dvd1.iso
30 # WITH_COMPRESSED_IMAGES: if set, compress installation images with xz(1)
31 # (uncompressed images are not removed)
32 # WITH_VMIMAGES: if set, build virtual machine images with the release
33 # WITH_COMPRESSED_VMIMAGES: if set, compress virtual machine disk images
34 # with xz(1) (extremely time consuming)
35 # WITH_CLOUDWARE: if set, build cloud hosting disk images with the release
36 # TARGET/TARGET_ARCH: architecture of built release
39 WORLDDIR?
= ${.CURDIR
}/..
42 RELNOTES_LANG?
= en_US.ISO8859-1
44 .if
!defined
(TARGET
) || empty
(TARGET
)
47 .if
!defined
(TARGET_ARCH
) || empty
(TARGET_ARCH
)
48 .if
${TARGET} == ${MACHINE}
49 TARGET_ARCH
= ${MACHINE_ARCH}
51 TARGET_ARCH
= ${TARGET}
54 IMAKE
= ${MAKE} TARGET_ARCH
=${TARGET_ARCH} TARGET
=${TARGET}
57 # Define OSRELEASE by using newvars.sh
58 .if
!defined
(OSRELEASE
) || empty
(OSRELEASE
)
59 .for _V in TYPE BRANCH REVISION
60 ${_V}!= eval
$$(awk
'/^${_V}=/{print}' ${.CURDIR
}/..
/sys
/conf
/newvers.sh
); echo
$$${_V}
62 .for _V in
${TARGET_ARCH}
63 .if
!empty
(TARGET
:M
${_V})
64 OSRELEASE
= ${TYPE}-${REVISION}-${BRANCH}-${TARGET}
65 VOLUME_LABEL
= ${REVISION
:C
/[.
-]/_
/g
}_
${BRANCH
:C
/[.
-]/_
/g
}_
${TARGET}
67 OSRELEASE
= ${TYPE}-${REVISION}-${BRANCH}-${TARGET}-${TARGET_ARCH}
68 VOLUME_LABEL
= ${REVISION
:C
/[.
-]/_
/g
}_
${BRANCH
:C
/[.
-]/_
/g
}_
${TARGET_ARCH}
73 .if
!defined
(VOLUME_LABEL
) || empty
(VOLUME_LABEL
)
74 VOLUME_LABEL
= FreeBSD_Install
77 .if
!exists
(${DOCDIR})
80 .if
!exists
(${PORTSDIR})
86 EXTRA_PACKAGES
+= ports.txz
89 EXTRA_PACKAGES
+= src.txz
92 EXTRA_PACKAGES
+= reldoc
97 .if exists
(${.CURDIR
}/${TARGET}/mkisoimages.sh
)
98 RELEASE_TARGETS
+= cdrom
99 IMAGES
+= disc1.iso bootonly.iso
100 . if defined
(WITH_DVD
) && !empty
(WITH_DVD
)
101 RELEASE_TARGETS
+= dvdrom
105 .if exists
(${.CURDIR
}/${TARGET}/make-memstick.sh
)
106 RELEASE_TARGETS
+= memstick.img
107 RELEASE_TARGETS
+= mini-memstick.img
108 IMAGES
+= memstick.img
109 IMAGES
+= mini-memstick.img
112 CLEANFILES
= packagesystem
*.txz MANIFEST release
${IMAGES}
113 .if defined
(WITH_COMPRESSED_IMAGES
) && !empty
(WITH_COMPRESSED_IMAGES
)
118 .if defined
(WITH_DVD
) && !empty
(WITH_DVD
)
119 CLEANFILES
+= pkg-stage
121 CLEANDIRS
= dist ftp disc1 bootonly dvd
124 .
include <bsd.obj.mk
>
129 cd
${WORLDDIR} && ${IMAKE} distributeworld DISTDIR
=${.OBJDIR
}/${DISTDIR}
130 # Set up mergemaster root database
131 sh
${.CURDIR
}/scripts
/mm-mtree.sh
-m
${WORLDDIR} -F \
132 "TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET}" -D
"${.OBJDIR}/${DISTDIR}/base"
133 etcupdate extract
-B
-M
"TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET}" \
134 -s
${WORLDDIR} -d
"${.OBJDIR}/${DISTDIR}/base/var/db/etcupdate"
135 # Package all components
136 cd
${WORLDDIR} && ${IMAKE} packageworld DISTDIR
=${.OBJDIR
}/${DISTDIR}
137 mv
${DISTDIR}/*.txz .
141 cd
${WORLDDIR} && ${IMAKE} distributekernel packagekernel DISTDIR
=${.OBJDIR
}/${DISTDIR}
142 mv
${DISTDIR}/kernel
*.txz .
145 mkdir
-p
${DISTDIR}/usr
146 ln
-fs
${WORLDDIR} ${DISTDIR}/usr
/src
147 cd
${DISTDIR} && tar cLvf
- --exclude .svn
--exclude .zfs \
148 --exclude .git
--exclude @
--exclude usr
/src
/release
/dist usr
/src | \
149 ${XZ_CMD} > ${.OBJDIR
}/src.txz
152 mkdir
-p
${DISTDIR}/usr
153 ln
-fs
${PORTSDIR} ${DISTDIR}/usr
/ports
154 cd
${DISTDIR} && tar cLvf
- \
155 --exclude .git
--exclude .svn \
156 --exclude usr
/ports
/distfiles
--exclude usr
/ports
/packages \
157 --exclude
'usr/ports/INDEX*' --exclude work usr
/ports | \
158 ${XZ_CMD} > ${.OBJDIR
}/ports.txz
161 cd
${.CURDIR
}/doc
&& ${MAKE} all install clean 'FORMATS=html txt' \
162 INSTALL_COMPRESSED
='' URLS_ABSOLUTE
=YES DOCDIR
=${.OBJDIR
}/rdoc
164 .for i in hardware readme relnotes errata
165 ln
-f rdoc
/${RELNOTES_LANG}/${i}/article.txt reldoc
/${i
:tu
}.TXT
166 ln
-f rdoc
/${RELNOTES_LANG}/${i}/article.html reldoc
/${i
:tu
}.HTM
168 cp rdoc
/${RELNOTES_LANG}/readme
/docbook.css reldoc
173 cd
${WORLDDIR} && ${IMAKE} installkernel installworld distribution \
174 DESTDIR
=${.OBJDIR
}/${.TARGET
} MK_RESCUE
=no MK_KERNEL_SYMBOLS
=no \
175 MK_PROFILE
=no MK_SENDMAIL
=no MK_TESTS
=no MK_LIB32
=no \
178 mkdir
-p
${.TARGET
}/usr
/freebsd-dist
179 for
dist in MANIFEST
$$(ls
*.txz | grep
-v
-- '-dbg'); \
180 do cp
$${dist} ${.TARGET
}/usr
/freebsd-dist
; \
182 # Copy documentation, if generated
184 cp reldoc
/* ${.TARGET
}
186 # Set up installation environment
187 ln
-fs
/tmp
/bsdinstall_etc
/resolv.conf
${.TARGET
}/etc
/resolv.conf
188 echo sendmail_enable
=\"NONE
\" > ${.TARGET
}/etc
/rc.conf
189 echo hostid_enable
=\"NO
\" >> ${.TARGET
}/etc
/rc.conf
190 echo debug.witness.trace
=0 >> ${.TARGET
}/etc
/sysctl.conf
191 echo vfs.mountroot.timeout
=\"10\" >> ${.TARGET
}/boot
/loader.conf
192 cp
${.CURDIR
}/rc.local
${.TARGET
}/etc
195 bootonly
: packagesystem
198 cd
${WORLDDIR} && ${IMAKE} installkernel installworld distribution \
199 DESTDIR
=${.OBJDIR
}/${.TARGET
} MK_AMD
=no MK_AT
=no \
200 MK_GAMES
=no MK_GROFF
=no \
201 MK_INSTALLLIB
=no MK_LIB32
=no MK_MAIL
=no \
202 MK_NCP
=no MK_TOOLCHAIN
=no MK_PROFILE
=no \
203 MK_INSTALLIB
=no MK_RESCUE
=no MK_DICT
=no \
204 MK_KERNEL_SYMBOLS
=no MK_TESTS
=no MK_DEBUG_FILES
=no
205 # Copy manifest only (no distfiles) to get checksums
206 mkdir
-p
${.TARGET
}/usr
/freebsd-dist
207 cp MANIFEST
${.TARGET
}/usr
/freebsd-dist
208 # Copy documentation, if generated
210 cp reldoc
/* ${.TARGET
}
212 # Set up installation environment
213 ln
-fs
/tmp
/bsdinstall_etc
/resolv.conf
${.TARGET
}/etc
/resolv.conf
214 echo sendmail_enable
=\"NONE
\" > ${.TARGET
}/etc
/rc.conf
215 echo hostid_enable
=\"NO
\" >> ${.TARGET
}/etc
/rc.conf
216 echo debug.witness.trace
=0 >> ${.TARGET
}/etc
/sysctl.conf
217 echo vfs.mountroot.timeout
=\"10\" >> ${.TARGET
}/boot
/loader.conf
218 cp
${.CURDIR
}/rc.local
${.TARGET
}/etc
223 cd
${WORLDDIR} && ${IMAKE} installkernel installworld distribution \
224 DESTDIR
=${.OBJDIR
}/${.TARGET
} MK_RESCUE
=no MK_KERNEL_SYMBOLS
=no \
225 MK_TESTS
=no MK_DEBUG_FILES
=no
227 mkdir
-p
${.TARGET
}/usr
/freebsd-dist
228 for
dist in MANIFEST
$$(ls
*.txz | grep
-v
-- '-dbg'); \
229 do cp
$${dist} ${.TARGET
}/usr
/freebsd-dist
; \
231 # Copy documentation, if generated
233 cp reldoc
/* ${.TARGET
}
235 # Set up installation environment
236 ln
-fs
/tmp
/bsdinstall_etc
/resolv.conf
${.TARGET
}/etc
/resolv.conf
237 echo sendmail_enable
=\"NONE
\" > ${.TARGET
}/etc
/rc.conf
238 echo hostid_enable
=\"NO
\" >> ${.TARGET
}/etc
/rc.conf
239 echo debug.witness.trace
=0 >> ${.TARGET
}/etc
/sysctl.conf
240 echo vfs.mountroot.timeout
=\"10\" >> ${.TARGET
}/boot
/loader.conf
241 cp
${.CURDIR
}/rc.local
${.TARGET
}/etc
244 release.iso
: disc1.iso
246 sh
${.CURDIR
}/${TARGET}/mkisoimages.sh
-b
${VOLUME_LABEL}_CD
${.TARGET
} disc1
${XTRADIR}
248 dvd1.iso
: dvd pkg-stage
249 sh
${.CURDIR
}/${TARGET}/mkisoimages.sh
-b
${VOLUME_LABEL}_DVD
${.TARGET
} dvd
${XTRADIR}
251 bootonly.iso
: bootonly
252 sh
${.CURDIR
}/${TARGET}/mkisoimages.sh
-b
${VOLUME_LABEL}_BO
${.TARGET
} bootonly
${XTRADIR}
254 memstick
: memstick.img
256 sh
${.CURDIR
}/${TARGET}/make-memstick.sh disc1
${.TARGET
}
258 mini-memstick
: mini-memstick.img
259 mini-memstick.img
: bootonly
260 sh
${.CURDIR
}/${TARGET}/make-memstick.sh bootonly
${.TARGET
}
262 packagesystem
: base.txz kernel.txz
${EXTRA_PACKAGES}
263 sh
${.CURDIR
}/scripts
/make-manifest.sh
*.txz
> MANIFEST
268 env REPOS_DIR
=${.CURDIR
}/pkg_repos
/ \
269 sh
${.CURDIR
}/scripts
/pkg-stage.sh
270 mkdir
-p
${.OBJDIR
}/dvd
/packages
/repos
/
271 cp
${.CURDIR
}/scripts
/FreeBSD_install_cdrom.conf \
272 ${.OBJDIR
}/dvd
/packages
/repos
/
276 cdrom
: disc1.iso bootonly.iso
281 cp
*.txz MANIFEST ftp
283 release
: real-release vm-release cloudware-release
287 ${MAKE} -C
${.CURDIR
} ${.MAKEFLAGS
} obj
288 ${MAKE} -C
${.CURDIR
} ${.MAKEFLAGS
} ${RELEASE_TARGETS}
290 install: release-install vm-install cloudware-install
293 .if defined
(DESTDIR
) && !empty
(DESTDIR
)
296 cp
-a ftp
${DESTDIR}/
298 cp
-p
${I} ${DESTDIR}/${OSRELEASE}-${I}
299 . if defined
(WITH_COMPRESSED_IMAGES
) && !empty
(WITH_COMPRESSED_IMAGES
)
300 ${XZ_CMD} -k
${DESTDIR}/${OSRELEASE}-${I}
303 cd
${DESTDIR} && sha512
${OSRELEASE}* > ${DESTDIR}/CHECKSUM.SHA512
304 cd
${DESTDIR} && sha256
${OSRELEASE}* > ${DESTDIR}/CHECKSUM.SHA256
306 .
include "${.CURDIR}/Makefile.vm"