--- /dev/null
+#!/bin/bash
+
+# for each file in support-rpms/*.list, extract the rpm and
+# keep the files from the list
+
+# list of stage tar ball we need to build, this is basically
+# the list of stage directories
+ALL_STAGES='PartDisks BootstrapRPM BootLVM'
+
+# new files, in each stage dir
+RPM_EXTRACT_DIR='rpm-extract/'
+KEEP_FILE_LIST='keep-files'
+
+# source files, in each stage dir
+SOURCE_RPM_DIR='source-rpms/'
+EXTRA_FILES='lib-paths'
+CUSTOM_SCRIPT='custom.sh'
+
+# destination for upload command
+DEST_USER='root'
+DEST_SERVER='yankee.cs.princeton.edu'
+DEST_PATH='/export0/echo/alpina/'
+
+
+build()
+{
+ BUILD_STAGE=$1
+
+ for STAGE_DIR in $BUILD_STAGE; do
+
+ echo "Building $STAGE_DIR"
+ cd $STAGE_DIR
+
+ STAGE_DEST_FILE="alpina-$STAGE_DIR.tar.gz"
+
+ for file in `ls $SOURCE_RPM_DIR/*.list`; do
+ RPM_NAME="`basename $file list`rpm"
+ RPM_FILE="$SOURCE_RPM_DIR/$RPM_NAME"
+
+ echo
+ echo "Extracting $RPM_NAME:"
+ extract $RPM_FILE $RPM_EXTRACT_DIR
+
+ echo "Files to be kept from $RPM_NAME:"
+ for line in `cat $file`; do
+ echo "./$RPM_EXTRACT_DIR/$line"
+ echo "./$line" >> $KEEP_FILE_LIST
+ done
+
+ done
+
+ if [[ -f $CUSTOM_SCRIPT ]]; then
+ echo "Running stage specific script"
+ ./$CUSTOM_SCRIPT
+
+ if [[ "$?" -ne 0 ]]; then
+ echo "Custom stage script failed, exiting."
+ exit 1
+ fi
+ fi
+
+ echo "Compressing files:"
+ cd $RPM_EXTRACT_DIR
+ tar --files-from=../$KEEP_FILE_LIST --exclude=CVS -cvzf ../../$STAGE_DEST_FILE
+ cd ..
+
+ echo "Completed building $STAGE_DIR"
+
+ cd ..
+
+ done
+}
+
+upload()
+{
+ UPLOAD_STAGE=$1
+
+ STAGE_FILE_LIST=''
+ for STAGE_DIR in $UPLOAD_STAGE; do
+ STAGE_FILE_LIST="$STAGE_FILE_LIST alpina-$STAGE_DIR.tar.gz"
+ done
+
+ scp $STAGE_FILE_LIST $DEST_USER@$DEST_SERVER:$DEST_PATH
+}
+
+clean()
+{
+ CLEAN_STAGE=$1
+
+ for STAGE_DIR in $CLEAN_STAGE; do
+ rm -rf $STAGE_DIR/$RPM_EXTRACT_DIR
+ rm -f $STAGE_DIR/$KEEP_FILE_LIST
+
+ STAGE_DEST_FILE="alpina-$STAGE_DIR.tar.gz"
+ rm -f $STAGE_DEST_FILE
+
+ echo "Cleaned $STAGE_DIR"
+ done
+}
+
+extract()
+{
+ RPM=$1
+ DEST=$2
+
+ mkdir -p $DEST
+ rpm2cpio $RPM > $DEST/out.cpio
+ (cd $DEST && cpio -ivd < out.cpio && rm out.cpio)
+}
+
+usage()
+{
+ echo "Usage buildsupport.sh (build|upload|clean)";
+}
+
+# find out what do do
+COMMAND=$1
+STAGE=$2
+
+
+if [[ -z "$STAGE" ]]; then
+ # if the stage is blank, build all
+ STAGE=$ALL_STAGES
+else
+ # make sure the stage exists
+ if [[ ! -d "$STAGE" ]]; then
+ usage
+ exit 1
+ fi
+fi
+
+case "$COMMAND" in
+ build) build "$STAGE";;
+ upload) upload "$STAGE";;
+ clean) clean "$STAGE";;
+ *) usage; exit 1;;
+esac