#!/bin/bash # # buildinstall # # Copyright (C) 2007 Red Hat, Inc. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # usage() { echo "Usage: buildinstall --version --product --release [--pkgorder ] [--prodpath ] [--discs ] " >&2 exit 1 } PRODUCTPATH="anaconda" while [ $# -gt 0 ]; do case $1 in --pkgorder) PKGORDER=$2 PKGORDERSTR="--pkgorder $2" shift; shift ;; --comp) COMPNAME=$2 shift; shift ;; --version) VERSION=$2 shift; shift ;; --release) RELEASESTR=$2 shift; shift ;; --product) PRODUCTSTR=$2 shift; shift ;; --variant) VARIANT=$2 shift; shift ;; --prodpath) PRODUCTPATH=$2 shift; shift ;; --nogr) NOGRSTR="--nogr" shift ;; --debug) DEBUGSTR="--debug" shift ;; --buildinstdir) BUILDINSTDIR=$2 shift; shift ;; --discs) DISCSTR=$2 shift; shift ;; --bugurl) BUGURL=$2 shift; shift ;; *) DIR=$1 shift ;; esac done if [ -z "$PRODUCTSTR" ]; then usage fi if [ -z "$VERSION" ]; then usage fi if [ -z "$DIR" ]; then usage fi if [ -z "$RELEASESTR" ]; then usage fi if [ -z "$DISCSTR" ]; then DISCSTR="ALL" fi if [ -z "$BUGURL" ]; then BUGURL="your distribution provided bug reporting tool." fi p=`cd $DIR; /bin/pwd` PKGDIR=$p/$PRODUCTPATH if [ -z "$BUILDINSTDIR" ]; then BUILDINSTDIR=$p/buildinstall.tree.$$ rm -rf $BUILDINSTDIR mkdir -p $BUILDINSTDIR fi TREEDIR=${TMPDIR:-/tmp}/treedir.$$ BUILDARCH=`rpm -qp --qf "%{ARCH}\n" $PKGDIR/anaconda-runtime-[0-9]* |head -n 1` echo "Running buildinstall..." echo "Checking for repository metadata..." if ! [ -d $p/repodata ]; then echo "Repodata must exist in the tree!" >&2 exit 1 fi pushd $BUILDINSTDIR rpm2cpio $PKGDIR/anaconda-runtime-[0-9]* | cpio --quiet -iumd './usr*' popd UPD_INSTROOT=./upd-instroot MK_IMAGES=./mk-images MK_TREEINFO=./maketreeinfo.py MK_STAMP=./makestamp.py BUILDINSTALL=./buildinstall for f in $UPD_INSTROOT $MK_IMAGES $MK_STAMP $MK_TREEINFO $BUILDINSTALL; do if [ ! -f $f ]; then cp -a $BUILDINSTDIR/usr/lib/anaconda-runtime/$f* $BUILDINSTDIR/ else cp -a $f* $BUILDINSTDIR/ fi done UPD_INSTROOT=$BUILDINSTDIR/upd-instroot MK_IMAGES=$BUILDINSTDIR/mk-images MK_TREEINFO=$BUILDINSTDIR/maketreeinfo.py MK_STAMP=$BUILDINSTDIR/makestamp.py BUILDINSTALL=$BUILDINSTDIR/buildinstall echo "Building images..." $UPD_INSTROOT $DEBUGSTR $NOGRSTR $PKGDIR $TREEDIR/image-template $TREEDIR/instimage $p if [ -n "$PKGORDER" ]; then echo "Getting package order..." echo "PYTHONPATH=$TREEDIR/instimage/usr/lib/anaconda $TREEDIR/instimage/usr/lib/anaconda-runtime/pkgorder $p $BUILDARCH $PRODUCTPATH" PYTHONPATH=$TREEDIR/instimage/usr/lib/anaconda $TREEDIR/instimage/usr/lib/anaconda-runtime/pkgorder $p $BUILDARCH $PRODUCTPATH > $PKGORDER fi echo "Writing .treeinfo file..." $MK_TREEINFO --family="$PRODUCTSTR" ${VARIANT:+--variant="$VARIANT"} --version=$VERSION --arch=$BUILDARCH --packagedir=${PKGDIR#$p/} --outfile=$p/.treeinfo echo "Making images..." $MK_IMAGES $DEBUGSTR $NOGRSTR $PKGDIR $p $TREEDIR/image-template $TREEDIR/instimage $BUILDARCH "$PRODUCTSTR" $VERSION $PRODUCTPATH "$BUGURL" echo "Writing .discinfo file" $MK_STAMP --releasestr="$RELEASESTR" --arch=$BUILDARCH --discNum="$DISCSTR" --baseDir=$PRODUCTPATH/base --packagesDir=$PKGDIR --pixmapsDir=$PRODUCTPATH/pixmaps --outfile=$p/.discinfo rm -rf $TREEDIR/image-template $TREEDIR/instimage $BUILDINSTDIR