#!/bin/bash # # Creates packages from build repository # # $Id$ # # Syntax: build2pkg [version-tag [pkg list]] # ( dname=`dirname $0` prem=`echo $dname |cut -c1` if [ _${prem} = _"/" ]; then export TOOLHOME=$dname else export TOOLHOME=${PWD}/$dname fi . $TOOLHOME/common-env . $TOOLHOME/distro-env # We need to get $VER and $TAG if [ "$1" = "" ]; then LAST=`cat ${TOPDIR}/LAST` else LAST=$1 shift fi VER=`echo $LAST | cut -d- -f1` TAG=`echo $LAST | cut -d- -f2` echo "Working on ${VER}-$TAG" if [ "$1" = "" ]; then c="mondo-doc mindi mindi-busybox mondo" else if [ "$1" = "all" ]; then c="mindi-kernel mondo-doc mindi mindi-busybox mondo" else c="$*" fi fi status=0 # # Define on which distro we are to generate the right packages # export pkg="" echo "Working under $TOPBUILDDIR" cd $TOPBUILDDIR for p in $c; do # s= stable; t = trunk; 1-9 = official version src=${TOPDIR}/${VER}-$TAG/$p-[1-9st]*.tar.gz echo "Source file: $src" pv=`basename $src .tar.gz` PVER=`echo $pv | sed "s|^$p-||" | cut -d- -f1` if [ _"$p" = _"mindi" ]; then # Copy FindDistroFailsafe if it makes sense for that distro tar xfz $src $p-${PVER}/distributions/${ddir}-$dver/FindDistroFailsafe 2> /dev/null ln $p-${PVER}/distributions/${ddir}-$dver/FindDistroFailsafe $p-${PVER} 2> /dev/null fi if [ _"$dtype" = _"rpm" ]; then if [ _"$p" = _"mondo-doc" ] || [ _"$p" = _"mindi" ]; then ar="noarch" else ar=$ARCH fi log=$MONDOTMP/$p-rpm.log if [ "$dfam" = "mandriva" ] || [ "$dfam" = "suse" ]; then echo "Using bzip2 files ($dfam)" ln -sf ${TOPDIR}/${VER}-$TAG/$pv.tar.bz2 SOURCES/ else echo "Using gzip files ($dfam)" ln -sf $src SOURCES/ fi echo "Generating $p RPMS" cd SPECS tar xfz $src $p-${PVER}/distributions/${ddir}-$dver/$p.spec mv $p-${PVER}/distributions/${ddir}-$dver/$p.spec . rm -rf $p-${PVER} # set LANGUAGE to check for correct log messages export LANGUAGE=C rpmbuild -ba $p.spec 2>&1 | tee $log if [ $? != 0 ]; then status=-1 else export pkg1="`egrep '^Wrote:' $log | grep -v debug | cut -d: -f2`" if [ -f /usr/bin/rpmlint ]; then /usr/bin/rpmlint $pkg1 else echo "No rpmlint found, please install it" fi export pkg="$pkg `ls $pkg1 | grep -v src.rpm`" fi rm -rf ${TOPBUILDDIR}/BUILD/* cd .. elif [ _"$dtype" = _"ebuild" ]; then if [ _"$p" = _"mondo" ]; then eb="mondo-rescue" else eb=$p fi tar xfz $src $p-${PVER}/distributions/${ddir}-$dver/$eb-${PVER}.ebuild if [ _"`grep $TOPBUILDDIR/portage /etc/make.conf`" = _"" ]; then echo "Adding $TOPBUILDDIR/portage to /etc/make.conf" echo "PORTDIR_OVERLAY=\"$TOPBUILDDIR/portage\"" >> /etc/make.conf fi mkdir -p ${TOPBUILDDIR}/portage/sys-apps/$eb mv $p-${PVER}/distributions/${ddir}-$dver/$eb-${PVER}.ebuild ${TOPBUILDDIR}/portage/sys-apps/$p/$eb-${PVER}.ebuild rm -rf $p-${PVER} cd ${TOPBUILDDIR}/portage/sys-apps/$eb ebuild $eb-${PVER}.ebuild digest if [ $? != 0 ]; then status=-1 fi ebuild $eb-${PVER}.ebuild package if [ $? != 0 ]; then status=-1 fi export pkg="$pkg $eb-${PVER}.ebuild" elif [ _"$dtype" = _"deb" ]; then cd $TOPBUILDDIR tar xfz $src cd ${p}-${PVER} # point to the right debian conf ln -s distributions/${ddir}-$dver debian dpkg-buildpackage -us -uc -rfakeroot export pkg="$pkg $p-${PVER}.deb" # Et voila ! elif [ _"$dtype" = _"port" ]; then cd $TOPBUILDDIR tar xfz $src cd ${p}-${PVER} mv distributions/${ddir}-$dver/* $TOPBUILDDIR cd .. rm -rf ${p}-${PVER} make DISTDIR=$TOPBUILDDIR elif [ _"$dfam" = _"slackware" ]; then mkdir -p $TOPBUILDDIR/build-${p}/install cd $TOPBUILDDIR tar xfz $src cd ${p}-${PVER} mv distributions/${ddir}-$dver/slack-* $TOPBUILDDIR/build-${p}/install if [ -e distributions/${ddir}-$dver/doinst.sh ]; then mv distributions/${ddir}-$dver/doinst.sh $TOPBUILDDIR/build-${p}/install fi if [ _"$p" = _"mindi-busybox" ]; then make oldconfig make busybox DESTDIR=$TOPBUILDDIR/build-${p}/usr/lib/mindi/rootfs make PREFIX=$DESTDIR install elif [ _"$p" = _"mindi" ]; then export DONT_RELINK=1 export HEAD=$TOPBUILDDIR/build-${p} export PREFIX=/usr export CONFDIR=/etc export MANDIR=/usr/man export DOCDIR=/usr/doc export LIBDIR=/usr/lib export CACHEDIR=/var/cache/mindi export PKGBUILDMINDI="true" ./install.sh elif [ _"$p" = _"mondo" ]; then ./configure --prefix=/usr make VERSION=$PVER make DESTDIR=$TOPBUILDDIR/build-${p} install mkdir -p $DESTDIR/var/cache/mondo elif [ _"$p" = _"mondo-doc" ]; then make -f Makefile.man VERSION=$PVER make -f Makefile.howto VERSION=$PVER make -f Makefile.man install INSTALLDIR=$TOPBUILDDIR/build-${p}/usr/doc/$p-${PVER} make -f Makefile.howto install INSTALLDIR=$TOPBUILDDIR/build-${p}/usr/doc/$p-${PVER} else echo "Package $p not configured for $dfam" fi cd $TOPBUILDDIR/build-${p} ar=`uname -m` pkg1=$p-${PVER}-${ar}-${TAG}mr.tgz echo "Running sudo /sbin/makepkg -p -l y -c y $pkg1" sudo /sbin/makepkg -p -l y -c y $pkg1 export pkg="$pkg $pkg1" else echo "Unknown" fi done echo "Packages handled : $pkg" rm -rf $MONDOTMP if [ $status = 0 ]; then echo "Installing packages as root" if [ _"$dtype" = _"rpm" ]; then sudo rpm -Uvh --force $pkg elif [ _"$dtype" = _"ebuild" ]; then sudo emerge $pkg elif [ _"$dtype" = _"deb" ]; then sudo dpkg -i $pkg elif [ _"$dtype" = _"port" ]; then sudo echo empty elif [ _"$dfam" = _"slackware" ]; then sudo installpkg $pkg else echo "No method to install those packages" fi fi ) 2>&1 | tee /tmp/build2pkg.log