|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# Name: rpms.sh - part of the BeakerLib project
|
|
Packit |
bbb0ff |
# Description: Package manipulation helpers
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# Author: Petr Muller <pmuller@redhat.com>
|
|
Packit |
bbb0ff |
# Author: Jan Hutar <jhutar@redhat.com>
|
|
Packit |
bbb0ff |
# Author: Petr Splichal <psplicha@redhat.com>
|
|
Packit |
bbb0ff |
# Author: Ales Zelinka <azelinka@redhat.com>
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# Copyright (c) 2008-2010 Red Hat, Inc. All rights reserved.
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# This copyrighted material is made available to anyone wishing
|
|
Packit |
bbb0ff |
# to use, modify, copy, or redistribute it subject to the terms
|
|
Packit |
bbb0ff |
# and conditions of the GNU General Public License version 2.
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# This program is distributed in the hope that it will be
|
|
Packit |
bbb0ff |
# useful, but WITHOUT ANY WARRANTY; without even the implied
|
|
Packit |
bbb0ff |
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
Packit |
bbb0ff |
# PURPOSE. See the GNU General Public License for more details.
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# You should have received a copy of the GNU General Public
|
|
Packit |
bbb0ff |
# License along with this program; if not, write to the Free
|
|
Packit |
bbb0ff |
# Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
Packit |
bbb0ff |
# Boston, MA 02110-1301, USA.
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
: <<'=cut'
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head1 NAME
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
BeakerLib - rpms - Package manipulation helpers
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head1 DESCRIPTION
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Functions in this BeakerLib script are used for RPM manipulation.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head1 FUNCTIONS
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
. $BEAKERLIB/testing.sh
|
|
Packit |
bbb0ff |
. $BEAKERLIB/infrastructure.sh
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# Internal Stuff
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
__INTERNAL_RpmPresent() {
|
|
Packit |
bbb0ff |
local assert=$1
|
|
Packit |
bbb0ff |
local name=$2
|
|
Packit |
bbb0ff |
local version=$3
|
|
Packit |
bbb0ff |
local release=$4
|
|
Packit |
bbb0ff |
local arch=$5
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
local package=$name-$version-$release.$arch
|
|
Packit |
bbb0ff |
[ "$arch" == "" ] && package=$name-$version-$release
|
|
Packit |
bbb0ff |
[ "$release" == "" ] && package=$name-$version
|
|
Packit |
bbb0ff |
[ "$version" == "" ] && package=$name
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
export __INTERNAL_RPM_ASSERTED_PACKAGES="$__INTERNAL_RPM_ASSERTED_PACKAGES $name"
|
|
Packit |
bbb0ff |
rljRpmLog "$name"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
if [ -n "$package" ]; then
|
|
Packit |
bbb0ff |
rpm -q $package
|
|
Packit |
bbb0ff |
local status=$?
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
local status=100
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
if [ "$assert" == "assert" ] ; then
|
|
Packit |
bbb0ff |
__INTERNAL_ConditionalAssert "Checking for the presence of $package rpm" $status
|
|
Packit |
bbb0ff |
elif [ "$assert" == "assert_inverted" ] ; then
|
|
Packit |
bbb0ff |
if [ $status -eq 1 ]; then
|
|
Packit |
bbb0ff |
status=0
|
|
Packit |
bbb0ff |
elif [ $status -eq 0 ]; then
|
|
Packit |
bbb0ff |
status=1
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
__INTERNAL_ConditionalAssert "Checking for the non-presence of $package rpm" $status
|
|
Packit |
bbb0ff |
elif [ $status -eq 0 ] ; then
|
|
Packit |
bbb0ff |
rlLog "Package $package is present"
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
rlLog "Package $package is not present"
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
if rpm -q --quiet $package
|
|
Packit |
bbb0ff |
then
|
|
Packit |
bbb0ff |
rlLog "Package versions:"
|
|
Packit |
bbb0ff |
rpm -q --qf '%{name}-%{version}-%{release}.%{arch}\n' $package | while read line
|
|
Packit |
bbb0ff |
do
|
|
Packit |
bbb0ff |
rlLog " $line"
|
|
Packit |
bbb0ff |
done
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
return $status
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# rlCheckRpm
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
: <<'=cut'
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head2 Rpm Handling
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 rlCheckRpm
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Check whether a package is installed.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlCheckRpm name [version] [release] [arch]
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=over
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item name
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Package name like C<kernel>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item version
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Package version like C<2.6.25.6>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item release
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Package release like C<55.fc9>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item arch
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Package architucture like C<i386>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=back
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Returns 0 if the specified package is installed.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlCheckRpm() {
|
|
Packit |
bbb0ff |
__INTERNAL_RpmPresent noassert $1 $2 $3 $4
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# backward compatibility
|
|
Packit |
bbb0ff |
rlRpmPresent() {
|
|
Packit |
bbb0ff |
rlLogWarning "rlRpmPresent is obsoleted by rlCheckRpm"
|
|
Packit |
bbb0ff |
__INTERNAL_RpmPresent noassert $1 $2 $3 $4
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# rlAssertRpm
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
: <<'=cut'
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 rlAssertRpm
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Assertion making sure that a package is installed.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlAssertRpm name [version] [release] [arch]>
|
|
Packit |
bbb0ff |
rlAssertRpm --all
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=over
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item name
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Package name like C<kernel>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item version
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Package version like C<2.6.25.6>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item release
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Package release like C<55.fc9>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item arch
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Package architucture like C<i386>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item --all
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Assert all packages listed in the $PACKAGES $REQUIRES and $COLLECTIONS
|
|
Packit |
bbb0ff |
environment variables.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=back
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Returns 0 and asserts PASS if the specified package is installed.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlAssertRpm() {
|
|
Packit |
bbb0ff |
local package packages
|
|
Packit |
bbb0ff |
if [ "$1" = "--all" ] ; then
|
|
Packit |
bbb0ff |
packages="$PACKAGES $REQUIRES $COLLECTIONS"
|
|
Packit |
bbb0ff |
if [ "$packages" = " " ] ; then
|
|
Packit |
bbb0ff |
__INTERNAL_ConditionalAssert "rlAssertRpm: No package provided" 1
|
|
Packit |
bbb0ff |
return
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
for package in $packages ; do
|
|
Packit |
bbb0ff |
rlAssertRpm $package
|
|
Packit |
bbb0ff |
done
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
__INTERNAL_RpmPresent assert $1 $2 $3 $4
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# rlAssertNotRpm
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
: <<'=cut'
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 rlAssertNotRpm
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Assertion making sure that a package is not installed. This is
|
|
Packit |
bbb0ff |
just inverse of C<rlAssertRpm>.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlAssertNotRpm name [version] [release] [arch]>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=over
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item name
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Package name like C<kernel>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item version
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Package version like C<2.6.25.6>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item release
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Package release like C<55.fc9>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item arch
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Package architucture like C<i386>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=back
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Returns 0 and asserts PASS if the specified package is not installed.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 Example
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Function C<rlAssertRpm> is useful especially in prepare phase
|
|
Packit |
bbb0ff |
where it causes abort if a package is missing, while
|
|
Packit |
bbb0ff |
C<rlCheckRpm> is handy when doing something like:
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
if ! rlCheckRpm package; then
|
|
Packit |
bbb0ff |
yum install package
|
|
Packit |
bbb0ff |
rlAssertRpm package
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlAssertNotRpm() {
|
|
Packit |
bbb0ff |
__INTERNAL_RpmPresent assert_inverted $1 $2 $3 $4
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# rlAssertBinaryOrigin
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
: <<'=cut'
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 rlAssertBinaryOrigin
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Assertion making sure that given binary is owned by (one of) the given
|
|
Packit |
bbb0ff |
package(s).
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlAssertBinaryOrigin binary package [package2 [...]]
|
|
Packit |
bbb0ff |
PACKAGES=... rlAssertBinaryOrigin binary
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=over
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item binary
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Binary name like C<ksh> or C</bin/ksh>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item package
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
List of packages like C<ksh mksh>. The parameter is optional. If missing,
|
|
Packit |
bbb0ff |
contents of environment variable $PACKAGES are taken into account.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=back
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Returns 0 and asserts PASS if the specified binary belongs to (one of) the given package(s).
|
|
Packit |
bbb0ff |
Returns 1 and asserts FAIL if the specified binary does not belong to (any of) the given package(s).
|
|
Packit |
bbb0ff |
Returns 2 and asserts FAIL if the specified binary is not found.
|
|
Packit |
bbb0ff |
Returns 3 and asserts FAIL if no packages are given.
|
|
Packit |
bbb0ff |
Returns 100 and asserts FAIL if invoked with no parameters.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 Example
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Function C<rlAssertBinaryOrigin> is useful especially in prepare phase
|
|
Packit |
bbb0ff |
where it causes abort if a binary is missing or is owned by different package:
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
PACKAGES=mksh rlAssertBinaryOrigin ksh
|
|
Packit |
bbb0ff |
or
|
|
Packit |
bbb0ff |
rlAssertBinaryOrigin ksh mksh
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Returns true if ksh is owned by the mksh package (in this case: /bin/ksh is a
|
|
Packit |
bbb0ff |
symlink pointing to /bin/mksh).
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlAssertBinaryOrigin() {
|
|
Packit |
bbb0ff |
# without parameters, exit immediatelly
|
|
Packit |
bbb0ff |
local status CMD FULL_CMD
|
|
Packit |
bbb0ff |
status=0
|
|
Packit |
bbb0ff |
[ $# -eq 0 ] && {
|
|
Packit |
bbb0ff |
status=100
|
|
Packit |
bbb0ff |
rlLogError "rlAssertBinaryOrigin called without parameters"
|
|
Packit |
bbb0ff |
__INTERNAL_ConditionalAssert "rlAssertBinaryOrigin: No binary given" $status
|
|
Packit |
bbb0ff |
return $status
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
CMD=$1
|
|
Packit |
bbb0ff |
shift
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# if not given explicitly as param, take PKGS from $PACKAGES
|
|
Packit |
bbb0ff |
local PKGS=$@
|
|
Packit |
bbb0ff |
[ $# -eq 0 ] && PKGS=$PACKAGES
|
|
Packit |
bbb0ff |
if [ -z "$PKGS" ]; then
|
|
Packit |
bbb0ff |
status=3
|
|
Packit |
bbb0ff |
__INTERNAL_ConditionalAssert "rlAssertBinaryOrigin: No packages given" $status
|
|
Packit |
bbb0ff |
return $status
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
status=2
|
|
Packit |
bbb0ff |
FULL_CMD=$(which $CMD) &>/dev/null && \
|
|
Packit |
bbb0ff |
{
|
|
Packit |
bbb0ff |
status=1
|
|
Packit |
bbb0ff |
# expand symlinks (if any)
|
|
Packit |
bbb0ff |
local BINARY=$(readlink -f $FULL_CMD)
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# get the rpm owning the binary
|
|
Packit |
bbb0ff |
local BINARY_RPM=$(rpm -qf --qf="%{name}\n" $BINARY | uniq)
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlLogDebug "Binary rpm: $BINARY_RPM"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
local TESTED_RPM
|
|
Packit |
bbb0ff |
for TESTED_RPM in $PKGS ; do
|
|
Packit |
bbb0ff |
if [ "$TESTED_RPM" = "$BINARY_RPM" ] ; then
|
|
Packit |
bbb0ff |
status=0
|
|
Packit |
bbb0ff |
echo $BINARY_RPM
|
|
Packit |
bbb0ff |
break
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
done
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
[ $status -eq 2 ] && rlLogError "$CMD: command not found"
|
|
Packit |
bbb0ff |
[ $status -eq 1 ] && rlLogError "$BINARY belongs to $BINARY_RPM"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
__INTERNAL_ConditionalAssert "Binary '$CMD' should belong to: $PKGS" $status
|
|
Packit |
bbb0ff |
return $status
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# rlGetMakefileRequires
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
: <<'=cut'
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 rlGetMakefileRequires
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Prints comma separated list of requirements defined in Makefile using 'Requires'
|
|
Packit |
bbb0ff |
attribute.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Return 0 if success.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlGetMakefileRequires() {
|
|
Packit |
bbb0ff |
[[ -s ./Makefile ]] || {
|
|
Packit |
bbb0ff |
rlLogError "Could not find ./Makefile or the file is empty"
|
|
Packit |
bbb0ff |
return 1
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
grep '"Requires:' Makefile | sed -e 's/.*Requires: *\(.*\)".*/\1/' | tr ' ' '\n' | sort | uniq | tr '\n' ' ' | sed -r 's/^ +//;s/ +$//;s/ +/ /g'
|
|
Packit |
bbb0ff |
return 0
|
|
Packit |
bbb0ff |
}; # end of rlGetMakefileRequires
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# rlCheckRequirements
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
: <<'=cut'
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 rlCheckRequirements
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Check that all given requirements are covered eigther by installed package or by
|
|
Packit |
bbb0ff |
binary available in PATHs or by some package's provides.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlRun "rlCheckRequirements REQ..."
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=over
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item REQ
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Requirement to be checked. It can be package name, provides string or binary
|
|
Packit |
bbb0ff |
name.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=back
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Returns number of unsatisfied requirements.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
#'
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlCheckRequirements() {
|
|
Packit |
bbb0ff |
local req res=0 package binary provides LOG=() LOG2 l=0 ll
|
|
Packit |
bbb0ff |
for req in "$@"; do
|
|
Packit |
bbb0ff |
package="$(rpm -q "$req" 2> /dev/null)"
|
|
Packit |
bbb0ff |
if [[ $? -eq 0 ]]; then
|
|
Packit |
bbb0ff |
LOG=("${LOG[@]}" "$package" "covers requirement '$req'")
|
|
Packit |
bbb0ff |
rljRpmLog "$package"
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
binary="$(which "$req" 2> /dev/null)"
|
|
Packit |
bbb0ff |
if [[ $? -eq 0 ]]; then
|
|
Packit |
bbb0ff |
package="$(rpm -qf "$binary")"
|
|
Packit |
bbb0ff |
LOG=("${LOG[@]}" "$package" "covers requirement '$req' by binary '$binary' from package '$package'")
|
|
Packit |
bbb0ff |
rljRpmLog "$package"
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
package="$(rpm -q --whatprovides "$req" 2> /dev/null)"
|
|
Packit |
bbb0ff |
if [[ $? -eq 0 ]]; then
|
|
Packit |
bbb0ff |
LOG=("${LOG[@]}" "$package" "covers requirement '$req'")
|
|
Packit |
bbb0ff |
rljRpmLog "$package"
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
rlLogWarning "requirement '$req' not satisfied"
|
|
Packit |
bbb0ff |
let res++
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
done
|
|
Packit |
bbb0ff |
LOG2=("${LOG[@]}")
|
|
Packit |
bbb0ff |
while [[ ${#LOG2[@]} -gt 0 ]]; do
|
|
Packit |
bbb0ff |
[[ ${#LOG2} -gt $l ]] && l=${#LOG2}
|
|
Packit |
bbb0ff |
LOG2=("${LOG2[@]:2}")
|
|
Packit |
bbb0ff |
done
|
|
Packit |
bbb0ff |
local spaces=''
|
|
Packit |
bbb0ff |
for ll in `seq $l`; do spaces="$spaces "; done
|
|
Packit |
bbb0ff |
while [[ ${#LOG[@]} -gt 0 ]]; do
|
|
Packit |
bbb0ff |
let ll=$l-${#LOG}+1
|
|
Packit |
bbb0ff |
rlLog "package '$LOG' ${spaces:0:$ll} ${LOG[1]}"
|
|
Packit |
bbb0ff |
LOG=("${LOG[@]:2}")
|
|
Packit |
bbb0ff |
done
|
|
Packit |
bbb0ff |
return $res
|
|
Packit |
bbb0ff |
}; # end of rlCheckRequirements
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# rlCheckMakefileRequires
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
: <<'=cut'
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 rlCheckMakefileRequires
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
This is just a bit smarted wrapper of
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
C<rlCheckRequirements $(rlGetMakefileRequires)>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 Example
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlRun "rlCheckMakefileRequires"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Return 255 if requirements could not be retrieved, 0 if all requirements are
|
|
Packit |
bbb0ff |
satisfied or number of unsatisfied requirements.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlCheckMakefileRequires() {
|
|
Packit |
bbb0ff |
local req
|
|
Packit |
bbb0ff |
req="$(rlGetMakefileRequires)" || return 255
|
|
Packit |
bbb0ff |
eval rlCheckRequirements $req
|
|
Packit |
bbb0ff |
}; # end of rlCheckMakefileRequires
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# rlAssertRequired
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
: <<=cut
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 rlAssertRequired
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Ensures that all Requires, specified in beakerlib-style beaker-wizard layout
|
|
Packit |
bbb0ff |
Makefile, are installed.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlAssertRequired
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Prints out a verbose list of installed/missing packages during operation.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Returns 0 if all required packages are installed, 1 if one
|
|
Packit |
bbb0ff |
or more packages are missing or if no Makefile is present.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlAssertRequired(){
|
|
Packit |
bbb0ff |
local MAKEFILE="Makefile"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
if [ ! -e "$MAKEFILE" ]; then
|
|
Packit |
bbb0ff |
rlLogError "rlAssertRequired: $MAKEFILE not present"
|
|
Packit |
bbb0ff |
return 1
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
list="$(grep 'Requires:' $MAKEFILE)"
|
|
Packit |
bbb0ff |
if [ -z "$list" ]; then
|
|
Packit |
bbb0ff |
rlLogError "rlAssertRequired: $MAKEFILE does not contain 'Requires:'"
|
|
Packit |
bbb0ff |
return 1
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
list=$(echo "$list" | sed -r 's/^[ \t]+@echo "Requires:[ \t]+([^"]+)" >> \$\(METADATA\)$/\1/' | tr '\n' ' ')
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rpm -q $list
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
__INTERNAL_ConditionalAssert "Assert required packages installed" $?
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
return $?
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
: <<=cut
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head2 Getting RPMs
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 Download methods
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Functions handling rpm downloading/installing can use more methods for actual
|
|
Packit |
bbb0ff |
download of the rpm.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Currently there are two download methonds available:
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=over
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item direct
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Use use dirct download from build system (brew).
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item yum
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Use yumdownloader.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=back
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
The methods and their order are defined by BEAKERLIB_RPM_DOWNLOAD_METHODS
|
|
Packit |
bbb0ff |
variable as space separated list. By default it is 'direct yum'. This can be
|
|
Packit |
bbb0ff |
overridden by user.
|
|
Packit |
bbb0ff |
There may be done also additions or changes to the original value,
|
|
Packit |
bbb0ff |
e.g. BEAKERLIB_RPM_DOWNLOAD_METHODS='yum ${BEAKERLIB_RPM_DOWNLOAD_METHODS/yum/}'
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Beakerlib is prepared for more Koji-based sources of packages while usigng
|
|
Packit |
bbb0ff |
direct download method. By default packages are fetched from Koji, particularly
|
|
Packit |
bbb0ff |
from https://kojipkgs.fedoraproject.org/packages.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# return information of the first matching package
|
|
Packit |
bbb0ff |
# $1 - method (rpm | repoquery)
|
|
Packit |
bbb0ff |
# $2 - packages (NVR)
|
|
Packit |
bbb0ff |
__INTERNAL_rpmGetPackageInfo() {
|
|
Packit |
bbb0ff |
local package_info package_info_raw res=0
|
|
Packit |
bbb0ff |
rlLogDebug "${FUNCNAME}(): getting package info for '$2'"
|
|
Packit |
bbb0ff |
package_info_raw="$($1 --qf "%{name} %{version} %{release} %{arch} %{sourcerpm}\n" -q "$2")"
|
|
Packit |
bbb0ff |
[[ $? -ne 0 || -z "$package_info_raw" ]] && {
|
|
Packit |
bbb0ff |
rlLogDebug "${FUNCNAME}(): package_info_raw: '$package_info_raw'"
|
|
Packit |
bbb0ff |
rlLogInfo "rpm '$2' not available using '$1' tool"
|
|
Packit |
bbb0ff |
let res++
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
if [[ $res -eq 0 ]]; then
|
|
Packit |
bbb0ff |
rlLogDebug "${FUNCNAME}(): package_info_raw: '$package_info_raw'"
|
|
Packit |
bbb0ff |
# get first package
|
|
Packit |
bbb0ff |
local tmp=( $(echo "$package_info_raw" | head -n 1 ) )
|
|
Packit |
bbb0ff |
# extract component name from source_rpm
|
|
Packit |
bbb0ff |
package_info="${tmp[@]:0:4} $(__INTERNAL_getNVRA "${tmp[4]/.rpm}")" || {
|
|
Packit |
bbb0ff |
rlLogError "parsing package info '$package_info_raw' failed"
|
|
Packit |
bbb0ff |
let res++
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
rlLogDebug "${FUNCNAME}(): package_info: '$package_info'"
|
|
Packit |
bbb0ff |
rlLogDebug "got rpm info for '$2' via '$1'"
|
|
Packit |
bbb0ff |
echo "$package_info"
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
rlLogDebug "${FUNCNAME}(): returning $res"
|
|
Packit |
bbb0ff |
return $res
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
BEAKERLIB_rpm_fetch_base_url=( "https://kojipkgs.fedoraproject.org/packages" )
|
|
Packit |
bbb0ff |
BEAKERLIB_rpm_packageinfo_base_url=( "http://koji.fedoraproject.org/koji" )
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# generate combinations for various methods and parameters of finding the package
|
|
Packit |
bbb0ff |
__INTERNAL_rpmInitUrl() {
|
|
Packit |
bbb0ff |
local i j k
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlLogDebug "${FUNCNAME}(): preparing download variants"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
__INTERNAL_rpmGetNextUrl_phase=()
|
|
Packit |
bbb0ff |
for k in rpm repoquery; do
|
|
Packit |
bbb0ff |
for j in nvr n; do
|
|
Packit |
bbb0ff |
for i in "${BEAKERLIB_rpm_fetch_base_url[@]}"; do
|
|
Packit |
bbb0ff |
__INTERNAL_rpmGetNextUrl_phase+=( "$k" ); # tool
|
|
Packit |
bbb0ff |
__INTERNAL_rpmGetNextUrl_phase+=( "$j" ); # package_spec
|
|
Packit |
bbb0ff |
__INTERNAL_rpmGetNextUrl_phase+=( "$i" ); # base_url
|
|
Packit |
bbb0ff |
done
|
|
Packit |
bbb0ff |
done
|
|
Packit |
bbb0ff |
done
|
|
Packit |
bbb0ff |
for j in koji; do
|
|
Packit |
bbb0ff |
for i in "${BEAKERLIB_rpm_packageinfo_base_url[@]}"; do
|
|
Packit |
bbb0ff |
__INTERNAL_rpmGetNextUrl_phase+=( "$j" ) ; # tool
|
|
Packit |
bbb0ff |
__INTERNAL_rpmGetNextUrl_phase+=( "nvra.rpm" ) ; # package_spec
|
|
Packit |
bbb0ff |
__INTERNAL_rpmGetNextUrl_phase+=( "$i" ) ; # base_url
|
|
Packit |
bbb0ff |
done
|
|
Packit |
bbb0ff |
done
|
|
Packit |
bbb0ff |
rlLogDebug "${FUNCNAME}(): $(set | grep ^__INTERNAL_rpmGetNextUrl_phase=)"
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit Service |
e5f175 |
__INTERNAL_WGET="wget -t 3 -T 180 -w 20 --waitretry=30 --no-check-certificate --progress=dot:giga"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# __INTERNAL_rpmGetNextUrl N V R A | --source N V R
|
|
Packit |
bbb0ff |
__INTERNAL_rpmGetNextUrl() {
|
|
Packit |
bbb0ff |
local source=''
|
|
Packit |
bbb0ff |
[[ "$1" == "--source" ]] && {
|
|
Packit |
bbb0ff |
source="$1"
|
|
Packit |
bbb0ff |
shift
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
local N=$1 V=$2 R=$3 A=$4 nil res url
|
|
Packit |
bbb0ff |
rlLogDebug "${FUNCNAME}(): process $N-$V-$R.$A"
|
|
Packit |
bbb0ff |
while [[ -n "$__INTERNAL_rpmGetNextUrl_phase" ]]; do
|
|
Packit |
bbb0ff |
res=0
|
|
Packit |
bbb0ff |
local tool=${__INTERNAL_rpmGetNextUrl_phase[0]}
|
|
Packit |
bbb0ff |
local package_spec=${__INTERNAL_rpmGetNextUrl_phase[1]}
|
|
Packit |
bbb0ff |
local base_url=${__INTERNAL_rpmGetNextUrl_phase[2]}
|
|
Packit |
bbb0ff |
#rlLogDebug "${FUNCNAME}(): $(set | grep ^__INTERNAL_rpmGetNextUrl_phase=)"
|
|
Packit |
bbb0ff |
rlLogDebug "${FUNCNAME}(): remove first three indices of __INTERNAL_rpmGetNextUrl_phase"
|
|
Packit |
bbb0ff |
__INTERNAL_rpmGetNextUrl_phase=( "${__INTERNAL_rpmGetNextUrl_phase[@]:3}" )
|
|
Packit |
bbb0ff |
rlLogDebug "trying tool $tool with $package_spec"
|
|
Packit |
bbb0ff |
case $tool,$package_spec in
|
|
Packit |
bbb0ff |
*,nvr)
|
|
Packit |
bbb0ff |
IFS=' ' read nil nil nil nil CN CV CR CA < <(__INTERNAL_rpmGetPackageInfo $tool "$N-$V-$R")
|
|
Packit |
bbb0ff |
res=$?
|
|
Packit |
bbb0ff |
if [[ -n "$source" ]]; then
|
|
Packit |
bbb0ff |
url="$base_url/$CN/$CV/$CR/src/$CN-$CV-$CR.src.rpm"
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
url="$base_url/$CN/$CV/$CR/$A/$N-$V-$R.$A.rpm"
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
;;
|
|
Packit |
bbb0ff |
*,n)
|
|
Packit |
bbb0ff |
IFS=' ' read nil nil nil nil CN CV CR CA < <(__INTERNAL_rpmGetPackageInfo $tool "$N")
|
|
Packit |
bbb0ff |
res=$?
|
|
Packit |
bbb0ff |
if [[ -n "$source" ]]; then
|
|
Packit |
bbb0ff |
url="$base_url/$CN/$V/$R/src/$CN-$V-$R.src.rpm"
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
url="$base_url/$CN/$V/$R/$A/$N-$V-$R.$A.rpm"
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
;;
|
|
Packit |
bbb0ff |
koji,nvra.rpm)
|
|
Packit |
bbb0ff |
rlLogDebug "$FUNCNAME(): get rpm info"
|
|
Packit Service |
e5f175 |
local rpm_info=$($__INTERNAL_WGET -O - "$base_url/search?match=exact&type=rpm&terms=$N-$V-$R.$A.rpm")
|
|
Packit |
bbb0ff |
[[ $? -ne 0 || -z "$rpm_info" ]] && {
|
|
Packit |
bbb0ff |
rlLogError "could not download rpm information"
|
|
Packit |
bbb0ff |
let res++
|
|
Packit |
bbb0ff |
continue
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
#[[ "$DEBUG" ]] && rlLogDebug "rpm_info='$rpm_info'"
|
|
Packit |
bbb0ff |
local buildurl=$(echo "$rpm_info" | grep Version | grep -o '[^"]*buildID=[^"]*')
|
|
Packit |
bbb0ff |
[[ $? -ne 0 || -z "$buildurl" ]] && {
|
|
Packit |
bbb0ff |
rlLogError "could not find buildID"
|
|
Packit |
bbb0ff |
let res++
|
|
Packit |
bbb0ff |
continue
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
rlLogDebug "$FUNCNAME(): extracted buildurl='$buildurl'"
|
|
Packit |
bbb0ff |
[[ "$buildurl" =~ http ]] || buildurl="$base_url/$buildurl"
|
|
Packit |
bbb0ff |
rlLogDebug "$FUNCNAME(): using buildurl='$buildurl'"
|
|
Packit Service |
e5f175 |
local buildinfo=$($__INTERNAL_WGET -O - "$buildurl")
|
|
Packit |
bbb0ff |
[[ $? -ne 0 || -z "$buildinfo" ]] && {
|
|
Packit |
bbb0ff |
rlLogError "could not download build information"
|
|
Packit |
bbb0ff |
let res++
|
|
Packit |
bbb0ff |
continue
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
#[[ -n "$DEBUG" ]] && rlLogDebug "buildinfo='$buildinfo'"
|
|
Packit |
bbb0ff |
if [[ -n "$source" ]]; then
|
|
Packit |
bbb0ff |
url=$(echo "$buildinfo" | grep download | grep -o 'http[^"]*.src.rpm')
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
url=$(echo "$buildinfo" | grep download | grep -o "http[^\"]*/$N-$V-$R.$A.rpm")
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
[[ $? -ne 0 ]] && {
|
|
Packit |
bbb0ff |
rlLogError "could not find package url"
|
|
Packit |
bbb0ff |
let res++
|
|
Packit |
bbb0ff |
continue
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
;;
|
|
Packit |
bbb0ff |
*)
|
|
Packit |
bbb0ff |
rlLogDebug "$FUNCNAME(): unknown case"
|
|
Packit |
bbb0ff |
rlLogError "there's a bug in the code, unknown case!"
|
|
Packit |
bbb0ff |
let res++
|
|
Packit |
bbb0ff |
break
|
|
Packit |
bbb0ff |
esac
|
|
Packit |
bbb0ff |
[[ $res -eq 0 ]] && break
|
|
Packit |
bbb0ff |
done
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
[[ -z "$url" ]] && {
|
|
Packit |
bbb0ff |
rlLogError "could not find package url"
|
|
Packit |
bbb0ff |
let res++
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlLogDebug "$FUNCNAME(): using url='$url'"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
[[ $res -eq 0 ]] && __INTERNAL_RETURN_VALUE="$url"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlLogDebug "${FUNCNAME}(): returning $res"
|
|
Packit |
bbb0ff |
return $res
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
__INTERNAL_getNVRA() {
|
|
Packit |
bbb0ff |
rlLogDebug "${FUNCNAME}(): parsing NVRA for '$1'"
|
|
Packit |
bbb0ff |
local pat='(.+)-([^-]+)-(.+)\.([^.]+)$'
|
|
Packit |
bbb0ff |
[[ "$1" =~ $pat ]] && echo "${BASH_REMATCH[@]:1}"
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
__INTERNAL_rpmDirectDownload() {
|
|
Packit |
bbb0ff |
local url pkg quiet=''
|
|
Packit |
bbb0ff |
[[ "$1" == "--quiet" ]] && {
|
|
Packit |
bbb0ff |
quiet="$1"
|
|
Packit |
bbb0ff |
shift
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
__INTERNAL_rpmInitUrl
|
|
Packit |
bbb0ff |
while __INTERNAL_rpmGetNextUrl "$@"; do
|
|
Packit |
bbb0ff |
url="$__INTERNAL_RETURN_VALUE"; unset __INTERNAL_RETURN_VALUE
|
|
Packit |
bbb0ff |
local pkg=$(basename "$url")
|
|
Packit |
bbb0ff |
rlLog "trying download from '$url'"
|
|
Packit Service |
e5f175 |
if $__INTERNAL_WGET $quiet -O $pkg "$url"; then
|
|
Packit |
bbb0ff |
rlLogDebug "$FUNCNAME(): package '$pkg' was successfully downloaded"
|
|
Packit |
bbb0ff |
echo "$pkg"
|
|
Packit |
bbb0ff |
return 0
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
rm -f "$pkg"
|
|
Packit |
bbb0ff |
rlLogWarning "package '$pkg' was not successfully downloaded"
|
|
Packit |
bbb0ff |
done
|
|
Packit |
bbb0ff |
rlLogError "package '$pkg' was not successfully downloaded"
|
|
Packit |
bbb0ff |
rlLogDebug "${FUNCNAME}(): returning 1"
|
|
Packit |
bbb0ff |
return 1
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# __INTERNAL_rpmGetWithYumDownloader
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# Download package using yumdownloader
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
__INTERNAL_rpmGetWithYumDownloader() {
|
|
Packit |
bbb0ff |
local source='' quiet=''
|
|
Packit |
bbb0ff |
while [[ "${1:0:2}" == "--" ]]; do
|
|
Packit |
bbb0ff |
case $1 in
|
|
Packit |
bbb0ff |
--quiet)
|
|
Packit |
bbb0ff |
quiet="$1"
|
|
Packit |
bbb0ff |
;;
|
|
Packit |
bbb0ff |
--source)
|
|
Packit |
bbb0ff |
source="$1"
|
|
Packit |
bbb0ff |
;;
|
|
Packit |
bbb0ff |
esac
|
|
Packit |
bbb0ff |
shift
|
|
Packit |
bbb0ff |
done
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
local package="$1-$2-$3.$4"
|
|
Packit |
bbb0ff |
[[ -n "$source" ]] && package="$1-$2-$3"
|
|
Packit |
bbb0ff |
rlLogDebug "${FUNCNAME}(): Trying yumdownloader to download $package"
|
|
Packit |
bbb0ff |
if ! which yumdownloader &> /dev/null ; then
|
|
Packit |
bbb0ff |
rlLogInfo "yumdownloader not installed: attempting to install yum-utils"
|
|
Packit |
bbb0ff |
yum install $quiet -y yum-utils >&2
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
if ! which yumdownloader &> /dev/null ; then
|
|
Packit |
bbb0ff |
rlLogError "yumdownloader not installed even after instalation attempt"
|
|
Packit |
bbb0ff |
return 1
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
local tmp
|
|
Packit |
bbb0ff |
if tmp=$(mktemp -d); then
|
|
Packit |
bbb0ff |
rlLogDebug "$FUNCNAME(): downloading package to tmp dir '$tmp'"
|
|
Packit |
bbb0ff |
( cd $tmp; yumdownloader $quiet -y $source $package >&2 ) || {
|
|
Packit |
bbb0ff |
rlLogError "yum downloader failed"
|
|
Packit |
bbb0ff |
rm -rf $tmp
|
|
Packit |
bbb0ff |
return 1
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
local pkg=$( ls -1 $tmp )
|
|
Packit |
bbb0ff |
rlLogDebug "$FUNCNAME(): got '$pkg'"
|
|
Packit |
bbb0ff |
local pkg_cnt=$( echo "$pkg" | wc -w )
|
|
Packit |
bbb0ff |
rlLogDebug "$FUNCNAME(): pkg_cnt=$pkg_cnt"
|
|
Packit |
bbb0ff |
[[ $pkg_cnt -eq 0 ]] && {
|
|
Packit |
bbb0ff |
rlLogError "did not download anything"
|
|
Packit |
bbb0ff |
rm -rf $tmp
|
|
Packit |
bbb0ff |
return 1
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
[[ $pkg_cnt -gt 1 ]] && rlLogWarning "got more than one package"
|
|
Packit |
bbb0ff |
rm -f $pkg
|
|
Packit |
bbb0ff |
rlLogDebug "$FUNCNAME(): moving package to local dir"
|
|
Packit |
bbb0ff |
mv $tmp/* ./
|
|
Packit |
bbb0ff |
rlLogDebug "$FUNCNAME(): removing tmp dir '$tmp'"
|
|
Packit |
bbb0ff |
rm -rf $tmp
|
|
Packit |
bbb0ff |
rlLogDebug "$FUNCNAME(): Download with yumdownloader successful"
|
|
Packit |
bbb0ff |
echo "$pkg"
|
|
Packit |
bbb0ff |
return 0
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
rlLogError "could not create tmp dir"
|
|
Packit |
bbb0ff |
return 1
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# magic to allow this:
|
|
Packit |
bbb0ff |
# BEAKERLIB_RPM_DOWNLOAD_METHODS="yum ${BEAKERLIB_RPM_DOWNLOAD_METHODS/yum/}"
|
|
Packit |
bbb0ff |
__INTERNAL_BEAKERLIB_RPM_DOWNLOAD_METHODS_default='direct yum'
|
|
Packit |
bbb0ff |
__INTERNAL_BEAKERLIB_RPM_DOWNLOAD_METHODS_cmd="BEAKERLIB_RPM_DOWNLOAD_METHODS=\"${BEAKERLIB_RPM_DOWNLOAD_METHODS:-$__INTERNAL_BEAKERLIB_RPM_DOWNLOAD_METHODS_default}\""
|
|
Packit |
bbb0ff |
BEAKERLIB_RPM_DOWNLOAD_METHODS=$__INTERNAL_BEAKERLIB_RPM_DOWNLOAD_METHODS_default
|
|
Packit |
bbb0ff |
eval "$__INTERNAL_BEAKERLIB_RPM_DOWNLOAD_METHODS_cmd"
|
|
Packit |
bbb0ff |
unset __INTERNAL_BEAKERLIB_RPM_DOWNLOAD_METHODS_cmd
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
__INTERNAL_rpmDownload() {
|
|
Packit |
bbb0ff |
local method rpm res
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlLogDebug "$FUNCNAME(): trying $* with methods '$BEAKERLIB_RPM_DOWNLOAD_METHODS'"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
for method in $BEAKERLIB_RPM_DOWNLOAD_METHODS; do
|
|
Packit |
bbb0ff |
rlLogDebug "trying to get the package using method '$method'"
|
|
Packit |
bbb0ff |
case $method in
|
|
Packit |
bbb0ff |
direct)
|
|
Packit |
bbb0ff |
if rpm="$(__INTERNAL_rpmDirectDownload "$@")"; then
|
|
Packit |
bbb0ff |
res=0
|
|
Packit |
bbb0ff |
break
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
rlLogWarning "could not get package unsing method '$method'"
|
|
Packit |
bbb0ff |
let res++
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
;;
|
|
Packit |
bbb0ff |
yum)
|
|
Packit |
bbb0ff |
if rpm="$(__INTERNAL_rpmGetWithYumDownloader "$@")"; then
|
|
Packit |
bbb0ff |
res=0
|
|
Packit |
bbb0ff |
break
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
rlLogWarning "could not get package unsing method '$method'"
|
|
Packit |
bbb0ff |
let res++
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
;;
|
|
Packit |
bbb0ff |
*)
|
|
Packit |
bbb0ff |
rlLogError "invalid fetch method '$method'"
|
|
Packit |
bbb0ff |
return 1
|
|
Packit |
bbb0ff |
;;
|
|
Packit |
bbb0ff |
esac
|
|
Packit |
bbb0ff |
done
|
|
Packit |
bbb0ff |
[[ $res -eq 0 ]] && echo "$rpm"
|
|
Packit |
bbb0ff |
rlLogDebug "$FUNCNAME(): returning $res"
|
|
Packit |
bbb0ff |
return $res
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# rlRpmInstall
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
: <<=cut
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 rlRpmInstall
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Try to install specified package from local Red Hat sources.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlRpmInstall [--quiet] package version release arch
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=over
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item --quiet
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Make the download and the install process be quiet.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item package
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Package name like C<kernel>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item version
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Package version like C<2.6.25.6>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item release
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Package release like C<55.fc9>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item arch
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Package arch like C<i386>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=back
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Returns 0 if specified package was installed succesfully.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlRpmInstall(){
|
|
Packit |
bbb0ff |
local quiet=''
|
|
Packit |
bbb0ff |
[[ "$1" == "--quiet" ]] && {
|
|
Packit |
bbb0ff |
quiet="$1"
|
|
Packit |
bbb0ff |
shift
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
if [ $# -ne 4 ]; then
|
|
Packit |
bbb0ff |
rlLogError "Missing parameter(s)"
|
|
Packit |
bbb0ff |
return 1
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
local N=$1;
|
|
Packit |
bbb0ff |
local V=$2;
|
|
Packit |
bbb0ff |
local R=$3;
|
|
Packit |
bbb0ff |
local A=$4;
|
|
Packit |
bbb0ff |
rlLog "Installing RPM $N-$V-$R.$A"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
if rlCheckRpm $N $V $R $A; then
|
|
Packit |
bbb0ff |
rlLog "$FUNCNAME: $N-$V-$R.$A already present. Doing nothing"
|
|
Packit |
bbb0ff |
return 0
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
local tmp=$(mktemp -d)
|
|
Packit |
bbb0ff |
( cd $tmp; __INTERNAL_rpmDownload $quiet $N $V $R $A )
|
|
Packit |
bbb0ff |
if [ $? -eq 0 ]; then
|
|
Packit |
bbb0ff |
rlLog "RPM: $N-$V-$R.$A.rpm"
|
|
Packit |
bbb0ff |
if [[ -z "$quiet" ]]; then
|
|
Packit |
bbb0ff |
rpm -Uhv --oldpackage "$tmp/$N-$V-$R.$A.rpm"
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
rpm -Uq --oldpackage "$tmp/$N-$V-$R.$A.rpm"
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
local ECODE=$?
|
|
Packit |
bbb0ff |
if [ $ECODE -eq 0 ] ; then
|
|
Packit |
bbb0ff |
rlLogInfo "$FUNCNAME: RPM installed successfully"
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
rlLogError "$FUNCNAME: RPM installation failed"
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
rm -rf "$tmp"
|
|
Packit |
bbb0ff |
return $ECODE
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
rlLogError "$FUNCNAME: RPM not found"
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
return 1
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# rlRpmDownload
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
: <<=cut
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 rlRpmDownload
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Try to download specified package.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlRpmDownload [--quiet] {package version release arch|N-V-R.A}
|
|
Packit |
bbb0ff |
rlRpmDownload [--quiet] --source {package version release|N-V-R}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=over
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item --quiet
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Make the download process be quiet.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item package
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Package name like C<kernel>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item version
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Package version like C<2.6.25.6>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item release
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Package release like C<55.fc9>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item arch
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Package arch like C<i386>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=back
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Returns 0 if specified package was downloaded succesfully.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlRpmDownload(){
|
|
Packit |
bbb0ff |
local source='' res pkg N V R A quiet=''
|
|
Packit |
bbb0ff |
while [[ "${1:0:2}" == "--" ]]; do
|
|
Packit |
bbb0ff |
case $1 in
|
|
Packit |
bbb0ff |
--quiet)
|
|
Packit |
bbb0ff |
quiet="$1"
|
|
Packit |
bbb0ff |
;;
|
|
Packit |
bbb0ff |
--source)
|
|
Packit |
bbb0ff |
source="$1"
|
|
Packit |
bbb0ff |
;;
|
|
Packit |
bbb0ff |
esac
|
|
Packit |
bbb0ff |
shift
|
|
Packit |
bbb0ff |
done
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
if [[ $# -eq 1 ]]; then
|
|
Packit |
bbb0ff |
local package="$1"
|
|
Packit |
bbb0ff |
[[ -n "$source" ]] && package="$package.src"
|
|
Packit |
bbb0ff |
if ! IFS=' ' read N V R A < <(__INTERNAL_getNVRA "$package"); then
|
|
Packit |
bbb0ff |
rlLogError "$FUNCNAME: Bad N.V.R-A format"
|
|
Packit |
bbb0ff |
return 1
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
elif [[ -z "$source" && $# -eq 4 ]]; then
|
|
Packit |
bbb0ff |
N="$1"
|
|
Packit |
bbb0ff |
V="$2"
|
|
Packit |
bbb0ff |
R="$3"
|
|
Packit |
bbb0ff |
A="$4"
|
|
Packit |
bbb0ff |
elif [[ -n "$source" && $# -ge 3 ]]; then
|
|
Packit |
bbb0ff |
N="$1"
|
|
Packit |
bbb0ff |
V="$2"
|
|
Packit |
bbb0ff |
R="$3"
|
|
Packit |
bbb0ff |
A=""
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
rlLogError "$FUNCNAME: invalid parameter(s)"
|
|
Packit |
bbb0ff |
return 1
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlLog "$FUNCNAME: Fetching ${source:+source }RPM $N-$V-$R.$A"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
if pkg=$(__INTERNAL_rpmDownload $quiet $source $N $V $R $A); then
|
|
Packit |
bbb0ff |
rlLog "RPM: $pkg"
|
|
Packit |
bbb0ff |
echo "$pkg"
|
|
Packit |
bbb0ff |
return 0
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
rlLogError "$FUNCNAME: RPM download failed"
|
|
Packit |
bbb0ff |
return 1
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# rlFetchSrcForInstalled
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
: <<=cut
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 rlFetchSrcForInstalled
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Tries various ways to download source rpm for specified installed rpm.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlFetchSrcForInstalled [--quiet] package
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=over
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item --quiet
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Make the download process be quiet.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item package
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Installed package name like C<kernel>. It accepts in-direct names.
|
|
Packit |
bbb0ff |
Eg for the package name C<krb5-libs> will the function download
|
|
Packit |
bbb0ff |
the C<krb5> source rpm.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=back
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Returns 0 if the source package was succesfully downloaded.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlFetchSrcForInstalled(){
|
|
Packit |
bbb0ff |
local quiet=''
|
|
Packit |
bbb0ff |
[[ "$1" == "--quiet" ]] && {
|
|
Packit |
bbb0ff |
quiet="$1"
|
|
Packit |
bbb0ff |
shift
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
local PKGNAME=$1 srcrpm
|
|
Packit |
bbb0ff |
local N V R nil
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
if ! IFS=' ' read N V R nil < <((__INTERNAL_rpmGetPackageInfo rpm "$PKGNAME")); then
|
|
Packit |
bbb0ff |
rlLogError "$FUNCNAME: The package is not installed, can't download the source"
|
|
Packit |
bbb0ff |
return 1
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
rlLog "$FUNCNAME: Fetching source rpm for installed $N-$V-$R"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
if srcrpm="$(__INTERNAL_rpmDownload $quiet --source $N $V $R)"; then
|
|
Packit |
bbb0ff |
echo "$srcrpm"
|
|
Packit |
bbb0ff |
return 0
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
rlLogError "$FUNCNAME: could not get package"
|
|
Packit |
bbb0ff |
return 1
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# AUTHORS
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
: <<'=cut'
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head1 AUTHORS
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=over
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item *
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Petr Muller <pmuller@redhat.com>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item *
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Jan Hutar <jhutar@redhat.com>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item *
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Petr Splichal <psplicha@redhat.com>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item *
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Ales Zelinka <azelinka@redhat.com>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item *
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Dalibor Pospisil <dapospis@redhat.com>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=back
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|