#! /bin/bash ################ # Version 0.85 # ################ #run as root only ... exit if not iam=`whoami` if [ "$iam" != "root" ]; then echo "Only run this script as root!" exit 1 fi # export PYTHONPATH=/usr/lib/anaconda VERSION="4.3" SUBVERSION="Final" DISTRONAME="CentOS" ARCH=`uname -i` BUILDDIR=/home/buildcentos/rpmbuild DISTDIR=/home/buildcentos/CENTOS/en/4.0 BUILDTIME=`date +%Y%m%d%H%M` BACKUP_SRPMS=/home/buildcentos/backup_srpms NORMAL_USER_CHMOD="buildcentos:buildcentos" latest_comps=`ls -lt ${DISTDIR}/SRPMS/comps-4* | grep -m1 .src.rpm | awk {'print $9'}` latest_rpmdb=`ls -lt ${DISTDIR}/SRPMS/rpmdb-CentOS* | grep -m1 .src.rpm | awk {'print $9'}` publisher='CentOS Project' bootimg='isolinux/isolinux.bin' bootcat='isolinux/boot.cat' mkisopts='-r -N -allow-leading-dots -d -D -J' today="$(date '+%d %b %Y')" write_dir="/home/buildcentos/centos-isos" LOGFILE=/home/buildcentos/rpmbuild/build.$BUILDTIME.log # remove old build logs rm -f /home/buildcentos/rpmbuild/build.*.log cd ${DISTDIR} echo "Starting Build ... - logging to ${LOGFILE}" echo "Starting Build" > ${LOGFILE} ## Backup latest SRPMS for comps and rpm-db cp -f -a ${latest_comps} ${BACKUP_SRPMS}/ cp -f -a ${latest_rpmdb} ${BACKUP_SRPMS}/ #Check for spec files and install them if necessary if [ ! -f ${BUILDDIR}/SPECS/comps-centos.spec ]; then rpm -Uvh ${latest_comps} fi if [ ! -f ${BUILDDIR}/SPECS/rpmdb-centos.spec ]; then rpm -Uvh ${latest_rpmdb} fi ## Clean out build area rm -f ${BUILDDIR}/SRPMS/* rm -f ${BUILDDIR}/RPMS/${ARCH}/* rm -f ${BUILDDIR}/RPMS/i386/* rm -f ${BUILDDIR}/RPMS/noarch/* rm -f ${BUILDDIR}/RPMS/athlon/* rm -f ${BUILDDIR}/RPMS/i686/* rm -f ${BUILDDIR}/RPMS/i486/* rm -f ${BUILDDIR}/RPMS/i586/* rm -rf ${BUILDDIR}/BUILD/* ## Build comps echo "Building Comps" rpmbuild -ba ${BUILDDIR}/SPECS/comps-centos.spec >> ${LOGFILE} 2>&1 ## sign the new packages #rpm --resign ${BUILDDIR}/SRPMS/comps-4* #rpm --resign ${BUILDDIR}/RPMS/${ARCH}/comps-4* ## copy them into place rm -f ${DISTDIR}/SRPMS/comps-4* >> ${LOGFILE} 2>&1 cp ${BUILDDIR}/SRPMS/comps-4* ${DISTDIR}/SRPMS/ >> ${LOGFILE} 2>&1 rm -f ${DISTDIR}/${ARCH}/CentOS/RPMS/comps-4* >> ${LOGFILE} 2>&1 cp ${BUILDDIR}/RPMS/${ARCH}/comps-4* ${DISTDIR}/${ARCH}/CentOS/RPMS/ >> ${LOGFILE} 2>&1 cp -f ${BUILDDIR}/RPMS/${ARCH}/comps-4* ${DISTDIR}/${ARCH}/CentOS/base/comps.rpm >> ${LOGFILE} 2>&1 ## Build rpmdb echo "Building Rpmdb" rpmbuild -ba ${BUILDDIR}/SPECS/rpmdb-centos.spec >> ${LOGFILE} 2>&1 ## copy them into place rm -f ${DISTDIR}/SRPMS/rpmdb-CentOS* >> ${LOGFILE} 2>&1 cp ${BUILDDIR}/SRPMS/rpmdb-CentOS* ${DISTDIR}/SRPMS/ >> ${LOGFILE} 2>&1 rm -f ${DISTDIR}/${ARCH}/CentOS/RPMS/rpmdb-CentOS* >> ${LOGFILE} 2>&1 cp ${BUILDDIR}/RPMS/${ARCH}/rpmdb-CentOS* ${DISTDIR}/${ARCH}/CentOS/RPMS/ >> ${LOGFILE} 2>&1 ## sign the all packages cd ${DISTDIR}/SRPMS rpm --resign *.rpm cd ${DISTDIR}/${ARCH}/CentOS/RPMS rpm --resign *.rpm cd ${DISTDIR} ## Run genhd first time echo "Running genhdlist" /usr/lib/anaconda-runtime/genhdlist \ --withnumbers \ --productpath=CentOS \ ${DISTDIR}/${ARCH} >> ${LOGFILE} 2>&1 ## then pkgorder echo "Getting pkgorder" rm -f ${DISTDIR}/pkgorder-${ARCH}.txt /usr/lib/anaconda-runtime/pkgorder \ ${DISTDIR}/${ARCH} ${ARCH} \ | tee --append ${DISTDIR}/pkgorder-${ARCH}.txt ${LOGFILE} 2>&1 ## then genhd again echo "Running genhdlist again" /usr/lib/anaconda-runtime/genhdlist \ --withnumbers \ --productpath=CentOS \ --fileorder=${DISTDIR}/pkgorder-${ARCH}.txt \ ${DISTDIR}/${ARCH} >> ${LOGFILE} 2>&1 ## then build installer echo "Building Installer" /usr/lib/anaconda-runtime/buildinstall --comp dist-${VERSION} \ --pkgorder ${DISTDIR}/pkgorder-${ARCH}.txt \ --release "${DISTRONAME}-4 ${ARCH}" \ --product "${DISTRONAME}-4 ${ARCH}" \ --version ${VERSION} ${DISTDIR}/${ARCH} >> ${LOGFILE} 2>&1 echo "Splitting Tree" /usr/lib/anaconda-runtime/splittree.py --arch=${ARCH} --total-discs=8 \ --bin-discs=4 --src-discs=4 \ --release-string="${DISTRONAME} ${VERSION}${SUBVERSION} ${ARCH}" \ --pkgorderfile=${DISTDIR}/pkgorder-${ARCH}.txt \ --distdir=${DISTDIR}/${ARCH}/ \ --srcdir=${DISTDIR}/SRPMS/ >> ${LOGFILE} 2>&1 rm -rf ${ARCH}-disc* >> ${LOGFILE} 2>&1 mv ${ARCH}/-disc1/ ${ARCH}-disc1 >> ${LOGFILE} 2>&1 mv ${ARCH}/-disc2/ ${ARCH}-disc2 >> ${LOGFILE} 2>&1 mv ${ARCH}/-disc3/ ${ARCH}-disc3 >> ${LOGFILE} 2>&1 mv ${ARCH}/-disc4/ ${ARCH}-disc4 >> ${LOGFILE} 2>&1 mv ${ARCH}/-disc5/ ${ARCH}-disc5 >> ${LOGFILE} 2>&1 mv ${ARCH}/-disc6/ ${ARCH}-disc6 >> ${LOGFILE} 2>&1 mv ${ARCH}/-disc7/ ${ARCH}-disc7 >> ${LOGFILE} 2>&1 mv ${ARCH}/-disc8/ ${ARCH}-disc8 >> ${LOGFILE} 2>&1 #mv ${ARCH}/-disc9/ ${ARCH}-disc9 >> ${LOGFILE} 2>&1 #mv ${ARCH}/-disc10/ ${ARCH}-disc10 >> ${LOGFILE} 2>&1 #in case comps-4 is not on ARCH-disc1 (but another disc) put it there #before the genhdlist for i in 1 2 3 4 ; do rm -f ${DISTDIR}/${ARCH}-disc${i}/CentOS/RPMS/comps-4* >> ${LOGFILE} 2>&1 done cp -f ${DISTDIR}/${ARCH}/CentOS/RPMS/comps-4* ${DISTDIR}/${ARCH}-disc1/CentOS/RPMS/ >> ${LOGFILE} 2>&1 #do the same thing to put the comps SRPM on disc 5 if it is somewhere else on the source discs for i in 5 6 7 8; do rm -f ${DISTDIR}/${ARCH}-disc${i}/SRPMS/comps-4* >> ${LOGFILE} 2>&1 done cp -f ${DISTDIR}/SRPMS/comps-4* ${DISTDIR}/${ARCH}-disc5/SRPMS/ >> ${LOGFILE} 2>&1 ## run genhd on isos echo "Running genhdlist on isos" rm ${DISTDIR}/${ARCH}-disc1/CentOS/base/hdlist* >> ${LOGFILE} 2>&1 /usr/lib/anaconda-runtime/genhdlist \ --withnumbers --fileorder=${DISTDIR}/pkgorder-${ARCH}.txt \ ${DISTDIR}/${ARCH}-disc[1234] >> ${LOGFILE} 2>&1 echo "Building final comps" ## build final comps rm -f ${BUILDDIR}/RPMS/${ARCH}/comps-4* >> ${LOGFILE} 2>&1 rpmbuild -ba --define "basedir ${DISTDIR}/${ARCH}-disc1/CentOS/base" \ ${BUILDDIR}/SPECS/comps-centos.spec >> ${LOGFILE} 2>&1 rpm --resign ${BUILDDIR}/SRPMS/comps-4* rpm --resign ${BUILDDIR}/RPMS/${ARCH}/comps-4* rm -f ${DISTDIR}/${ARCH}-disc5/SRPMS/comps-4* >> ${LOGFILE} 2>&1 rm -f ${DISTDIR}/SRPMS/comps-4* >> ${LOGFILE} 2>&1 cp ${BUILDDIR}/SRPMS/comps-4* ${DISTDIR}/${ARCH}-disc5/SRPMS/ >> ${LOGFILE} 2>&1 cp ${BUILDDIR}/SRPMS/comps-4* ${DISTDIR}/SRPMS/ >> ${LOGFILE} 2>&1 rm -f ${DISTDIR}/${ARCH}-disc1/CentOS/RPMS/comps-4* >> ${LOGFILE} 2>&1 rm -f ${DISTDIR}/${ARCH}/CentOS/RPMS/comps-4* >> ${LOGFILE} 2>&1 cp ${BUILDDIR}/RPMS/${ARCH}/comps-4* ${DISTDIR}/${ARCH}-disc1/CentOS/RPMS/ >> ${LOGFILE} 2>&1 cp ${BUILDDIR}/RPMS/${ARCH}/comps-4* ${DISTDIR}/${ARCH}/CentOS/RPMS/ >> ${LOGFILE} 2>&1 rm -f ${DISTDIR}/${ARCH}-disc1/CentOS/base/comps.rpm >> ${LOGFILE} 2>&1 rm -f ${DISTDIR}/${ARCH}/CentOS/base/comps.rpm >> ${LOGFILE} 2>&1 cp -f ${BUILDDIR}/RPMS/${ARCH}/comps-4* ${DISTDIR}/${ARCH}-disc1/CentOS/base/comps.rpm >> ${LOGFILE} 2>&1 cp -f ${BUILDDIR}/RPMS/${ARCH}/comps-4* ${DISTDIR}/${ARCH}/CentOS/base/comps.rpm >> ${LOGFILE} 2>&1 rm -rf ${DISTDIR}/${ARCH}/buildinstall.tree.* rm -rf ${DISTDIR}/${ARCH}-disc1/buildinstall.tree.* #Build repo / up2date data cd ${DISTDIR}/${ARCH} # Remark out the following line if you don't want to rewrite yumgroups everytime rm -rf yumgroups.xml if [ ! -f yumgroups.xml ]; then cp -af CentOS/base/comps.xml yumgroups.xml >> ${LOGFILE} 2>&1 cp -af CentOS/base/comps.xml ${DISTDIR}/${ARCH}-disc1/yumgroups.xml >> ${LOGFILE} 2>&1 fi yum-arch . >> ${LOGFILE} 2>&1 createrepo -g yumgroups.xml . >> ${LOGFILE} 2>&1 cd ${DISTDIR}/${ARCH}/headers/ rsync --delete --progress -Cvuzlrt . ${DISTDIR}/${ARCH}-disc1/headers/ >> ${LOGFILE} 2>&1 cd ../repodata rsync --delete --progress -Cvuzlrt . ${DISTDIR}/${ARCH}-disc1/repodata/ >> ${LOGFILE} 2>&1 cd ${DISTDIR} #copy new splash into isolinux #if [ -f ${BACKUP_SRPMS}/splash.lss ]; then # cp -af ${BACKUP_SRPMS}/splash.lss ${DISTDIR}/${ARCH}-disc1/isolinux/ # cp -af ${BACKUP_SRPMS}/splash.lss ${DISTDIR}/${ARCH}/isolinux/ #fi #Change permissions to the normal build user for all new files echo "Changing newly built file permissions to ${NORMAL_USER_CHMOD}" chown -R ${NORMAL_USER_CHMOD} ${DISTDIR} >> ${LOGFILE} 2>&1 chown -R ${NORMAL_USER_CHMOD} ${BACKUP_SRPMS} >> ${LOGFILE} 2>&1 chown -R ${NORMAL_USER_CHMOD} ${BUILDDIR} >> ${LOGFILE} 2>&1 echo "Writing isos" ## write the isos mkisofs ${mkisopts} \ -V "${DISTRONAME} ${VERSION}${SUBVERSION} ${ARCH} bin1of4" \ -A "${DISTRONAME}-${VERSION}${SUBVERSION} ${ARCH} created on ${today}" \ -publisher "${publisher}" \ -p "${publisher}" \ -b "${bootimg}" \ -c "${bootcat}" \ -no-emul-boot -boot-load-size 4 -boot-info-table \ -x lost+found \ -o "${write_dir}"/"${DISTRONAME}"-"${VERSION}"-"${ARCH}"-bin1of4.iso \ ${ARCH}-disc1 >> ${LOGFILE} 2>&1 /usr/lib/anaconda-runtime/implantisomd5 "${write_dir}"/"${DISTRONAME}"-"${VERSION}"-"${ARCH}"-bin1of4.iso >> ${LOGFILE} 2>&1 dd if=/dev/zero bs=2048 count=150 >> "${write_dir}"/"${DISTRONAME}"-"${VERSION}"-"${ARCH}"-bin1of4.iso for i in 2 3 4 ; do mkisofs ${mkisopts} \ -V "${DISTRONAME} ${VERSION} ${SUBVERSION} ${ARCH} bin${i}of4" \ -A "${DISTRONAME} ${VERSION} ${SUBVERSION} ${ARCH} created ${today}" \ -publisher "${publisher}" \ -p "${publisher}" \ -x lost+found \ -o "${write_dir}"/"${DISTRONAME}"-"${VERSION}"-"${ARCH}"-bin${i}of4.iso \ ${ARCH}-disc${i} >> ${LOGFILE} 2>&1 /usr/lib/anaconda-runtime/implantisomd5 "${write_dir}"/"${DISTRONAME}"-"${VERSION}"-"${ARCH}"-bin${i}of4.iso >> ${LOGFILE} 2>&1 dd if=/dev/zero bs=2048 count=150 >> "${write_dir}"/"${DISTRONAME}"-"${VERSION}"-"${ARCH}"-bin${i}of4.iso done for i in 5 6 7 8 ; do si=$(($i-4)) mkisofs ${mkisopts} \ -V "${DISTRONAME} ${VERSION} ${SUBVERSION} ${ARCH} src${si}of4" \ -A "${DISTRONAME} ${VERSION} ${SUBVERSION} ${ARCH} created ${today}" \ -publisher "${publisher}" \ -p "${publisher}" \ -x lost+found \ -o "${write_dir}"/"${DISTRONAME}"-"${VERSION}"-SRPMS-src${si}of4.iso \ ${ARCH}-disc${i} >> ${LOGFILE} 2>&1 /usr/lib/anaconda-runtime/implantisomd5 "${write_dir}"/"${DISTRONAME}"-"${VERSION}"-SRPMS-src${si}of4.iso >> ${LOGFILE} 2>&1 dd if=/dev/zero bs=2048 count=150 >> "${write_dir}"/"${DISTRONAME}"-"${VERSION}"-SRPMS-src${si}of4.iso done chown -R ${NORMAL_USER_CHMOD} ${write_dir} >> ${LOGFILE} 2>&1 echo "Finished - log is ${LOGFILE}"