#!/bin/bash # 2003-2006, 2008-2010, 2013, 2016, 2020 (c) Etersoft www.etersoft.ru # Author: Vitaly Lipatov <lav@etersoft.ru> # Public domain # # Пересборка указанных SRPM-пакетов в hasher # load common functions, compatible with local and installed script . `dirname $0`/../share/eterbuild/functions/common load_mod hasher check WITHSTUFF="--with-stuff" ############################# Usage="Usage: $name [-b -l -r -c -l -p] src.rpm..." function mygetopts() { name=${0##*/} Descr="$name - internal helper for build package via hasher" phelp() { echog "$Descr" echog "$Usage" echo echog "Options:" echog " -c build without stuff (without previous built packages)" echog " -r remove packages from test hasher" echog " -p print binary packages by built list" echog " -l lazy cleanup (before build, not after)" echog " -b REPONAME binary repository name (p6, t6, c7, p8 and so on)" } while getopts :hbpclr opt; do case $opt in h) phelp; exit 0;; p) PRINTBINPKG=1;; b) BINARYREPONAME=$OPTARG ;; r) REMOVEPKG=1;; l) HASHERARG="$HASHERARG --lazy-cleanup";; c) WITHSTUFF="--without-stuff";; +?) echog "$name: options should not be preceded by a '+'." 1>&2; exit 2;; ?) OPTIND=$((OPTIND-1)); break; esac done # remove args that were options if [ $# -gt 0 ]; then [ "$OPTIND" -gt 0 ] && shift $(($OPTIND - 1)) fi LISTRPMARGS=$@ } parse_cmd_pre "$@" mygetopts $LISTARGS # see functions/alt:set_binaryrepo() for BINARYREPONAME set_binaryrepo $MENV RESULT=0 HASHERARG="$HASHERARG $WITHSTUFF" set_hasherdir if [ -n "$PRINTBINPKG" ] ; then BINPACKAGES= # allow absolute path and just src.rpm name LISTNAMES="$LISTNAMES $LISTRPMARGS" RPMHASHERDIR=$HASHERDIR/repo/$BUILDARCH/RPMS.hasher for i in $LISTNAMES ; do #echog "Find binary packages for '$(basename $i)' in $RPMHASHERDIR ..." BINPACKAGES="$BINPACKAGES $($EPMCMD print binpkgfilelist $RPMHASHERDIR $i)" done estrlist isempty "$BINPACKAGES" && fatal "Can't find any binary packages for $LISTNAMES in $(ls -l $RPMHASHERDIR)" echo "$BINPACKAGES" exit fi if [ -n "$REMOVEPKG" ] ; then check_locking HASHERDIR=$HASHERDIR-test # FIXME: do not remove on x86_64 echo "Removing package(s)..." # use when eepm >= 1.3.0 will everywhere #docmd $HSH-run --rooter $HASHERDIR -- epm remove $LISTNAMES docmd $HSH-run --rooter $HASHERDIR -- rpm -e $(epm print pkgname from filename $LISTNAMES) #echo "Cleanup hasher in $HASHERDIR ..." #docmd $HSH --cleanup-only $HASHERDIR exit fi mkdir -p $LOGDIR $HASHERDIR || fatal "cannot mkdir" check_locking echog "List of packages for build:" print_list "$LISTNAMES" echo if [ -z "${LISTNAMES/*spec/}" ] ; then echo "!!!!!!!!" fatal "Please, use src.rpm as argument, instead a spec" fi # Skip checking for tar arg if [ -n "${LISTNAMES/*tar/}" ] ; then if $EPMCMD assure sisyphus_check ; then docmd sisyphus_check --no-check=$HASHER_NOCHECK --files $LISTNAMES || fatal else info "Skip sisyphus_check (no command is installed)" fi fi # export OURAPTCONF with temp. file contains correct path to sources.list # use MENV prepare_aptconfig # FIXME: we override config value here? # TODO: for add $LISTRPMARGS we need skip function for delete "our" params # we do not need check cases for mount points, thanks ldv@ HASHERARG="--no-sisyphus-check=$HASHER_NOCHECK --apt-config=$OURAPTCONF --target $BUILDARCH $HASHERARG" HASHERARG="--mountpoints=/proc,/dev/pts $HASHERARG" BUILDARGS="" if [ -z "$NOSTRICT_UNPACKAGED" ] ; then BUILDARGS="$BUILDARGS --define '_unpackaged_files_terminate_build 1'" fi LISTBUILTSH="" for i in $LISTNAMES do LOGFILE="$LOGDIR/`basename $i .src.rpm`$MENVARG.log" echo "Build in hasher ($MENV) in $HASHERDIR dir" >$LOGFILE rm -f $LOGFILE.ok echog "Build in hasher: $i (arg: $HASHERARG --build-args \"$BUILDARGS\", distro: $MENV, hasherdir: $HASHERDIR)" # Note: hasher is already use renice for low priority showcmd $HSH $HASHERARG --build-args "$BUILDARGS" -- $HASHERDIR $i ($HSH $HASHERARG --build-args "$BUILDARGS" -- $HASHERDIR $i 2>&1 && touch $LOGFILE.ok) | tee -a $LOGFILE | colorify test -L $HASHERDIR/BUILD || ln -s chroot/usr/src/RPM/BUILD $HASHERDIR/ if [ ! -f $LOGFILE.ok ] ; then RESULT=1 break fi rm -f $LOGFILE.ok check_log $LOGFILE ; RESULT=$? test $RESULT = 1 && break echog "########## Build of `basename $i` is done in hasher $MENV #############" echo LISTBUILTSH="$LISTBUILTSH$i " done echo if [ "$RESULT" = "0" ] ; then echog "Full list of the hashered packages:" else echo echog "!!!!!!! Hasher: FAILED FAILED FAILED !!!!!!!!!" echog "Build failed with $i, built only" fi print_list $LISTBUILTSH echo exit $RESULT