From b08492b35c6e462d5393358c06b589acd52df5ca Mon Sep 17 00:00:00 2001 From: Luan Nunes Utimura Date: Sat, 14 Jan 2023 17:50:30 -0300 Subject: [PATCH] docker-images: Add loci patch to allow pip upgrade In older versions of the pip tool, there is a known bug with the dependency resolver that causes some package installations to take much longer than expected due to various version and compatibility checks done during this process ([1] and [2]). Since the newer versions of the tool bring improvements to the dependency resolver, updating it helps to avoid scenarios like the ones described above. Thus, this patch adds a build argument called UPGRADE_PIP_PACKAGES which, when filled, allows LOCI to perform a `pip install --upgrade` on the listed packages before proceeding with the installation of the others. [1] https://github.com/pypa/pip/issues/10967 [2] https://github.com/pypa/pip/issues/9517 Test Plan: PASS: While building any image, verify in the output that the new patch is being applied on top of LOCI's Dockerfile: `Applying: Add build argument to allow pip upgrade`. (This step is performed regardless of the BUILDER type) PASS: While building any loci-based image that DOES NOT use the build argument UPGRADE_PIP_PACKAGES, verify in the output that pip isn't upgrading itself or upgrading other packages before the installation step. PASS: While building any loci-based image that DOES use the build argument UPGRADE_PIP_PACKAGES, verify in the output that pip is upgrading the listed packages before the installation step. Signed-off-by: Luan Nunes Utimura Change-Id: I0e742e804746bf5f3f99fed181dd868c10fdf75b --- .../build-docker-images/build-stx-images.sh | 6 ++ ...-build-argument-to-allow-pip-upgrade.patch | 78 +++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 build-tools/build-docker-images/loci/patches/0003-Add-build-argument-to-allow-pip-upgrade.patch diff --git a/build-tools/build-docker-images/build-stx-images.sh b/build-tools/build-docker-images/build-stx-images.sh index e5878040..ead6a97f 100755 --- a/build-tools/build-docker-images/build-stx-images.sh +++ b/build-tools/build-docker-images/build-stx-images.sh @@ -400,6 +400,8 @@ function build_image_loci { PROJECT_REF=$(source ${image_build_file} && echo ${PROJECT_REF}) local PIP_PACKAGES PIP_PACKAGES=$(source ${image_build_file} && echo ${PIP_PACKAGES}) + local UPGRADE_PIP_PACKAGES + UPGRADE_PIP_PACKAGES=$(source ${image_build_file} && echo ${UPGRADE_PIP_PACKAGES}) local DIST_PACKAGES DIST_PACKAGES=$(source ${image_build_file} && echo ${DIST_PACKAGES}) local PROFILES @@ -507,6 +509,10 @@ function build_image_loci { BUILD_ARGS+=(--build-arg PIP_PACKAGES="${PIP_PACKAGES}") fi + if [ -n "${UPGRADE_PIP_PACKAGES}" ]; then + BUILD_ARGS+=(--build-arg UPGRADE_PIP_PACKAGES="${UPGRADE_PIP_PACKAGES}") + fi + if [ -n "${DIST_PACKAGES}" ]; then BUILD_ARGS+=(--build-arg DIST_PACKAGES="${DIST_PACKAGES}") fi diff --git a/build-tools/build-docker-images/loci/patches/0003-Add-build-argument-to-allow-pip-upgrade.patch b/build-tools/build-docker-images/loci/patches/0003-Add-build-argument-to-allow-pip-upgrade.patch new file mode 100644 index 00000000..2370f950 --- /dev/null +++ b/build-tools/build-docker-images/loci/patches/0003-Add-build-argument-to-allow-pip-upgrade.patch @@ -0,0 +1,78 @@ +From dd9b0a00ba46d482655b799b2654adb3da3a4ffe Mon Sep 17 00:00:00 2001 +From: Luan Nunes Utimura +Date: Sat, 14 Jan 2023 16:38:59 -0300 +Subject: [PATCH] Add build argument to allow pip upgrade + +In older versions of the pip tool, there is a known bug with the +dependency resolver that causes some package installations to take much +longer than expected due to various version and compatibility checks +done during this process. + +Since the newer versions of the tool bring improvements to the +dependency resolver, updating it helps to avoid scenarios like the one +described above. + +Thus, this patch adds a build argument called UPGRADE_PIP_PACKAGES +which, when filled, allows LOCI to perform a `pip install --upgrade` on +the listed packages before proceeding with the installation of the +others. + +Signed-off-by: Luan Nunes Utimura +Change-Id: I93a8cd60ef55d5cd27a3e8e859ca0a6e848f40a2 +--- + Dockerfile | 1 + + scripts/install.sh | 9 +++++++++ + scripts/upgrade_pip_packages.sh | 7 +++++++ + 3 files changed, 17 insertions(+) + create mode 100755 scripts/upgrade_pip_packages.sh + +diff --git a/Dockerfile b/Dockerfile +index 6567c90..89c3d66 100644 +--- a/Dockerfile ++++ b/Dockerfile +@@ -12,6 +12,7 @@ ARG PROFILES + ARG PIP_PACKAGES="" + ARG PIP_ARGS="" + ARG PIP_WHEEL_ARGS=$PIP_ARGS ++ARG UPGRADE_PIP_PACKAGES="" + ARG DIST_PACKAGES="" + ARG PLUGIN=no + ARG PYTHON3=indeed +diff --git a/scripts/install.sh b/scripts/install.sh +index a5a31dc..e511ed7 100755 +--- a/scripts/install.sh ++++ b/scripts/install.sh +@@ -103,8 +103,17 @@ fi + if [[ ${PROJECT} == 'nova' ]]; then + $(dirname $0)/install_nova_console.sh + fi ++ + $(dirname $0)/clone_project.sh + $(dirname $0)/install_packages.sh ++ ++# UPGRADE_PIP_PACKAGES, default=empty: ++# If empty, proceed with the installation of packages normally. ++# Otherwise, proceed with the upgrade of the specified packages and with the installation of the others afterwards. ++if [[ -n "$UPGRADE_PIP_PACKAGES" ]]; then ++ $(dirname $0)/upgrade_pip_packages.sh ${UPGRADE_PIP_PACKAGES} ++fi ++ + $(dirname $0)/pip_install.sh ${NO_INDEX} /tmp/${PROJECT} ${PIP_PACKAGES} + $(dirname $0)/collect_info.sh + $(dirname $0)/cleanup.sh +diff --git a/scripts/upgrade_pip_packages.sh b/scripts/upgrade_pip_packages.sh +new file mode 100755 +index 0000000..754f0e0 +--- /dev/null ++++ b/scripts/upgrade_pip_packages.sh +@@ -0,0 +1,7 @@ ++#!/bin/bash ++ ++set -ex ++ ++packages=$@ ++ ++pip install --upgrade ${packages} +-- +2.25.1 +