old-www/HOWTO/RedHat-CD-HOWTO/rhcd-scripts/updateBuild.sh

168 lines
6.2 KiB
Bash

#!/bin/bash
# $Id: updateBuild.sh,v 1.13 2003/10/19 07:48:05 luigi Exp luigi $
###
# updateBuild.sh - Build the RedHat 7.3/8.0 CD installation images from
# a distribution tree organized as on the redhat ftp site.
# It executes the following operations:
# - Rebuild the hdlist and hdlist2 files in the RedHat/base directory
# - Rebuild the installer (useful if you have updated packages used
# during the installation phase)
# - Split the main distribution tree into 5 trees whose size fits on a CD
# after a little reorganization of the tree (needed by splitdistro to work)
# - Regenerate the hdlist and hdlist2 files in the trees of the first 3
# CDs (the ones containing the RPMSs)
# - Generate the 5 iso images to be burned on the CDs (the first one
# bootable)
#
# Environment variables (rhcd.conf): ANAPATH, RHVERSION, RHNAME, RHROOT, PKGFILE,
# DISTARCH, DISCR, ISODESTDIR, BOOTIMAGE, USEISOMD5
#
###
#
# Copyright 2002-2003 Luigi Bitonti
#
# 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.
#
# Source the user defined variables in the file rhcd.conf
if [ -f ${RHCDPATH}/rhcd.conf ] ; then
source ${RHCDPATH}/rhcd.conf
else
echo "Error: missing rhcd.conf (configuration file)"
exit 1
fi
unset ARCH
# Prepare the permissions and ownerships for splitdistro
chown -R root.root $RHROOT
# This is needed to move the files to prepare the build environment
chmod -R u+w $RHROOT
# Move the files in the "right" directories ($DISTARCH) for splitdistro
if [ ! -d ${RHROOT}/${DISTARCH} ] ; then
mkdir -p ${RHROOT}/${DISTARCH}
else
echo "Error: directory ${RHROOT}/${DISTARCH} exists (cannot overwrite it)"
exit 1
fi
cd $RHROOT
for i in `ls` ; do
[ $i != "SRPMS" -a $i != $DISTARCH -a $i != $PKGFILE ] && \
/bin/mv $i $DISTARCH
[ $i = "SRPMS" -a $RHVERSION = "8.0" ] && \
/bin/mv $i $DISTARCH
[ $i = "SRPMS" -a $RHVERSION = "9" ] && \
/bin/mv $i $DISTARCH
done
# now, after moving the main tree, we need to modify the RHROOT variable,
# saving the old one for splitdistro to work
RHROOTOLD=$RHROOT
RHROOT=${RHROOT}/${DISTARCH}
RHSERIES=$(echo $RHVERSION |cut -c1)
# Rebuild the hdlist{,2} files
${ANAPATH}/genhdlist $RHROOT
[ $? -ne 0 ] && echo "*** GENHDLIST FAILED ***" && exit 1
chmod 644 ${RHROOT}/RedHat/base/hdlist{,2}
# Update RedHat/base/comps.xml or RedHat/base/comps file if $COMPSFILE exists
if [ -f $COMPSFILE ] ; then
if [ $RHSERIES -ge 8 ] ; then
echo "found new partial comps file...updating with packages informations "
#check if the comps-extras package is installed
rpm -qi comps-extras >/dev/null
if [ $? -eq 0 ] ; then
PARTCOMPS=$(mktemp /tmp/comps-milan.xml.XXXXXX)
cat $COMPSFILE |sed 's!</comps>!!g' >$PARTCOMPS
/usr/share/comps-extras/getfullcomps.py comps.xml \
$RHROOTOLD $DISTARCH >> $PARTCOMPS
echo '</comps>' >> $PARTCOMPS
echo "overwriting the old 'RedHat/base/comps.xml' file..."
cp $PARTCOMPS ${RHROOT}/RedHat/base/comps.xml
rm $PARTCOMPS
fi
else
cp $COMPSFILE ${RHROOT}/RedHat/base/comps
fi
fi
# Rebuild the installer
# the following line should be maybe put in the conficuration file
export PYTHONPATH="/usr/lib/anaconda"
if [ $RHVERSION = "9" ] ; then
LD_LIBRARY_PATH=/usr/X11R6/lib:$LD_LIBRARY_PATH \
${ANAPATH}/buildinstall --pkgorder ${RHROOTOLD}/${PKGFILE} --comp dist-${RHVERSION} \
--release "Redhat $RHVERSION (${RHNAME})" --product "Redhat $RHVERSION (${RHNAME})" \
--version $RHVERSION $RHROOT
elif [ $RHVERSION = "8.0" ] ; then
LD_LIBRARY_PATH=/usr/X11R6/lib:$LD_LIBRARY_PATH \
${ANAPATH}/buildinstall --pkgorder ${RHROOTOLD}/${PKGFILE} --comp dist-${RHVERSION} \
--release "Redhat $RHVERSION (${RHNAME})" --version $RHVERSION $RHROOT
else
LD_LIBRARY_PATH=/usr/X11R6/lib:$LD_LIBRARY_PATH \
${ANAPATH}/buildinstall --pkgorder ${RHROOTOLD}/${PKGFILE} --comp dist-${RHVERSION} \
--version $RHVERSION $RHROOT
fi
[ $? -ne 0 ] && echo "*** BUILDINSTALL FAILED ***" && exit 1
# Split the distribution (to burn it on CDRs)
${ANAPATH}/splitdistro --fileorder ${RHROOTOLD}/${PKGFILE} --release \
"Redhat $RHVERSION (${RHNAME})" $RHROOTOLD $DISTARCH
[ $? -ne 0 ] && echo "*** SPLIT DISTRIBUTION FAILED ***" && exit 1
# Re-generate the hdlist{,2} files
${ANAPATH}/genhdlist --fileorder ${RHROOTOLD}/${PKGFILE} --withnumbers \
${RHROOTOLD}/${DISTARCH}-disc${DISCR}
[ $? -ne 0 ] && echo "*** GENHDLIST(2) FAILED ***" && exit 1
# Generate the iso images
if [ ! -d $ISODESTDIR ] ; then
mkdir -p $ISODESTDIR
[ $? -ne 0 ] && echo "Cannot create $ISODESTDIR" && exit 1
fi
for i in `echo 1 2 3 4 5` ; do
cd ${RHROOTOLD}/${DISTARCH}-disc${i}
if [ $i -eq 1 ] ; then
# if version is 7.x
if [ $RHSERIES -le 7 ] ; then
mkisofs -r -J -T -v -V "Red Hat $RHVERSION (${RHNAME}) disc $i" \
-c $BOOTCATALOG -b ${BOOTIMAGE} -o ${ISODESTDIR}/${DISTARCH}-disc${i}.iso .
[ $? -ne 0 ] && echo "*** MKISOFS(${i}) FAILED ***" && exit 1
else
mkisofs -r -J -T -v -V "Red Hat $RHVERSION (${RHNAME}) disc $i" \
-c $BOOTCATALOG -b ${BOOTIMAGE} -no-emul-boot -boot-load-size 4 \
-boot-info-table -o ${ISODESTDIR}/${DISTARCH}-disc${i}.iso .
[ $? -ne 0 ] && echo "*** MKISOFS(${i}) FAILED ***" && exit 1
fi
else
mkisofs -r -J -T -v -V "Red Hat $RHVERSION (${RHNAME}) disc $i" \
-o ${ISODESTDIR}/${DISTARCH}-disc${i}.iso .
[ $? -ne 0 ] && echo "*** MKISOFS(${i}) FAILED ***" && exit 1
fi
done
# Write the md5 signatures on the images and check them if requested
if [ "/$(echo $USEISOMD5 |tr [A-Z] [a-z])" = "/yes" ] ; then
cd $ISODESTDIR
if [ -f ${ANAPATH}/implantisomd5 -a -f ${ANAPATH}/checkisomd5 ] ; then
for j in `ls ${ISODESTDIR}/${DISTARCH}-disc*.iso` ; do
#${ANAPATH}/implantisomd5 $j
${ANAPATH}/implantisomd5 $j 2>&1 | grep "Done!" > /dev/null
[ $? -ne 0 ] && echo "*** IMPLANTISOMD5(${j}) FAILED ***" && exit 1
${ANAPATH}/checkisomd5 $j 2>&1 | grep "Md5sums match." > /dev/null
#${ANAPATH}/checkisomd5 $j 2>&1 |grep "PASS" >/dev/null
[ $? -ne 0 ] && echo "*** CHECKISOMD5(${j}) FAILED ***" && exit 1
done
fi
fi
exit 0
#@ updateBuild.sh