방금 모든 리포지토리를 12.1 대신 12.2 대상으로 변경하여 OpenSUSE 12.1에서 OpenSUSE 12.2로 업그레이드했습니다. 이제 업그레이드했으므로 다음을 포함하여 리포지토리*가 없는 여러 패키지를 발견했습니다.YaST 소프트웨어 관리자버전 열은 빨간색 텍스트로 표시됩니다. 스크롤하여 하나씩 삭제할 수도 있지만,칩검색( zypper se
) 또는소프트웨어 관리자동시에 모두 타겟팅/선택할 수 있는 방법이 있습니까?
*- 이러한 패키지(OpenSUSE 12.1 등)에 대한 리포지토리가 있었지만 이 리포지토리를 12.2 리포지토리로 교체했기 때문에 더 이상 리포지토리 연결이 없습니다. 12.2 저장소에는 시스템을 실행하는 데 필요한 모든 것이 포함되어 있으므로 문제가 발생해서는 안 됩니다.
답변1
rpm -qa --qf '%-30{DISTRIBUTION} %{NAME}\n'| sort
패키지에서 사용하는 모든 저장소 목록을 제공합니다. 원하지 않는 것을 찾는 것은 독자의 연습 문제로 남겨집니다. :-)
.
답변2
사용마틴의 대답/guidance, 나는 여러 패키지를 제거하기 위한 빠른 스크립트를 작성했습니다 zremove.sh
.
#!/bin/sh
pkgs=""
while read line
do
pkgs="$pkgs $line"
done
zypper rm $pkgs
내 모든 "저장소 없음" 패키지에 배포판이 있음을 확인했습니다.SUSE 12.1 열기내부에회전 속도쿼리할 때 다음 명령을 실행하여 모든 항목을 찾아서 제거합니다.
rpm -qa --qf '%{DISTRIBUTION} : %{NAME}\n' | grep "openSUSE 12.1 :" | sed 's/openSUSE 12.1 : //' | sudo zremove.sh
이것은 일반적으로 백업 저장소 없이 모든 패키지를 찾는 방법에 대한 질문에 대답하지 않지만 원래 문제를 해결합니다.
답변3
Repository: @System
저장소가 "누락"되었거나 .rpm 파일에서 직접 설치된 패키지는 작업을 수행할 때 나타납니다 zypper info
. 따라서 이론적으로는 를 사용하여 찾을 수 있어야 zypper packages --repo @System --installed-only
하지만 libzypp에는 여전히 없습니다(openSUSE 버그 770239 - "zypper pa"는 @System repo에 대한 지원이 부족합니다.).
해결 방법으로 설치된 각 패키지에 대해 이 작업을 수행 zypper info
하고 저장소를 소유한 사용자를 필터링해야 합니다 @System
.
rpm -qa --queryformat="%{n}\n" | while read p; do zypper info $p | grep -q '^Repository: @System' && echo $p; done
꽤 느리지만 작업은 완료됩니다.
답변4
다음 명령은 더 이상 참조된 저장소가 없거나 다음을 rpm
통해 직접 설치된 모든 설치된 패키지를 나열합니다.
LC_ALL=C zypper pa --installed | awk '$0 ~ /^i/ && $3 == "@System" {print $5}'