#!/bin/sh # $AFresh1: release.sh,v 1.38 2017/02/16 07:08:49 andrew Exp $ # # Copyright (c) 2002, 2008 Steven Roberts # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # local _origtag=${TAG} TAG=`uname -sr | tr '[:lower:] .' '[:upper:]_'` KERNEL="GENERIC" ARCH=`machine` DEST="/usr/dest" RELEASE="/home/releasedir" XSRCDIR="/usr/xenocara" PORTSPATH="/usr/ports" BUILDUSER=build if [ -e /etc/mk.conf ]; then . /etc/mk.conf fi if [ -e /etc/release.conf ]; then . /etc/release.conf fi export CVSROOT if [ X"" != X"${_origtag}" ]; then TAG=$_origtag fi if [ X"$DEST" = X"" ]; then echo PLEASE SET \$DEST! >&2 exit 1 fi if [ X"$RELEASE" = X"" ]; then echo PLEASE SET \$RELEASE! >&2 exit 1 fi # See http://www.openbsd.org/anoncvs.html for instructions on fetching the # sources for the first time. empty_dir() { [ X"" = X"$1" ] && exit cd $1 || exit local _old=`mktemp -d .old.XXXXXXX` mv -f * .* $_old 2>/dev/null rm -rf $_old sync } update_sources() { echo "---------- Update sources ----------" local _d for _d in /usr/src "${XSRCDIR}" "${PORTSPATH}"; do if [ -d $_d -a -e $_d/CVS ]; then R="-r$TAG" [ "$TAG" = "HEAD" ] && R="-A" echo [$_d] cvs update $R -Pd cd $_d && cvs update $R -Pd || exit 255 fi done } build_kernel() { echo "---------- Build and install a new kernel ----------" local _status=0 unset DESTDIR RELEASEDIR cd /usr/src/sys/arch/$ARCH/compile/$KERNEL _status=$? if [ $_status -eq 0 ]; then make obj && make config && make && make install _status=$? fi if [ $_status -ne 0 ]; then echo Kernel Build Failed exit $_status fi } build_system() { echo "---------- Build a new system ----------" local _status=0 unset DESTDIR RELEASEDIR local DESTDIR RELEASEDIR mkdir -p /usr/obj chown $BUILDUSER:wheel /usr/obj chmod 755 /usr/obj empty_dir /usr/obj & cd /usr/src _status=$? if [ $_status -eq 0 ]; then nice make $BUILD_ARGS obj && nice make $BUILD_ARGS build _status=$? fi if [ $_status -ne 0 ]; then echo System Build Failed exit $_status fi echo Update /etc, /var, and /dev/MAKEDEV, either by hand or using sysmerge\(8\). } make_system_release() { echo "---------- Make and validate the system release ----------" local _status=0 local DESTDIR RELEASEDIR export DESTDIR=$DEST/base; export RELEASEDIR=$RELEASE mkdir -p $DESTDIR $RELEASEDIR empty_dir $DESTDIR & chown -R $BUILDUSER:wheel $DESTDIR $RELEASEDIR chmod -R 700 $DESTDIR $RELEASEDIR if [ $_status -eq 0 ]; then cd /usr/src/etc && nice make release _status=$? fi if [ $_status -eq 0 ]; then cd /usr/src/distrib/sets && sh checkflist _status=$? fi unset DESTDIR RELEASEDIR if [ $_status -ne 0 ]; then echo System Release Failed exit $_status fi } build_xenocara() { echo "---------- Build and install xenocara ----------" local _status=0 local DESTDIR RELEASEDIR unset DESTDIR RELEASEDIR mkdir -p /usr/xobj chown $BUILDUSER:wheel /usr/xobj chmod 755 /usr/xobj empty_dir /usr/xobj & cd $XSRCDIR _status=$? if [ $_status -eq 0 ]; then make $BUILD_ARGS bootstrap _status=$? fi if [ $_status -eq 0 ]; then make $BUILD_ARGS obj _status=$? fi if [ $_status -eq 0 ]; then make $BUILD_ARGS build _status=$? fi if [ $_status -ne 0 ]; then echo Xenocara Build Failed exit $_status fi } make_xenocara_release() { echo "---------- Make and validate the xenocara release ----------" local _status=0 local DESTDIR RELEASEDIR export DESTDIR=$DEST/xbase; export RELEASEDIR=$RELEASE mkdir -p $DESTDIR $RELEASEDIR empty_dir $DESTDIR & chown -R $BUILDUSER:wheel $DESTDIR $RELEASEDIR chmod -R 755 $DESTDIR $RELEASEDIR if [ $_status -eq 0 ]; then cd $XSRCDIR && nice make release _status=$? fi unset DESTDIR RELEASEDIR if [ $_status -ne 0 ]; then echo Xenocara Release Failed exit $_status fi } usage() { echo " Usage: $0 " echo echo "Options:" echo echo " update - Update sources" echo " kernel - Build and install a new kernel" echo " system - Build a new system" echo " system-release - Make and validate the system release" echo " xenocara - Build and install xenocara" echo " xenocara-release - Make and validate the xenocara release" echo " full - xenocara, xenocara-release, system, system-release" echo if [ `whoami` != "root" ]; then echo "You must be root to build a release." fi } START=`date` echo echo ".: release.sh - building an OpenBSD release :." echo "----------------------------------------------" echo echo " Tag: $TAG" echo " Kernel: $KERNEL-$ARCH" echo " Dest: $DEST" echo "Release: $RELEASE" if [ X"$CVSROOT" != X"" ]; then echo " Root: $CVSROOT" fi echo if [ $# = 0 ]; then usage; exit 1; fi if [ `whoami` != "root" ]; then echo "You must be root to build a release." exit 1 fi for i in $* do case $i in update) update_sources ;; kernel) build_kernel ;; system) build_system ;; system-release) make_system_release ;; xenocara) build_xenocara ;; xenocara-release) make_xenocara_release ;; full) build_xenocara make_xenocara_release build_system make_system_release ;; *) echo "---------- Abort! Abort! ----------" echo "Invalid option encountered: $i" echo "Exiting......." echo exit 1 ;; esac done echo echo " Start Time : $START" echo "Finish Time : `date`" echo