freebsd-skq/release/Makefile
1995-02-28 04:38:21 +00:00

306 lines
9.3 KiB
Makefile

# $Id: Makefile,v 1.111 1995/02/28 01:15:52 phk Exp $
#
# How to roll a release:
#
# make release CHROOTDIR=<lots of disk> [ RELEASETAG=something ]
#
# As far as I know, this will roll everything nicely into the "stage"
# directory. I still need to write the two rules to move that into
# the "cdrom" and "ftp" directories.
# I also need to "make ports" and install those, but I'm not going to do
# that on a 14.4 line just yet...
# Things which without too much trouble can be considered variables
EXTRADISTRIBUTIONS= secure games manpages proflibs dict info
CPIO1= etc/services etc/protocols
CPIO2= scripts/miscfuncs.sh scripts/instdist.sh scripts/netinst.sh \
scripts/adduser.sh scripts/bininst.sh scripts/setup.sh
FDDEVICE= fd0
FDCYLS= 80
FDCYLSIZE= 15k
FDLABEL= fd1200
MNT= /mnt
ZIPNSPLIT= gzip --no-name -9 -c | split -b 240640 -
# Things which will get you into trouble if you change them
DISTRIBUTIONS= bin ${EXTRADISTRIBUTIONS}
MTREEFILES= ${.CURDIR}/../etc/mtree
RD= ${RELEASEDIR}/stage
release:
.if !defined(CHROOTDIR)
@echo "To make a release you must set CHROOTDIR" && false
.endif
-mkdir ${CHROOTDIR}
chflags -R noschg ${CHROOTDIR}/.
rm -rf ${CHROOTDIR}/*
cd ${.CURDIR}/../etc ; ${MAKE} distrib-dirs DESTDIR=${CHROOTDIR}
cd ${.CURDIR}/../etc ; ${MAKE} distribution DESTDIR=${CHROOTDIR}
cd ${.CURDIR}/.. ; ${MAKE} install DESTDIR=${CHROOTDIR}
echo "#!/bin/sh" > ${CHROOTDIR}/mk
echo "set -ex" >> ${CHROOTDIR}/mk
echo "cd /usr/src" >> ${CHROOTDIR}/mk
echo "make world" >> ${CHROOTDIR}/mk
echo "cd sbin/sysinstall" >> ${CHROOTDIR}/mk
echo "make obj" >> ${CHROOTDIR}/mk
echo "cd ../../release" >> ${CHROOTDIR}/mk
echo "make obj" >> ${CHROOTDIR}/mk
echo "make doRELEASE" >> ${CHROOTDIR}/mk
echo "RELEASEDIR=/R" >> ${CHROOTDIR}/etc/make.conf
.if !defined(RELEASETAG)
cd ${CHROOTDIR}/usr ; cvs co src -P
.else
cd ${CHROOTDIR}/usr ; cvs export -r ${RELEASETAG} src
.endif
chmod 755 ${CHROOTDIR}/mk
chroot ${CHROOTDIR} /mk
clean:
rm -rf cpio_crunch boot_crunch release.[1-9]
# Clean out ${RELEASEDIR} and make the directory structure.
release.1:
@cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR
-mkdir ${RELEASEDIR}
chflags -R noschg ${RELEASEDIR}/.
rm -rf ${RELEASEDIR}/*
mkdir ${RD}
mkdir ${RD}/bootfd
mkdir ${RD}/bootfd/dev
mkdir ${RD}/bootfd/mnt
mkdir ${RD}/bootfd/stand
mkdir ${RD}/cpiofd
mkdir ${RD}/cpiofd/stand
mkdir ${RD}/floppies
mkdir ${RD}/dists
mkdir ${RD}/dists/bin
mkdir ${RD}/tarballs
mkdir ${RD}/tarballs/bin
cd ${.CURDIR}/../etc && make distrib-dirs DESTDIR=${RD}/dists/bin
for i in ${EXTRADISTRIBUTIONS} ; do \
mkdir ${RD}/dists/$$i ; \
mkdir ${RD}/tarballs/$$i ; \
mtree -deU -f ${MTREEFILES}/BSD.root.dist \
-p ${RD}/dists/$$i > /dev/null ; \
mtree -deU -f ${MTREEFILES}/BSD.usr.dist \
-p ${RD}/dists/$$i/usr > /dev/null ; \
mtree -deU -f ${MTREEFILES}/BSD.var.dist \
-p ${RD}/dists/$$i/var > /dev/null ; \
done
touch release.1
# Install the system into the various distributions.
release.2:
@cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR
cd ${.CURDIR}/.. ; make distribute DISTDIR=${RD}/dists
touch release.2
# Make and install a couple of kernels we need.
release.3:
@cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR
cd ${.CURDIR}/../sys/i386/conf ; \
config GENERIC ; \
config BOOTFLP
cd ${.CURDIR}/../sys/compile/GENERIC ; \
make depend ; \
make kernel ; \
install -c kernel ${RD}/dists/bin/kernel.GENERIC
ln -f ${RD}/dists/bin/kernel.GENERIC \
${RD}/cpiofd/kernel
cd ${.CURDIR}/../sys/compile/BOOTFLP ; \
make depend ; \
make kernel ; \
install -s -c kernel ${RD}/bootfd/kernel
touch release.3
# Make and install the two crunched binaries which live on the floppies.
# You are not supposed to like this :-)
release.4:
@cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR
for j in boot cpio ; do \
rm -rf $${j}_crunch ; \
mkdir $${j}_crunch ; \
( cd $${j}_crunch ; \
crunchgen ${.CURDIR}/$${j}_crunch.conf ; \
${MAKE} -f $${j}_crunch.mk objs exe NOCRYPT=yes ) ; \
gzip -9 < $${j}_crunch/$${j}_crunch \
> ${RD}/$${j}fd/stand/$${j}_crunch ; \
rm -rf $${j}_crunch ; \
chmod 555 ${RD}/$${j}fd/stand/$${j}_crunch ; \
for i in `crunchgen -l ${.CURDIR}/$${j}_crunch.conf` ; do \
ln -f ${RD}/$${j}fd/stand/$${j}_crunch \
${RD}/$${j}fd/stand/$$i ; \
done ; \
done
touch release.4
# Fix up the distributions.
release.5:
@cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR
if [ -d ${RD}/dists/bin/usr/share/man ] ; then \
rm -rf ${RD}/dists/manpages/usr/share/man ;\
mv ${RD}/dists/bin/usr/share/man \
${RD}/dists/manpages/usr/share/man ;\
fi
if [ -d ${RD}/dists/bin/usr/games ] ; then \
rm -rf ${RD}/dists/games/usr/games ;\
mv ${RD}/dists/bin/usr/games \
${RD}/dists/games/usr/games ;\
fi
if [ -d ${RD}/dists/bin/usr/share/games ] ; then \
rm -rf ${RD}/dists/games/usr/share/games ;\
mv ${RD}/dists/bin/usr/share/games \
${RD}/dists/games/usr/share/games ;\
fi
if [ -d ${RD}/dists/bin/var/games ] ; then \
rm -rf ${RD}/dists/games/var/games ;\
mv ${RD}/dists/bin/var/games \
${RD}/dists/games/var/games ;\
fi
if [ -d ${RD}/dists/bin/usr/share/dict ] ; then \
rm -rf ${RD}/dists/dict/usr/share/dict ;\
mv ${RD}/dists/bin/usr/share/dict \
${RD}/dists/dict/usr/share/dict ;\
fi
for i in airport birthtoken flowers na.phone zipcodes ; do \
if [ -f ${RD}/dists/bin/usr/share/misc/$$i ] ; then \
mv ${RD}/dists/bin/usr/share/misc/$$i \
${RD}/dists/dict/usr/share/misc ; \
fi ; \
done
for i in ${RD}/dists/bin/usr/lib/*_p.a ; do \
if [ -f $$i ] ; then \
mv $$i \
${RD}/dists/proflibs/usr/lib ; \
fi ; \
done
-cd ${RD}/dists ; \
find ${EXTRADISTRIBUTIONS} -depth -type d -print | xargs rmdir
touch release.5
# Complete the bootfd
release.6:
@cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR
( cd ${RD}/dists/bin/dev ; \
ls console tty ttyv1 null zero \
sd[0123][a-h] wd[0123][a-h] fd[01] \
rsd[0123][a-h] rwd[0123][a-h] rfd[01] | \
cpio -dump ${RD}/bootfd/dev )
install -c ${.CURDIR}/../COPYRIGHT ${RD}/bootfd
cd ${RD}/dists/bin/usr/share/FAQ ; \
install -c diskspace.FAQ ${RD}/bootfd/DISKSPACE.FAQ ;\
install -c RELNOTES.FreeBSD ${RD}/bootfd ;\
install -c TROUBLESHOOTING ${RD}/bootfd ;\
install -c README-2.0 ${RD}/bootfd/README
touch ${RD}/bootfd/this_is_boot_flp
.if !defined(VNDEVICE)
-umount /dev/${FDDEVICE}
-umount ${MNT}
echo y | fdformat /dev/r${FDDEVICE}
disklabel -w -r -B \
-b ${RD}/dists/bin/usr/mdec/fdboot \
-s ${RD}/dists/bin/usr/mdec/bootfd \
/dev/r${FDDEVICE} ${FDLABEL}
newfs -c 80 -b 4096 -f 512 -i 9000 -m 0 -t 0 -u 0 \
-o space -T ${FDLABEL} /dev/r${FDDEVICE}
mount -o async /dev/${FDDEVICE} ${MNT}
cd ${RD}/bootfd ; find . -print | cpio -dumpv ${MNT}
sync
umount ${MNT}
fsck /dev/r${FDDEVICE}
dd if=/dev/r${FDDEVICE} of=${RD}/floppies/boot.tmp \
bs=${FDCYLSIZE} count=${FDCYLS}
mv ${RD}/floppies/boot.tmp ${RD}/floppies/boot.flp
gzip -9 -c < ${RD}/floppies/boot.flp > ${RD}/floppies/boot.flp.gz
.endif
touch release.6
# Complete the cpiofd directory
# XXX a lot of stuff is missing here...
release.7:
@cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR
cd ${RD}/dists/bin ; ls ${CPIO1} | cpio -dump ${RD}/cpiofd
cd ${.CURDIR} ; ls ${CPIO2} | cpio -dumpv ${RD}/cpiofd
chmod 755 ${RD}/cpiofd/scripts/*
cp ${RD}/dists/bin/usr/sbin/tzsetup ${RD}/cpiofd
( cd ${RD}/cpiofd ; \
( rm -f OK ; find . -print ; touch OK ; echo OK ) | \
cpio -H newc -oa | gzip -9 -c | dd conv=osync ) \
> ${RD}/floppies/cpio.flp
gzip -1 -c < ${RD}/floppies/cpio.flp > ${RD}/floppies/cpio.flp.gz
touch release.7
# Make binary tarballs
release.8:
@cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR
rm -rf ${RD}/tarballs
mkdir -p ${RD}/tarballs
@for i in ${DISTRIBUTIONS} ; \
do \
if [ -d ${RD}/dists/$${i} ] ; then \
cd ${.CURDIR} ; \
$(MAKE) doTARBALL SD=${RD}/dists/$${i} \
TD=$$i ARG="." ; \
( cd ${RD}/tarballs/$${i}; \
sh -e ${.CURDIR}/scripts/mkchecksums.sh ) ; \
cp ${.CURDIR}/scripts/extract_$${i}.sh \
${RD}/tarballs/$${i}/extract.sh;\
echo "$${i} distribution is finished."; \
fi ; \
done
touch release.8
# Make source tarballs
release.9:
@cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR
@cd ${.CURDIR} ; $(MAKE) doTARBALL SD=/usr/src TD=src/base ARG="[A-Z]*"
@for i in bin etc games gnu include lib libexec release sbin \
secure lkm eBones share sys usrbin usrsbin ; do \
if [ -d /usr/src/$$i ] ; then \
cd ${.CURDIR} ; \
$(MAKE) doTARBALL SD=/usr/src \
TD=src/$$i ARG="$$i" ; \
fi ; \
done
( cd ${RD}/tarballs/src; \
sh -e ${.CURDIR}/scripts/mkchecksums.sh ) ; \
cp ${.CURDIR}/scripts/extract_src.sh \
${RD}/tarballs/src/extract.sh;\
echo "src distribution is finished."; \
touch release.9
# Various "subroutine" and other supporting targets.
doTARBALL:
.if !defined(SD)
@echo "SD undefined in doTARBALL" ; exit 1
.endif
.if !defined(TD)
@echo "TB undefined in doTARBALL" ; exit 1
.endif
.if !defined(ARG)
@echo "ARGundefined in doTARBALL" ; exit 1
.endif
rm -rf ${RD}/tarballs/${TD}
mkdir -p ${RD}/tarballs/${TD}
( cd ${SD} ; \
echo rolling ${TD} tarball ;\
tar --exclude CVS -cf - ${ARG} | \
${ZIPNSPLIT} ${RD}/tarballs/${TD}/`basename ${TD}`. )
doRELEASE: release.1 release.2 release.3 release.4 release.5 release.6 \
release.7 release.8 release.9
@echo "Release done"
ckRELEASEDIR:
.if !defined(RELEASEDIR)
@echo "To make a release RELEASEDIR must be defined" && false
.endif
.include <bsd.prog.mk>