Skip to content

Failed to Download Metadata for repo 'appstream' in CentOS

Problem

When trying to install packages using yum or dnf on CentOS 8, you may encounter the error:

Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist

This error occurs because CentOS 8 reached End of Life (EOL) on December 31, 2021. The official mirror URLs have been disabled, and the repositories are no longer available through the standard mirror system.

Solution

There are two primary approaches to resolve this issue:

The official solution from CentOS is to migrate from CentOS Linux 8 to CentOS Stream 8, which continues to receive updates.

bash
# Install CentOS GPG keys if needed
wget 'http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/centos-gpg-keys-8-3.el8.noarch.rpm'
sudo rpm -i 'centos-gpg-keys-8-3.el8.noarch.rpm'

# Switch to CentOS Stream repositories
sudo dnf --disablerepo '*' --enablerepo=extras swap centos-linux-repos centos-stream-repos

# Synchronize with the new repositories
sudo dnf distro-sync

After completing these steps, yum and dnf will work normally with the new CentOS Stream 8 repositories.

TIP

CentOS Stream is a rolling-release distribution that sits between Fedora and RHEL, providing a more stable platform than Fedora while offering newer packages than RHEL.

Option 2: Use Archived Repositories (Temporary Fix)

If you cannot migrate to CentOS Stream, you can temporarily point your system to the archived CentOS 8 repositories:

bash
# Navigate to the repos directory
cd /etc/yum.repos.d/

# Comment out mirrorlist entries
sudo sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*

# Enable vault.centos.org as the baseurl
sudo sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

# Update your system
sudo yum update -y

WARNING

This solution provides access to archived packages but will not receive security updates or bug fixes. It should only be used as a temporary measure before migrating to a supported distribution.

Dockerfile Solution

If you're encountering this error in a Docker build, modify your Dockerfile:

dockerfile
FROM centos:8

# Fix repository configuration
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* && \
    sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

# Install your packages
RUN yum -y install java

# Continue with your build steps

For CentOS Stream 9 Users

If you're using CentOS Stream 9 and experiencing similar issues, check your repository configuration:

bash
# Edit the centos.repo file
sudo vi /etc/yum.repos.d/centos.repo

Ensure that any repositories causing errors have enabled=0 instead of enabled=1.

Best Practices

  1. Migrate to a supported distribution - Consider upgrading to CentOS Stream, AlmaLinux, Rocky Linux, or another RHEL-compatible distribution
  2. Keep systems updated - Regular updates ensure security patches are applied
  3. Plan for EOL transitions - Monitor end-of-life dates for your distributions and plan migrations accordingly

DANGER

Continuing to use CentOS 8 without security updates exposes your system to vulnerabilities. Migrate to a supported distribution as soon as possible.

Conclusion

The "Failed to download metadata for repo 'appstream'" error occurs because CentOS 8 has reached end-of-life. The recommended solution is to migrate to CentOS Stream 8 using the official migration path. While temporary fixes using archived repositories work, they don't provide ongoing security updates and should only be used as a stopgap measure.