1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
conf=$MIRROR/conf
# attempt to resolve dependencies
test -z "$reprepro_retries" && reprepro_retries="40"
package_lists=""
for a in $ARCHES ; do
for component in $mirror_components ; do
package_lists="$package_lists $MIRROR/dists/$CODENAME/$component/binary-$a/Packages"
upstream_package_lists="$upstream_package_lists $MIRROR/lists/default_${CODENAME}_${component}_${a}_Packages"
done
done
mytmpdir=$(mktemp -d)
trap "rm -rf $mytmpdir" EXIT
# get a list of provides
grep --no-filename ^Provides $upstream_package_lists | cut -d : -f 2- | tr ',' '\n' | perl -np -e 's/\s+\(.*\)//; s/^\s*//' | sort -u >$mytmpdir/provides
for i in $(seq $reprepro_retries); do
cp $conf/package-list $conf/package-list.old
dependencies="$(awk -F Depends: '/Depends:/{print $2}' $package_lists | tr '|,' '\n' | awk '{print $1}' | sed -e 's/:any//' | sort -u)"
if [ "$NORECOMMENDS" != "1" ]; then
recommends="$(awk -F Recommends: '/Recommends:/{print $2}' $package_lists | tr '|,' '\n' | awk '{print $1}' | sed -e 's/:any//' | sort -u)"
else
recommends=""
fi
for p in $all_packages $dependencies ; do
echo $p
done > $mytmpdir/packages
provide_dependencies=$(providecheck "$mytmpdir/provides" "$mytmpdir/packages" | sort -u)
if [ -n "$provide_dependencies" ]; then
for p in $provide_dependencies ; do
# see if a package already satisfies the provides
satisfies="$(grep-dctrl -n --show-field Package --field Provides --field Package $p $package_lists || true)"
if [ -z "$satisfies" ]; then
# search for other packages that provide the desired features
providers=$(grep-dctrl -n --show-field Package --field Provides $p $upstream_package_lists || true)
if [ -z "$providers" ]; then
echo "failed to find a package providing the virtual package '$p'"
exit 1
fi
dependencies="$dependencies $providers"
fi
done
fi
for p in $dependencies $recommends $all_packages ; do
echo $p install
done | sort -u > $conf/package-list
if diff -q $conf/package-list $conf/package-list.old ; then
break
else
echo "getting missing dependencies... attempt $i"
if ! reprepro $reprepro_opts --nolistsdownload --noskipold update ; then
ret=$?
echo "reprepro failed with exit code: $ret"
exit 1
fi
fi
done
if diff -q $conf/package-list $conf/package-list.old ; then
echo "no new dependencies, finished in $i attempts."
else
echo "dependencies still missing after $i attempts."
echo "it could be that some dependencies are not satisfiable,"
echo "or that more iterations are needed. if later steps fail"
echo "due to missing dependencies, consider raising the value"
echo "reprepro_retries in your configuration."
fi
|