Add support CentOS-8/dnf/mock-2.6 based builds
This update will retain support for CentOS-7/yum/mock-1.4 based builds. The build environment will be queried to discover which environment it is building in, and modify the commands we issue accordingly. In CentOS 8, DNF replaces both YUM and REPOQUERY. While DNF tries to be a transparent replacement of the old tools, there are also subtle changes to the supported arguments. I will provide independent mock.cfg.prototypes for centos7 vs centos8. Changes in generate-centos-repo.sh under stx-tools will be required to select the correct prototype. Add support for mock 2.6. Mock 2.6 is python 3, and it processes the 'root' and 'rootdir' arguments slightly differently. Also change the order of arguments to tar within default_build_srpm. The latest tar only honors '--exclude' if it precedes other arguments. Story: 2006729 Depends-On: https://review.opendev.org/762700 Signed-off-by: Scott Little <scott.little@windriver.com> Change-Id: I826be2051e535e6a4c08ad17124f453b04210668
This commit is contained in:
parent
09c66cd0d7
commit
77576b7207
@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
#
|
||||
# Copyright (c) 2018-2019 Wind River Systems, Inc.
|
||||
# Copyright (c) 2018-2020 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
@ -18,6 +18,10 @@ BUILD_ISO_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}" )" )"
|
||||
source "${BUILD_ISO_DIR}/image-utils.sh"
|
||||
source "${BUILD_ISO_DIR}/git-utils.sh"
|
||||
|
||||
# Set REPOQUERY, REPOQUERY_SUB_COMMAND, REPOQUERY_RESOLVE and
|
||||
# REPOQUERY_WHATPROVIDES_DELIM for our build environment.
|
||||
source "${BUILD_ISO_DIR}/pkg-manager-utils.sh"
|
||||
|
||||
usage () {
|
||||
echo ""
|
||||
echo "Usage: "
|
||||
@ -40,8 +44,8 @@ usage () {
|
||||
MY_YUM_CONF=""
|
||||
STD_REPO_ID="local-std"
|
||||
RT_REPO_ID="local-rt"
|
||||
LOWER_LAYER_STD_REPO_ID="StxCentos7Distro"
|
||||
LOWER_LAYER_RT_REPO_ID="StxCentos7Distro-rt"
|
||||
LOWER_LAYER_STD_REPO_ID=""
|
||||
LOWER_LAYER_RT_REPO_ID=""
|
||||
|
||||
NPROCS=$(nproc)
|
||||
|
||||
@ -77,13 +81,13 @@ function install_pkg_list {
|
||||
|
||||
\cd $OUTPUT_DIST_DIR/isolinux/Packages
|
||||
$INTERNAL_REPO_ROOT/build-tools/build_iso/cgts_deps.sh --deps=$PKGLIST
|
||||
|
||||
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo "Could not install dependencies"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
# clean up
|
||||
echo "Removing local-std yum repo $CGCS_REPO_DIR/repodata"
|
||||
echo "Removing local-rt yum repo $CGCS_RT_REPO_DIR/repodata"
|
||||
@ -111,7 +115,7 @@ function make_report {
|
||||
for PKGLIST in $PKGLISTFILES; do
|
||||
while read PKG; do
|
||||
PKG=`echo $PKG | sed "s/#.*//"`;
|
||||
if [ "${PKG}x" != "x" ]; then
|
||||
if [ "${PKG}x" != "x" ]; then
|
||||
echo $PKG >> $REPORT_FILE
|
||||
fi
|
||||
done < $PKGLIST
|
||||
@ -127,7 +131,7 @@ function make_report {
|
||||
echo "-----------------" >> $REPORT_FILE
|
||||
echo " WARNINGS " >> $REPORT_FILE
|
||||
echo "-----------------" >> $REPORT_FILE
|
||||
|
||||
|
||||
# Note that the warnings file may have multiple lines for the same
|
||||
# missing dependency. A sort | uniq solves this so we don't duplicate
|
||||
# warnings
|
||||
@ -158,13 +162,17 @@ function init_vars {
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# LOWER_LAYER_STD_REPO_ID should be something like StxCentos7Distro or StxCentos8Distro
|
||||
LOWER_LAYER_STD_REPO_ID=$(grep '\[StxCentos.*Distro\]' ${MY_YUM_CONF} | sed -e 's/^\[//' -e 's/\].*//')
|
||||
LOWER_LAYER_RT_REPO_ID=$(grep '\[StxCentos.*Distro-rt\]' ${MY_YUM_CONF} | sed -e 's/^\[//' -e 's/\].*//')
|
||||
|
||||
DISTRO_REPO_DIR=$(for d in $(grep baseurl $MY_YUM_CONF | grep file: | awk -F : '{print $2}' | sed 's:///:/:g'); do if [ -d $d/images ]; then echo $d ;fi; done)
|
||||
|
||||
#####################################
|
||||
# Output definitons
|
||||
|
||||
# where to put stuff (curent dir unless MY_WORKSPACE defined)
|
||||
OUTPUT_DIR="$PWD/export"
|
||||
OUTPUT_DIR="$PWD/export"
|
||||
if [ ! -z "$MY_WORKSPACE" ] && [ -d "$MY_WORKSPACE" ] ; then
|
||||
OUTPUT_DIR="$MY_WORKSPACE/export"
|
||||
CGCS_REPO_DIR="$MY_WORKSPACE/std/rpmbuild/RPMS"
|
||||
@ -316,7 +324,7 @@ function init_output_dir {
|
||||
date +%s.%N > $OUTPUT_DIST_DIR/isolinux/.discinfo
|
||||
echo $PLATFORM_RELEASE >> $OUTPUT_DIST_DIR/isolinux/.discinfo
|
||||
echo "x86_64" >> $OUTPUT_DIST_DIR/isolinux/.discinfo
|
||||
|
||||
|
||||
\cp -L -ru $DISTRO_REPO_DIR/isolinux/* $OUTPUT_DIST_DIR/isolinux/
|
||||
\cp -L -ru $DISTRO_REPO_DIR/images/pxeboot $OUTPUT_DIST_DIR/isolinux/images/
|
||||
|
||||
@ -342,7 +350,7 @@ function init_output_dir {
|
||||
perl -p -i -e "s/device=sda/device=${DEVICE}/g" $OUTPUT_DIST_DIR/isolinux/isolinux.cfg
|
||||
fi
|
||||
|
||||
# Copy UEFI files
|
||||
# Copy UEFI files
|
||||
\cp -L -ru $DISTRO_REPO_DIR/EFI/* $OUTPUT_DIST_DIR/isolinux/EFI/
|
||||
\cp -L "$BSP_FILES_PATH/grub.cfg" "$OUTPUT_DIST_DIR/isolinux/EFI/BOOT/grub.cfg"
|
||||
\cp -L "$BSP_FILES_PATH/pxeboot_grub.cfg" "$OUTPUT_DIST_DIR/isolinux/pxeboot/pxeboot_grub.cfg"
|
||||
@ -472,7 +480,7 @@ function final_touches {
|
||||
# create the repo
|
||||
\cd $OUTPUT_DIST_DIR/isolinux
|
||||
$CREATEREPO -q -g ../comps.xml .
|
||||
|
||||
|
||||
# build the ISO
|
||||
printf "Building image $OUTPUT_FILE\n"
|
||||
\cd $OUTPUT_DIST_DIR
|
||||
@ -485,7 +493,7 @@ function final_touches {
|
||||
-eltorito-alt-boot \
|
||||
-e images/efiboot.img \
|
||||
-no-emul-boot \
|
||||
isolinux/
|
||||
isolinux/
|
||||
|
||||
isohybrid --uefi $OUTPUT_FILE
|
||||
implantisomd5 $OUTPUT_FILE
|
||||
@ -495,7 +503,7 @@ function final_touches {
|
||||
|
||||
function extract_pkg_from_local_repo {
|
||||
local pkgname=$1
|
||||
local yum_conf=$2
|
||||
local pkg_mgr_conf=$2
|
||||
shift 2
|
||||
|
||||
local repoid=""
|
||||
@ -505,7 +513,14 @@ function extract_pkg_from_local_repo {
|
||||
repoid_arg+=" --repoid=${repoid}"
|
||||
done
|
||||
|
||||
local pkgfile=$(TMPDIR=$TMP_DIR repoquery --config=${yum_conf} ${repoid_arg} --location -q ${pkgname})
|
||||
echo "TMPDIR=$TMP_DIR"\
|
||||
"${REPOQUERY} --config=${pkg_mgr_conf} ${repoid_arg}"\
|
||||
"${REPOQUERY_SUB_COMMAND} --location"\
|
||||
"--arch=noarch,x86_64 -q ${pkgname}"
|
||||
local pkgfile=$(TMPDIR=$TMP_DIR \
|
||||
${REPOQUERY} --config=${pkg_mgr_conf} ${repoid_arg} \
|
||||
${REPOQUERY_SUB_COMMAND} --location \
|
||||
--arch=noarch,x86_64 -q ${pkgname})
|
||||
if [ -z "${pkgfile}" ]; then
|
||||
echo "Could not find package $pkgname in $@"
|
||||
exit 1
|
||||
@ -605,7 +620,7 @@ EOM
|
||||
echo "Error: Could not copy all files from installer"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
\cp --preserve=all www/pages/feed/rel-*/LiveOS/squashfs.img $OUTPUT_DIST_DIR/isolinux/LiveOS
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error: Could not copy squashfs from LiveOS"
|
||||
|
@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
#
|
||||
# Copyright (c) 2018 Wind River Systems, Inc.
|
||||
# Copyright (c) 2018-2020 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
@ -15,6 +15,10 @@
|
||||
|
||||
BUILD_PKGS_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}" )" )"
|
||||
|
||||
# Set REPOQUERY and REPOQUERY_SUB_COMMAND for our build environment.
|
||||
source "${BUILD_PKGS_DIR}/pkg-manager-utils.sh"
|
||||
|
||||
|
||||
usage () {
|
||||
echo ""
|
||||
echo "Usage: "
|
||||
@ -75,11 +79,15 @@ make_cache_current_rpms () {
|
||||
if [ -d $MY_WORKSPACE/$build_type/rpmbuild/$rpm_type/repodata ]; then
|
||||
current=$MY_WORKSPACE/$build_type/rpmbuild/$rpm_type/
|
||||
|
||||
repoquery \
|
||||
${REPOQUERY} \
|
||||
--repofrompath=$build_type-$rpm_type,$current \
|
||||
--repoid=$build_type-$rpm_type --arch=noarch,src,x86_64 -a \
|
||||
--repoid=$build_type-$rpm_type --arch=noarch,src,x86_64 \
|
||||
${REPOQUERY_SUB_COMMAND} \
|
||||
--all \
|
||||
--qf "%-10{repoid} %-40{name} %-10{version} %-10{release}" \
|
||||
>> ${FILE}
|
||||
|
||||
\rm -rf $TMP_DIR/yum-$USER-*
|
||||
fi
|
||||
done;
|
||||
done;
|
||||
|
@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
#
|
||||
# Copyright (c) 2018 Wind River Systems, Inc.
|
||||
# Copyright (c) 2018-2020 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
@ -15,7 +15,7 @@
|
||||
# The location of packages to be built is
|
||||
# $MY_WORKSPACE/<build-type>/rpmbuild/SRPMS.
|
||||
#
|
||||
# The build order is a derived from the BuildRequires in the
|
||||
# The build order is a derived from the BuildRequires in the
|
||||
# spec files in the src.rpms. Note that the BuildRequires sometimes
|
||||
# create dependency loops, so no correct order can be computed. In these
|
||||
# cases we add a retry loop. As long as one new package builds, we
|
||||
@ -24,9 +24,12 @@
|
||||
# messages go by!
|
||||
#
|
||||
|
||||
|
||||
export ME=$(basename "$0")
|
||||
CMDLINE="$ME $@"
|
||||
BUILD_RPMS_PARALLEL_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}" )" )"
|
||||
|
||||
# Set PKG_MANAGER for our build environment.
|
||||
source "${BUILD_RPMS_PARALLEL_DIR}/pkg-manager-utils.sh"
|
||||
|
||||
|
||||
# Build for distribution. Currently 'centos' is only supported value.
|
||||
@ -43,22 +46,22 @@ MAX_MEM_PER_WORKER=11
|
||||
# Note: tmpfs is typically 2.5 gb when compiling many small jobs
|
||||
MIN_MEM_PER_WORKER=3
|
||||
|
||||
# Maximum number of disk based parallel build environments
|
||||
# Maximum number of disk based parallel build environments
|
||||
MAX_DISK_BASED_WORKERS=2
|
||||
|
||||
# Minimum space in gb for each disk based parallel build environment
|
||||
MIN_DISK_PER_WORKER=20
|
||||
|
||||
# How many srpms to build before we add another parallel build environment
|
||||
# How many srpms to build before we add another parallel build environment
|
||||
MIN_TASKS_PER_CORE=3
|
||||
|
||||
# Max number of new concurrent builds to allow for
|
||||
MAX_SHARE_FACTOR=4
|
||||
|
||||
# Always leave at least MEMORY_RESERVE gb of available mem for the system
|
||||
# Always leave at least MEMORY_RESERVE gb of available mem for the system
|
||||
MEMORY_RESERVE=1
|
||||
|
||||
# These two values will be reassigned in the 'compute_resources' subroutine
|
||||
# These two values will be reassigned in the 'compute_resources' subroutine
|
||||
MOCKCHAIN_RESOURCE_ALLOCATION=""
|
||||
MAX_WORKERS=$ABSOLUTE_MAX_WORKERS
|
||||
|
||||
@ -164,7 +167,7 @@ create-no-clean-list () {
|
||||
local install_groups=""
|
||||
local install_packages=""
|
||||
local p
|
||||
|
||||
|
||||
for p in $(grep "config_opts\['chroot_setup_cmd'\]" $MY_BUILD_CFG | tail -n1 | cut -d '=' -f 2 | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' -e "s/^'//" -e "s/'$//" -e 's/^install //'); do
|
||||
if [[ $p == @* ]] ; then
|
||||
install_groups=$(join_by ' ' $install_groups $(echo $p | cut -c 2-))
|
||||
@ -172,37 +175,44 @@ create-no-clean-list () {
|
||||
install_packages=$(join_by ' ' $install_packages $p)
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
local noclean_last_list_len=0
|
||||
local noclean_list=""
|
||||
local tmp_list=""
|
||||
local g
|
||||
|
||||
|
||||
for g in $install_groups; do
|
||||
tmp_list=$(yum -c $MY_YUM_CONF groupinfo $g 2>> /dev/null | awk 'f;/Mandatory Packages:/{f=1}' | cut -c 5-)
|
||||
# Find mandatory packages in the group.
|
||||
# Discard anything before (and including) 'Mandatory Packages:'
|
||||
# and anything after (and including) 'Optional Packages:'.
|
||||
# Also discard leading spaces or '+' characters.
|
||||
tmp_list=$(${PKG_MANAGER} -c $MY_YUM_CONF groupinfo $g 2>> /dev/null \
|
||||
| awk 'f;/Mandatory Packages:/{f=1}' \
|
||||
| sed -n '/Optional Packages:/q;p' \
|
||||
| sed 's#[ +]*##')
|
||||
noclean_list=$(join_by ' ' $noclean_list $tmp_list)
|
||||
done
|
||||
|
||||
|
||||
noclean_list=$(join_by ' ' $noclean_list $install_packages)
|
||||
noclean_list=$(echo $noclean_list | tr ' ' '\n' | sort --uniq)
|
||||
noclean_list_len=$(echo $noclean_list | wc -w)
|
||||
|
||||
|
||||
while [ $noclean_list_len -gt $noclean_last_list_len ]; do
|
||||
noclean_last_list_len=$noclean_list_len
|
||||
noclean_list=$( (yum -c $MY_YUM_CONF deplist $noclean_list 2>> /dev/null | grep provider: | awk '{ print $2 }' | awk -F . '{ print $1 }'; for p in $noclean_list; do echo $p; done) | sort --uniq)
|
||||
noclean_list=$( (${PKG_MANAGER} -c $MY_YUM_CONF deplist $noclean_list 2>> /dev/null | grep provider: | awk '{ print $2 }' | awk -F . '{ print $1 }'; for p in $noclean_list; do echo $p; done) | sort --uniq)
|
||||
noclean_list_len=$(echo $noclean_list | wc -w)
|
||||
done
|
||||
|
||||
|
||||
echo $noclean_list > $NO_CLEAN_LIST_FILE
|
||||
fi
|
||||
|
||||
cat $NO_CLEAN_LIST_FILE
|
||||
}
|
||||
|
||||
str_lst_contains() {
|
||||
str_lst_contains() {
|
||||
TARGET="$1"
|
||||
LST="$2"
|
||||
if [[ $LST =~ (^|[[:space:]])$TARGET($|[[:space:]]) ]] ; then
|
||||
if [[ $LST =~ (^|[[:space:]])$TARGET($|[[:space:]]) ]] ; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
@ -214,7 +224,7 @@ compute_resources () {
|
||||
local b
|
||||
|
||||
echo ""
|
||||
for f in $@; do
|
||||
for f in $@; do
|
||||
b=$(basename $f)
|
||||
if [ -f $SOURCES_DIR/$b/BIG ] || [ ]; then
|
||||
weight=$((weight+MIN_TASKS_PER_CORE))
|
||||
@ -232,7 +242,7 @@ compute_resources () {
|
||||
local cpus=$(number_of_cpus)
|
||||
local num_users=$(sqrt $users)
|
||||
local num_build=$(number_of_builds_in_progress)
|
||||
num_build=$((num_build+1))
|
||||
num_build=$((num_build+1))
|
||||
echo "compute_resources: total: cpus=$cpus, mem=$mem, disk=$disk, weight=$weight, num_build=$num_build"
|
||||
|
||||
# What fraction of the machine will we use
|
||||
@ -311,7 +321,9 @@ create_lst () {
|
||||
recreate_repodata () {
|
||||
local DIR=${1}
|
||||
|
||||
(cd $DIR
|
||||
(
|
||||
mkdir -p $DIR
|
||||
cd $DIR
|
||||
if [ -f repodata/*comps*xml ]; then
|
||||
\mv repodata/*comps*xml comps.xml
|
||||
fi
|
||||
@ -402,11 +414,11 @@ union () {
|
||||
echo $b
|
||||
fi
|
||||
done
|
||||
}
|
||||
}
|
||||
|
||||
#
|
||||
# returns 0 if element is in the array
|
||||
#
|
||||
#
|
||||
# e.g. contains ARRAY $SEEKING && echo "$SEEKING is in 'ARRAY'"
|
||||
#
|
||||
contains () {
|
||||
@ -453,7 +465,7 @@ build_order_recursive () {
|
||||
needs=( $(grep "^$target;" "$SRPM_DIRECT_REQUIRES_FILE" | sed "s/$target;//" | sed 's/,/ /g') )
|
||||
needs_list=( $(intersection needs remainder_list) )
|
||||
for((idx=0;idx<${#needs_list[@]};idx++)); do
|
||||
build_order_recursive ${needs_list[idx]}
|
||||
build_order_recursive ${needs_list[idx]}
|
||||
done
|
||||
echo $target
|
||||
break
|
||||
@ -503,7 +515,7 @@ build_order () {
|
||||
UNORDERED_LIST=( ${original_list[@]} )
|
||||
while [ ${#UNORDERED_LIST[@]} -gt 0 ]; do
|
||||
element=${UNORDERED_LIST[0]}
|
||||
build_order_recursive $element
|
||||
build_order_recursive $element
|
||||
done
|
||||
fi
|
||||
}
|
||||
@ -621,7 +633,7 @@ umount_mock_root_as_tmpfs () {
|
||||
return 0
|
||||
fi
|
||||
mock_tmpfs_umount $mount_dir &> /dev/null
|
||||
|
||||
|
||||
rc=$?
|
||||
if [ $rc -ne 0 ]; then
|
||||
echo "FAILED: mock_tmpfs_umount $mount_dir"
|
||||
@ -652,7 +664,7 @@ kill_descendents ()
|
||||
recursive_promote_children=""
|
||||
recursive_children=$(pgrep -P $kill_pid)
|
||||
fi
|
||||
|
||||
|
||||
if [ $iteration -eq 0 ]; then
|
||||
other_children=$(for relevant_child in $relevant_other_children; do pgrep -P $kill_pid $relevant_child; done)
|
||||
if [ "$other_children" != "" ]; then
|
||||
@ -667,7 +679,7 @@ kill_descendents ()
|
||||
fi
|
||||
|
||||
for pid in $recursive_children; do
|
||||
kill_descendents "$pid" $kill_all $need_stop $((iteration + 1))
|
||||
kill_descendents "$pid" $kill_all $need_stop $((iteration + 1))
|
||||
done
|
||||
for pid in $recursive_promote_children; do
|
||||
kill_descendents "$pid" 1 1 $((iteration + 1))
|
||||
@ -946,11 +958,11 @@ mock_clean_cfg () {
|
||||
echo "=================================="
|
||||
mock_clean_cache_cfg $CFG
|
||||
echo "=================================="
|
||||
echo "$MOCK -r $CFG --configdir $(dirname $CFG) --scrub=all"
|
||||
trapwrap_n $CFG $MOCK -r $CFG --configdir $(dirname $CFG) --scrub=all
|
||||
echo "$MOCK --root $CFG --configdir $(dirname $CFG) --scrub=all"
|
||||
trapwrap_n $CFG $MOCK --root $CFG --configdir $(dirname $CFG) --scrub=all
|
||||
echo "=================================="
|
||||
echo "$MOCK -r $CFG --configdir $(dirname $CFG) --clean"
|
||||
trapwrap_n $CFG $MOCK -r $CFG --configdir $(dirname $CFG) --clean
|
||||
echo "$MOCK --root $CFG --configdir $(dirname $CFG) --clean"
|
||||
trapwrap_n $CFG $MOCK --root $CFG --configdir $(dirname $CFG) --clean
|
||||
### Note: this sometimes leaves behind a $MY_WORKSPACE/cache/mock/yum_cache/yumcache.lock
|
||||
echo "=================================="
|
||||
mock_clean_cache_all_cfg $CFG
|
||||
@ -1034,10 +1046,10 @@ mock_partial_clean_cfg () {
|
||||
local RPMS_CLEAN_LIST=""
|
||||
local NEED_FULL_MOCK_CLEAN=0
|
||||
for r in $RPMS_LIST; do
|
||||
if ! str_lst_contains $r "$NO_CLEAN_LIST" ; then
|
||||
if ! str_lst_contains $r "$NO_CLEAN_LIST" ; then
|
||||
RPMS_CLEAN_LIST=$(join_by ' ' $RPMS_CLEAN_LIST $r)
|
||||
else
|
||||
echo "Can't remove '$r' from mock environment without a wipe";
|
||||
else
|
||||
echo "Can't remove '$r' from mock environment without a wipe";
|
||||
NEED_FULL_MOCK_CLEAN=1
|
||||
fi
|
||||
done
|
||||
@ -1050,19 +1062,19 @@ mock_partial_clean_cfg () {
|
||||
# Intent of following is for $RPMS_LIST to be expand now while the remaining $ varaibles are for bash inside mock to expand
|
||||
echo "Try to uninstall from the mock environment these packages: $RPMS_CLEAN_LIST"
|
||||
CMD='LST="'$RPMS_CLEAN_LIST'";
|
||||
DELETE_LIST="";
|
||||
for r in $LST; do
|
||||
FOUND=$(rpm -q $r) ;
|
||||
if [ $? -eq 0 ]; then
|
||||
DELETE_LIST="$DELETE_LIST $FOUND";
|
||||
fi;
|
||||
done;
|
||||
echo "uninstalling these packages: $DELETE_LIST";
|
||||
DELETE_LIST="";
|
||||
for r in $LST; do
|
||||
FOUND=$(rpm -q $r) ;
|
||||
if [ $? -eq 0 ]; then
|
||||
DELETE_LIST="$DELETE_LIST $FOUND";
|
||||
fi;
|
||||
done;
|
||||
echo "uninstalling these packages: $DELETE_LIST";
|
||||
if [ "$DELETE_LIST" != "" ]; then
|
||||
rpm -e --nodeps $DELETE_LIST;
|
||||
fi'
|
||||
echo "$MOCK -r $CFG --configdir $(dirname $CFG) --chroot bash -c $CMD" &> $TMP
|
||||
trapwrap_n $CFG $MOCK -r $CFG --configdir $(dirname $CFG) --chroot "bash -c '$CMD'" &>> $TMP
|
||||
echo "$MOCK --root $CFG --configdir $(dirname $CFG) --chroot bash -c $CMD" &> $TMP
|
||||
trapwrap_n $CFG $MOCK --root $CFG --configdir $(dirname $CFG) --chroot "bash -c '$CMD'" &>> $TMP
|
||||
RC=$?
|
||||
if [ $RC -ne 0 ]; then
|
||||
cat $TMP
|
||||
@ -1112,8 +1124,8 @@ mock_clean_cache_cfg () {
|
||||
|
||||
clean_yum_cache_cfg $CFG
|
||||
|
||||
echo "$MOCK -r $CFG --configdir $(dirname $CFG) --scrub=root-cache --scrub=yum-cache --scrub=cache" &> $TMP
|
||||
trapwrap_n $CFG $MOCK -r $CFG --configdir $(dirname $CFG) --scrub=root-cache --scrub=yum-cache --scrub=cache &>> $TMP
|
||||
echo "$MOCK --root $CFG --configdir $(dirname $CFG) --scrub=root-cache --scrub=yum-cache --scrub=cache" &> $TMP
|
||||
trapwrap_n $CFG $MOCK --root $CFG --configdir $(dirname $CFG) --scrub=root-cache --scrub=yum-cache --scrub=cache &>> $TMP
|
||||
RC=$?
|
||||
if [ $RC -ne 0 ]; then
|
||||
cat $TMP
|
||||
@ -1141,8 +1153,8 @@ mock_clean_cache_all_cfg () {
|
||||
echo "=================================="
|
||||
clean_yum_cache_cfg $CFG
|
||||
echo "=================================="
|
||||
echo "$MOCK -r $CFG --configdir $(dirname $CFG) --scrub=all"
|
||||
trapwrap_n $CFG $MOCK -r $CFG --configdir $(dirname $CFG) --scrub=all
|
||||
echo "$MOCK --root $CFG --configdir $(dirname $CFG) --scrub=all"
|
||||
trapwrap_n $CFG $MOCK --root $CFG --configdir $(dirname $CFG) --scrub=all
|
||||
echo "=================================="
|
||||
}
|
||||
|
||||
@ -1169,9 +1181,16 @@ mock_clean_metadata_cfg () {
|
||||
return 1
|
||||
fi
|
||||
|
||||
CMD=$((cat $CFG; grep config_opts\\[\'yum.conf\'\\\] $CFG | sed 's#\\n#\n#g') | grep '^[[]' | grep -v main | sed 's/[][]//g' | sed 's#^#yum --enablerepo=#' | sed 's#$# clean metadata#' | sort -u | tr '\n' ';')
|
||||
echo "$MOCK -r $CFG --configdir $(dirname $CFG) --chroot bash -c $CMD" &> $TMP
|
||||
trapwrap_n $CFG $MOCK -r $CFG --configdir $(dirname $CFG) --chroot "bash -c '($CMD)'" &>>$TMP
|
||||
CMD=$((cat $CFG; \
|
||||
grep config_opts\\[\'yum.conf\'\\\] $CFG | \
|
||||
sed 's#\\n#\n#g') | \
|
||||
grep '^[[]' | \
|
||||
grep -v main | \
|
||||
sed -e 's/[][]//g' -e "s#^#${PKG_MANAGER} --enablerepo=#" -e 's#$# clean metadata#' | \
|
||||
sort -u | \
|
||||
tr '\n' ';')
|
||||
echo "$MOCK --root $CFG --configdir $(dirname $CFG) --chroot bash -c $CMD" &> $TMP
|
||||
trapwrap_n $CFG $MOCK --root $CFG --configdir $(dirname $CFG) --chroot "bash -c '($CMD)'" &>>$TMP
|
||||
RC=$?
|
||||
if [ $RC -ne 0 ]; then
|
||||
cat $TMP
|
||||
@ -1228,7 +1247,7 @@ update_cgcs_repo () {
|
||||
if [ "x$NEW_UNTRACKED" != "x" ]; then
|
||||
NEED_REBUILD=1
|
||||
fi
|
||||
|
||||
|
||||
if [ $NEED_REBUILD -eq 1 ]; then
|
||||
NEED_MOCK_CLEAN=1
|
||||
echo ""
|
||||
@ -1274,7 +1293,7 @@ mock_clean_mounts_dir () {
|
||||
fi
|
||||
fi
|
||||
if [ $RC -eq 1 ]; then
|
||||
echo "ERROR: Directory '$MOUNT' is already mounted and will cause a build failure within mock."
|
||||
echo "ERROR: Directory '$MOUNT' is already mounted and will cause a build failure within mock."
|
||||
echo "Ask your system administrator to umount '$MOUNT'."
|
||||
exit 1
|
||||
fi
|
||||
@ -1319,7 +1338,7 @@ clean_yum_cache_cfg () {
|
||||
local YUM_CACHE_MOUNT=$(readlink -f "$ROOT_DIR/root/var/cache/yum")
|
||||
local YUM_CACHE_LOCK="$CACHE_DIR/mock/yum_cache/yumcache.lock"
|
||||
# echo "clean_yum_cache YUM_CACHE_MOUNT='$YUM_CACHE_MOUNT' YUM_CACHE_LOCK='$YUM_CACHE_LOCK'"
|
||||
|
||||
|
||||
if [ "$YUM_CACHE_MOUNT" != "" ]; then
|
||||
mock_clean_mounts_dir "$YUM_CACHE_MOUNT"
|
||||
fi
|
||||
@ -1358,8 +1377,8 @@ mock_update_cfg () {
|
||||
echo "${FUNCNAME[0]}: $CFG"
|
||||
echo "=================================="
|
||||
set_mock_symlinks $CFG
|
||||
echo "$MOCK -r $CFG --configdir $(dirname $CFG) --update"
|
||||
trapwrap_n $CFG $MOCK -r $CFG --configdir $(dirname $CFG) --update
|
||||
echo "$MOCK --root $CFG --configdir $(dirname $CFG) --update"
|
||||
trapwrap_n $CFG $MOCK --root $CFG --configdir $(dirname $CFG) --update
|
||||
echo "=================================="
|
||||
}
|
||||
|
||||
@ -1368,8 +1387,8 @@ mock_init_cfg () {
|
||||
echo "${FUNCNAME[0]}: $CFG"
|
||||
echo "=================================="
|
||||
set_mock_symlinks $CFG
|
||||
echo "$MOCK -r $CFG --configdir $(dirname $CFG) --init"
|
||||
trapwrap_n $CFG $MOCK -r $CFG --configdir $(dirname $CFG) --init
|
||||
echo "$MOCK --root $CFG --configdir $(dirname $CFG) --init"
|
||||
trapwrap_n $CFG $MOCK --root $CFG --configdir $(dirname $CFG) --init
|
||||
echo "=================================="
|
||||
}
|
||||
|
||||
@ -1388,14 +1407,14 @@ mock_update_or_init_cfg () {
|
||||
if [ -d $ROOT_DIR/root ]; then
|
||||
echo "Updating the mock environment"
|
||||
set_mock_symlinks $CFG
|
||||
echo "$MOCK -r $CFG --configdir $(dirname $CFG) --update"
|
||||
trapwrap_n $CFG $MOCK -r $CFG --configdir $(dirname $CFG) --update &> $TMP
|
||||
echo "$MOCK --root $CFG --configdir $(dirname $CFG) --update"
|
||||
trapwrap_n $CFG $MOCK --root $CFG --configdir $(dirname $CFG) --update &> $TMP
|
||||
RC=$?
|
||||
else
|
||||
echo "Init the mock environment"
|
||||
set_mock_symlinks $CFG
|
||||
echo "$MOCK -r $CFG --configdir $(dirname $CFG) --init"
|
||||
trapwrap_n $CFG $MOCK -r $CFG --configdir $(dirname $CFG) --init &> $TMP
|
||||
echo "$MOCK --root $CFG --configdir $(dirname $CFG) --init"
|
||||
trapwrap_n $CFG $MOCK --root $CFG --configdir $(dirname $CFG) --init &> $TMP
|
||||
RC=$?
|
||||
fi
|
||||
if [ $RC -ne 0 ]; then
|
||||
@ -1411,7 +1430,7 @@ mock_update_or_init () {
|
||||
local PREFIX=$(echo $SUB_CFG | rev | cut -d . -f 2 | rev)
|
||||
( mock_update_or_init_cfg $SUB_CFG 2>&1 | sed "s#^#${PREFIX}: #" ; exit ${PIPESTATUS[0]} ) &
|
||||
done
|
||||
wait
|
||||
wait
|
||||
echo "${FUNCNAME[0]}: out"
|
||||
}
|
||||
|
||||
@ -1429,12 +1448,12 @@ NO_DESCENDANTS=0
|
||||
NO_REQUIRED=0
|
||||
NO_AUTOCLEAN=0
|
||||
NO_BUILD_INFO=0
|
||||
HELP=0
|
||||
HELP=0
|
||||
CLEAN_FLAG=0
|
||||
FORMAL_FLAG=0
|
||||
CAREFUL=0
|
||||
DEP_TEST_FLAG=0
|
||||
|
||||
|
||||
# read the options
|
||||
TEMP=$(getopt -o h --long parallel,std,rt,installer,containers,no-required,no-descendants,no-autoclean,no-build-info,dep-test,clean,tmpfs-clean,formal,careful,help,layer: -n "$ME" -- "$@")
|
||||
|
||||
@ -1470,7 +1489,7 @@ while true ; do
|
||||
--) shift ; break ;;
|
||||
*) echo "Internal error!" ; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
done
|
||||
|
||||
# Reset variables
|
||||
if [ -n "$MY_WORKSPACE" ]; then
|
||||
@ -1729,7 +1748,7 @@ clean_list () {
|
||||
echo "rm -rf $d"
|
||||
\rm -rf "$d" 2>> /dev/null
|
||||
done
|
||||
|
||||
|
||||
else
|
||||
rs=$(rpm_get_srpm $r)
|
||||
if [[ "$rs" != "$sn"-[0-9]* ]]; then
|
||||
@ -1742,7 +1761,7 @@ clean_list () {
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
|
||||
TARGET=$(rpm -qp --qf '%{NAME}-%{VERSION}\n' "$s")
|
||||
|
||||
if [ $CLEAN_FLAG -eq 1 ]; then
|
||||
@ -1782,7 +1801,7 @@ clean_list () {
|
||||
|
||||
\rm -f -v $RESULT_DIR/mockchain.log 2>> /dev/null
|
||||
mock_clean
|
||||
else
|
||||
else
|
||||
# If dependency test
|
||||
if [ $DEP_TEST_FLAG -eq 1 ]; then
|
||||
mock_clean
|
||||
@ -2045,7 +2064,7 @@ if [ $CLEAN_FLAG -eq 0 ] && [ $NO_DESCENDANTS -eq 0 ] && [ -f $SRPM_DIRECT_DESCE
|
||||
done
|
||||
|
||||
# For non-std build, and if non specific build targets are named, then search all
|
||||
# packages that we might build and check if they require a package that DID build
|
||||
# packages that we might build and check if they require a package that DID build
|
||||
# in the std build. If so build the package as a secondary target, even though the
|
||||
# primary target was from a different build_type.
|
||||
if [ "$BUILD_TYPE" != "std" ] && [ $ALL -eq 1 ] && [ -f $SRPM_TO_RPM_MAP_FILE ] && [ -f $SRPM_RPM_DIRECT_REQUIRES_FILE ]; then
|
||||
@ -2105,7 +2124,7 @@ if [ $CLEAN_FLAG -eq 0 ] && [ $NO_DESCENDANTS -eq 0 ] && [ -f $SRPM_DIRECT_DESCE
|
||||
done
|
||||
fi
|
||||
|
||||
# If the kernel or kernel-rt packages where absent from the primary build targets, but
|
||||
# If the kernel or kernel-rt packages where absent from the primary build targets, but
|
||||
# added as a secondary target, then make sure all out-of-tree kernel modules are also
|
||||
# added.
|
||||
for n in kernel kernel-rt; do
|
||||
@ -2234,9 +2253,9 @@ echo "SRPMS_LIST = $SRPMS_LIST"
|
||||
echo "RPMS_LIST = $RPMS_LIST"
|
||||
|
||||
|
||||
echo
|
||||
echo
|
||||
if [ $CLEAN_FLAG -eq 0 ]; then
|
||||
# pre-create these directories as $USER,
|
||||
# pre-create these directories as $USER,
|
||||
# else mock will create them as root and fails to clean them.
|
||||
# Note: keep these in sync with mockchain-parallel!
|
||||
for i in $(seq 0 $((MAX_WORKERS-1))); do
|
||||
@ -2299,15 +2318,28 @@ mock_clean_metadata
|
||||
echo
|
||||
echo "Building"
|
||||
|
||||
recreate_repodata $BUILD_BASE/results/$BUILD_ENVIRONMENT_DIR
|
||||
|
||||
CMD_PREFIX=""
|
||||
if [ -x /bin/ionice ]; then
|
||||
CMD_PREFIX="nice -n 20 ionice -c Idle /bin/ionice "
|
||||
fi
|
||||
|
||||
CMD_OPTIONS="-m --no-clean -m --no-cleanup-after"
|
||||
if [ $CAREFUL -eq 1 ]; then
|
||||
CMD_OPTIONS="-m --no-cleanup-after"
|
||||
REAL_MOCKCHAIN=0
|
||||
MOCK_PASSTHROUGH="-m"
|
||||
MOCKCHAIN="mockchain-parallel"
|
||||
CHAIN_OPTION=""
|
||||
if file $(which mockchain) | grep -q 'Python script'; then
|
||||
REAL_MOCKCHAIN=1
|
||||
fi
|
||||
|
||||
CMD_OPTIONS="$MOCK_PASSTHROUGH --no-clean $MOCK_PASSTHROUGH --no-cleanup-after"
|
||||
if [ $CAREFUL -eq 1 ]; then
|
||||
CMD_OPTIONS="$MOCK_PASSTHROUGH --no-cleanup-after"
|
||||
fi
|
||||
|
||||
CMD_OPTIONS+=" --log=$MOCKCHAIN_LOG"
|
||||
|
||||
echo "CAREFUL=$CAREFUL"
|
||||
|
||||
# Sets WORKERS and MOCKCHAIN_RESOURCE_ALLOCATION
|
||||
@ -2315,13 +2347,13 @@ compute_resources $SRPMS_LIST
|
||||
|
||||
|
||||
if [ -f $SRPM_RPM_DIRECT_REQUIRES_FILE ]; then
|
||||
CMD_OPTIONS="$CMD_OPTIONS --srpm-dependency-file $SRPM_RPM_DIRECT_REQUIRES_FILE"
|
||||
CMD_OPTIONS+=" --srpm-dependency-file $SRPM_RPM_DIRECT_REQUIRES_FILE"
|
||||
fi
|
||||
if [ -f "$RPM_DIRECT_REQUIRES_FILE" ]; then
|
||||
CMD_OPTIONS="$CMD_OPTIONS --rpm-dependency-file $RPM_DIRECT_REQUIRES_FILE"
|
||||
CMD_OPTIONS+=" --rpm-dependency-file $RPM_DIRECT_REQUIRES_FILE"
|
||||
fi
|
||||
if [ -f "$RPM_TO_SRPM_MAP_FILE" ]; then
|
||||
CMD_OPTIONS="$CMD_OPTIONS --rpm-to-srpm-map-file $RPM_TO_SRPM_MAP_FILE"
|
||||
CMD_OPTIONS+=" --rpm-to-srpm-map-file $RPM_TO_SRPM_MAP_FILE"
|
||||
fi
|
||||
|
||||
|
||||
@ -2342,12 +2374,12 @@ echo "MAX_WORKERS=$MAX_WORKERS"
|
||||
echo "MOCKCHAIN_RESOURCE_ALLOCATION=$MOCKCHAIN_RESOURCE_ALLOCATION"
|
||||
|
||||
|
||||
CMD="$CMD_PREFIX mockchain-parallel -r $BUILD_CFG -l $BUILD_BASE --recurse --workers=$MAX_WORKERS --worker-resources=$MOCKCHAIN_RESOURCE_ALLOCATION --basedir=$MY_WORKSPACE --log=$MOCKCHAIN_LOG --tmp_prefix=$USER --addrepo=$LOCAL_URL --addrepo=$LOCAL_SRC_URL $CMD_OPTIONS -m --rebuild $SRPMS_LIST"
|
||||
CMD="$CMD_PREFIX $MOCKCHAIN --root $BUILD_CFG --localrepo $BUILD_BASE --recurse --workers=$MAX_WORKERS --worker-resources=$MOCKCHAIN_RESOURCE_ALLOCATION --basedir=$MY_WORKSPACE --tmp_prefix=$USER --addrepo=$LOCAL_URL --addrepo=$LOCAL_SRC_URL $CMD_OPTIONS $MOCK_PASSTHROUGH --rebuild"
|
||||
CMD_BUILD_LIST="$CHAIN_OPTION $SRPMS_LIST"
|
||||
echo ""
|
||||
echo "$CMD -m --define='_tis_dist .tis' -m --define='platform_release $PLATFORM_RELEASE'"
|
||||
echo "$CMD $MOCK_PASSTHROUGH --define='_tis_dist .tis' $MOCK_PASSTHROUGH --define='platform_release $PLATFORM_RELEASE' $CMD_BUILD_LIST"
|
||||
echo ""
|
||||
|
||||
trapwrap stdbuf -o0 $CMD -m --define="_tis_dist .tis" -m --define="platform_release $PLATFORM_RELEASE"
|
||||
trapwrap stdbuf -o0 $CMD $MOCK_PASSTHROUGH --define="_tis_dist .tis" $MOCK_PASSTHROUGH --define="platform_release $PLATFORM_RELEASE" $CMD_BUILD_LIST
|
||||
MOCKCHAIN_RC=$?
|
||||
|
||||
echo $PLATFORM_RELEASE > $LAST_PLATFORM_RELEASE_FILE
|
||||
@ -2357,7 +2389,7 @@ if [ $CLEAN_FLAG -eq 0 ]; then
|
||||
fi
|
||||
|
||||
for d in $(find $RESULT_DIR -name '*.rpm' | grep -v '[.]src[.]rpm' | xargs --max-args=1 dirname | sort -u); do
|
||||
rsync -u $d/*.rpm $RPM_DIR
|
||||
rsync -u $d/*.rpm $RPM_DIR
|
||||
done
|
||||
|
||||
if [ $ALL -eq 1 ]; then
|
||||
@ -2441,5 +2473,5 @@ if [ 0$FORMAL_BUILD -eq 1 ] && [ "$USER" == "jenkins" ]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
exit 0
|
||||
exit 0
|
||||
) 2>&1 | stdbuf -o0 awk '{ print strftime("%H:%M:%S"), $0; fflush(); }' | tee $(date "+$MY_WORKSPACE/build-rpms-parallel_%Y-%m-%d_%H-%M-%S.log") ; exit ${PIPESTATUS[0]}
|
||||
|
@ -1,20 +1,20 @@
|
||||
#!/bin/bash
|
||||
|
||||
#
|
||||
# Copyright (c) 2018 Wind River Systems, Inc.
|
||||
# Copyright (c) 2018-2020 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
#
|
||||
#
|
||||
# Builds rpm files from src.rpm files.
|
||||
#
|
||||
# This version compiles one package at a time.
|
||||
#
|
||||
# The location of packages to be built is
|
||||
#
|
||||
# The location of packages to be built is
|
||||
# $MY_WORKSPACE/<build-type>/rpmbuild/SRPMS.
|
||||
#
|
||||
# The build order is a derived from the BuildRequires in the
|
||||
# The build order is a derived from the BuildRequires in the
|
||||
# spec files in the src.rpms. Note that the BuildRequires sometimes
|
||||
# create dependency loops, so no correct order can be computed. In these
|
||||
# cases we add a retry loop. As long as one new package builds, we
|
||||
@ -103,7 +103,7 @@ create-no-clean-list () {
|
||||
local install_groups=""
|
||||
local install_packages=""
|
||||
local p
|
||||
|
||||
|
||||
for p in $(grep "config_opts\['chroot_setup_cmd'\]" $MY_BUILD_CFG | tail -n1 | cut -d '=' -f 2 | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' -e "s/^'//" -e "s/'$//" -e 's/^install //'); do
|
||||
if [[ $p == @* ]] ; then
|
||||
install_groups=$(join_by ' ' $install_groups $(echo $p | cut -c 2-))
|
||||
@ -111,37 +111,44 @@ create-no-clean-list () {
|
||||
install_packages=$(join_by ' ' $install_packages $p)
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
local noclean_last_list_len=0
|
||||
local noclean_list=""
|
||||
local tmp_list=""
|
||||
local g
|
||||
|
||||
|
||||
for g in $install_groups; do
|
||||
tmp_list=$(yum -c $MY_YUM_CONF groupinfo $g 2>> /dev/null | awk 'f;/Mandatory Packages:/{f=1}' | cut -c 5-)
|
||||
# Find manditory packages in the group.
|
||||
# Discard anything before (and including) 'Mandatory Packages:'
|
||||
# and anything after (and including) 'Optional Packages:'.
|
||||
# Also discard leading spaces or '+' characters.
|
||||
tmp_list=$(${PKG_MANAGER} -c $MY_YUM_CONF groupinfo $g 2>> /dev/null \
|
||||
| awk 'f;/Mandatory Packages:/{f=1}' \
|
||||
| sed -n '/Optional Packages:/q;p' \
|
||||
| sed 's#[ +]*##')
|
||||
noclean_list=$(join_by ' ' $noclean_list $tmp_list)
|
||||
done
|
||||
|
||||
|
||||
noclean_list=$(join_by ' ' $noclean_list $install_packages)
|
||||
noclean_list=$(echo $noclean_list | tr ' ' '\n' | sort --uniq)
|
||||
noclean_list_len=$(echo $noclean_list | wc -w)
|
||||
|
||||
|
||||
while [ $noclean_list_len -gt $noclean_last_list_len ]; do
|
||||
noclean_last_list_len=$noclean_list_len
|
||||
noclean_list=$( (yum -c $MY_YUM_CONF deplist $noclean_list 2>> /dev/null | grep provider: | awk '{ print $2 }' | awk -F . '{ print $1 }'; for p in $noclean_list; do echo $p; done) | sort --uniq)
|
||||
noclean_list_len=$(echo $noclean_list | wc -w)
|
||||
done
|
||||
|
||||
|
||||
echo $noclean_list > $NO_CLEAN_LIST_FILE
|
||||
fi
|
||||
|
||||
cat $NO_CLEAN_LIST_FILE
|
||||
}
|
||||
|
||||
str_lst_contains() {
|
||||
str_lst_contains() {
|
||||
TARGET="$1"
|
||||
LST="$2"
|
||||
if [[ $LST =~ (^|[[:space:]])$TARGET($|[[:space:]]) ]] ; then
|
||||
if [[ $LST =~ (^|[[:space:]])$TARGET($|[[:space:]]) ]] ; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
@ -169,7 +176,9 @@ create_lst () {
|
||||
recreate_repodata () {
|
||||
local DIR=${1}
|
||||
|
||||
(cd $DIR
|
||||
(
|
||||
mkdir -p $DIR
|
||||
cd $DIR
|
||||
if [ -f repodata/*comps*xml ]; then
|
||||
\mv repodata/*comps*xml comps.xml
|
||||
fi
|
||||
@ -260,11 +269,11 @@ union () {
|
||||
echo $b
|
||||
fi
|
||||
done
|
||||
}
|
||||
}
|
||||
|
||||
#
|
||||
# returns 0 if element is in the array
|
||||
#
|
||||
#
|
||||
# e.g. contains ARRAY $SEEKING && echo "$SEEKING is in 'ARRAY'"
|
||||
#
|
||||
contains () {
|
||||
@ -311,7 +320,7 @@ build_order_recursive () {
|
||||
needs=( $(grep "^$target;" "$SRPM_DIRECT_REQUIRES_FILE" | sed "s/$target;//" | sed 's/,/ /g') )
|
||||
needs_list=( $(intersection needs remainder_list) )
|
||||
for((idx=0;idx<${#needs_list[@]};idx++)); do
|
||||
build_order_recursive ${needs_list[idx]}
|
||||
build_order_recursive ${needs_list[idx]}
|
||||
done
|
||||
echo $target
|
||||
break
|
||||
@ -361,7 +370,7 @@ build_order () {
|
||||
UNORDERED_LIST=( ${original_list[@]} )
|
||||
while [ ${#UNORDERED_LIST[@]} -gt 0 ]; do
|
||||
element=${UNORDERED_LIST[0]}
|
||||
build_order_recursive $element
|
||||
build_order_recursive $element
|
||||
done
|
||||
fi
|
||||
}
|
||||
@ -476,7 +485,7 @@ kill_descendents ()
|
||||
recursive_promote_children=""
|
||||
recursive_children=$(pgrep -P $kill_pid)
|
||||
fi
|
||||
|
||||
|
||||
if [ $iteration -eq 0 ]; then
|
||||
other_children=$(for relevant_child in $relevant_other_children; do pgrep -P $kill_pid $relevant_child; done)
|
||||
if [ "$other_children" != "" ]; then
|
||||
@ -491,7 +500,7 @@ kill_descendents ()
|
||||
fi
|
||||
|
||||
for pid in $recursive_children; do
|
||||
kill_descendents "$pid" $kill_all $need_stop $((iteration + 1))
|
||||
kill_descendents "$pid" $kill_all $need_stop $((iteration + 1))
|
||||
done
|
||||
for pid in $recursive_promote_children; do
|
||||
kill_descendents "$pid" 1 1 $((iteration + 1))
|
||||
@ -754,11 +763,11 @@ mock_clean_cfg () {
|
||||
echo "=================================="
|
||||
mock_clean_cache_cfg $CFG
|
||||
echo "=================================="
|
||||
echo "$MOCK -r $CFG --configdir $(dirname $CFG) --scrub=all"
|
||||
trapwrap_n $CFG $MOCK -r $CFG --configdir $(dirname $CFG) --scrub=all
|
||||
echo "$MOCK --root $CFG --configdir $(dirname $CFG) --scrub=all"
|
||||
trapwrap_n $CFG $MOCK --root $CFG --configdir $(dirname $CFG) --scrub=all
|
||||
echo "=================================="
|
||||
echo "$MOCK -r $CFG --configdir $(dirname $CFG) --clean"
|
||||
trapwrap_n $CFG $MOCK -r $CFG --configdir $(dirname $CFG) --clean
|
||||
echo "$MOCK --root $CFG --configdir $(dirname $CFG) --clean"
|
||||
trapwrap_n $CFG $MOCK --root $CFG --configdir $(dirname $CFG) --clean
|
||||
### Note: this sometimes leaves behind a $MY_WORKSPACE/cache/mock/yum_cache/yumcache.lock
|
||||
echo "=================================="
|
||||
mock_clean_cache_all_cfg $CFG
|
||||
@ -833,10 +842,10 @@ mock_partial_clean_cfg () {
|
||||
local RPMS_CLEAN_LIST=""
|
||||
local NEED_FULL_MOCK_CLEAN=0
|
||||
for r in $RPMS_LIST; do
|
||||
if ! str_lst_contains $r "$NO_CLEAN_LIST" ; then
|
||||
if ! str_lst_contains $r "$NO_CLEAN_LIST" ; then
|
||||
RPMS_CLEAN_LIST=$(join_by ' ' $RPMS_CLEAN_LIST $r)
|
||||
else
|
||||
echo "Can't remove '$r' from mock environment without a wipe";
|
||||
else
|
||||
echo "Can't remove '$r' from mock environment without a wipe";
|
||||
NEED_FULL_MOCK_CLEAN=1
|
||||
fi
|
||||
done
|
||||
@ -849,19 +858,19 @@ mock_partial_clean_cfg () {
|
||||
# Intent of following is for $RPMS_LIST to be expand now while the remaining $ varaibles are for bash inside mock to expand
|
||||
echo "Try to uninstall from the mock environment these packages: $RPMS_CLEAN_LIST"
|
||||
CMD='LST="'$RPMS_CLEAN_LIST'";
|
||||
DELETE_LIST="";
|
||||
for r in $LST; do
|
||||
FOUND=$(rpm -q $r) ;
|
||||
if [ $? -eq 0 ]; then
|
||||
DELETE_LIST="$DELETE_LIST $FOUND";
|
||||
fi;
|
||||
done;
|
||||
echo "uninstalling these packages: $DELETE_LIST";
|
||||
DELETE_LIST="";
|
||||
for r in $LST; do
|
||||
FOUND=$(rpm -q $r) ;
|
||||
if [ $? -eq 0 ]; then
|
||||
DELETE_LIST="$DELETE_LIST $FOUND";
|
||||
fi;
|
||||
done;
|
||||
echo "uninstalling these packages: $DELETE_LIST";
|
||||
if [ "$DELETE_LIST" != "" ]; then
|
||||
rpm -e --nodeps $DELETE_LIST;
|
||||
fi'
|
||||
echo "$MOCK -r $CFG --configdir $(dirname $CFG) --chroot bash -c $CMD" &> $TMP
|
||||
trapwrap_n $CFG $MOCK -r $CFG --configdir $(dirname $CFG) --chroot "bash -c '$CMD'" &>> $TMP
|
||||
echo "$MOCK --root $CFG --configdir $(dirname $CFG) --chroot bash -c $CMD" &> $TMP
|
||||
trapwrap_n $CFG $MOCK --root $CFG --configdir $(dirname $CFG) --chroot "bash -c '$CMD'" &>> $TMP
|
||||
RC=$?
|
||||
if [ $RC -ne 0 ]; then
|
||||
cat $TMP
|
||||
@ -907,8 +916,8 @@ mock_clean_cache_cfg () {
|
||||
|
||||
clean_yum_cache_cfg $CFG
|
||||
|
||||
echo "$MOCK -r $CFG --configdir $(dirname $CFG) --scrub=root-cache --scrub=yum-cache --scrub=cache" &> $TMP
|
||||
trapwrap_n $CFG $MOCK -r $CFG --configdir $(dirname $CFG) --scrub=root-cache --scrub=yum-cache --scrub=cache &>> $TMP
|
||||
echo "$MOCK --root $CFG --configdir $(dirname $CFG) --scrub=root-cache --scrub=yum-cache --scrub=cache" &> $TMP
|
||||
trapwrap_n $CFG $MOCK --root $CFG --configdir $(dirname $CFG) --scrub=root-cache --scrub=yum-cache --scrub=cache &>> $TMP
|
||||
RC=$?
|
||||
if [ $RC -ne 0 ]; then
|
||||
cat $TMP
|
||||
@ -931,8 +940,8 @@ mock_clean_cache_all_cfg () {
|
||||
echo "=================================="
|
||||
clean_yum_cache_cfg $CFG
|
||||
echo "=================================="
|
||||
echo "$MOCK -r $CFG --configdir $(dirname $CFG) --scrub=all"
|
||||
trapwrap_n $CFG $MOCK -r $CFG --configdir $(dirname $CFG) --scrub=all
|
||||
echo "$MOCK --root $CFG --configdir $(dirname $CFG) --scrub=all"
|
||||
trapwrap_n $CFG $MOCK --root $CFG --configdir $(dirname $CFG) --scrub=all
|
||||
echo "=================================="
|
||||
}
|
||||
|
||||
@ -956,8 +965,8 @@ mock_clean_metadata_cfg () {
|
||||
fi
|
||||
|
||||
CMD=$((cat $CFG; grep config_opts\\[\'yum.conf\'\\\] $CFG | sed 's#\\n#\n#g') | grep '^[[]' | grep -v main | sed 's/[][]//g' | sed 's#^#yum --enablerepo=#' | sed 's#$# clean metadata#' | sort -u | tr '\n' ';')
|
||||
echo "$MOCK -r $CFG --configdir $(dirname $CFG) --chroot bash -c $CMD" &> $TMP
|
||||
trapwrap_n $CFG $MOCK -r $CFG --configdir $(dirname $CFG) --chroot "bash -c '($CMD)'" &>>$TMP
|
||||
echo "$MOCK --root $CFG --configdir $(dirname $CFG) --chroot bash -c $CMD" &> $TMP
|
||||
trapwrap_n $CFG $MOCK --root $CFG --configdir $(dirname $CFG) --chroot "bash -c '($CMD)'" &>>$TMP
|
||||
RC=$?
|
||||
if [ $RC -ne 0 ]; then
|
||||
cat $TMP
|
||||
@ -1010,7 +1019,7 @@ update_cgcs_repo () {
|
||||
if [ "x$NEW_UNTRACKED" != "x" ]; then
|
||||
NEED_REBUILD=1
|
||||
fi
|
||||
|
||||
|
||||
if [ $NEED_REBUILD -eq 1 ]; then
|
||||
NEED_MOCK_CLEAN=1
|
||||
echo ""
|
||||
@ -1056,7 +1065,7 @@ mock_clean_mounts_dir () {
|
||||
fi
|
||||
fi
|
||||
if [ $RC -eq 1 ]; then
|
||||
echo "ERROR: Directory '$MOUNT' is already mounted and will cause a build failure within mock."
|
||||
echo "ERROR: Directory '$MOUNT' is already mounted and will cause a build failure within mock."
|
||||
echo "Ask your system administrator to umount '$MOUNT'."
|
||||
exit 1
|
||||
fi
|
||||
@ -1097,7 +1106,7 @@ clean_yum_cache_cfg () {
|
||||
local YUM_CACHE_MOUNT=$(readlink -f "$ROOT_DIR/root/var/cache/yum")
|
||||
local YUM_CACHE_LOCK="$CACHE_DIR/mock/yum_cache/yumcache.lock"
|
||||
# echo "clean_yum_cache YUM_CACHE_MOUNT='$YUM_CACHE_MOUNT' YUM_CACHE_LOCK='$YUM_CACHE_LOCK'"
|
||||
|
||||
|
||||
if [ "$YUM_CACHE_MOUNT" != "" ]; then
|
||||
mock_clean_mounts_dir "$YUM_CACHE_MOUNT"
|
||||
fi
|
||||
@ -1131,8 +1140,8 @@ mock_update_cfg () {
|
||||
echo "${FUNCNAME[0]}: $CFG"
|
||||
echo "=================================="
|
||||
set_mock_symlinks $CFG
|
||||
echo "$MOCK -r $CFG --configdir $(dirname $CFG) --update"
|
||||
trapwrap_n $CFG $MOCK -r $CFG --configdir $(dirname $CFG) --update
|
||||
echo "$MOCK --root $CFG --configdir $(dirname $CFG) --update"
|
||||
trapwrap_n $CFG $MOCK --root $CFG --configdir $(dirname $CFG) --update
|
||||
echo "=================================="
|
||||
}
|
||||
|
||||
@ -1141,8 +1150,8 @@ mock_init_cfg () {
|
||||
echo "${FUNCNAME[0]}: $CFG"
|
||||
echo "=================================="
|
||||
set_mock_symlinks $CFG
|
||||
echo "$MOCK -r $CFG --configdir $(dirname $CFG) --init"
|
||||
trapwrap_n $CFG $MOCK -r $CFG --configdir $(dirname $CFG) --init
|
||||
echo "$MOCK --root $CFG --configdir $(dirname $CFG) --init"
|
||||
trapwrap_n $CFG $MOCK --root $CFG --configdir $(dirname $CFG) --init
|
||||
echo "=================================="
|
||||
}
|
||||
|
||||
@ -1161,14 +1170,14 @@ mock_update_or_init_cfg () {
|
||||
if [ -d $ROOT_DIR/root ]; then
|
||||
echo "Updating the mock environment"
|
||||
set_mock_symlinks $CFG
|
||||
echo "$MOCK -r $CFG --configdir $(dirname $CFG) --update"
|
||||
trapwrap_n $CFG $MOCK -r $CFG --configdir $(dirname $CFG) --update &> $TMP
|
||||
echo "$MOCK --root $CFG --configdir $(dirname $CFG) --update"
|
||||
trapwrap_n $CFG $MOCK --root $CFG --configdir $(dirname $CFG) --update &> $TMP
|
||||
RC=$?
|
||||
else
|
||||
echo "Init the mock environment"
|
||||
set_mock_symlinks $CFG
|
||||
echo "$MOCK -r $CFG --configdir $(dirname $CFG) --init"
|
||||
trapwrap_n $CFG $MOCK -r $CFG --configdir $(dirname $CFG) --init &> $TMP
|
||||
echo "$MOCK --root $CFG --configdir $(dirname $CFG) --init"
|
||||
trapwrap_n $CFG $MOCK --root $CFG --configdir $(dirname $CFG) --init &> $TMP
|
||||
RC=$?
|
||||
fi
|
||||
if [ $RC -ne 0 ]; then
|
||||
@ -1198,12 +1207,12 @@ NO_DESCENDANTS=0
|
||||
NO_REQUIRED=0
|
||||
NO_AUTOCLEAN=0
|
||||
NO_BUILD_INFO=0
|
||||
HELP=0
|
||||
HELP=0
|
||||
CLEAN_FLAG=0
|
||||
FORMAL_FLAG=0
|
||||
CAREFUL=0
|
||||
DEP_TEST_FLAG=0
|
||||
|
||||
|
||||
# read the options
|
||||
TEMP=$(getopt -o h --long serial,std,rt,installer,containers,no-required,no-descendants,no-autoclean,no-build-info,dep-test,clean,formal,careful,help,layer: -n "$ME" -- "$@")
|
||||
|
||||
@ -1238,7 +1247,7 @@ while true ; do
|
||||
--) shift ; break ;;
|
||||
*) echo "Internal error!" ; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
done
|
||||
|
||||
|
||||
# Reset variables
|
||||
@ -1493,7 +1502,7 @@ clean_list () {
|
||||
echo "rm -rf $d"
|
||||
\rm -rf "$d" 2>> /dev/null
|
||||
done
|
||||
|
||||
|
||||
else
|
||||
rs=$(rpm_get_srpm $r)
|
||||
if [[ "$rs" != "$sn"-[0-9]* ]]; then
|
||||
@ -1506,7 +1515,7 @@ clean_list () {
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
|
||||
TARGET=$(rpm -qp --qf '%{NAME}-%{VERSION}\n' "$s")
|
||||
|
||||
if [ $CLEAN_FLAG -eq 1 ]; then
|
||||
@ -1542,7 +1551,7 @@ clean_list () {
|
||||
|
||||
\rm -f -v $RESULT_DIR/mockchain.log 2>> /dev/null
|
||||
mock_clean
|
||||
else
|
||||
else
|
||||
# If dependency test
|
||||
if [ $DEP_TEST_FLAG -eq 1 ]; then
|
||||
mock_clean
|
||||
@ -1801,7 +1810,7 @@ if [ $CLEAN_FLAG -eq 0 ] && [ $NO_DESCENDANTS -eq 0 ] && [ -f $SRPM_DIRECT_DESCE
|
||||
done
|
||||
|
||||
# For non-std build, and if non specific build targets are named, then search all
|
||||
# packages that we might build and check if they require a package that DID build
|
||||
# packages that we might build and check if they require a package that DID build
|
||||
# in the std build. If so build the package as a secondary target, even though the
|
||||
# primary target was from a different build_type.
|
||||
if [ "$BUILD_TYPE" != "std" ] && [ $ALL -eq 1 ] && [ -f $SRPM_TO_RPM_MAP_FILE ] && [ -f $SRPM_RPM_DIRECT_REQUIRES_FILE ]; then
|
||||
@ -1861,7 +1870,7 @@ if [ $CLEAN_FLAG -eq 0 ] && [ $NO_DESCENDANTS -eq 0 ] && [ -f $SRPM_DIRECT_DESCE
|
||||
done
|
||||
fi
|
||||
|
||||
# If the kernel or kernel-rt packages where absent from the primary build targets, but
|
||||
# If the kernel or kernel-rt packages where absent from the primary build targets, but
|
||||
# added as a secondary target, then make sure all out-of-tree kernel modules are also
|
||||
# added.
|
||||
for n in kernel kernel-rt; do
|
||||
@ -1996,9 +2005,9 @@ echo "SRPMS_LIST = $SRPMS_LIST"
|
||||
echo "RPMS_LIST = $RPMS_LIST"
|
||||
|
||||
|
||||
echo
|
||||
echo
|
||||
if [ $CLEAN_FLAG -eq 0 ]; then
|
||||
# pre-create these directories as $USER,
|
||||
# pre-create these directories as $USER,
|
||||
# else mock will create them as root and fails to clean them.
|
||||
# Note: keep these in sync with mockchain-parallel!
|
||||
mkdir -p $MY_WORKSPACE/mock
|
||||
@ -2059,27 +2068,46 @@ mock_clean_metadata
|
||||
echo
|
||||
echo "Building"
|
||||
|
||||
recreate_repodata $BUILD_BASE/results/$BUILD_ENVIRONMENT_DIR
|
||||
|
||||
CMD_PREFIX=""
|
||||
if [ -x /bin/ionice ]; then
|
||||
CMD_PREFIX="nice -n 20 ionice -c Idle /bin/ionice "
|
||||
fi
|
||||
|
||||
CMD_OPTIONS="-m --no-clean -m --no-cleanup-after"
|
||||
REAL_MOCKCHAIN=0
|
||||
MOCK_PASSTHROUGH=""
|
||||
MOCKCHAIN="mock"
|
||||
CHAIN_OPTION="--chain"
|
||||
if file $(which mockchain) | grep -q 'Python script'; then
|
||||
REAL_MOCKCHAIN=1
|
||||
MOCK_PASSTHROUGH="-m"
|
||||
MOCKCHAIN="mockchain"
|
||||
CHAIN_OPTION=""
|
||||
fi
|
||||
|
||||
CMD_OPTIONS="$MOCK_PASSTHROUGH --no-clean $MOCK_PASSTHROUGH --no-cleanup-after"
|
||||
if [ $CAREFUL -eq 1 ]; then
|
||||
CMD_OPTIONS="-m --no-cleanup-after"
|
||||
CMD_OPTIONS="$MOCK_PASSTHROUGH --no-cleanup-after"
|
||||
fi
|
||||
if [ $REAL_MOCKCHAIN -eq 1 ]; then
|
||||
CMD_OPTIONS+=" --log=$MOCKCHAIN_LOG"
|
||||
fi
|
||||
echo "CAREFUL=$CAREFUL"
|
||||
echo "CMD_OPTIONS=$CMD_OPTIONS"
|
||||
|
||||
CMD="$CMD_PREFIX mockchain -r $BUILD_CFG -l $BUILD_BASE --recurse --log=$MOCKCHAIN_LOG --tmp_prefix=$USER --addrepo=$LOCAL_URL --addrepo=$LOCAL_SRC_URL -m --rootdir=$BUILD_BASE/mock/root $CMD_OPTIONS -m --rebuild $SRPMS_LIST"
|
||||
echo "$CMD -m --define='_tis_dist .tis' -m --define='platform_release $PLATFORM_RELEASE'"
|
||||
trapwrap stdbuf -o0 $CMD -m --define='_tis_dist .tis' -m --define="platform_release $PLATFORM_RELEASE"
|
||||
CMD="$CMD_PREFIX $MOCKCHAIN --root $BUILD_CFG --localrepo $BUILD_BASE --recurse --tmp_prefix=$USER --addrepo=$LOCAL_URL --addrepo=$LOCAL_SRC_URL $MOCK_PASSTHROUGH --rootdir=$BUILD_BASE/mock/root $CMD_OPTIONS $MOCK_PASSTHROUGH --rebuild"
|
||||
CMD_BUILD_LIST="$CHAIN_OPTION $SRPMS_LIST"
|
||||
echo ""
|
||||
echo "$CMD $MOCK_PASSTHROUGH --define='_tis_dist .tis' $MOCK_PASSTHROUGH --define='platform_release $PLATFORM_RELEASE' $CMD_BUILD_LIST"
|
||||
echo ""
|
||||
trapwrap stdbuf -o0 $CMD $MOCK_PASSTHROUGH --define="_tis_dist .tis" $MOCK_PASSTHROUGH --define="platform_release $PLATFORM_RELEASE" $CMD_BUILD_LIST
|
||||
MOCKCHAIN_RC=$?
|
||||
|
||||
echo $PLATFORM_RELEASE > $LAST_PLATFORM_RELEASE_FILE
|
||||
|
||||
for d in $(find $RESULT_DIR -name '*.rpm' | grep -v '[.]src[.]rpm' | xargs --max-args=1 dirname | sort -u); do
|
||||
rsync -u $d/*.rpm $RPM_DIR
|
||||
rsync -u $d/*.rpm $RPM_DIR
|
||||
done
|
||||
|
||||
if [ $ALL -eq 1 ]; then
|
||||
@ -2163,5 +2191,5 @@ if [ 0$FORMAL_BUILD -eq 1 ] && [ "$USER" == "jenkins" ]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
exit 0
|
||||
exit 0
|
||||
) 2>&1 | stdbuf -o0 awk '{ print strftime("%H:%M:%S"), $0; fflush(); }' | tee $(date "+$MY_WORKSPACE/build-rpms-serial_%Y-%m-%d_%H-%M-%S.log") ; exit ${PIPESTATUS[0]}
|
||||
|
@ -1,5 +1,11 @@
|
||||
#!/bin/env bash
|
||||
|
||||
#
|
||||
# Copyright (c) 2018-2020 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
# Here's the score, kids. There are a few different places from which we can
|
||||
# get packages. In priority order, they are:
|
||||
#
|
||||
@ -26,21 +32,33 @@
|
||||
# export/dist/report_deps.txt
|
||||
#
|
||||
|
||||
CGTS_DEPS_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}" )" )"
|
||||
|
||||
# Set REPOQUERY, REPOQUERY_SUB_COMMAND, REPOQUERY_RESOLVE and
|
||||
# REPOQUERY_WHATPROVIDES_DELIM for our build environment.
|
||||
source ${CGTS_DEPS_DIR}/../pkg-manager-utils.sh
|
||||
|
||||
# This function generates a simple file of dependencies we're trying to resolve
|
||||
function generate_dep_list {
|
||||
TMP_RPM_DB=$(mktemp -d $(pwd)/tmp_rpm_db_XXXXXX)
|
||||
mkdir -p $TMP_RPM_DB
|
||||
rpm --initdb --dbpath $TMP_RPM_DB
|
||||
rpm --dbpath $TMP_RPM_DB --test -Uvh --replacefiles '*.rpm' >> $DEPDETAILLISTFILE 2>&1
|
||||
rpm --dbpath $TMP_RPM_DB --test -Uvh --replacefiles '*.rpm' 2>&1 \
|
||||
| grep -v "error:" \
|
||||
| grep -v "warning:" \
|
||||
| grep -v "Preparing..." \
|
||||
| grep -v "installing package" \
|
||||
| sed "s/ is needed by.*$//" | sed "s/ >=.*$//" | sort -u > $DEPLISTFILE
|
||||
rpm --dbpath $TMP_RPM_DB --test -Uvh --replacefiles '*.rpm' > $DEPLISTFILE_NEW 2>&1
|
||||
cat $DEPLISTFILE_NEW >> $DEPDETAILLISTFILE
|
||||
cat $DEPLISTFILE_NEW \
|
||||
| grep -v -e "error:" -e "warning:" -e "Preparing..." \
|
||||
-e "Verifying..." -e "installing package" \
|
||||
| sed -e "s/ is needed by.*$//" -e "s/ [<=>].*$//" \
|
||||
| sort -u > $DEPLISTFILE
|
||||
\rm -rf $TMP_RPM_DB
|
||||
}
|
||||
|
||||
join_array() {
|
||||
local IFS="$1"
|
||||
shift
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
# Takes a list of requirements (either explcit package name, or capabilities
|
||||
# to provide) and install packages to meet those dependancies
|
||||
#
|
||||
@ -55,6 +73,7 @@ function generate_dep_list {
|
||||
# capabilities.
|
||||
function install_deps {
|
||||
local DEP_LIST=""
|
||||
local DEP_LIST_ARRAY=()
|
||||
local DEP_LIST_FILE="$1"
|
||||
|
||||
# Temporary files are used in a few different ways
|
||||
@ -68,7 +87,7 @@ function install_deps {
|
||||
|
||||
while read DEP
|
||||
do
|
||||
DEP_LIST="${DEP_LIST} ${DEP}"
|
||||
DEP_LIST+=" '${DEP}'"
|
||||
done < $DEP_LIST_FILE
|
||||
|
||||
echo "Debug: List of deps to resolve: ${DEP_LIST}"
|
||||
@ -79,8 +98,17 @@ function install_deps {
|
||||
|
||||
# go through each repo and convert deps to packages based on package name
|
||||
for REPOID in `grep '^[[].*[]]$' $YUM | grep -v '[[]main[]]' | awk -F '[][]' '{print $2 }'`; do
|
||||
echo "TMPDIR=$TMP_DIR repoquery -c $YUM --repoid=$REPOID --arch=x86_64,noarch ${DEP_LIST} --qf='%{name}'"
|
||||
TMPDIR=$TMP_DIR repoquery -c $YUM --repoid=$REPOID --arch=x86_64,noarch --qf='%{name}' ${DEP_LIST} | sed "s/kernel-debug/kernel/g" >> $UNSORTED_PACKAGES
|
||||
echo "TMPDIR=${TMP_DIR}"\
|
||||
"${REPOQUERY} --config=${YUM} --repoid=$REPOID"\
|
||||
"${REPOQUERY_SUB_COMMAND} --arch=x86_64,noarch"\
|
||||
"${DEP_LIST} --qf='%{name}'"
|
||||
|
||||
TMPDIR=${TMP_DIR} \
|
||||
${REPOQUERY} --config=${YUM} --repoid=$REPOID \
|
||||
${REPOQUERY_SUB_COMMAND} --arch=x86_64,noarch \
|
||||
--qf='%{name}' ${DEP_LIST} \
|
||||
| sed "s/kernel-debug/kernel/g" >> $UNSORTED_PACKAGES
|
||||
|
||||
\rm -rf $TMP_DIR/yum-$USER-*
|
||||
done
|
||||
sort $UNSORTED_PACKAGES -u > $SORTED_PACKAGES
|
||||
@ -96,19 +124,31 @@ function install_deps {
|
||||
# If there are any requirements not resolved, look up the packages with
|
||||
# --whatprovides
|
||||
if [ -s $UNRESOLVED_PACKAGES ]; then
|
||||
DEP_LIST=""
|
||||
DEP_LIST_ARRAY=()
|
||||
\cp $SORTED_PACKAGES $UNSORTED_PACKAGES
|
||||
while read DEP
|
||||
do
|
||||
DEP_LIST="${DEP_LIST} ${DEP}"
|
||||
DEP_LIST_ARRAY+=( "${DEP}" )
|
||||
done < $UNRESOLVED_PACKAGES
|
||||
|
||||
DEP_LIST=$(echo "$DEP_LIST" | sed 's/^ //g')
|
||||
if [ "$DEP_LIST" != "" ]; then
|
||||
if [ "${REPOQUERY_WHATPROVIDES_DELIM}" != " " ]; then
|
||||
DEP_LIST_ARRAY=( "$(join_array "${REPOQUERY_WHATPROVIDES_DELIM}" "${DEP_LIST_ARRAY[@]}" )" )
|
||||
fi
|
||||
|
||||
if [ ${#DEP_LIST_ARRAY[@]} -gt 0 ]; then
|
||||
|
||||
for REPOID in `grep '^[[].*[]]$' $YUM | grep -v '[[]main[]]' | awk -F '[][]' '{print $2 }'`; do
|
||||
echo "TMPDIR=$TMP_DIR repoquery -c $YUM --repoid=$REPOID --arch=x86_64,noarch --whatprovides ${DEP_LIST} --qf='%{name}'"
|
||||
TMPDIR=$TMP_DIR repoquery -c $YUM --repoid=$REPOID --arch=x86_64,noarch --qf='%{name}' --whatprovides ${DEP_LIST} | sed "s/kernel-debug/kernel/g" >> $UNSORTED_PACKAGES
|
||||
echo "TMPDIR=${TMP_DIR}"\
|
||||
"${REPOQUERY} --config=${YUM} --repoid=${REPOID}"\
|
||||
"${REPOQUERY_SUB_COMMAND} --arch=x86_64,noarch"\
|
||||
"--qf='%{name}' --whatprovides ${DEP_LIST_ARRAY[@]}"
|
||||
|
||||
TMPDIR=${TMP_DIR} \
|
||||
${REPOQUERY} --config=${YUM} --repoid=${REPOID} \
|
||||
${REPOQUERY_SUB_COMMAND} --arch=x86_64,noarch \
|
||||
--qf='%{name}' --whatprovides ${DEP_LIST_ARRAY[@]} \
|
||||
| sed "s/kernel-debug/kernel/g" >> $UNSORTED_PACKAGES
|
||||
|
||||
\rm -rf $TMP_DIR/yum-$USER-*
|
||||
done
|
||||
fi
|
||||
@ -124,12 +164,12 @@ function install_deps {
|
||||
DEP_LIST=" "
|
||||
while read DEP
|
||||
do
|
||||
DEP_LIST="${DEP_LIST}${DEP} "
|
||||
DEP_LIST+="${DEP} "
|
||||
done < $SORTED_PACKAGES
|
||||
rm $SORTED_PACKAGES
|
||||
|
||||
# go through each repo and install packages
|
||||
local TARGETS=${DEP_LIST}
|
||||
local TARGETS="${DEP_LIST}"
|
||||
echo "Debug: Resolved list of deps to install: ${TARGETS}"
|
||||
local UNRESOLVED
|
||||
for REPOID in `grep '^[[].*[]]$' $YUM | grep -v '[[]main[]]' | awk -F '[][]' '{print $2 }'`; do
|
||||
@ -137,8 +177,20 @@ function install_deps {
|
||||
|
||||
if [[ ! -z "${TARGETS// }" ]]; then
|
||||
REPO_PATH=$(cat $YUM | sed -n "/^\[$REPOID\]\$/,\$p" | grep '^baseurl=' | head -n 1 | awk -F 'file://' '{print $2}' | sed 's:/$::')
|
||||
>&2 echo "TMPDIR=$TMP_DIR repoquery -c $YUM --repoid=$REPOID --arch=x86_64,noarch --resolve $TARGETS --qf='%{name} %{name}-%{version}-%{release}.%{arch}.rpm %{relativepath}'"
|
||||
TMPDIR=$TMP_DIR repoquery -c $YUM --repoid=$REPOID --arch=x86_64,noarch --resolve $TARGETS --qf="%{name} %{name}-%{version}-%{release}.%{arch}.rpm %{relativepath}" | sort -r -V > $TMPFILE
|
||||
|
||||
>&2 echo "TMPDIR=${TMP_DIR}"\
|
||||
"${REPOQUERY} --config=${YUM} --repoid=${REPOID}"\
|
||||
"${REPOQUERY_SUB_COMMAND} --arch=x86_64,noarch"\
|
||||
"--qf='%{name} %{name}-%{version}-%{release}.%{arch}.rpm %{relativepath}'"\
|
||||
"${REPOQUERY_RESOLVE} ${TARGETS}"
|
||||
|
||||
TMPDIR=${TMP_DIR} \
|
||||
${REPOQUERY} --config=${YUM} --repoid=${REPOID} \
|
||||
${REPOQUERY_SUB_COMMAND} --arch=x86_64,noarch \
|
||||
--qf="%{name} %{name}-%{version}-%{release}.%{arch}.rpm %{relativepath}" \
|
||||
${REPOQUERY_RESOLVE} ${TARGETS} \
|
||||
| sort -r -V > $TMPFILE
|
||||
|
||||
\rm -rf $TMP_DIR/yum-$USER-*
|
||||
|
||||
while read STR
|
||||
@ -157,7 +209,11 @@ function install_deps {
|
||||
cp $PKG_PATH .
|
||||
if [ $? -ne 0 ]; then
|
||||
>&2 echo " Here's what I have to work with..."
|
||||
>&2 echo " TMPDIR=$TMP_DIR repoquery -c $YUM --repoid=$REPOID --arch=x86_64,noarch --resolve $PKG --qf=\"%{name} %{name}-%{version}-%{release}.%{arch}.rpm %{relativepath}\""
|
||||
>&2 echo " TMPDIR=${TMP_DIR}"\
|
||||
"${REPOQUERY} --config=${YUM} --repoid=${REPOID}"\
|
||||
"${REPOQUERY_SUB_COMMAND} --arch=x86_64,noarch"\
|
||||
"--qf=\"%{name} %{name}-%{version}-%{release}.%{arch}.rpm %{relativepath}\""\
|
||||
"${REPOQUERY_RESOLVE} ${PKG}"
|
||||
>&2 echo " PKG=$PKG PKG_FILE=$PKG_FILE REPO_PATH=$REPO_PATH PKG_REL_PATH=$PKG_REL_PATH PKG_PATH=$PKG_PATH"
|
||||
fi
|
||||
|
||||
@ -172,8 +228,8 @@ function install_deps {
|
||||
echo " path $PKG_PATH" >> $BUILT_REPORT
|
||||
FOUND_UNKNOWN=1
|
||||
fi
|
||||
done < $TMPFILE #<<< "$(TMPDIR=$TMP_DIR repoquery -c $YUM --repoid=$REPOID --arch=x86_64,noarch --resolve $TARGETS --qf=\"%{name} %{name}-%{version}-%{release}.%{arch}.rpm %{relativepath}\" | sort -r -V)"
|
||||
\rm -rf $TMP_DIR/yum-$USER-*
|
||||
done < $TMPFILE
|
||||
\rm -rf $TMP_DIR/yum-$USER-*
|
||||
TARGETS="$UNRESOLVED"
|
||||
fi
|
||||
done
|
||||
@ -220,6 +276,7 @@ OUTPUT_DIR=$MY_WORKSPACE/export
|
||||
TMP_DIR=$MY_WORKSPACE/tmp
|
||||
YUM=$OUTPUT_DIR/yum.conf
|
||||
DEPLISTFILE=$OUTPUT_DIR/deps.txt
|
||||
DEPLISTFILE_NEW=$OUTPUT_DIR/deps_new.txt
|
||||
DEPDETAILLISTFILE=$OUTPUT_DIR/deps_detail.txt
|
||||
|
||||
BUILT_REPORT=$OUTPUT_DIR/local.txt
|
||||
|
@ -1,40 +1,71 @@
|
||||
#!/bin/env bash
|
||||
|
||||
#
|
||||
# Copyright (c) 2018-2020 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
CGTS_DEPS_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}" )" )"
|
||||
|
||||
# Set REPOQUERY, REPOQUERY_SUB_COMMAND, REPOQUERY_RESOLVE and
|
||||
# REPOQUERY_WHATPROVIDES_DELIM for our build environment.
|
||||
source ${CGTS_DEPS_DIR}/../pkg-manager-utils.sh
|
||||
|
||||
function generate_dep_list {
|
||||
TMP_RPM_DB=$(mktemp -d $(pwd)/tmp_rpm_db_XXXXXX)
|
||||
mkdir -p $TMP_RPM_DB
|
||||
rpm --initdb --dbpath $TMP_RPM_DB
|
||||
rpm --dbpath $TMP_RPM_DB --test -Uvh --replacefiles '*.rpm' >> $DEPDETAILLISTFILE 2>&1
|
||||
rpm --dbpath $TMP_RPM_DB --test -Uvh --replacefiles '*.rpm' 2>&1 \
|
||||
| grep -v "error:" \
|
||||
| grep -v "warning:" \
|
||||
| grep -v "Preparing..." \
|
||||
| sed "s/ is needed by.*$//" | sed "s/ >=.*$//" | sort -u > $DEPLISTFILE
|
||||
rm -rf $TMP_RPM_DB
|
||||
rpm --dbpath $TMP_RPM_DB --test -Uvh --replacefiles '*.rpm' > $DEPLISTFILE_NEW 2>&1
|
||||
cat $DEPLISTFILE_NEW >> $DEPDETAILLISTFILE
|
||||
cat $DEPLISTFILE_NEW \
|
||||
| grep -v -e "error:" -e "warning:" -e "Preparing..." \
|
||||
-e "Verifying..." -e "installing package" \
|
||||