설치된 rpm 패키지에서 토폴로지 정렬을 수행하는 방법은 무엇입니까?

설치된 rpm 패키지에서 토폴로지 정렬을 수행하는 방법은 무엇입니까?

종속성을 기반으로 Fedora에 설치된 모든 rpm 패키지를 토폴로지별로 정렬하고 싶습니다. 가장 필요한 패키지는 맨 위에 있고(예: glibc) 가장 덜 필요한 패키지는 맨 아래에 있습니다. 설치된 모든 패키지를 나열할 수 있지만 rpm -qa위상적으로 정렬되지 않은 것 같습니다.

내 목표는 설치된 패키지를 확인하고 더 이상 필요하지 않은 패키지를 찾아 제거하는 것입니다.

답변1

인간 속도 차트:

rpmgraph(8) - Linux man page
Name
rpmgraph - Display RPM Package Dependency Graph
Synopsis

rpmgraph PACKAGE_FILE ...
Description

rpmgraph uses PACKAGE_FILE arguments to generate a package dependency graph. Each
PACKAGE_FILE argument is read and added to an rpm transaction set. The elements 
of the transaction set

are partially ordered using a topological sort.

The partially ordered elements are then printed to standard output.


Nodes in the dependency graph are package names, and edges in the directed graph 
point to the parent of each node. The parent node is defined as the last 
predecessor of a package when partially ordered using the package dependencies as
a relation. That means that the parent of a given package is the package's last
prerequisite.

The output is in dot(1) directed graph format, and can be displayed or printed
using the dotty graph editor from the graphviz package. There are no rpmgraph
specific options, only common rpm options. See the rpmgraph usage message for    
what is currently implemented. 

  [1]: https://linux.die.net/man/8/rpmgraph

설치하다:

rpm-devel fedora 19에는 이 패키지가 있습니다

Fedora 30용 rpm-devel입니다.

패키지 관리자를 사용하세요.

dnf install rpm-devel

wget에 설치하려면 CentOS터미널 창에 다음을 입력하세요.

sudo yum install wget

wget에 설치하려면 Fedora다음을 입력합니다.

sudo dnf install wget

이제 wget 명령을 사용하여 필요한 .rpm 파일을 다운로드할 수 있습니다. 다음을 입력:

wget http://some_website/sample_file.rpm

시스템은 웹사이트에 액세스하여 현재 작업 디렉터리에 파일을 다운로드해야 합니다.

RPM 명령을 사용하여 RPM 파일 설치

FedoraLinux에 .rpm 패키지를 설치하려면 CentOS다음을 입력하십시오.

sudo rpm –i sample_file.rpm

-i 스위치는 패키지 관리자에게 파일을 설치하겠다고 알립니다.

RPM 설치 프로그램에 대한 자세한 내용은 다음을 참조하세요.타코미터 문서.

Yum을 사용하여 RPM 파일 설치

또는 패키지 관리자를 사용하여 파일을 yum설치할 수 있습니다..rpm

다음을 입력:

sudo yum localinstall sample_file.rpm

localinstall옵션은 yum이 현재 작업 디렉터리에서 설치 파일을 찾도록 지시합니다.


https://superuser.com/questions/483307/how-do-i-know-dependent-rpms-of-aa-package

https://phoenixnap.com/kb/how-to-install-rpm-file-centos-linux

https://linux.die.net/man/8/rpm

편집하다:

작동시킬 수 없습니다 rpmgraph. 세 가지 다른 버전의 패키지 목록 구문을 시도했지만 PACKAGE_FILE오류만 발생합니다. 이 프로그램 사용 방법을 알고 있다면 답변을 제공하거나 내 것을 편집하십시오. 에서 테스트되었습니다 Fedora 28..rpm 확장자를 사용하여 설치된 모든 패키지를 나열하는 방법. 페도라, 센토스, 레드햇

# rpmgraph INSTALLED_PACKAGES 
(null): read manifest failed:

답변2

rpmdep몇 번 검색해 본 결과 패키지 에 포함된 도구가 rpmorphan내가 원하는 것과 가장 가까운 것 같았 습니다. 가장 많이 설치된 필수 패키지를 보려면 다음을 --depending실행하세요.

rpmdep -all --depending | tac | less -S

답변3

나는 한때 이것에 대한 스크립트를 직접 작성했지만 거의 사용하지 않았습니다.

이사는 신중히 처리하겠습니다. 한번은 "SimplyHTML"이라는 패키지가 "리프 노드"로 나타나서 삭제하려고 했더니 "freemind"(제가 자주 사용하는 마인드 매핑 도구)에 필요하다는 것을 알고도 삭제되었습니다. . 아주 이상한!

어쨌든, 다음은 스크립트입니다(내 시스템에서는 "leaf-rpms"라고 함).

#!/usr/bin/perl
use strict;
use warnings;
use 5.10.0;
use Data::Dumper;

# a leaf RPM is one that has no deps and you can safely delete

# run it as is, delete any that you think are useless

my @installed = `rpm -qa --queryformat="%{NAME}\n"`;
chomp(@installed);
my %count;

@ARGV = ("dnf repograph |");

while (<>) {
    chomp;
    next if /^digraph packages/;
    next unless m({) .. m(});
    next if m({) or m(});

    s/"//g;
    $count{$_}++;
}
# print Dumper \@installed;
# print Dumper \@all;
# print Dumper \%count;
# print "----\n";

my %dup;
for my $k (sort @installed) {
    next if $dup{$k}++;
    print "$k\n" unless exists $count{$k};
}

관련 정보