Skip site navigation (1)Skip section navigation (2)
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>