autoport: retry installation of install failed packages and other fixes made during x86_64 port

This commit is contained in:
Silvan Calarco 2012-04-26 15:11:10 +02:00
parent 51cfaaf799
commit 816faaef82

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# autoport -- batch cross-build tool based on autodist # autoport -- batch cross-build tool based on autodist
# Copyright (C) 2011 by Silvan Calarco <silvan.calarco@mambasoft.it> # Copyright (C) 2011-2012 by Silvan Calarco <silvan.calarco@mambasoft.it>
# #
# Released under the terms of the GNU GPL release 3 license # Released under the terms of the GNU GPL release 3 license
# #
@ -16,7 +16,7 @@ me=(${0##*/} $VERSION "Sat Mar 20 2011")
function usage() { function usage() {
echo "\ echo "\
${me[0]} ${me[1]} ${me[0]} ${me[1]}
"$"Copyright (C) 2010 Silvan Calarco <silvan.calarco@mambasoft.it>"" "$"Copyright (C) 2011-2012 Silvan Calarco <silvan.calarco@mambasoft.it>""
"$"Released under the terms of the GNU GPL v3 license" "$"Released under the terms of the GNU GPL v3 license"
echo " echo "
"$"Batch port and cross-build tool based on autodist."" "$"Batch port and cross-build tool based on autodist.""
@ -121,6 +121,13 @@ JOB_FAILED=(${JOB_FAILED[*]})
_EOF _EOF
} }
function find_source_by_provide() {
local pkg=`echo $2 | sed "s|(|\\\\\[|g;s|)|\\\\\]|g;s|:|_|g"`
grep "^$pkg:" $DATADIR/$1/sources-$BASE_ARCH | \
awk '{ $1=""; print $0 }' | \
sed "s|[[:space:]]_| |g"
}
function find_requirements() { function find_requirements() {
[ "$1" ] || return 1 [ "$1" ] || return 1
local tf=`mktemp` || { local tf=`mktemp` || {
@ -142,9 +149,9 @@ function find_requirements() {
echo -n " | missing requirements: " echo -n " | missing requirements: "
> $tf > $tf
cat $tf1 | while read line; do cat $tf1 | while read line; do
REQ=`grep "^$line:" $DATADIR/$PORT_REPOSITORY/sources-$BASE_ARCH | awk '{ print $2 }'` REQ=`find_source_by_provide $PORT_REPOSITORY $line`
[ "$REQ" ] && \ [ "$REQ" ] && \
echo "${REQ/_}" >> $tf || \ echo "${REQ}" >> $tf || \
echo -n "$line(unresolved) " echo -n "$line(unresolved) "
done done
> $tf1 > $tf1
@ -335,6 +342,7 @@ for TARGET_ARCH in ${TARGET_ARCHS}; do
JOB_MAYBEINSTALLED_NEW=() JOB_MAYBEINSTALLED_NEW=()
JOB_FAILED_OLD=(${JOB_FAILED[*]}) JOB_FAILED_OLD=(${JOB_FAILED[*]})
JOB_FAILED=() JOB_FAILED=()
JOB_CANTINSTALL_OLD=(${JOB_CANTINSTALL[*]})
for JOB_NUM in `seq 1 ${#JOB[*]}`; do for JOB_NUM in `seq 1 ${#JOB[*]}`; do
JOB_CURRENT=${JOB[$JOB_NUM-1]} JOB_CURRENT=${JOB[$JOB_NUM-1]}
if [ "`grep "^${JOB_CURRENT}$" /etc/autodist/unstage 2>/dev/null`" -o \ if [ "`grep "^${JOB_CURRENT}$" /etc/autodist/unstage 2>/dev/null`" -o \
@ -373,8 +381,17 @@ for TARGET_ARCH in ${TARGET_ARCHS}; do
%% COMMAND: LANG=C LC_ALL=C autodist -p ${JOB_CURRENT} --server $PORT_REPOSITORY --repository $PORT_REPOSITORY --severity 2 -- $STAGEOPTS" %% COMMAND: LANG=C LC_ALL=C autodist -p ${JOB_CURRENT} --server $PORT_REPOSITORY --repository $PORT_REPOSITORY --severity 2 -- $STAGEOPTS"
LANG=C LC_ALL=C autodist -p ${JOB_CURRENT} --server $PORT_REPOSITORY --repository $PORT_REPOSITORY --severity 2 -- $STAGEOPTS &>>$logfile LANG=C LC_ALL=C autodist -p ${JOB_CURRENT} --server $PORT_REPOSITORY --repository $PORT_REPOSITORY --severity 2 -- $STAGEOPTS &>>$logfile
[ $? -gt 0 ] && { [ $? -gt 0 ] && {
RES=`find_source_by_provide $PORT_REPOSITORY $JOB_CURRENT`
for j in ${RES}; do
[ "$j" != "$JOB_CURRENT" ] && RESOLVED_JOB="$RESOLVED_JOB $j"
done
if [ "$RESOLVED_JOB" ]; then
echo "(FAILED) [but scheduling $RESOLVED_JOB]"
JOB_FAILED=(${JOB_FAILED[*]} $RESOLVED_JOB)
else
echo "(FAILED) "
fi
JOB_CANTPREPARE=(${JOB_CANTPREPARE[*]} $JOB_CURRENT) JOB_CANTPREPARE=(${JOB_CANTPREPARE[*]} $JOB_CURRENT)
echo "(FAILED) "
continue continue
} || { } || {
echo $JOB_CURRENT >> $DATAARCHDIR/preparedjobs echo $JOB_CURRENT >> $DATAARCHDIR/preparedjobs
@ -460,6 +477,53 @@ for TARGET_ARCH in ${TARGET_ARCHS}; do
} }
echo echo
done done
if [ "${JOB[*]}" == "${JOB_FAILED[*]}" -a "${JOB_MISSINGREQ[*]}" == "" ]; then
# some new build, retry cantinstall jobs
JOB_CANTINSTALL=()
for JOB_NUM in `seq 1 ${#JOB_CANTINSTALL_OLD[*]}`; do
JOB_CURRENT=${JOB_CANTINSTALL_OLD[$JOB_NUM-1]}
if [ "`grep "^${JOB_CURRENT}$" /etc/autodist/unstage 2>/dev/null`" -o \
"`grep "^${JOB_CURRENT}$" /etc/autodist/unstage.${TARGET_ARCH} 2>/dev/null`" ]; then
echo -n "$JOB_CURRENT: "
STAGEOPTS=
else
echo -n "$JOB_CURRENT(staging): "
STAGEOPTS="$AUTOPORT_STAGEVARS"
fi
echo -n "retryinstall"
LANG=C LC_ALL=C autodist -i ${JOB_CURRENT} --arch $TARGET_ARCH --force --severity 2 -- $STAGEOPTS &>>$tmpfile
# --server $DEST_REPOSITORY --repository $PORT_REPOSITORY
[ $? -gt 0 ] && {
if [ "$VERBOSE_MODE" ]; then
echo
echo "Failed output:"
echo "=============="
cat $tmpfile
echo "=============="
echo
fi
cat $tmpfile >> $logfile
JOB_CANTINSTALL=(${JOB_CANTINSTALL[*]} $JOB_CURRENT)
echo $JOB_CURRENT >> $DATAARCHDIR/checkinstalljobs
echo "(FAILED)"
# sometimes script fails but package is installed; run fix_la_files anyway
sudo autoport-fix-environment $TARGET_ARCH
JOB_MAYBEINSTALLED_NEW=(${JOB_MAYBEINSTALLED_NEW[*]} $JOB_CURRENT)
JOB_LOG=`grep "^?= See " $tmpfile | awk '{ print $3 }'`
[ "$JOB_LOG" ] || JOB_LOG=$tmpfile
find_requirements $JOB_LOG
continue
} || {
cat $tmpfile >> $logfile
sudo autoport-fix-environment $TARGET_ARCH
JOB_MAYBEINSTALLED_NEW=(${JOB_MAYBEINSTALLED_NEW[*]} $JOB_CURRENT)
JOB_COMPLETED=(${JOB_COMPLETED[*]} $JOB_CURRENT)
echo -n "(OK)"
}
echo
done
fi
echo "Skipped jobs: ${JOB_SKIPPED[*]}" echo "Skipped jobs: ${JOB_SKIPPED[*]}"
echo "Unpreparable jobs: ${JOB_CANTPREPARE[*]}" echo "Unpreparable jobs: ${JOB_CANTPREPARE[*]}"
echo "Missing requirements: ${JOB_MISSINGREQ[*]}" echo "Missing requirements: ${JOB_MISSINGREQ[*]}"
@ -468,7 +532,9 @@ for TARGET_ARCH in ${TARGET_ARCHS}; do
echo "Failed jobs: ${JOB_FAILED[*]}" echo "Failed jobs: ${JOB_FAILED[*]}"
write_last_file write_last_file
[ "${JOB[*]}" == "${JOB_FAILED[*]}" -a "${JOB_MISSINGREQ[*]}" == "" ] && { [ "${JOB[*]}" == "${JOB_FAILED[*]}" -a \
"${JOB_MISSINGREQ[*]}" == "" -a \
"${JOB_CANTINSTALL_OLD[*]}" == "${JOB_CANTINSTALL[*]}" ] && {
echo "Loop detected. Finishing. See $logfile for details." echo "Loop detected. Finishing. See $logfile for details."
rm -f $tmpfile $tmpfile1 rm -f $tmpfile $tmpfile1
exit 1 exit 1