설치된 RHEL 및 그 파생 패키지의 약한 종속성 패키지를 모두 제거하는 방법

설치된 RHEL 및 그 파생 패키지의 약한 종속성 패키지를 모두 제거하는 방법

install_weak_deps=False이를 설정하면 /etc/dnf/dnf.conf나중에 dnf 설치 프로그램을 사용할 때 약한 종속 패키지를 설치하는 것을 방지할 수 있다는 것을 알고 있습니다 .

하지만 이 옵션을 설정하기 전에 설치된 모든 패키지를 어떻게 나열할 수 있습니까?

시스템 전체에서 약한 종속성으로 설치된 모든 패키지를 제거하고 싶습니다.

답변1

패키지 A가 종속성 B 없이 작동하는 경우 패키지 A의 사양 파일에서는 약한 종속성만 사용할 수 있습니다. 즉, 패키지 A는 패키지 B를 설치하는 데에만 "권장"됩니다.

패키지 B의 존재 여부를 확실하게 판단할 수 있는 방법은 없습니다.예전에는약한 의존성(그래서 A가 끌어들임)뒤쪽에B가 설치되었습니다. 전체 yum/dnf 로그 파일에 액세스할 수 있고 주의 깊게 연구하려는 의지가 없다면 말이죠!

이는 B가 수동으로 설치되었거나 패키지 C의 약한 종속성 또는 패키지 D의 하드 종속성("require")으로 설치되었을 수 있기 때문입니다.

답변2

당신은 얻을 수 없습니다정밀한목록.

그러나 상대적으로 간단한 스크립트를 사용하여 제거하면 합리적인 근사치를 얻을 수 있습니다.

dnf repoquery --userinstalledDNF 관점에서 수동으로 설치된 모든 패키지를 나열합니다(이는실제로수동으로 설치해야 하는 이유는 다양하지만 우리의 목적과 특별히 관련이 없습니다.

dnf repoquery --installed설치된 모든 패키지를 나열합니다.

dnf repoquery --requires pkg하드 종속성을 나열했습니다 pkg.

dnf repoquery --whatprovides pkg위 명령의 출력은 --requires특정 패키지로 변환될 수 있습니다.

이 네 가지 명령을 사용하면 다음 셸 스크립트를 사용하여 수동으로 설치되지 않았고 명시적으로 종속되지 않은 모든 패키지의 대략적인 목록을 생성할 수 있습니다.

#!/bin/bash

# Get the list of all installed packages
installed="$(dnf repoquery --installed)"

# Generate a list of all hard dependencies by iterating over each dependency of each installed package.
required=""
for pkg in ${installed}; do
    for dep in $(dnf repoquery --requires "${pkg}"); do
        required="${required}\n$(dnf repoquery --whatprovides "${dep}")"
    done
    # Remove any duplicates from the list of hard dependencies (done each time we finish a package’s dependencies to minimize memory usage).
    required="$(echo "${required}" | sort -u)"
done

# Iterate over each manually installed and explicitly required package, removing them from the list of all installed packages
notrequired="${installed}"
for pkg in $(dnf repoquery --userinstalled) ${required}; do
    notrequired="$(echo "${notrequired}" | grep -v "${pkg}")"
done

# Print the final list of packages that are not required.
echo "${notrequired}"

안타깝게도 이 작업은 시간이 좀 걸립니다런타임(새로 설치하는 경우에도 몇 분이 소요될 수 있음) 및 상당한 양의 메모리를 사용할 수 있습니다. 최종적으로 인쇄되는 패키지 목록은 DNF가 사용자가 직접 설치하지 않았다고 생각하는 모든 것이며 설치된 패키지에 대한 엄격한 종속성도 아닙니다. 이것은 아니다정확히다음과 같은 이유로 소프트 종속성으로 설치된 패키지 목록과 동일합니다.

  • 일부는 원래 소프트 종속성으로 도입되었지만 나중에 수동으로 설치되었거나 나중에 설치된 패키지의 하드 종속성일 수 있습니다.
  • 실제로 DNF가 특정 패키지를 수동으로 설치할지 자동으로 설치할지 여부를 변경할 수 있습니다.
  • 이것가능한그룹을 설치하여 가져온 패키지도 나열됩니다(그룹을 사용하지 않기 때문에 확실하지 않습니다).

관련 정보