Subject: Build fixes
To: None <current-users@netbsd.org>
From: Christian Hattemer <c.hattemer@arcor.de>
List: current-users
Date: 06/06/2006 13:59:49
Hi,

I've tried to build a release with lots of options disabled. As I read, this
isn't really supported, but here's how far I got.

First thing is some fallout from the sendmail removal. /etc/mail/aliases has
always been installed with sendmail and still is with Postfix. Here's the
fix for the postfix conditional that crept in:

--- src/distrib/sets/lists/etc/mi.orig	    2006-05-31 05:01:05.000000000 +0200
+++ src/distrib/sets/lists/etc/mi
@@ -62,7 +62,7 @@
 ./etc/localtime					etc-sys-etc
 ./etc/locate.conf				etc-sys-etc
 ./etc/mail.rc					etc-mail-etc
-./etc/mail/aliases				etc-postfix-etc		postfix
+./etc/mail/aliases				etc-postfix-etc
 ./etc/mail/helpfile				etc-obsolete		obsolete
 ./etc/mail/local-host-names			etc-obsolete		obsolete
 ./etc/mail/sendmail.cf				etc-obsolete		obsolete


The next problem is during release when the ALL_KERNELS variable is set to a
subset of the available kernels. It seems it must have worked at some time,
but looking at the old revs I don't see how it could have. I have set
ALL_KERNELS=GENERIC INSTALL to skip all the kernels I don't need.

The build tries to cd into kernel build directories that don't exist and
fails. This is fixed by this patch:

--- src/etc/Makefile.orig   2006-05-30 05:01:34.000000000 +0200
+++ src/etc/Makefile
@@ -538,26 +538,28 @@ kernset-${configfile}: .PHONY build_kern
 	kernsuffixes="${KERNEL_SUFFIXES:S/^/./}"; \
 	kern_tgz=${RELEASEDIR}/${RELEASEMACHINEDIR}/binary/sets/kern-${configfile}.tgz; \
 	pax_cmd="GZIP=-9 ${TOOL_PAX} -O -zw -M -N ${NETBSDSRCDIR}/etc -f $${kern_tgz}"; \
-	cd $${kerndir} && { \
-		kernels=; newest=; \
-		for kernel in $${kernlist}; do \
-			for s in "" $${kernsuffixes}; do \
-				ks="$${kernel}$${s}"; \
-				[ -f $${ks} ] || continue; \
-				kernels="$${kernels} $${ks}"; \
-				[ -z "$${newest}" -o $${ks} -nt "$${newest}" ] && \
-					newest=$${ks}; \
+	if [ -d $${kerndir} ]; then \
+		cd $${kerndir} && { \
+			kernels=; newest=; \
+			for kernel in $${kernlist}; do \
+				for s in "" $${kernsuffixes}; do \
+					ks="$${kernel}$${s}"; \
+					[ -f $${ks} ] || continue; \
+					kernels="$${kernels} $${ks}"; \
+					[ -z "$${newest}" -o $${ks} -nt "$${newest}" ] && \
+						newest=$${ks}; \
+				done; \
 			done; \
-		done; \
-		[ $${kern_tgz} -nt "$${newest}" ] || { \
-			echo "echo $${kernels} | $${pax_cmd}"; \
-			( echo "/set uname=${BINOWN} gname=${BINGRP}"; \
-			echo ". type=dir optional"; \
-			for kernel in $${kernels}; do \
-				echo "./$${kernel} type=file"; \
-			done ) | eval $${pax_cmd}; \
+			[ $${kern_tgz} -nt "$${newest}" ] || { \
+				echo "echo $${kernels} | $${pax_cmd}"; \
+				( echo "/set uname=${BINOWN} gname=${BINGRP}"; \
+				echo ". type=dir optional"; \
+				for kernel in $${kernels}; do \
+					echo "./$${kernel} type=file"; \
+				done ) | eval $${pax_cmd}; \
+			} \
 		} \
-	}
+	fi
 .endfor	# KERNEL_SETS							# }
 
 build_releasekernels: .PHONY
@@ -570,18 +572,20 @@ releasekern-${configfile}: .PHONY build_
 	@ kernlist=`${GETKERNELAWK} ${KERNCONFDIR}/${configfile:C/.*\///}`; \
 	kerndir=${KERNOBJDIR}/${configfile:C/.*\///}; \
 	kernsuffixes="${KERNEL_SUFFIXES:S/^/./}"; \
-	cd $${kerndir} && {	\
-		for kernel in $${kernlist}; do \
-			for s in "" $${kernsuffixes}; do \
-				ks="$${kernel}$${s}"; \
-				[ ! -f $${ks} ] && continue; \
-				knl_gz="${RELEASEDIR}/${RELEASEMACHINEDIR}/binary/kernel/$${ks}-${configfile:C/.*\///}.gz"; \
-				[ $${knl_gz} -nt $${ks} ] && continue; \
-				echo "gzip -c -9 < $${kerndir}/$${ks} > $${knl_gz}"; \
-				gzip -c -9 < $${ks} > $${knl_gz}; \
+	if [ -d $${kerndir} ]; then \
+		cd $${kerndir} && {	\
+			for kernel in $${kernlist}; do \
+				for s in "" $${kernsuffixes}; do \
+					ks="$${kernel}$${s}"; \
+					[ ! -f $${ks} ] && continue; \
+					knl_gz="${RELEASEDIR}/${RELEASEMACHINEDIR}/binary/kernel/$${ks}-${configfile:C/.*\///}.gz"; \
+					[ $${knl_gz} -nt $${ks} ] && continue; \
+					echo "gzip -c -9 < $${kerndir}/$${ks} > $${knl_gz}"; \
+					gzip -c -9 < $${ks} > $${knl_gz}; \
+				done; \
 			done; \
-		done; \
-	}
+		} \
+	fi
 .endfor	# KERNEL_SETS EXTRA_KERNELS					# }
 
 # snap_md_post --


Later in release, when all ramdisks have been created it fails again when
the installation kernels get finished. It looks for install kernels that
haven't been built. The failure is this:

--- all-instkernel ---
all ===> etc/i386/instkernel
nbmake: nbmake: don't know how to make
/usr/home/krille/wrap-current/obj/sys/arch/i386/compile/INSTALL_LAPTOP/netbsd.
Stop
*** [all-instkernel] Error code 2
1 error

nbmake: stopped in /usr/current-src/distrib/i386
*** [all-i386] Error code 2
1 error

nbmake: stopped in /usr/current-src/distrib
*** [snap_post] Error code 2
1 error

nbmake: stopped in /usr/current-src/etc
*** [release] Error code 2
1 error

nbmake: stopped in /usr/current-src

ERROR: Failed to make release
*** BUILD ABORTED ***


I think the problem is in src/distrib/common/Makefile.mdset here, but I'm
not sure and don't have a fix for that at the moment. Perhaps somebody with
more insight into the build system has an idea?

I'll probably go the "build.sh distribution sets" way suggested elsewhere
now.

Please CC me on reply.

Bye, Chris