Date: Thu, 11 Dec 1997 01:18:19 -0700 (MST) From: bgingery@gtcs.com To: freebsd-hackers@FreeBSD.ORG Subject: Re: Why so many steps to build new kernel? Message-ID: <199712110818.BAA18546@home.gtcs.com>
next in thread | raw e-mail | index | archive | help
--0-1681692777-881828304=:1749 Content-Type: TEXT/plain; CHARSET=US-ASCII The attached is far from perfect, but it's what *I* built for 2.1.0 and have modified only slightly since for building a new kernel. One step that it DOESN'T have that I think it should is to look for the latest-modified file in /usr/src/sys/<architecture>/conf and default *that* as the kernel to build. What it *does* do, is ... Well, about 12-13 steps, including logging what's being done, archiving a copy of the kernel setup that's about to be built and logging ... Please take it if it's useful and modify it at will. It presumes a log at /usr/local/etc/changelog[.html] (I don't think I've ever converted this one to output HTML instead of just the original text changelog notations) and a mirror directory of from the filesystem starting at root for storage of the archived files at /usr/local/etc/syschanges/* At first, I just sent it to Archie who I thought might want to include it in what it appears he's going to do for actually setting up a config file, but then decided that others might want to comment on it, too. Bruce Gingery <bgingery@gtcs.com> Advanced Integrators, LC <URL: http://gtcs.com/ai/ > --0-1681692777-881828304=:1749 Content-Type: APPLICATION/x-sh Content-Description: newkernel.sh #!/bin/sh # # I got tired of looking up the kernel recompile in the manual, so # have placed it here in a shell script! 2 Jan 1997 5:48 AM [bg] # AWK=/usr/bin/awk CP=/bin/cp DATE=/bin/date GREP=/usr/bin/grep LOGGER=/usr/bin/logger LN=/bin/ln MAKE=/usr/bin/make MV=/bin/mv RM=/bin/rm SED=/usr/bin/sed TEE=/usr/bin/tee TTYCMD=/usr/bin/tty UNAME=/usr/bin/uname WHO=/usr/bin/who LOGFILE=/usr/local/etc/changelog LOGTTY="`${TTYCMD} | ${SED} 's/\/dev\///'`"; REBUILDER="`/usr/bin/who am i | /usr/bin/awk '{print $1;}'`"; CONFIGPATH=usr/src/sys/i386/conf BACKUPPATH=/usr/local/etc/syschanges/${CONFIGPATH} CONFIGPATH=/${CONFIGPATH} KERNSTAMP="`${DATE} +'%Y.%m.%d-%H.%M.%S-%Z'`"; LOGFORMAT="+%a, %d %b %Y %H:%M:%S %Z"; LOGSTAMP=`${DATE} "${LOGFORMAT}"`; WHICHKERN="`${UNAME} -s`-`${UNAME} -r`"; if [ -z $1 ]; then NEWKERN="LDTENABLED"; else NEWKERN=$1; fi if [ ! -r ${CONFIGPATH}/${NEWKERN} ]; then echo Cannot find ${CONFIGPATH}/${NEWKERN} echo command format... echo " $0 [configname [clean]]" exit 1; fi MAKELOG=${CONFIGPATH}/makelog.${NEWKERN}-${KERNSTAMP} if [ -z $2 ]; then CLEAN=; elif [ X"$2" = X"clean" ]; then CLEAN="clean"; elif [ X"$2" = X"clean" ]; then CLEAN="CLEAN"; elif [ X"$2" = X"clean" ]; then CLEAN="Clean"; else echo command format... echo " $0 [configname [clean]]" exit 1; fi KERNNAME="`${GREP} '^ident' ${CONFIGPATH}/${NEWKERN} | ${AWK} '{print $2;}'`" echo Starting ${WHICHKERN} rebuild of \"${NEWKERN}\" as \"${KERNNAME}\" by ${REBUILDER} on ${LOGTTY} at ${LOGSTAMP} echo Copying current config file to ${BACKUPPATH}/${NEWKERN}-${KERNSTAMP} echo "" >> ${LOGFILE} echo "Starting ${WHICHKERN} rebuild of \"${NEWKERN}\" as \"${KERNNAME}\"" >> ${LOGFILE} echo " by ${REBUILDER} on ${LOGTTY} at ${LOGSTAMP}" >> ${LOGFILE} echo " invoked as $0 $*" >> ${LOGFILE} ${CP} -p ${CONFIGPATH}/${NEWKERN} ${BACKUPPATH}/${NEWKERN}-${KERNSTAMP} echo " conf stowed as ${BACKUPPATH}/${NEWKERN}-${KERNSTAMP}" >> ${LOGFILE} NOWSTAMP=`${DATE} "${LOGFORMAT}"`; if [ -n ${CLEAN} ]; then /usr/sbin/config ${NEWKERN} EXITVAL=$? echo " /usr/sbin/config ${NEWKERN} at ${NOWSTAMP}" >> ${LOGFILE} else /usr/sbin/config -n ${NEWKERN} EXITVAL=$? echo " /usr/sbin/config -n ${NEWKERN} at ${NOWSTAMP}" >> ${LOGFILE} fi if [ ${EXITVAL} -gt 0 ]; then echo " exited at ${EXITVAL} (failed)" >> ${LOGFILE} echo " deleting archived ${NEWKERN} file" >> ${LOGFILE} ${RM} -f ${BACKUPPATH}/${NEWKERN}-${KERNSTAMP} exit ${EXITVAL}; fi cd ../../compile/${NEWKERN} NOWSTAMP=`${DATE} "${LOGFORMAT}"`; ${MAKE} depend EXITVAL=$? echo " ${MAKE} depend at ${NOWSTAMP}" >> ${LOGFILE} if [ ${EXITVAL} -gt 0 ]; then echo " exited at ${EXITVAL} (failed)" >> ${LOGFILE} echo " deleting archived ${NEWKERN} file" >> ${LOGFILE} ${RM} -f ${BACKUPPATH}/${NEWKERN}-${KERNSTAMP} exit ${EXITVAL}; fi if [ -n ${CLEAN} ]; then NOWSTAMP=`${DATE} "${LOGFORMAT}"`; ${MAKE} clean EXITVAL=$? echo " ${MAKE} clean at ${NOWSTAMP}" >> ${LOGFILE} if [ ${EXITVAL} -gt 0 ]; then echo " exited at ${EXITVAL} (failed)" >> ${LOGFILE} echo " deleting archived ${NEWKERN} file" >> ${LOGFILE} ${RM} -f ${BACKUPPATH}/${NEWKERN}-${KERNSTAMP} exit ${EXITVAL}; fi fi NOWSTAMP=`${DATE} "${LOGFORMAT}"`; ${MAKE} 2>&1 | ${TEE} ${MAKELOG} EXITVAL=$? echo " ${MAKE} at ${NOWSTAMP}" >> ${LOGFILE} ${LOGGER} -p auth.alert "Kernel rebuild of \"${NEWKERN}\" in progress" if [ ${EXITVAL} -gt 0 ]; then echo " exited at ${EXITVAL} (failed)" >> ${LOGFILE} echo " deleting archived ${NEWKERN} file" >> ${LOGFILE} ${RM} -f ${BACKUPPATH}/${NEWKERN}-${KERNSTAMP} ${GREP} '^error' ${MAKELOG} > ${CONFIGPATH}/obvous-errors.${NEWKERN}-${LOGSTAMP} exit ${EXITVAL}; fi for sv in /${KERNNAME}.old~~~~ /${KERNNAME}.old~~~ /${KERNNAME}.old~~ /${KERNNAME}.old~ /${KERNNAME}.old; do if [ -x ${sv}~ ]; then if [ -x ${sv} ]; then ${MV} ${sv} ${sv}~; echo " ${sv} saved as ${sv}~" >> ${LOGFILE} fi fi done NOWSTAMP=`${DATE} "${LOGFORMAT}"`; ${MAKE} install EXITVAL=$? echo " ${MAKE} install at ${NOWSTAMP}" >> ${LOGFILE} if [ ${EXITVAL} -gt 0 ]; then echo " exited at ${EXITVAL} (failed)" >> ${LOGFILE} exit ${EXITVAL}; fi logger -p crit.emerg "New \"${NEWKERN}\" kernel installed as /${KERNNAME}" if [ X"${KERNNAME}" != X"${NEWKERN}" ]; then ${LN} -f /${KERNNAME} /${KERNNAME}.${NEWKERN} echo " /${KERNNAME} hard-linked to /${KERNNAME}.${NEWKERN}" echo " /${KERNNAME} hard-linked to /${KERNNAME}.${NEWKERN}" >> ${LOGFILE} fi --0-1681692777-881828304=:1749--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199712110818.BAA18546>