myhsh 5.16 KB
Newer Older
1
#!/bin/bash
Vitaly Lipatov's avatar
Vitaly Lipatov committed
2
# 2003-2006, 2008-2010, 2013, 2016, 2020 (c) Etersoft www.etersoft.ru
3 4 5
# Author: Vitaly Lipatov <lav@etersoft.ru>
# Public domain
#
6
# Пересборка указанных SRPM-пакетов в hasher
7

8 9
# load common functions, compatible with local and installed script
. `dirname $0`/../share/eterbuild/functions/common
10
load_mod hasher check
11

Vitaly Lipatov's avatar
Vitaly Lipatov committed
12 13
WITHSTUFF="--with-stuff"

14
#############################
Vitaly Lipatov's avatar
Vitaly Lipatov committed
15
Usage="Usage: $name [-b -l -r -c -l -p] src.rpm..."
16 17 18
function mygetopts()
{
name=${0##*/}
19
Descr="$name - internal helper for build package via hasher"
20 21 22 23 24

phelp()
{
	echog "$Descr"
	echog "$Usage"
25
	echo
26
	echog "Options:"
27
	echog "   -c  build without stuff (without previous built packages)"
28
	echog "   -e  build using hsh-rebuild (using chroot precreated with rpmbsh -l)"
29
	echog "   -n  build src.rpm only"
30
	echog "   -r  remove packages from test hasher"
31
	echog "   -p  print binary packages by built list"
32
	echog "   -l  lazy cleanup (before build, not after)"
33
	echog "   -a  pass --query-repackage to hsh"
34
	echog "   -b REPONAME  binary repository name (p6, t6, c7, p8 and so on)"
35 36
}

37
while getopts :hab:epnclr opt; do
38 39
    case $opt in
    h) phelp; exit 0;;
40
    p) PRINTBINPKG=1;;
41
    b) BINARYREPONAME=$OPTARG ;;
42
    e) REBUILD=1;;
43
    n) BUILDSRCRPM="--build-srpm-only";;
44
    r) REMOVEPKG=1;;
45
    a) REPACKAGE="--query-repackage";;
46
    l) HASHERARG="$HASHERARG --lazy-cleanup";;
Vitaly Lipatov's avatar
Vitaly Lipatov committed
47
    c) WITHSTUFF="--without-stuff";;
48
    +?) echog "$name: options should not be preceded by a '+'." 1>&2; exit 2;;
49
    ?) OPTIND=$((OPTIND-1)); break;
50 51
    esac
done
52

53 54
# remove args that were options
if [ $# -gt 0 ]; then 
55
	[ "$OPTIND" -gt 0 ] && shift $(($OPTIND - 1))
56 57 58 59 60 61 62 63
fi

LISTRPMARGS=$@
}


parse_cmd_pre "$@"
mygetopts $LISTARGS
64 65
# see functions/alt:set_binaryrepo() for BINARYREPONAME
set_binaryrepo $MENV
66 67 68

RESULT=0

Vitaly Lipatov's avatar
Vitaly Lipatov committed
69
HASHERARG="$HASHERARG $WITHSTUFF"
70
set_hasherdir
71

72 73 74 75 76 77 78
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 ..."
79
		BINPACKAGES="$BINPACKAGES $($EPMCMD print binpkgfilelist $RPMHASHERDIR $i)"
80 81
	done
	
Vitaly Lipatov's avatar
Vitaly Lipatov committed
82
	estrlist isempty "$BINPACKAGES" && fatal "Can't find any binary packages for $LISTNAMES in $(ls -l $RPMHASHERDIR)"
83 84 85 86 87 88 89 90 91 92 93 94
	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
Vitaly Lipatov's avatar
Vitaly Lipatov committed
95
	docmd $HSH-run --rooter $HASHERDIR -- rpm -e $($EPMCMD print pkgname from filename $LISTNAMES)
96 97 98 99 100 101

	#echo "Cleanup hasher in $HASHERDIR ..."
	#docmd $HSH --cleanup-only $HASHERDIR
	exit
