다음을 통해 공유


Linux용 yum 및 dnf 패키지 관리 도구의 일반적인 문제 해결

적용 대상: ✔️ Linux VM

이 문서에서는 관리 도구를 사용하여 yumdnf Microsoft Azure VM(가상 머신)에 애플리케이션을 설치하거나 업데이트할 때 발생할 수 있는 일반적인 문제를 설명하고 해결합니다.

주의

이 문서에서는 EOL(지원 종료)에 도달한 Linux 배포판인 CentOS를 참조합니다. 그에 따라 사용 및 계획을 고려합니다. 자세한 내용은 CentOS 수명 종료 지침을 참조하세요.

개요

yum 명령줄 패키지 관리 도구는 RPM 패키지 관리자 사용하는 Linux 배포판에서 사용됩니다. 도구 이름은 "Yellowdog Updater Modified"의 약어이며 원래 Yellow Dog Linux용으로 개발되었습니다. 이 yum 도구는 특히 RHEL(Red Hat Enterprise Linux), CentOS, Oracle Linux, Mariner 및 Fedora와 같은 RPM 기반 배포에서 널리 사용되었습니다.

dnf 명령줄 패키지 관리 도구 또는 "Dandified Yum"은 RPM 기반 Linux 배포를 위한 현대화되고 향상된 패키지 관리자 도구입니다.

시나리오 1: 리포지토리 액세스 문제

인증서 또는 네트워크 연결에 적용되는 오류가 발생합니다.

유효성 검사 스크립트 실행

Azure는 GitHub에서 RHUI(Red Hat Update Infrastructure) 리포지토리 검사 스크립트를 제공합니다. 이 Python 스크립트에는 다음과 같은 기능이 포함되어 있습니다.

  • RHUI 클라이언트 인증서의 유효성을 검사합니다.
  • RHUI rpm 일관성의 유효성을 검사합니다.
  • EUS(확장 업데이트 지원)와 비 EUS 리포지토리 구성과 해당 요구 사항 간의 일관성을 확인합니다.
  • RHUI 리포지토리에 대한 연결의 유효성을 검사합니다.
  • 오류가 검색되지 않으면 성공적인 리포지토리 연결을 보고합니다.
  • RHUI 리포지토리에 대한 SSL 연결을 확인합니다.
  • RHUI 리포지토리에만 중점을 둡니다.
  • 정의된 조건을 사용하여 발견된 오류를 확인하고 수정에 대한 권장 사항을 제공합니다.

지원되는 Red Hat 이미지

이 버전의 검사 스크립트는 현재 Azure Marketplace 이미지에서 배포된 다음 Red Hat VM만 지원합니다.

  • RHEL 7.x PAYG VM
  • RHEL 8.x PAYG VM
  • RHEL 9.x PAYG VM
  • RHEL 10.x PAYG VM들

RHUI 검사 스크립트를 실행하는 방법

검사 스크립트를 실행하려면 Red Hat VM에서 다음 셸 명령을 입력합니다.

  1. VM에 인터넷 액세스 권한이 있는 경우 다음 명령을 사용하여 VM에서 직접 스크립트를 실행합니다.

    curl -sL https://raw.githubusercontent.com/Azure/azure-support-scripts/refs/heads/master/Linux_scripts/rhui-check/rhui-check.py | sudo python2 -
    
  2. VM에 직접 인터넷에 액세스할 수 없는 경우 RHUI 확인 스크립트 URL 에서 스크립트를 다운로드하고, 스크립트를 VM으로 전송한 다음, 다음 명령을 실행합니다.

    sudo python2 ./rhui-check.py 
    
  3. 스크립트는 발견된 모든 문제를 포함하는 보고서를 생성합니다. 스크립트 출력은 실행한 후에도 저장 /var/log/rhuicheck.log 됩니다.

솔루션 1

RHEL 시스템의 경우 Azure의 Red Hat RHUI 인증서 문제 해결 또는 Azure의 Red Hat RHUI 연결 문제 해결을 참조하세요.

