From 8c7ed6bd848d1f90f9466bd8869eabb57af1f753 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Thu, 5 Dec 2024 13:05:56 +0100 Subject: [PATCH] rpm: always replace existing repo-configuration The installation script's main purpose is to perform a fresh install, because it's not guaranteed to work correctly when updating an existing installation, and we print a warning if we find docker is already installed. However, it's known that the script is used to update existing installations. The current script has some limitations for the update scenario; - When using the script for installing from the staging domain, the existing repo configuration is not overwritten. When using `yum`, or older `dnf` versions this resulted in 2 separate repo files to be created (docker-ce.repo and docker-ce-staging.repo), which resulted in errors due to duplicate repo definitions with the same name. - When using `dnf5`, we specified the filename to store the configuration, which resulted in an error; + sh -c 'dnf5 config-manager addrepo --save-filename=docker-ce.repo --from-repofile='\''https://download-stage.docker.com/linux/fedora/docker-ce-staging.repo'\''' File "/etc/yum.repos.d/docker-ce.repo" already exists and configures repositories with IDs "docker-ce-stable docker-ce-stable-debuginfo docker-ce-stable-source docker-ce-test docker-ce-test-debuginfo docker-ce-test-source docker-ce-nightly docker-ce-nightly-debuginfo docker-ce-nightly-source". Add "--overwrite" to overwrite. - On SLES, it would result in a similar error; + sh -c 'zypper addrepo https://download-stage.docker.com/linux/sles/docker-ce-staging.repo' Adding repository 'Docker CE Nightly - s390x' ......................................................................................[error] Repository named 'docker-ce-nightly' already exists. Please use another alias. Adding repository 'Docker CE Nightly - Debuginfo s390x' ............................................................................[error] Repository named 'docker-ce-nightly-debuginfo' already exists. Please use another alias. This patch updates the script to overwrite / replace the existing repo config. This brings the rpm-based installations in line with the Debian approach, which unconditionally overwrites `/etc/apt/sources.list.d/docker.list`. It's worth noting that this change will therefore overwrite any customisations made to the repo-configurations, so a warning is added for that. Signed-off-by: Sebastiaan van Stijn --- install.sh | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/install.sh b/install.sh index c48e4ef5..3219205c 100755 --- a/install.sh +++ b/install.sh @@ -368,7 +368,9 @@ do_install() { installation. If you installed the current Docker package using this script and are using it - again to update Docker, you can safely ignore this message. + again to update Docker, you can ignore this message, but be aware that the + script resets any custom changes in the deb and rpm repo configuration + files to match the parameters passed to the script. You may press Ctrl+C now to abort this script. EOF @@ -559,7 +561,7 @@ do_install() { fi if command_exists dnf5; then $sh_c "dnf -y -q --setopt=install_weak_deps=False install dnf-plugins-core" - $sh_c "dnf5 config-manager addrepo --save-filename=docker-ce.repo --from-repofile='$repo_file_url'" + $sh_c "dnf5 config-manager addrepo --overwrite --save-filename=docker-ce.repo --from-repofile='$repo_file_url'" if [ "$CHANNEL" != "stable" ]; then $sh_c "dnf5 config-manager setopt \"docker-ce-*.enabled=0\"" @@ -568,6 +570,7 @@ do_install() { $sh_c "dnf makecache" elif command_exists dnf; then $sh_c "dnf -y -q --setopt=install_weak_deps=False install dnf-plugins-core" + $sh_c "rm -f /etc/yum.repos.d/docker-ce.repo /etc/yum.repos.d/docker-ce-staging.repo" $sh_c "dnf config-manager --add-repo $repo_file_url" if [ "$CHANNEL" != "stable" ]; then @@ -577,6 +580,7 @@ do_install() { $sh_c "dnf makecache" else $sh_c "yum -y -q install yum-utils" + $sh_c "rm -f /etc/yum.repos.d/docker-ce.repo /etc/yum.repos.d/docker-ce-staging.repo" $sh_c "yum-config-manager --add-repo $repo_file_url" if [ "$CHANNEL" != "stable" ]; then @@ -659,18 +663,23 @@ do_install() { set -x fi $sh_c "zypper install -y $pre_reqs" + $sh_c "rm -f /etc/zypp/repos.d/docker-ce-*.repo" $sh_c "zypper addrepo $repo_file_url" - if ! is_dry_run; then - cat >&2 <<-'EOF' - WARNING!! - openSUSE repository (https://download.opensuse.org/repositories/security:/SELinux) will be enabled now. - Do you wish to continue? - You may press Ctrl+C now to abort this script. + + opensuse_factory_url="https://download.opensuse.org/repositories/security:/SELinux/openSUSE_Factory/" + if ! zypper lr -d | grep -q "${opensuse_factory_url}"; then + opensuse_repo="${opensuse_factory_url}security:SELinux.repo" + if ! is_dry_run; then + cat >&2 <<- EOF + WARNING!! + openSUSE repository ($opensuse_repo) will be enabled now. + Do you wish to continue? + You may press Ctrl+C now to abort this script. EOF - ( set -x; sleep 30 ) + ( set -x; sleep 20 ) + fi + $sh_c "zypper addrepo $opensuse_repo" fi - opensuse_repo="https://download.opensuse.org/repositories/security:/SELinux/openSUSE_Factory/security:SELinux.repo" - $sh_c "zypper addrepo $opensuse_repo" $sh_c "zypper --gpg-auto-import-keys refresh" $sh_c "zypper lr -d" )