fi

102 103 104
mkdir -p $LOGDIR $HASHERDIR || fatal "cannot mkdir"
check_locking

Vitaly Lipatov's avatar
Vitaly Lipatov committed
105 106 107
echog "List of packages for build:"
print_list "$LISTNAMES"
echo
108

109
if [ -z "${LISTNAMES/*spec/}"  ] ; then
110
	echo "!!!!!!!!"
Vitaly Lipatov's avatar
Vitaly Lipatov committed
111
	fatal "Please, use src.rpm as argument, instead a spec"
112 113
fi

114 115
# Skip checking for tar arg
if [ -n "${LISTNAMES/*tar/}" ] ; then
116 117 118 119 120
	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
121
fi
122

Vitaly Lipatov's avatar
Vitaly Lipatov committed
123
# export OURAPTCONF with temp. file contains correct path to sources.list
124
# use MENV
Vitaly Lipatov's avatar
Vitaly Lipatov committed
125 126
prepare_aptconfig

127
# FIXME: we override config value here?
128
# TODO: for add $LISTRPMARGS we need skip function for delete "our" params
129
# we do not need check cases for mount points, thanks ldv@ 
130
HASHERARG="--no-sisyphus-check=$HASHER_NOCHECK --target $BUILDARCH $HASHERARG"
131
HASHERARG="--mountpoints=/proc,/dev/pts $HASHERARG $REPACKAGE $BUILDSRCRPM"
132 133 134 135 136

BUILDARGS=""

if [ -z "$NOSTRICT_UNPACKAGED" ] ; then
	BUILDARGS="$BUILDARGS --define '_unpackaged_files_terminate_build 1'"
137
fi
138

139 140 141
LISTBUILTSH=""
for i in $LISTNAMES
do
142
	LOGFILE="$LOGDIR/$(basename $(basename $i .src.rpm) .tar)$MENVARG.log"
143
	echo "Build in hasher ($MENV) in $HASHERDIR dir" >$LOGFILE
144
	rm -f $LOGFILE.ok
145 146 147 148 149 150 151 152 153 154
	#echog "Build in hasher: $i (arg: $HASHERARG --build-args \"$BUILDARGS\", distro: $MENV, hasherdir: $HASHERDIR)"
	if [ -n "$REBUILD" ] ; then
		# Note: hasher is already use renice for low priority
		showcmd $HSH-rebuild $HASHERARG -- $HASHERDIR $i
		($HSH-rebuild $HASHERARG -- $HASHERDIR $i 2>&1 && touch $LOGFILE.ok) | tee -a $LOGFILE | colorify
	else
		# Note: hasher is already use renice for low priority
		showcmd $HSH $HASHERARG --apt-config=$OURAPTCONF --build-args "$BUILDARGS" -- $HASHERDIR $i
		($HSH $HASHERARG --apt-config=$OURAPTCONF --build-args "$BUILDARGS" -- $HASHERDIR $i 2>&1 && touch $LOGFILE.ok) | tee -a $LOGFILE | colorify
	fi
155
	test -L $HASHERDIR/BUILD || ln -s chroot/usr/src/RPM/BUILD $HASHERDIR/
156
	if [ ! -f $LOGFILE.ok ] ; then
157 158 159
		RESULT=1
		break
	fi
160
	rm -f $LOGFILE.ok
161 162 163 164 165 166 167 168
	check_log $LOGFILE ; RESULT=$?
	test $RESULT = 1 && break
	echog "########## Build of `basename $i` is done in hasher $MENV  #############"
	echo
	LISTBUILTSH="$LISTBUILTSH$i "
done

echo
169 170 171
if [ "$RESULT" = "0" ] ; then
	echog "Full list of the hashered packages:"
else
172
	echo
173
	echog "!!!!!!! Hasher: FAILED FAILED FAILED !!!!!!!!!"
174
	echog "Build failed with $i, built only"
175 176
fi

177
print_list $LISTBUILTSH
178 179 180
echo

exit $RESULT