Skip to content

Commit

Permalink
rpm: always replace existing repo-configuration
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
thaJeztah committed Dec 5, 2024
1 parent 15dfae0 commit a99d9b0
Showing 1 changed file with 21 additions and 12 deletions.
33 changes: 21 additions & 12 deletions install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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\""
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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.
EOF
( set -x; sleep 30 )

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 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"
)
Expand Down

0 comments on commit a99d9b0

Please sign in to comment.