X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=build.sh;h=4c2ea6e1e539f7cc444a0ef90f1a771e9472d270;hb=e733b0545a632bea8536796f97ab3b266423aa16;hp=ce7e399e07d933799ddf3eb9721bb020c5425611;hpb=befac29d132ef957e2d564a6ace7ff0b0bb2b597;p=bootstrapfs.git diff --git a/build.sh b/build.sh index ce7e399..4c2ea6e 100755 --- a/build.sh +++ b/build.sh @@ -1,7 +1,6 @@ #!/bin/bash # -# Build PlanetLab-Bootstrap.tar.bz2, the reference image for PlanetLab -# nodes. +# Build bootstrapfs-*.tar.bz2, the reference image(s) for PlanetLab nodes. # # Mark Huang # Marc E. Fiuczynski @@ -10,16 +9,23 @@ # $Id: buildnode.sh,v 1.12.6.1 2007/08/30 20:09:20 mef Exp $ # + +# +# This will build the bootstrafs-*.tar.bz2 images, which comprises +# the base root image on the node, then create the ${NAME} bootstrap image +# which is made up of just the additional files needed for a ${NAME} nodegroup +# node. +# + PATH=/sbin:/bin:/usr/sbin:/usr/bin -# In both a normal CVS environment and a PlanetLab RPM -# build environment, all of our dependencies are checked out into -# directories at the same level as us. +# in the PlanetLab build environment, our dependencies are checked out +# into directories at the same level as us. if [ -d ../build ] ; then PATH=$PATH:../build srcdir=../ else - echo "Error: Could not find $(cd ../.. && pwd -P)/build/" + echo "Error: Could not find ../build in $(pwd)" exit 1 fi @@ -31,6 +37,10 @@ pl_process_fedora_options $@ shiftcount=$? shift $shiftcount +# expecting fcdistro and pldistro on the command line +pldistro=$1; shift +fcdistro=${pl_DISTRO_NAME} + # Do not tolerate errors set -e @@ -39,29 +49,38 @@ set -e # would like to pretend that we are. export PL_BOOTCD=1 -# "Parse" out the packages and groups into the options passed to mkfedora -# -k = exclude kernel* packages -options="-k" -packages=$(pl_getPackages base.lst) -groups=$(pl_getGroups base.lst) -for package in ${packages} ; do options="$options -p $package"; done -for group in ${groups} ; do options="$options -g $group"; done +echo "+++++++++++++pkgsfile=$pkgsfile (and -k)" -# Populate a minimal /dev and then the files for the base PlanetLab-Bootstrap content +# Populate a minimal /dev and then the files for the base bootstrapfs content vref=${PWD}/base install -d -m 755 ${vref} -pl_mkfedora ${vref} ${options} +pl_root_makedevs $vref + +pkgsfile=$(pl_locateDistroFile ../build/ ${pldistro} bootstrapfs.pkgs) +# -k = exclude kernel* packages +pl_root_mkfedora ${vref} ${pldistro} $pkgsfile + +# optionally invoke a post processing script after packages from +# $pkgsfile have been installed +pkgsdir=$(dirname $pkgsfile) +pkgsname=$(basename $pkgsfile .pkgs) +postfile="${pkgsdir}/${pkgsname}.post" +[ -f $postfile ] && /bin/bash $postfile ${vref} || : -for bootstrapfs in bootstrap-filesystems/*.lst ; do - NAME=$(basename $bootstrapfs .lst) +# for distros that do not define bootstrapfs variants +pkgs_count=$(ls ../build/config.${pldistro}/bootstrapfs-*.pkgs 2> /dev/null | wc -l) +[ $pkgs_count -gt 0 ] && for pkgs in $(ls ../build/config.${pldistro}/bootstrapfs-*.pkgs); do + NAME=$(basename $pkgs .pkgs | sed -e s,bootstrapfs-,,) - echo "--------START BUILDING PlanetLab-Bootstrap-${NAME}: $(date)" + echo "--------START BUILDING bootstrapfs-${NAME}: $(date)" # "Parse" out the packages and groups for yum - packages=$(pl_getPackages $bootstrapfs) - groups=$(pl_getGroups $bootstrapfs) + packages=$(pl_getPackages $fcdistro $pldistro $pkgs) + groups=$(pl_getGroups $fcdistro $pldistro $pkgs) + echo "${NAME} has the following packages : ${packages}" + echo "${NAME} has the following groups : ${groups}" - vdir=${PWD}/bootstrap-filesystems/${NAME} + vdir=${PWD}/${pldistro}-filesystems/${NAME} rm -rf ${vdir}/* install -d -m 755 ${vdir} @@ -70,11 +89,25 @@ for bootstrapfs in bootstrap-filesystems/*.lst ; do rm -f ${vdir}/var/lib/rpm/__db* # Install the system vserver specific packages - [ -n "$systempackages" ] && yum -c ${vdir}/etc/yum.conf --installroot=${vdir} -y install $systempackages - [ -n "$systemgroups" ] && yum -c ${vdir}/etc/yum.conf --installroot=${vdir} -y groupinstall $systemgroups + [ -n "$packages" ] && yum -c ${vdir}/etc/yum.conf --installroot=${vdir} -y install $packages + [ -n "$groups" ] && yum -c ${vdir}/etc/yum.conf --installroot=${vdir} -y groupinstall $groups + + if [ -f "${vdir}/proc/cpuinfo" ] ; then + echo "WARNING: some RPM appears to have mounted /proc in ${NAME}. Unmounting it!" + umount ${vdir}/proc + fi + + # optionally invoke a post processing script after packages from + # $pkgs have been installed + pkgsdir=$(dirname $pkgs) + pkgsname=$(basename $pkgs .pkgs) + postfile="${pkgsdir}/${pkgsname}.post" + [ -f $postfile ] && /bin/bash $postfile ${vdir} || : - # Create a copy of the system vserver w/o the vserver reference files and make it smaller. - # This is a three step process: + + # Create a copy of the ${NAME} bootstrap filesystem w/o the base + # bootstrap filesystem and make it smaller. This is a three step + # process: # step 1: clean out yum cache to reduce space requirements yum -c ${vdir}/etc/yum.conf --installroot=${vdir} -y clean all @@ -99,18 +132,19 @@ for bootstrapfs in bootstrap-filesystems/*.lst ; do rm -rf ${vdir} rm -f ${vdir}.changes mv ${vdir}-tmp ${vdir} - - echo "--------STARTING tar'ing PlanetLab-Bootstrap-${NAME}.tar.bz2: $(date)" - tar -cpjf bootstrap-filesystems/PlanetLab-Bootstrap-${NAME}.tar.bz2 -C ${vdir} . - echo "--------FINISHED tar'ing PlanetLab-Bootstrap-${NAME}.tar.bz2: $(date)" - echo "--------DONE BUILDING PlanetLab-Bootstrap-${NAME}: $(date)" + + echo "--------STARTING tar'ing bootstrapfs-${NAME}-${pl_DISTRO_ARCH}.tar.bz2: $(date)" + tar -cpjf ${pldistro}-filesystems/bootstrapfs-${NAME}-${pl_DISTRO_ARCH}.tar.bz2 -C ${vdir} . + echo "--------FINISHED tar'ing bootstrapfs-${NAME}-${pl_DISTRO_ARCH}.tar.bz2: $(date)" + echo "--------DONE BUILDING bootstrapfs-${NAME}-${pl_DISTRO_ARCH}: $(date)" done # Build the base Bootstrap filesystem -echo "--------STARTING tar'ing PlanetLab-Bootstrap.tar.bz2: $(date)" # clean out yum cache to reduce space requirements -yum -c ${vref}/etc/yum.conf --installroot=${vdir} -y clean all -tar -cpjf PlanetLab-Bootstrap.tar.bz2 -C ${vref} . -echo "--------FINISHED tar'ing PlanetLab-Bootstrap.tar.bz2: $(date)" +yum -c ${vref}/etc/yum.conf --installroot=${vref} -y clean all + +echo "--------STARTING tar'ing bootstrapfs-${pldistro}-${pl_DISTRO_ARCH}.tar.bz2: $(date)" +tar -cpjf bootstrapfs-${pldistro}-${pl_DISTRO_ARCH}.tar.bz2 -C ${vref} . +echo "--------FINISHED tar'ing bootstrapfs-${pldistro}-${pl_DISTRO_ARCH}.tar.bz2: $(date)" exit 0