"dnf list"에서 창고명 앞의 "@"은 무슨 뜻인가요?

"dnf list"에서 창고명 앞의 "@"은 무슨 뜻인가요?

설치된 패키지를 나열하려면 일반적으로 두 가지 중 하나를 수행합니다.

구식 방법은 rpm -qa | grep <whatever I look for>그것을 사용하는 것입니다.

하지만 최근에는 패키지를 좀 더 완벽하게 보여주고 싶어서 지금부터 dnf list --installed <whatever I look for>.

그런데 결과를 보면 몇 가지 이해가 안 되는 부분이 있습니다.

다음 예를 고려하십시오.

# dnf list --installed zsh                  
Last metadata expiration check: 0:13:25 ago on Mon Jul 11 05:48:04 2016.
Installed Packages
zsh.x86_64            5.2-5.fc24            @@commandline

(실제 인쇄물의 공백은 더 넓습니다.)

따라서 결과 항목은 "패키지" "버전" "repo"입니다.

내 경우에는 다음과 같습니다.

  • 패키지: zsh.x86_64
  • 버전: 5.2-5.fc24
  • 창고:@@명령줄

결과표는 여기까지는 이해가 가는데, 저장소 이름 앞에 있는 "@@" 두 개가 무슨 뜻인지 헷갈립니다.

또한 "commandline"은 패키지가 명령줄에서 설치되었음을 나타냅니다(RPM을 다운로드한 다음 실행).dnf install whatever.rpm 명령줄에서, 등. ). 하지만 zsh설치를 완료 했다고 확신합니다 dnf install zsh.

하지만 그게 전부는 아닙니다.

내 시스템의 저장소에서 여러 패키지가 설치되어 있지만 @System( @fedora또한 fedora설치되지 않은 경우 도 있음 @) 유사한 항목이 있습니다 @@commandline.

그렇다면 저장소 이름 앞이나 이 단어는 @정확히 무엇을 의미합니까?@@

@@commandline저장소에서 설치했다고 확신하는데 왜 그렇게 많은 중요한 패키지를 설치했습니까?

답변1

여기에 약간의 빛을 던져 보겠습니다.

dnf list all | less모든 패키지(설치된 패키지와 사용 가능한 패키지 모두)를 표시합니다. 출력에는 "설치된 패키지"와 "사용 가능한 패키지"라는 두 부분이 있습니다. 모든 "설치된 패키지" 앞에는 @ 기호가 붙지만 "사용 가능한 패키지"는 그렇지 않습니다. 따라서 @패키지가 설치되었다는 표시가 있다고 생각합니다 . 패키지가 설치되었지만 원래 저장소가 삭제된 경우 @@플래그가 제공될 것이라고 생각합니다.

dnf 소스 코드는 다음에서 호스팅됩니다.https://github.com/rpm-software-management/dnf. src 코드를 다운로드한 후 grep commandline -ri .디렉터리에서 a를 실행하면 아무 것도 반환되지 않습니다. 그러나 github 페이지에는 이에 대한 언급이 있습니다.

패키지 관리를 위해 RPM, libsolv 및 Hawkey 라이브러리를 사용합니다.

그래서 Hawkey를 살펴보니 다음 위치에 있는 동일한 프로젝트에서 호스팅됩니다.https://github.com/rpm-software-management/hawkey. 코드를 보면 grep -ri commandline .몇 가지 결과가 표시됩니다.

./src/types.h:#define HY_CMDLINE_REPO_NAME "@commandline"
./hawkey.spec:- fix: commandline RPMs do not provide their files (RhBug:1112810) (Ales Kozumplik)

그래서 패키지 commandline부터 . 명령 에 나타나는 hawkey이유는 코드가 올바르게 작동하지 않는 것 같습니다 .@comandlinednf listdnfhawkey

답변2

(면책조항: 실제로 이러한 사항을 논의하는 문서를 본 적이 없기 때문에 이 콘텐츠에 대한 출처를 제공할 수 없습니다. 다음 정보는 단순히 제가 검사, 블랙박스를 통해 발견한 정보에 대한 시행착오입니다. 실험, 우연, 그리고 단순히 추측입니다. 또한 공정한 경고입니다.와아아아너무 오래. )

DNF는 저장소를 나타내기 위해 @를 추가합니다.설치됨패키지가 설치됨~에서, dnf list문맥. 당신이 지적했듯이 :

내 시스템에는 @System, @fedora(그러나 @가 없는 fedora도 있음) 및 @@commandline과 같은 여러 패키지가 설치되어 있습니다.