다른 Linux 배포의 경우 포트 443을 통해 해당 리포지토리에 대한 통신이 허용되는지 확인합니다. 또한 유효한 인증서가 필요한 경우 운영 체제에서 유효한 인증서를 사용하는지 확인합니다.

시나리오 2: 종속성 문제

업데이트 중에 종속성 충돌이 발생할 때 몇 가지 오류가 발생할 수 있습니다. 다음 하위 섹션에서는 일반적인 종속성 오류의 출력 증상을 표시합니다.

증상 2a

Error: 
 Problem: package leapp-0.16.0-2.el8.noarch requires python3-leapp = 0.16.0-2.el8, but none of the providers can be installed
  - package python2-leapp-0.16.0-1.el7_9.noarch conflicts with python3-leapp provided by python3-leapp-0.16.0-2.el8.noarch
  - package python3-leapp-0.16.0-2.el8.noarch conflicts with python2-leapp provided by python2-leapp-0.16.0-1.el7_9.noarch
  - cannot install the best update candidate for package leapp-0.16.0-1.el7_9.noarch
  - problem with installed package python2-leapp-0.16.0-1.el7_9.noarch
(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

증상 2b

Error: 
 Problem 1: package systemd-udev-239-78.el8.x86_64 requires systemd(x86-64) = 239-78.el8, but none of the providers can be installed
  - cannot install the best update candidate for package systemd-udev-239-74.el8_8.5.x86_64
  - package systemd-239-78.el8.x86_64 is filtered out by exclude filtering
 Problem 2: package systemd-container-239-78.el8.x86_64 requires systemd(x86-64) = 239-78.el8, but none of the providers can be installed
  - cannot install the best update candidate for package systemd-container-239-74.el8_8.5.x86_64
  - package systemd-239-78.el8.x86_64 is filtered out by exclude filtering
 Problem 3: package systemd-pam-239-78.el8.x86_64 requires systemd = 239-78.el8, but none of the providers can be installed
  - cannot install the best update candidate for package systemd-pam-239-74.el8_8.5.x86_64
  - package systemd-239-78.el8.i686 is filtered out by exclude filtering
  - package systemd-239-78.el8.x86_64 is filtered out by exclude filtering
 Problem 4: systemd-libs-239-74.el8_8.5.i686 has inferior architecture
  - package systemd-239-74.el8_8.5.x86_64 requires systemd-libs = 239-74.el8_8.5, but none of the providers can be installed
  - cannot install both systemd-libs-239-78.el8.x86_64 and systemd-libs-239-74.el8_8.5.x86_64
  - cannot install the best update candidate for package systemd-libs-239-74.el8_8.5.x86_64
  - problem with installed package systemd-239-74.el8_8.5.x86_64
(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

해결 방법 2

종속성 문제가 발생하면 먼저 누락되거나 호환되지 않는 패키지와 버전의 특정 조합을 식별합니다. yum 오류 메시지는 일반적으로 필요한 패키지 버전 조합을 나타내지만 사용할 수 없습니다.

증상 2a에 대한 해결 방법: 이전 패키지 삭제

증상 2a yum 의 경우 트랜잭션을 거부하고 오류 메시지를 반환합니다. 이 오류는 이전 릴리스의 패키지와 최신 릴리스 간의 python2-leapp nn 비호환성으로 인해 발생합니다.

이 오류를 해결하려면 다음 명령을 실행하여 충돌을 일으키는 이전 패키지(이 경우 yum remove)를 제거해야 합니다.

sudo yum remove python2-leapp-0.16.0-1.el7_9.noarch

그런 다음 필요한 패키지의 업데이트 또는 설치를 계속할 수 있습니다.

증상 2b에 대한 해결 방법: 구성 파일에서 패키지 제외 제거

증상 2b의 yum 경우 트랜잭션을 거부하고 오류 메시지를 반환합니다. 제외 필터로 인해 오류가 발생합니다.

필요한 패키지 업데이트를 다시 시작하거나 설치할 수 있도록 이 오류를 해결하려면 /etc/yum.conf 또는 systemd 구성 파일에서 패키지가 제외되지 않았는지 확인 합니다. 패키지 제외가 systemd 발생하는지 확인하려면 다음 cat/grep 조합과 같은 명령을 실행합니다.

sudo cat /etc/yum.conf | grep -i exclude

systemd 패키지를 제외하면 다음 출력이 나타납니다.

exclude=systemd

이 패키지 제외를 종료하려면 텍스트 편집기(예: , 또는)를 사용하여 /etc/yum.conf 또는 /etc/dnf.confvim주석 처리합니다.nano

시나리오 3: 잘못된 버전의 Python

, yumdnf 도구는 rpmPython으로 작성되며 Python 인터프리터에 따라 올바르게 작동합니다. 특히 Python 인터프리터가 코드를 실행하고 시스템과 상호 작용하기 위해 제공하는 특정 기능 및 라이브러리를 사용합니다. 시스템에 설치된 기본 버전의 Python을 변경하면 특정 Python 버전 및 구성에 대한 종속성 내 yum 또는 dnf 종속성으로 인해 문제가 발생할 수 있습니다.

예를 들어 올바른 버전의 Python이 설치되어 있지 않은 경우 다음 오류 중 하나가 발생할 수 있습니다.

  • "잘못된 구문"

    yum list all
      File "/usr/bin/yum", line 30
        except KeyboardInterrupt, e:
                                ^
    SyntaxError: invalid syntax
    
  • "yum이라는 모듈 없음"

    yum repolist
    There was a problem importing one of the Python modules
    required to run yum. The error leading to this problem was:
    
       No module named yum
    
  • "잘못된 인터프리터: 이러한 파일 또는 디렉터리가 없습니다."

    bash: /usr/bin/yum: /usr/bin/pythonX.X: bad interpreter: No such file or directory
    

솔루션 3

Linux 배포에 대한 공식 설명서를 참조하여 기본 Python 버전을 자신 있게 확인하고 시스템에 설치된 버전과 비교할 수 있습니다. 이 프로세스는 소프트웨어 종속성과 시스템 구성 간의 일관성과 호환성을 보장하는 데 도움이 됩니다.

Linux 배포에 대한 Python의 기본 버전을 식별한 후 다음 명령 중 하나를 실행하여 현재 설치된 버전을 확인할 수 있습니다.

sudo ls -al `which python`
sudo ls -lrth /usr/bin/python*
sudo rpm -V python

지원되지 않는 버전의 Python이 사용 중인지 확인하는 경우 이 문제를 해결하기 위한 몇 가지 옵션이 있습니다.

지원되지 않는 버전의 Python에 대한 symlink를 제거하고 다음 명령을 실행하여 지원되는 Python 버전에 대한 symlink를 만듭니다.

sudo cd /usr/bin
sudo unlink python
sudo ln -s python2.7 python  # Modify if necessary.

솔루션 3b: RPM을 사용하여 Python 다시 설치

다음 rpm 명령을 실행하여 Python 패키지를 다시 설치합니다.

sudo rpm -ivh python-<release>.<arch>.rpm --replacepkgs --replacefiles

솔루션 3c: 복구 VM에서 Python 다시 설치

복구 VM에서 Python 패키지를 다시 설치합니다. 지침은 중요한 시스템 핵심 라이브러리 및 패키지 누락을 참조 하세요.

시나리오 4: 패키지 복제

업데이트 yum 하는 동안 yum 중단이 발생하는 경우 설치 중인 새 패키지와 함께 이전 패키지 버전을 유지할 수 있습니다. 중복 패키지는 도구를 사용하는 동안 시스템 작업에 혼동을 일으킬 수 있으며 결국 "보호된 multilib" 오류 또는 잘못된 종속성 문제를 일으킬 수 있습니다.

일반적인 시나리오는 다음과 같습니다.

  • SSH(Secure Shell)를 통해 실행 yum update 중 업데이트 프로세스 중 연결 중단 발생

  • 프로세스에 신호 SIGINT 보내기 또는 Ctrlyum선택하여 현재 실행 중인 동안 프로세스를 종료 + 합니다.yum

  • 업데이트 프로세스 중간에 시스템 다시 시작 발생

솔루션 4

가능한 두 가지 해결 방법은 트랜잭션을 완료하거나 중복 패키지를 수동으로 제거하는 것입니다. 이러한 방법을 완료하는 단계는 Linux 설치의 배포 및 버전에 따라 다릅니다.

솔루션 4a: 트랜잭션을 완료합니다.

  1. 다음 yum-complete-transaction 명령을 실행하여 트랜잭션 을 완료합니다.

    sudo yum-complete-transaction
    

    더 이상 중복을 남기지 않고 작업이 성공하면 2단계로 이동합니다.

  2. 중복 항목이 있는 경우 명령에서 매개 변수를 --cleanup-only 지정하여 이 트랜잭션을 yum-complete-transaction 해결합니다.

    sudo yum-complete-transaction --cleanup-only
    

솔루션 4b: 중복 항목을 수동으로 제거

  1. 다음 명령을 실행하여 중복 패키지를 수동으로 제거합니다. yum check 명령은 많은 시간이 필요할 수 있지만 출력을 가져오는 것은 다음 단계를 진행하는 데 중요합니다.

    sudo tar -cjf /tmp/rpm_dbbkp.tar.bz2 /var/lib/{rpm,yum}
    sudo yum check &> /tmp/yumcheck
    grep "duplicate" /tmp/yumcheck | awk '{ print $NF }' | egrep -v "\:" > /tmp/duplicaterpms
    grep "duplicate" /tmp/yumcheck | awk '{ print $NF }' | egrep ":" | awk -F':' '{ print $NF }' >> /tmp/duplicaterpms
    for i in $(cat /tmp/duplicaterpms); do sudo rpm -e --justdb --nodeps $i; done
    sudo yum update
    
  2. 중복 항목이 제거된 후 실패한 트랜잭션에 새 커널이 포함된 경우 커널을 다시 설치하여 GRUB(Grand Unified Bootloader) 항목의 올바른 생성, 초기 RAM 디스크(initrd) 및 초기 RAM 파일 시스템(initramfs)이 설치되었는지 확인합니다.

    sudo yum remove kernel-<newversion>-<release>.<arch>
    sudo yum install kernel-<newversion>-<release>.<arch>
    

시나리오 5: Yum이 작동하지 않고 '404 찾을 수 없음' 오류를 표시합니다.

출력의 "404 찾을 수 없음" 오류 메시지는 서버에서 yum 패키지 또는 리소스를 찾을 수 없음을 나타냅니다 yum . 이 문제는 일반적으로 리포지토리에서 패키지를 다운로드하거나 액세스하려고 하지만 연결된 패키지 파일 또는 메타데이터가 누락되었거나 서버에서 사용할 수 없는 경우에 yum 발생합니다. 이 시나리오에는 다음을 비롯한 다양한 원인이 있습니다.

  • 패키지 또는 리소스가 리포지토리에서 제거되었습니다.

  • 리포지토리 URL 또는 구성이 잘못되었습니다.

  • 네트워크 문제로 인해 리포지토리 서버에 액세스할 수 없습니다 yum .

  • 임시 서버 가동 중지 시간 또는 유지 관리가 있었습니다.

이 오류의 예는 다양한 Linux 배포에 대한 샘플 출력에 표시됩니다.

Red Hat Enterprise Linux 9 for x86_64 - Supplem  46  B/s |  14  B     00:00    
Errors during downloading metadata for repository 'rhel-9-for-x86_64-supplementary-rhui-rpms':
  - Status code: 404 for https://rhui4-1.microsoft.com/pulp/repos/content/dist/rhel9/rhui/9.1/x86_64/supplementary/os/repodata/repomd.xml (IP: 52.142.4.99)
Error: Failed to download metadata for repo 'rhel-9-for-x86_64-

해결 방법 5

다음과 같은 가능한 솔루션이 다양한 Linux 배포에 적용됩니다.

EUS(확장 업데이트 지원) 수명 주기 리포지토리와 비 EUS 리포지토리 간에 전환하거나 비 EUS에서 EUS로 전환할 때 올바른 프로세스를 따라야 합니다. 자세한 내용은 이미지 업데이트 동작을 참조 하세요.

/etc/yum/vars/releasever 및 /etc/dnf/vars/releasever에 잘못된 값이 사용되거나 값이 없어야 하므로(비 EUS 리포지토리의 경우) 일반적으로 오류가 발생하는 경우 다음 단계를 수행합니다.

  1. 시스템에서 EUS 또는 비 EUS 리포지토리를 사용하는지 확인합니다. 이렇게 하려면 다음 rpm/grep 명령 조합을 실행합니다.

    sudo rpm -qa | grep -i rhui
    

    명령이 생성하는 파일 이름 형식은 다음 표와 같이 리포지토리 형식에 따라 달라집니다.

    리포지토리 유형 파일 이름 형식
    EUS rhui-azure-rhelX-eus-new-version-release.noarch<><>
    비 EUS rhui-azure-rhelX-new-version-release.noarch<><>
  2. 다음 cat 명령을 실행하여 릴리스 버전의 현재 값을 확인합니다.

    RHEL 버전 명령
    RHEL 7 sudo cat /etc/yum/vars/releasever
    RHEL 8 및 9 sudo cat /etc/dnf/vars/releasever
  3. 릴리스 버전에 대한 올바른 값을 수정하고 사용합니다.

    • 시스템에서 EUS 리포지토리를 사용하는 경우 적절한 버전 잠금이 적용되었는지 확인합니다. 다음 예제에서는 리포지토리가 사용되므로 RHEL 9.2 RHUI EUS 에 대한 버전 잠금이 추가됩니다.

      sudo sh -c 'echo 9.2 > /etc/dnf/vars/releasever'
      

      참고 항목

      RHEL7 EUS에 대한 지원은 2021년 8월 30일에 종료되었습니다. RHEL7에서는 더 이상 EUS 리포지토리를 사용하지 않는 것이 좋습니다.

      RHEL 8.EUS용 x 버전을 사용할 수 있습니다. 이러한 버전에는 RHEL 8.8, 8.6, 8.4, 8.2 및 8.1이 포함되었습니다.

      RHEL 9.EUS용 x 버전을 사용할 수 있습니다. 현재 이러한 버전에는 RHEL 9.2 및 9.0이 포함됩니다.

      버전 가용성에 대한 자세한 내용은 Red Hat Enterprise Linux 수명 주기를 참조 하세요.

    • 시스템에서 비 EUS 리포지토리를 사용하는 경우 다음 명령을 실행하여 /etc/yum/vars/releasever 또는 /etc/dnf/vars/releasever 파일에 대한 버전 잠금을 제거해야 합니다.

      RHEL 버전 명령
      RHEL 7 sudo echo "" > /etc/yum/vars/releasever
      RHEL 8 및 9 sudo echo "" > /etc/dnf/vars/releasever

시나리오 6: RPM 데이터베이스 문제

, rpm, up2dateyum또는 dnf 명령을 실행하는 tdnf경우 다음과 같은 오류가 표시됩니다.

error: rpmdb: BDB0113 Thread/process 24669/140693557245760 failed: BDB1507 Thread died in Berkeley DB library
error: db5 error(-30973) from dbenv->failchk: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages index using db5 - (-30973)
error: cannot open Packages database in /var/lib/rpm
CRITICAL:yum.main:

이러한 오류는 다음과 같은 이유로 발생할 수 있습니다.

  • 끊어진 RPM 데이터베이스
  • 데이터베이스를 사용하는 다른 애플리케이션
  • /var/lib/rpm 디렉터리에 공간이 부족합니다.

해결 방법 6

다음 단계에 따라 RPM 데이터베이스를 다시 빌드합니다.

중요합니다

이러한 단계를 수행하기 전에 사용 가능한 디스크 공간을 충분히 사용할 수 있는지 확인합니다.

  1. 명령을 실행하여 /var/lib/rpm 디렉터리의 백업을 만듭니다tar.

    sudo tar zcvf /var/lib/rpm-backup.tar.gz /var/lib/rpm
    
  2. 부실 잠금을 방지하려면 __db* 파일을 제거하고 패키지 파일의 무결성을 확인합니다.

    sudo cd /var/lib/rpm
    sudo rm -f __db.*
    sudo /usr/lib/rpm/rpmdb_verify Packages
    
  3. 명령을 실행하여 RPM 데이터베이스를 다시 빌드합니다.rpm

    sudo rpm -vv --rebuilddb
    

시나리오 7: Yum 명령이 실패하고 '[Errno 14] HTTPS 오류 403 --사용할 수 없음'을 반환합니다.

Red Hat 7에서 yum 명령을 실행하면 다음 오류가 표시됩니다.RHUI에 연결된 x VM입니다.

https://rhui4-1.microsoft.com/pulp/repos/content/dist/rhel/rhui/server/7/7Server/x86_64/rh-common/os/repodata/repomd.xml: [Errno 14] HTTPS Error 403 - Forbidden

해결 방법 7

  1. 타사 curl 패키지가 VM에 설치되어 있는지 확인합니다.

    sudo rpm -qa | grep -i curl
    
    rpm -q --queryformat '%{VENDOR}\n' curl libcurl
    
    curl-7.73.0-2.0.cf.rhel7.x86_64 
    libcurl-7.73.0-2.0.cf.rhel7.x86_64
    libcurl-devel-7.73.0-2.0.cf.rhel7.x86_64 
    
    city-fan.org repo http://www.city-fan.org/ftp/contrib/
    

    타사 패키지가 설치된 경우 2단계로 이동합니다.

    중요합니다

    타사 원본의 curl 패키지는 Red Hat에서 인식할 수 없는 자체 이진 파일 및 인증서와 함께 제공됩니다. 이 비호환성으로 인해 yum에 문제가 발생합니다.

  2. 다음 방법 중 하나를 사용하여 RHEL 7.9에 대해 제공되는 최신 버전의 curllibcurllibcurl-devel 및 패키지를 다우로드합니다.

    • Red Hat 다운로드에 로그온하여 패키지를 수동으로 다운로드한 다음 영향을 받는 VM에 rpms 파일을 업로드합니다.

    • 작동하는 RHEL 7.9 VM (PAYGO)에 로그온하고, 명령을 사용하여 yumdownloader 필요한 패키지를 다운로드한 다음, rpms 파일을 영향을 받는 VM에 복사합니다.

      sudo yumdownloader curl.x86_64 libcurl.x86_64 libcurl-devel.x86_64
      
  3. 2단계의 rpms 파일을 사용하여 curl 패키지를 다운그레이드합니다.

    sudo cd /path/location/of/rpms/downloaded
    sudo yum downgrade curl-X.XX.0-XX.el7_9.X.x86_64.rpm libcurl-X.XX.X-XX.el7_9.X.x86_64.rpm libcurl-devel-X.XX.X-XX.el7_9.X.x86_64.rpm --disablerepo=*
    

타사 정보 고지 사항

이 문서에 나와 있는 다른 공급업체 제품은 Microsoft와 무관한 회사에서 제조한 것입니다. Microsoft는 이들 제품의 성능이나 안정성에 관하여 명시적이든 묵시적이든 어떠한 보증도 하지 않습니다.

타사 연락처 고지

이 문서에 포함된 타사의 연락처 정보는 이 항목에 대한 추가 정보를 찾는 데 도움을 주기 위한 것입니다. 이 연락처 정보는 공지 없이 변경될 수 있습니다. Microsoft는 타사 연락처 정보의 정확성을 보증하지 않습니다.

도움을 요청하십시오.

질문이 있거나 도움이 필요한 경우 지원 요청을 생성하거나Azure 커뮤니티 지원에 문의하세요. Azure 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.