하지만 실제로는 아무것도 볼 수 없을 것입니다 fedora.설치됨목록에 있는 모든 패키지에는 @-repo가 ​​소스로 표시되어 있기 때문입니다. ( 실행 하고 검사하여 사용하여저장소.sudo dnf list installed이를 확인할 설치된 목록의 값과 동일합니다.dnf infoFrom repo:@From repo: fedora@fedora

그러나 일부 환매 계약은명명 된@앞에 표지판이 있습니다. JohnKoch가 Hawkey 소스에서 발견한 것처럼 "@commandline"은 "명령줄 저장소"의 "저장소 이름"으로 정의됩니다. 따라서 설치된 패키지 하나만 목록에 표시됩니다 @@commandline. 이름이 자체 @ 기호로 시작하는 혼란스러운 저장소입니다.dnf listFrom repo: @commandline

dnf info설치된 패키지에 표시되는 Repository: @System이것은 @이라는 또 다른 가상 저장소입니다. 이는 @System현재 설치된 패키지 세트와 @commandline가상 저장소를 보유하는 가상 저장소인 것 같습니다.소스 코드 저장소패키지는 어딘가에서 왔지만 어떤 창고에서도 오지 않습니다.

@commandline이 답변을 처음 쓴 이후로 and의 의미 @System와 이들 사이의 관계가 변경된 것 같습니다 . 어떤 면에서는 더 일관성이 있으며 @commandline사용 방법에 대한 이전의 반대 의견을 일부 해결합니다. 더 이상 볼 수 없어어느나열된 설치된 패키지는 에서 제공되며 @@System이제 대역 외 설치가 표시됩니다 From repo: @commandline( @@commandline목록 컨텍스트에서). dnf info대역 외로 설치된 패키지는 일반적으로 다음과 같이 표시됩니다.

$ dnf info remi-release
Installed Packages
Name         : remi-release
---✀---
Repository   : @System
From repo    : @commandline

내가 dnf reinstall remi-release(왜냐하면 패키지를 만들면remi저장소 에서 ) 다음과 같이 변경했습니다.

$ dnf info remi-release
Installed Packages
Name         : remi-release
---✀---
Repository   : @System
From repo    : remi

2020년 이후 변경사항 업데이트

패키지 소스 코드 저장소에 익숙해현재 패키지 데이터베이스의 기존 리포지토리에 의존하지만 다행히도 이것이 변경되었습니다. 지금 DNF기록 데이터베이스 쿼리, 현재 패키지 저장소 세트 대신 설치된 패키지에 대한 정보를 가져옵니다. 따라서 이제 시스템 업그레이드 중에도 소스 리포지토리의 이름이 유지됩니다.

이전, 현재는 쓸모없는 정보

소스 저장소에 대한 또 다른 사항: From repo:이 필드에 나열된 저장소는 항상 존재하는 저장소입니다.현재 저장소 컨텍스트에서. 즉, 패키지의 설치 소스는 저장소 이름을 포함하는 문자열이 아니라 저장소 이름을 포함하는 문자열도 포함합니다. 설치된 패키지는 다음에 연결됩니다.신원시스템에 존재하는(또는 이미 존재하는) 프로비저닝 저장소에 대한 정보입니다.

대부분의 리포지토리는 배포판별로 다르므로 새로운 Fedora 버전마다 재정의됩니다. (예를 들어, " fedora" 저장소는 새 버전을 구성하는 패키지 집합이 되며 fedora이전 버전에 존재했던 " " 저장소와는 완전히 다릅니다. 따라서 시스템 업그레이드가 완료될 때마다 이전 버전의 많은 부분이 저장소 ID가 유효하지 않게 됩니다.

DNF(또는 hawkey)는 더 이상 존재하지 않는 저장소에서 @commandline소스 저장소로 설치된 패키지를 다운그레이드하는 데 사용됩니다. (고맙게도) 더 이상 그런 일이 일어나지 않기 때문에 "익숙했다"고 말합니다. 더 이상 존재하지 않는 저장소에서 설치된 패키지는 더 이상 소스를 @@commandline/ 로 표시하지 않습니다 From repo: @commandline. 사실, dnf info이것은 그들이 더 이상 가지고 있지 않다는 것을 의미합니다.어느소스 코드 저장소. 예를 들어 sitecopyFedora 패키지는 이제 폐기되었습니다. 7 또는 8 이전 fedora저장소 에서 updates설치했는데 여전히 설치되어 있습니다.

$ dnf info sitecopy
Installed Packages
Name         : sitecopy
Version      : 0.16.6
Release      : 14.fc22
Architecture : x86_64
Size         : 373 k
Source       : sitecopy-0.16.6-14.fc22.src.rpm
Repository   : @System

From repo:" "은(는) 목록 에 없습니다 .

이는 혼란스럽게도 다음이 dnf list installed표시될 것임을 의미합니다.저것패키지(및 기타 유사한 패키지) @System옆에 (하나)가 나열되어 있습니다. @따라서 어떤 의미에서 우리는 하나의 불일치를 다른 불일치로 교환하는 것입니다. 왜냐하면 열이 더 이상 항상 @소스 저장소 앞에 붙지 않기 때문입니다. 그래도 나는 지금의 상황이 더 좋다.

각주

  1. "...표시됨..."
    (때때로 표시됨. "사용 가능한 패키지"가 실행될 때마다 반드시 표시되는 것은 아닙니다 dnf list. 설치된 패키지 버전이 사용 가능한 최상의 버전인 경우 "설치됨" 아래에 나열됩니다. 따라서 나열됩니다. "사용 가능한 패키지" 아래는 중복됩니다. 를 사용하면 --showduplicates버전, 설치 여부, 다운로드 가능 여부에 관계없이 "사용 가능한 패키지" 섹션에 알려진 모든 인스턴스가 포함됩니다.)

관련 정보